sunhz 3 лет назад
Родитель
Сommit
30e8ecd44e
19 измененных файлов с 230 добавлено и 113 удалено
  1. 12 17
      blade-service-api/trade-purchase-api/src/main/java/com/trade/purchase/office/entity/Stock.java
  2. 11 0
      blade-service-api/trade-purchase-api/src/main/java/com/trade/purchase/office/vo/StockVO.java
  3. 5 1
      blade-service-api/trade-purchase-api/src/main/java/com/trade/purchase/order/vo/OrderVO.java
  4. 13 0
      blade-service/blade-client/src/main/java/org/springblade/client/corps/controller/CorpsAttnController.java
  5. 1 1
      blade-service/blade-client/src/main/java/org/springblade/client/corps/excel/CorpsExcel.java
  6. 1 1
      blade-service/blade-client/src/main/java/org/springblade/client/corps/excel/CorpsSupplierExcel.java
  7. 17 1
      blade-service/blade-client/src/main/java/org/springblade/client/corps/service/impl/CorpsDescServiceImpl.java
  8. 2 2
      blade-service/blade-client/src/main/java/org/springblade/client/land/excel/DriverExcel.java
  9. 2 2
      blade-service/blade-client/src/main/java/org/springblade/client/land/excel/VehicleExcel.java
  10. 4 4
      blade-service/blade-client/src/main/java/org/springblade/client/land/service/impl/LandDriverServiceImpl.java
  11. 12 3
      blade-service/blade-client/src/main/java/org/springblade/client/land/service/impl/LandVehicleServiceImpl.java
  12. 2 2
      blade-service/trade-purchase/src/main/java/com/trade/purchase/office/controller/OfficeOrderController.java
  13. 1 1
      blade-service/trade-purchase/src/main/java/com/trade/purchase/office/controller/StockController.java
  14. 20 0
      blade-service/trade-purchase/src/main/java/com/trade/purchase/office/mapper/StockMapper.java
  15. 43 4
      blade-service/trade-purchase/src/main/java/com/trade/purchase/office/mapper/StockMapper.xml
  16. 2 2
      blade-service/trade-purchase/src/main/java/com/trade/purchase/office/service/IOfficeOrderService.java
  17. 2 2
      blade-service/trade-purchase/src/main/java/com/trade/purchase/office/service/IStockService.java
  18. 54 54
      blade-service/trade-purchase/src/main/java/com/trade/purchase/office/service/impl/OfficeOrderServiceImpl.java
  19. 26 16
      blade-service/trade-purchase/src/main/java/com/trade/purchase/office/service/impl/StockServiceImpl.java

+ 12 - 17
blade-service-api/trade-purchase-api/src/main/java/com/trade/purchase/office/entity/Stock.java

@@ -48,6 +48,11 @@ public class Stock implements Serializable {
 	@TableId
 	private Long id;
 	/**
+	 * 来源id
+	 */
+	@ApiModelProperty(value = "来源id")
+	private Long srcId;
+	/**
 	 * 仓库/库区id
 	 */
 	@ApiModelProperty(value = "仓库/库区id")
@@ -58,11 +63,6 @@ public class Stock implements Serializable {
 	@ApiModelProperty(value = "商品id")
 	private Long goodsId;
 	/**
-	 * 期初
-	 */
-	@ApiModelProperty(value = "期初")
-	private BigDecimal opening;
-	/**
 	 * 入库数量
 	 */
 	@ApiModelProperty(value = "入库数量")
@@ -73,20 +73,15 @@ public class Stock implements Serializable {
 	@ApiModelProperty(value = "出库数量")
 	private BigDecimal outQuantity;
 	/**
-	 * 结余数量
+	 * 入库金额
 	 */
-	@ApiModelProperty(value = "结余数量")
-	private BigDecimal balanceQuantity;
+	@ApiModelProperty(value = "入库金额")
+	private BigDecimal inAmount;
 	/**
-	 * 单价
+	 * 出库金额
 	 */
-	@ApiModelProperty(value = "单价")
-	private BigDecimal unitPrice;
-	/**
-	 * 金额
-	 */
-	@ApiModelProperty(value = "金额")
-	private BigDecimal amount;
+	@ApiModelProperty(value = "入库金额")
+	private BigDecimal outAmount;
 	/**
 	 * 类型
 	 */
@@ -101,7 +96,7 @@ public class Stock implements Serializable {
 	 * 入库日期
 	 */
 	@ApiModelProperty(value = "入库日期")
-	@DateTimeFormat(pattern = "yyyy-MM")
+	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
 	@JsonFormat(pattern = "yyyy-MM")
 	private Date inDate;
 	/**

+ 11 - 0
blade-service-api/trade-purchase-api/src/main/java/com/trade/purchase/office/vo/StockVO.java

@@ -18,9 +18,12 @@ package com.trade.purchase.office.vo;
 
 import com.trade.purchase.office.entity.Stock;
 import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import java.math.BigDecimal;
+
 /**
  * 办公用品库存账视图实体类
  *
@@ -33,6 +36,14 @@ import lombok.EqualsAndHashCode;
 public class StockVO extends Stock {
 	private static final long serialVersionUID = 1L;
 
+	private BigDecimal balanceQuantity;
+
+	private BigDecimal unitPrice;
+
+	private BigDecimal opening;
+
+	private BigDecimal amount;
+
 	private String cname;
 
 	private String code;

+ 5 - 1
blade-service-api/trade-purchase-api/src/main/java/com/trade/purchase/order/vo/OrderVO.java

@@ -187,13 +187,17 @@ public class OrderVO extends Order {
 	 */
 	@ApiModelProperty(value = "库管员中文名")
 	private String stockUserName;
-
 	/**
 	 * 库管部门中文名
 	 */
 	@ApiModelProperty(value = "库管部门中文名")
 	private String stockDeptName;
 
+	private String beginApplyTime;
+	private String endApplyTime;
+	private String beginStockTime;
+	private String endStockTime;
+
 	private Integer checkFlag;
 	private String checkType;
 	private String url;

+ 13 - 0
blade-service/blade-client/src/main/java/org/springblade/client/corps/controller/CorpsAttnController.java

@@ -26,6 +26,7 @@ import org.springblade.core.tool.utils.ObjectUtil;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
+import java.util.List;
 
 /**
  * 客户联系人 控制器
@@ -68,6 +69,18 @@ public class CorpsAttnController extends BladeController {
 	}
 
 	/**
+	 * 客户联系人
+	 */
+	@GetMapping("/all-list")
+	@ApiOperationSupport(order = 2)
+	@ApiOperation(value = "分页", notes = "传入corpsAttn")
+	public R<List<CorpsAttn>> allList(CorpsAttn corpsAttn) {
+		corpsAttn.setTenantId(SecureUtil.getTenantId());
+		corpsAttn.setIsDeleted(0);
+		return R.data(corpsAttnService.list(Condition.getQueryWrapper(corpsAttn)));
+	}
+
+	/**
 	 * 自定义分页 客户联系人
 	 */
 	@GetMapping("/page")

+ 1 - 1
blade-service/blade-client/src/main/java/org/springblade/client/corps/excel/CorpsExcel.java

@@ -32,7 +32,7 @@ public class CorpsExcel implements Serializable {
 	private String goodtypes;
 
 	@ExcelProperty("所属公司")
-	private String belongtocompany;
+	private String companyName;
 
 	@ExcelProperty("企业类型")
 	private String companytype;

+ 1 - 1
blade-service/blade-client/src/main/java/org/springblade/client/corps/excel/CorpsSupplierExcel.java

@@ -25,7 +25,7 @@ public class CorpsSupplierExcel implements Serializable {
 	private String type;
 
 	@ExcelProperty("所属公司")
-    private String belongtocompany;
+	private String companyName;
 
 	@ExcelProperty("供应商地址")
 	private String addr;

+ 17 - 1
blade-service/blade-client/src/main/java/org/springblade/client/corps/service/impl/CorpsDescServiceImpl.java

@@ -226,8 +226,16 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, CorpsDesc
 					corpsDesc.setTenantId(AuthUtil.getTenantId());
 					corpsDesc.setAccountNoFcy(e.getAccountNoFcy());
 					corpsDesc.setEnname(e.getEnname());
+
 					corpsDesc.setGoodtypes(e.getGoodtypes());
-					corpsDesc.setBelongtocompany(e.getBelongtocompany());
+					if (StringUtil.isNotBlank(e.getCompanyName())) {
+						CorpsDesc company = baseMapper.selectCorpsDescCname(e.getCompanyName(), AuthUtil.getTenantId());
+						if (ObjectUtil.isNotEmpty(company)) {
+							corpsDesc.setBelongtocompany(String.valueOf(company.getId()));
+						} else {
+							throw new SecurityException("请输入正确的所属公司");
+						}
+					}
 					corpsDesc.setBelongtoarea(e.getBelongtoarea());
 					corpsDesc.setCompanytype(e.getCompanytype());
 					corpsDesc.setPosition(e.getPosition());
@@ -380,6 +388,14 @@ public class CorpsDescServiceImpl extends ServiceImpl<CorpsDescMapper, CorpsDesc
 					CorpsDesc corpsDesc = new CorpsDesc();
 					corpsDesc.setCode(e.getCode());
 					corpsDesc.setCname(e.getCname());
+					if (StringUtil.isNotBlank(e.getCompanyName())) {
+						CorpsDesc company = baseMapper.selectCorpsDescCname(e.getCompanyName(), AuthUtil.getTenantId());
+						if (ObjectUtil.isNotEmpty(company)) {
+							corpsDesc.setBelongtocompany(String.valueOf(company.getId()));
+						} else {
+							throw new SecurityException("请输入正确的所属公司");
+						}
+					}
 					corpsDesc.setAccountBank(e.getAccountBank());
 					corpsDesc.setAccountNo(e.getAccountNo());
 					corpsDesc.setAccountBankFcy(e.getAccountBankFcy());

+ 2 - 2
blade-service/blade-client/src/main/java/org/springblade/client/land/excel/DriverExcel.java

@@ -42,7 +42,7 @@ public class DriverExcel implements Serializable {
 	/**
 	 * 司机姓名
 	 */
-	@ExcelProperty(value = "司机姓名")
+	@ExcelProperty(value = "司机姓名(必填)")
 	private String name;
 	/**
 	 * 所属车队
@@ -62,7 +62,7 @@ public class DriverExcel implements Serializable {
 	/**
 	 * 电话
 	 */
-	@ExcelProperty(value = "电话")
+	@ExcelProperty(value = "电话(必填)")
 	private String tel;
 	/**
 	 * 性别

+ 2 - 2
blade-service/blade-client/src/main/java/org/springblade/client/land/excel/VehicleExcel.java

@@ -53,7 +53,7 @@ public class VehicleExcel implements Serializable {
 	/**
 	 * 车牌号
 	 */
-	@ExcelProperty(value = "车牌号")
+	@ExcelProperty(value = "车牌号(必填)")
 	private String plateNo;
 	/**
 	 * 挂车号
@@ -134,7 +134,7 @@ public class VehicleExcel implements Serializable {
 	 * 外廓尺寸(mm)
 	 */
 	@ExcelProperty(value = "外廓尺寸(mm)")
-	private BigDecimal oto;
+	private String oto;
 	/**
 	 * 总重量(kg)
 	 */

+ 4 - 4
blade-service/blade-client/src/main/java/org/springblade/client/land/service/impl/LandDriverServiceImpl.java

@@ -182,10 +182,10 @@ public class LandDriverServiceImpl extends ServiceImpl<LandDriverMapper, LandDri
 			DriverExcel excel = data.get(i);
 
 			if (StringUtil.isBlank(excel.getName())) {
-				return R.fail("第" + (i + 1) + "行数据异常,司机姓名不能为空");
+				throw new SecurityException("第" + (i + 1) + "行数据异常,司机姓名不能为空");
 			}
 			if (StringUtil.isBlank(excel.getTel())) {
-				return R.fail("第" + (i + 1) + "行数据异常,司机电话不能为空");
+				throw new SecurityException("第" + (i + 1) + "行数据异常,司机电话不能为空");
 			}
 
 			Integer count = baseMapper.selectCount(new LambdaQueryWrapper<LandDriver>()
@@ -194,7 +194,7 @@ public class LandDriverServiceImpl extends ServiceImpl<LandDriverMapper, LandDri
 				.eq(LandDriver::getIsDeleted, 0)
 			);
 			if (count > 0) {
-				return R.fail("第" + (i + 1) + "行数据异常,司机姓名已存在");
+				throw new SecurityException("第" + (i + 1) + "行数据异常,司机姓名已存在");
 			}
 
 			Long fleetId = null;
@@ -206,7 +206,7 @@ public class LandDriverServiceImpl extends ServiceImpl<LandDriverMapper, LandDri
 					.eq(CorpsDesc::getIsDeleted, 0)
 				);
 				if (ObjectUtil.isEmpty(fleet)) {
-					return R.fail("第" + (i + 1) + "行数据异常,所属车队不存在");
+					throw new SecurityException("第" + (i + 1) + "行数据异常,所属车队不存在");
 				}
 				fleetId = fleet.getId();
 			}

+ 12 - 3
blade-service/blade-client/src/main/java/org/springblade/client/land/service/impl/LandVehicleServiceImpl.java

@@ -140,7 +140,16 @@ public class LandVehicleServiceImpl extends ServiceImpl<LandVehicleMapper, LandV
 			VehicleExcel excel = data.get(i);
 
 			if (StringUtil.isBlank(excel.getPlateNo())) {
-				return R.fail("第" + (i + 1) + "行数据异常,车号不能为空");
+				throw new SecurityException("第" + (i + 1) + "行数据异常,车号不能为空");
+			}
+
+			Integer count = baseMapper.selectCount(new LambdaQueryWrapper<LandVehicle>()
+				.eq(LandVehicle::getPlateNo, excel.getPlateNo())
+				.eq(LandVehicle::getTenantId, AuthUtil.getTenantId())
+				.eq(LandVehicle::getIsDeleted, 0)
+			);
+			if (count > 0) {
+				throw new SecurityException("第" + (i + 1) + "行数据异常,车牌号已存在");
 			}
 
 			Long fleetId = null;
@@ -152,7 +161,7 @@ public class LandVehicleServiceImpl extends ServiceImpl<LandVehicleMapper, LandV
 					.eq(CorpsDesc::getIsDeleted, 0)
 				);
 				if (ObjectUtil.isEmpty(fleet)) {
-					return R.fail("第" + (i + 1) + "行数据异常,所属车队不存在");
+					throw new SecurityException("第" + (i + 1) + "行数据异常,所属车队不存在");
 				}
 				fleetId = fleet.getId();
 			}
@@ -166,7 +175,7 @@ public class LandVehicleServiceImpl extends ServiceImpl<LandVehicleMapper, LandV
 					.eq(LandDriver::getIsDeleted, 0)
 				);
 				if (ObjectUtil.isEmpty(driver)) {
-					return R.fail("第" + (i + 1) + "行数据异常,所属司机不存在");
+					throw new SecurityException("第" + (i + 1) + "行数据异常,所属司机不存在");
 				}
 				driverId = driver.getId();
 			}

+ 2 - 2
blade-service/trade-purchase/src/main/java/com/trade/purchase/office/controller/OfficeOrderController.java

@@ -46,8 +46,8 @@ public class OfficeOrderController {
 	@GetMapping("/list")
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "分页 列表", notes = "传入order")
-	public R<IPage<OrderVO>> list(Order order, Query query) {
-		return R.data(officeOrderService.getList(order, query));
+	public R<IPage<OrderVO>> list(OrderVO orderVO, Query query) {
+		return R.data(officeOrderService.getList(orderVO, query));
 	}
 
 	/**

+ 1 - 1
blade-service/trade-purchase/src/main/java/com/trade/purchase/office/controller/StockController.java

@@ -66,7 +66,7 @@ public class StockController extends BladeController {
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "分页", notes = "传入stock")
 	public R<IPage<StockVO>> list(StockVO stockVO, Query query) {
-		return R.data(stockService.getList(stockVO, query));
+		return R.data(stockService.getList(Condition.getPage(query), stockVO));
 	}
 
 	/**

+ 20 - 0
blade-service/trade-purchase/src/main/java/com/trade/purchase/office/mapper/StockMapper.java

@@ -20,6 +20,9 @@ import com.trade.purchase.office.entity.Stock;
 import com.trade.purchase.office.vo.StockVO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.apache.ibatis.annotations.Param;
+
+import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -39,4 +42,21 @@ public interface StockMapper extends BaseMapper<Stock> {
 	 */
 	List<StockVO> selectStockPage(IPage page, StockVO stock);
 
+	/**
+	 * 自定义分页
+	 *
+	 * @param page
+	 * @param stockVO
+	 * @return
+	 */
+	List<StockVO> selectList(IPage<StockVO> page, @Param("stockVO") StockVO stockVO);
+
+	/**
+	 * 期初
+	 *
+	 * @param stockVO
+	 * @return
+	 */
+	StockVO selectStock(@Param("stockVO") StockVO stockVO);
+
 }

+ 43 - 4
blade-service/trade-purchase/src/main/java/com/trade/purchase/office/mapper/StockMapper.xml

@@ -5,14 +5,13 @@
     <!-- 通用查询映射结果 -->
     <resultMap id="stockResultMap" type="com.trade.purchase.office.entity.Stock">
         <id column="id" property="id"/>
+        <result column="src_id" property="srcId"/>
         <result column="storage_id" property="storageId"/>
         <result column="goods_id" property="goodsId"/>
-        <result column="opening" property="opening"/>
         <result column="in_quantity" property="inQuantity"/>
         <result column="out_quantity" property="outQuantity"/>
-        <result column="balance_quantity" property="balanceQuantity"/>
-        <result column="unit_price" property="unitPrice"/>
-        <result column="amount" property="amount"/>
+        <result column="in_amount" property="inAmount"/>
+        <result column="out_amount" property="outAmount"/>
         <result column="trade_type" property="tradeType"/>
         <result column="remarks" property="remarks"/>
         <result column="in_date" property="inDate"/>
@@ -30,4 +29,44 @@
         select * from office_stock where is_deleted = 0
     </select>
 
+    <select id="selectList" parameterType="com.trade.purchase.office.vo.StockVO" resultType="com.trade.purchase.office.vo.StockVO">
+        select
+            storage_id storageId,
+            goods_id goodsId,
+            sum(in_quantity) inQuantity,
+            sum(out_quantity) outQuantity,
+            sum(in_quantity) - sum(out_quantity) balanceQuantity,
+            sum(in_amount) inAmount,
+            sum(out_amount) outAmount,
+            sum(in_amount) - sum(out_amount) amount
+        from office_stock
+        where is_deleted = 0
+            and tenant_id = #{stockVO.tenantId}
+            and trade_type = 'BGYP'
+            <if test="stockVO.goodsId != null">and goods_id = #{stockVO.goodsId}</if>
+            <if test="stockVO.beginInDate != null and stockVO.beginInDate != ''">and in_date &gt;= #{stockVO.beginInDate}</if>
+            <if test="stockVO.endInDate != null and stockVO.endInDate != ''">and in_date &lt;= #{stockVO.endInDate}</if>
+        group by storage_id, goods_id
+    </select>
+
+    <select id="selectStock" parameterType="com.trade.purchase.office.vo.StockVO" resultType="com.trade.purchase.office.vo.StockVO">
+        select
+            storage_id storageId,
+            goods_id goodsId,
+            sum(in_quantity) inQuantity,
+            sum(out_quantity) outQuantity,
+            sum(in_quantity) - sum(out_quantity) balanceQuantity,
+            sum(in_amount) inAmount,
+            sum(out_amount) outAmount,
+            sum(in_amount) - sum(out_amount) amount
+        from office_stock
+        where is_deleted = 0
+            and tenant_id = #{stockVO.tenantId}
+            and trade_type = 'BGYP'
+            <if test="stockVO.goodsId != null">and goods_id = #{stockVO.goodsId}</if>
+            <if test="stockVO.storageId != null">and storage_id = #{stockVO.storageId}</if>
+            <if test="stockVO.endInDate != null and stockVO.endInDate != ''">and in_date &lt; #{stockVO.inDate}</if>
+        group by storage_id, goods_id
+    </select>
+
 </mapper>

+ 2 - 2
blade-service/trade-purchase/src/main/java/com/trade/purchase/office/service/IOfficeOrderService.java

@@ -19,11 +19,11 @@ public interface IOfficeOrderService extends IService<Order> {
 	/**
 	 * 列表 分页
 	 *
-	 * @param order
+	 * @param orderVO
 	 * @param query
 	 * @return
 	 */
-	IPage<OrderVO> getList(Order order, Query query);
+	IPage<OrderVO> getList(OrderVO orderVO, Query query);
 
 	/**
 	 * 保存订单

+ 2 - 2
blade-service/trade-purchase/src/main/java/com/trade/purchase/office/service/IStockService.java

@@ -43,9 +43,9 @@ public interface IStockService extends IService<Stock> {
 	 * 列表 分页
 	 *
 	 * @param stockVO
-	 * @param query
+	 * @param page
 	 * @return
 	 */
-	IPage<StockVO> getList(StockVO stockVO, Query query);
+	IPage<StockVO> getList(IPage<StockVO> page, StockVO stockVO);
 
 }

+ 54 - 54
blade-service/trade-purchase/src/main/java/com/trade/purchase/office/service/impl/OfficeOrderServiceImpl.java

@@ -1,12 +1,14 @@
 package com.trade.purchase.office.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.trade.purchase.office.entity.Stock;
 import com.trade.purchase.office.mapper.StockMapper;
 import com.trade.purchase.office.service.IOfficeOrderService;
+import com.trade.purchase.office.vo.StockVO;
 import com.trade.purchase.order.entity.Order;
 import com.trade.purchase.order.entity.OrderItems;
 import com.trade.purchase.order.mapper.OrderItemsMapper;
@@ -28,6 +30,7 @@ import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.ObjectUtil;
+import org.springblade.core.tool.utils.StringUtil;
 import org.springblade.system.entity.Dept;
 import org.springblade.system.feign.ISysClient;
 import org.springblade.system.user.entity.User;
@@ -37,7 +40,6 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
 
 import java.math.BigDecimal;
-import java.math.RoundingMode;
 import java.util.Date;
 import java.util.List;
 
@@ -96,8 +98,20 @@ public class OfficeOrderServiceImpl extends ServiceImpl<OrderMapper, Order> impl
 	}
 
 	@Override
-	public IPage<OrderVO> getList(Order order, Query query) {
-		IPage<Order> orderPages = baseMapper.selectPage(Condition.getPage(query), Condition.getQueryWrapper(order));
+	public IPage<OrderVO> getList(OrderVO orderVO, Query query) {
+		LambdaQueryWrapper<Order> orderQueryWrapper = new LambdaQueryWrapper<>();
+		orderQueryWrapper.eq(StringUtil.isNotBlank(orderVO.getTradeType()), Order::getTradeType, orderVO.getTradeType())
+			.eq(ObjectUtil.isNotEmpty(orderVO.getApplyUser()), Order::getApplyUser, orderVO.getApplyUser())
+			.eq(ObjectUtil.isNotEmpty(orderVO.getStockUser()), Order::getStockUser, orderVO.getStockUser())
+			.between(StringUtil.isNotBlank(orderVO.getBeginApplyTime()) && StringUtil.isNotBlank(orderVO.getEndApplyTime()),
+				Order::getApplyTime, orderVO.getBeginApplyTime(), orderVO.getEndApplyTime())
+			.between(StringUtil.isNotBlank(orderVO.getBeginStockTime()) && StringUtil.isNotBlank(orderVO.getEndStockTime()),
+				Order::getStockTime, orderVO.getBeginStockTime(), orderVO.getEndStockTime())
+			.like(StringUtil.isNotBlank(orderVO.getSysNo()), Order::getSysNo, orderVO.getSysNo())
+			.eq(Order::getTenantId, AuthUtil.getTenantId())
+			.eq(Order::getIsDeleted, 0);
+
+		IPage<Order> orderPages = baseMapper.selectPage(Condition.getPage(query), orderQueryWrapper);
 		IPage<OrderVO> pages = Condition.getPage(query);
 		List<OrderVO> records = BeanUtil.copy(orderPages.getRecords(), OrderVO.class);
 		records.forEach(record -> {
@@ -179,31 +193,18 @@ public class OfficeOrderServiceImpl extends ServiceImpl<OrderMapper, Order> impl
 			item.setUpdateTime(new Date());
 			orderItemsMapper.updateById(item);
 
-			Stock stock = stockMapper.selectOne(new LambdaQueryWrapper<Stock>()
-				.eq(Stock::getGoodsId, item.getItemId())
-				.eq(Stock::getTenantId, AuthUtil.getTenantId())
-				.eq(Stock::getIsDeleted, 0)
-			);
-			if (ObjectUtil.isEmpty(stock)) {
-				Stock stockTemp = new Stock();
-				stockTemp.setStorageId(item.getStorageId());
-				stockTemp.setGoodsId(item.getItemId());
-				stockTemp.setInQuantity(item.getOrderQuantity());
-				stockTemp.setBalanceQuantity(item.getOrderQuantity());
-				stockTemp.setUnitPrice(item.getPrice());
-				stockTemp.setAmount(item.getAmount());
-				stockTemp.setTradeType("BGYP");
-				stockTemp.setTenantId(AuthUtil.getTenantId());
-				stockTemp.setInDate(new Date());
-				stockTemp.setCreateUser(AuthUtil.getUserId());
-				stockTemp.setCreateTime(new Date());
-				stockMapper.insert(stockTemp);
-			} else {
-				stock.setInQuantity(stock.getInQuantity().add(item.getOrderQuantity()));
-				stock.setAmount(stock.getAmount().add(item.getAmount()));
-				stock.setUnitPrice(stock.getAmount().divide(stock.getInQuantity(), RoundingMode.HALF_UP));
-				stockMapper.updateById(stock);
-			}
+			Stock stock = new Stock();
+			stock.setSrcId(orderItem.getId());
+			stock.setStorageId(item.getStorageId());
+			stock.setGoodsId(item.getItemId());
+			stock.setInQuantity(item.getOrderQuantity());
+			stock.setInAmount(item.getAmount());
+			stock.setTradeType("BGYP");
+			stock.setTenantId(AuthUtil.getTenantId());
+			stock.setInDate(new Date());
+			stock.setCreateUser(AuthUtil.getUserId());
+			stock.setCreateTime(new Date());
+			stockMapper.insert(stock);
 		});
 		return true;
 	}
@@ -224,28 +225,24 @@ public class OfficeOrderServiceImpl extends ServiceImpl<OrderMapper, Order> impl
 			item.setUpdateTime(new Date());
 			orderItemsMapper.updateById(item);
 
-			Stock stock = stockMapper.selectOne(new LambdaQueryWrapper<Stock>()
-				.eq(Stock::getGoodsId, item.getItemId())
-				.eq(Stock::getTenantId, AuthUtil.getTenantId())
-				.eq(Stock::getIsDeleted, 0)
-			);
+			StockVO tempVO = new StockVO();
+			tempVO.setStorageId(item.getStorageId());
+			tempVO.setGoodsId(item.getItemId());
+			tempVO.setTenantId(AuthUtil.getTenantId());
+			StockVO stockVO = stockMapper.selectStock(tempVO);
 
-			BigDecimal balanceQuantity = stock.getBalanceQuantity();
+			BigDecimal balanceQuantity = stockVO.getBalanceQuantity();
 			if (balanceQuantity.compareTo(item.getOrderQuantity()) < 0) {
 				throw new SecurityException("库存结余数量不足,禁止撤销");
 			}
 
-			BigDecimal inQuantity = stock.getInQuantity().subtract(item.getOrderQuantity());
-
-			if (inQuantity.compareTo(BigDecimal.ZERO) > 0) {
-				stock.setInQuantity(inQuantity);
-				stock.setBalanceQuantity(balanceQuantity.subtract(item.getOrderQuantity()));
-				stock.setAmount(stock.getAmount().add(item.getAmount()));
-				stock.setUnitPrice(stock.getAmount().divide(stock.getInQuantity(), RoundingMode.HALF_UP));
-				stockMapper.updateById(stock);
-			} else {
-				stockMapper.deleteById(stock.getId());
-			}
+			Stock stock = new Stock();
+			stock.setUpdateUser(AuthUtil.getUserId());
+			stock.setUpdateTime(new Date());
+			stock.setIsDeleted(1);
+			stockMapper.update(stock, new LambdaUpdateWrapper<Stock>()
+				.eq(Stock::getSrcId, item.getId())
+			);
 		});
 		return true;
 	}
@@ -346,15 +343,18 @@ public class OfficeOrderServiceImpl extends ServiceImpl<OrderMapper, Order> impl
 		}
 		if ("OLY".equals(order.getTradeType())) {
 			itemList.forEach(item -> {
-				Stock stock = stockMapper.selectOne(new LambdaQueryWrapper<Stock>()
-					.eq(Stock::getGoodsId, item.getItemId())
-					.eq(Stock::getTenantId, AuthUtil.getTenantId())
-					.eq(Stock::getIsDeleted, 0)
-				);
-
-				stock.setOutQuantity(stock.getOutQuantity().add(item.getOrderQuantity()));
-				stock.setBalanceQuantity(stock.getInQuantity().subtract(stock.getOutQuantity()));
-				stockMapper.updateById(stock);
+				Stock stock = new Stock();
+				stock.setSrcId(item.getId());
+				stock.setStorageId(item.getStorageId());
+				stock.setGoodsId(item.getItemId());
+				stock.setOutQuantity(item.getOrderQuantity());
+				stock.setOutAmount(item.getAmount());
+				stock.setTradeType("BGYP");
+				stock.setTenantId(AuthUtil.getTenantId());
+				stock.setInDate(new Date());
+				stock.setCreateUser(AuthUtil.getUserId());
+				stock.setCreateTime(new Date());
+				stockMapper.insert(stock);
 			});
 		}
 	}

+ 26 - 16
blade-service/trade-purchase/src/main/java/com/trade/purchase/office/service/impl/StockServiceImpl.java

@@ -26,15 +26,13 @@ import com.trade.purchase.office.vo.StockVO;
 import lombok.AllArgsConstructor;
 import org.springblade.client.feign.IGoodsDescClient;
 import org.springblade.client.vo.GoodsDescVO;
-import org.springblade.core.mp.support.Condition;
-import org.springblade.core.mp.support.Query;
 import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
-import org.springblade.core.tool.utils.BeanUtil;
 import org.springblade.core.tool.utils.ObjectUtil;
 import org.springblade.core.tool.utils.StringUtil;
 import org.springframework.stereotype.Service;
 
+import java.math.RoundingMode;
 import java.text.SimpleDateFormat;
 import java.util.Calendar;
 import java.util.List;
@@ -57,19 +55,32 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
 	}
 
 	@Override
-	public IPage<StockVO> getList(StockVO stockVO, Query query) {
-		LambdaQueryWrapper<Stock> stockQueryWrapper = new LambdaQueryWrapper<>();
-		stockQueryWrapper.eq(ObjectUtil.isNotEmpty(stockVO.getGoodsId()), Stock::getGoodsId, stockVO.getGoodsId())
-			.between(StringUtil.isNotBlank(stockVO.getBeginInDate()) && StringUtil.isNotBlank(stockVO.getEndInDate()),
-				Stock::getInDate, getFirstTimeOfMonth(stockVO.getBeginInDate()), getLastTimeOfMonth(stockVO.getEndInDate()))
-			.eq(Stock::getIsDeleted, 0)
-			.eq(Stock::getTenantId, AuthUtil.getTenantId());
+	public IPage<StockVO> getList(IPage<StockVO> page, StockVO stockVO) {
+		stockVO.setBeginInDate(getFirstTimeOfMonth(stockVO.getBeginInDate()));
+		stockVO.setEndInDate(getLastTimeOfMonth(stockVO.getEndInDate()));
+		stockVO.setTenantId(AuthUtil.getTenantId());
+		List<StockVO> records = baseMapper.selectList(page, stockVO);
+		records.forEach(record -> {
+			record.setUnitPrice(record.getAmount().divide(record.getBalanceQuantity(), RoundingMode.HALF_UP));
 
-		IPage<Stock> stockPages = baseMapper.selectPage(Condition.getPage(query), stockQueryWrapper);
+			StockVO tempVO = new StockVO();
+			tempVO.setStorageId(record.getStorageId());
+			tempVO.setGoodsId(record.getGoodsId());
+			tempVO.setEndInDate(getFirstTimeOfMonth(stockVO.getBeginInDate()));
+			tempVO.setTenantId(AuthUtil.getTenantId());
+			tempVO = baseMapper.selectStock(tempVO);
+			record.setOpening(tempVO.getBalanceQuantity());
+
+			Stock stock = baseMapper.selectOne(new LambdaQueryWrapper<Stock>()
+				.select(Stock::getInDate)
+				.eq(Stock::getStorageId, record.getStorageId())
+				.eq(Stock::getGoodsId, record.getGoodsId())
+				.eq(Stock::getTenantId, AuthUtil.getTenantId())
+				.eq(Stock::getIsDeleted, 0)
+				.last("limit 1")
+			);
+			record.setInDate(stock.getInDate());
 
-		IPage<StockVO> pages = Condition.getPage(query);
-		List<StockVO> records = BeanUtil.copy(stockPages.getRecords(), StockVO.class);
-		records.forEach(record -> {
 			if (ObjectUtil.isNotEmpty(record.getGoodsId())) {
 				R<GoodsDescVO> goods = goodsDescClient.selectGoodsMessage(record.getGoodsId());
 				if (goods.isSuccess() && ObjectUtil.isNotEmpty(goods.getData())) {
@@ -78,8 +89,7 @@ public class StockServiceImpl extends ServiceImpl<StockMapper, Stock> implements
 				}
 			}
 		});
-		pages.setRecords(records);
-		return pages;
+		return page.setRecords(records);
 	}
 
 	private String getFirstTimeOfMonth(String date) {