consum-base/src/main/java/com/consum/base/service/LGoodsUserRecordCoreService.java
@@ -1,25 +1,35 @@ package com.consum.base.service; import com.consum.base.core.util.LockManage; import com.consum.model.po.LGoodsUserRecord; import com.consum.model.po.LWhFormTransfer; import com.consum.model.po.LWhProcureModelUser; import com.consum.model.po.LWhProcureModelUserRecord; import com.walker.infrastructure.utils.NumberGenerator; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; /** * @ClassName LGoodsUserRecordCoreService * @Date 2023/11/2 * @Description * @Version 1.0 **/ @Service @Transactional(rollbackFor = Exception.class) public class LGoodsUserRecordCoreService { @Resource private GoodsBaseServiceImpl goodsBaseService; @Resource private LWhGoodsService lWhGoodsService; @Resource private LGoodsUserRecordServiceImpl lGoodsUserRecordService; /** * 通过新旧 物品使用人修改记录【L_WH_PROCURE_MODEL_USER_RECORD】中的ID , 来修改物品使用人 @@ -38,14 +48,51 @@ String operatorName = lWhProcureModelUserRecord.getOperatorName(); // 调拨单id Long transBusinessId = lWhProcureModelUserRecord.getTransBusinessId(); LWhFormTransfer whFormTransfer = goodsBaseService.get(new LWhFormTransfer(transBusinessId)); Integer inWarehouseType = whFormTransfer.getInWarehouseType(); Long inWarehouseId = whFormTransfer.getInWarehouseId(); // 将所有物品设置为未分发 List<Long> srappedGoodsIds = lWhGoodsService.queryScrappedGoodsIds(inWarehouseType, inWarehouseId, transBusinessId, null, null, null, null); lWhGoodsService.modGoodsTransfering(srappedGoodsIds, null, null, null, (short) 3); // 设置旧的LAST_RECORD= 0 lGoodsUserRecordService.updSetNotLast(srappedGoodsIds); //插入新的 LWhProcureModelUser modelUser = new LWhProcureModelUser(); modelUser.setProcureModelUserRecordId(newProcureModelUserRecordId); List<LWhProcureModelUser> modelUserList = goodsBaseService.select(modelUser); if (CollectionUtils.isEmpty(modelUserList)) { return true; } ArrayList<LGoodsUserRecord> goodsUserRecords = new ArrayList<>(); for (LWhProcureModelUser lWhProcureModelUser : modelUserList) { Long baseGoodsModelsId = lWhProcureModelUser.getBaseGoodsModelsId(); Integer goodsNum = lWhProcureModelUser.getGoodsNum(); //通过LockManage获得锁 Object warehouseModelLockObj = LockManage.acquireLock(inWarehouseType, inWarehouseId, baseGoodsModelsId); synchronized (warehouseModelLockObj) { List<Long> toUserGoodsIds = lWhGoodsService.queryScrappedGoodsIds(inWarehouseType, inWarehouseId, transBusinessId, null, baseGoodsModelsId, (short) 1, goodsNum); if (CollectionUtils.isEmpty(toUserGoodsIds)) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); throw new RuntimeException("操作失败!型号数量不足"); } for (Long toUserGoodsId : toUserGoodsIds) { LGoodsUserRecord tmp = new LGoodsUserRecord(); tmp.setId(NumberGenerator.getLongSequenceNumber()); tmp.setWhGoodsId(toUserGoodsId); tmp.setRecordType(1); tmp.setTransBusinessId(transBusinessId); tmp.setNowUserName(lWhProcureModelUser.getNowUserName()); tmp.setNowUserPhone(lWhProcureModelUser.getNowUserPhone()); tmp.setOperatorId(operatorId); tmp.setOperatorName(operatorName); tmp.setDealTime(dealTime); tmp.setLastRecord(1); goodsUserRecords.add(tmp); } lWhGoodsService.modGoodsTransfering(toUserGoodsIds, null, null, null, (short) 2); lGoodsUserRecordService.insertBatch(goodsUserRecords); } } return true; } consum-base/src/main/java/com/consum/base/service/LGoodsUserRecordServiceImpl.java
@@ -2,15 +2,54 @@ import com.walker.jdbc.service.BaseServiceImpl; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; /** * @ClassName LGoodsUserRecordServiceImpl * @Date 2023/11/2 * @Description * @Version 1.0 **/ @Service @Transactional(rollbackFor = Exception.class) public class LGoodsUserRecordServiceImpl extends BaseServiceImpl { /** * 设置为非最新 */ private static String updSetNotLast = "update L_GOODS_USER_RECORD set LAST_RECORD = 0 where WH_GOODS_ID in(?) and LAST_RECORD=1"; public int updSetNotLast(List<Long> outGoodsIds) { ArrayList<Object> params = new ArrayList<>(); params.add(outGoodsIds); return this.update(updSetNotLast, params.toArray()); } /** * 通过 调拨单ID 或者 分发记录表id 删除 */ private static String DEL_BY_TRANDS_AND_RECORDID = "delete from L_GOODS_USER_RECORD where 1=1"; public int delByTrandsAndRecordId(Long transBusinessId, Long procureModelUserRecordId) { if (transBusinessId == null && procureModelUserRecordId == null) { return 0; } ArrayList<Object> params = new ArrayList<>(); StringBuilder sql = new StringBuilder(DEL_BY_TRANDS_AND_RECORDID); if (transBusinessId != null) { sql.append(" and TRANS_BUSINESS_ID =?"); params.add(transBusinessId); } if (procureModelUserRecordId != null) { sql.append(" and PROCURE_MODEL_USER_RECORD_ID =?"); params.add(procureModelUserRecordId); } return update(sql.toString(), params.toArray()); } } consum-base/src/main/java/com/consum/base/service/LGoodsWhRecordServiceImpl.java
@@ -31,7 +31,7 @@ /** * 设置为非最新 */ private static String updSetNotLast = "update L_GOODS_WH_RECORD set LAST_RECORD = 0 where WH_GOODS_ID in(?)"; private static String updSetNotLast = "update L_GOODS_WH_RECORD set LAST_RECORD = 0 where WH_GOODS_ID in(?) and LAST_RECORD=1"; public int updSetNotLast(List<Long> outGoodsIds) { ArrayList<Object> params = new ArrayList<>(); consum-base/src/main/java/com/consum/base/service/LWhFormOutputCoreService.java
@@ -20,7 +20,6 @@ /** * @ClassName WhFormOutputCoreService * @Date 2023/10/26 * @Description * @Version 1.0 @@ -166,6 +165,9 @@ Integer outWarehouseType = lWhFormOutput.getOutWarehouseType(); Long outWarehouseId = lWhFormOutput.getWarehouseId(); String warehouseName = lWhFormOutput.getWarehouseName(); Integer inWarehouseType = lWhFormOutput.getInWarehouseType(); Long inWarehouseId = lWhFormOutput.getInWarehouseId(); String inWarehouseName = lWhFormOutput.getInWarehouseName(); Long userId = currentUser.getId(); String nickName = currentUser.getNick_name(); @@ -251,7 +253,7 @@ //出库时候,按 先入库的先出库,同时入库的,按价格高的先出库 List<Long> outGoodsId = lWhGoodsService.queryOutGoodsId(outWarehouseType, outWarehouseId, baseGoodsModelsId, queryModelStatus, buyType, goodsModelNum); lWhGoodsService.modGoodsTransfering(outGoodsId, null, null, null, modGoodsTransferingStatus); lWhGoodsService.modGoodsTransfering(outGoodsId, inWarehouseType, inWarehouseId, inWarehouseName, modGoodsTransferingStatus); // 批量插入 进出库流水明细[L_WH_GOODS_RECORD_DETAILS] lWhGoodsRecordDetailsService.sameGoodsInsertMore(outGoodsId, whGoodsRecordId, (short) 0); lWhGoodsRecordService.insert(whGoodsRecord); consum-base/src/main/java/com/consum/base/service/LWhFormTransferCoreService.java
@@ -1,10 +1,7 @@ package com.consum.base.service; import com.consum.base.core.util.LockManage; import com.consum.model.po.LWarehouseFlow; import com.consum.model.po.LWhFormTransfer; import com.consum.model.po.LWhGoodsRecord; import com.consum.model.po.LWhGoodsRecordDetails; import com.consum.model.po.*; import com.iplatform.model.po.S_user_core; import com.walker.infrastructure.utils.CollectionUtils; import com.walker.infrastructure.utils.DateUtils; @@ -12,8 +9,10 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.interceptor.TransactionAspectSupport; import javax.annotation.Resource; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -43,8 +42,10 @@ private LGoodsWhRecordServiceImpl lGoodsWhRecordService; @Resource private LWarehouseFlowService lWarehouseFlowService; // @Resource // private LWarehouseFlowService LWhGoodsRecordDetailsService; @Resource private LWhGoodsRecordDetailsService lWhGoodsRecordDetailsService; @Resource private LGoodsUserRecordServiceImpl lGoodsUserRecordService; /** @@ -116,8 +117,20 @@ // 流水记录总表ID long inWarehouseFlowId = NumberGenerator.getLongSequenceNumber(); // 根据出库流水ID 查询 出库的物品ID List<Long> outGoodsIds = getGoodsidByFlowId(outWarehouseFlowId); //单据类型。0仓库调拨;1部门分发;2部门物品回退 Integer businessType = lWhFormTransfer.getBusinessType(); //状态(0=在途调拨;1=入库未分发;2=已下发;3=报废 4 零星出库) short goodsStatus = 1; //类型0分发使用1 反库 Integer recordType = null; if (businessType == 1) { goodsStatus = 2; recordType = 0; } else if (businessType == 2) { goodsStatus = 1; recordType = 1; } // 插入 进出库流水总表[L_WAREHOUSE_FLOW] LWarehouseFlow inwarehouseFlow = new LWarehouseFlow(); @@ -146,6 +159,59 @@ //通过LockManage获得锁 Object warehouseModelLockObj = LockManage.acquireLock(inWarehouseType, inWarehouseId, baseGoodsModelsId); synchronized (warehouseModelLockObj) { // 根据出库流水ID 查询 出库的物品ID List<Long> outGoodsIds = getGoodsidByFlowId(outWarehouseFlowId, oldRecordId); // 库存物品详情(L_WH_GOODS)中 状态设置为1 lWhGoodsService.modGoodsTransfering(outGoodsIds, inWarehouseType, inWarehouseId, inWarehouseName, goodsStatus); //此时要往 物品使用记录【L_GOODS_USER_RECORD】添加数据 //查询部门分发使用人 LWhProcureModelUser lWhProcureModelUser = new LWhProcureModelUser(); lWhProcureModelUser.setTransBusinessId(whFormTransferId); lWhProcureModelUser.setBaseGoodsModelsId(baseGoodsModelsId); List<LWhProcureModelUser> goodsUserInfo = goodsBaseService.select(lWhProcureModelUser); int totalGoodsNum = goodsUserInfo.stream().mapToInt(LWhProcureModelUser::getGoodsNum).sum(); if (totalGoodsNum != outGoodsIds.size()) { TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); throw new RuntimeException("入库单失败,使用人使用数量与物品数量不一致"); // log.error("创建入库单失败"); } //将物品型号以前的使用记录设置为非最新 lGoodsUserRecordService.updSetNotLast(outGoodsIds); ArrayList<LGoodsUserRecord> goodsUserRecordList = new ArrayList<>(); int startIndex = 0; for (LWhProcureModelUser whProcureModelUser : goodsUserInfo) { Integer goodsNum = whProcureModelUser.getGoodsNum(); String nowUserName = whProcureModelUser.getNowUserName(); Long nowUserPhone = whProcureModelUser.getNowUserPhone(); Long procureModelUserRecordId = whProcureModelUser.getProcureModelUserRecordId(); List<Long> goodsIds = outGoodsIds.subList(startIndex, startIndex + goodsNum); for (Long goodsId : goodsIds) { LGoodsUserRecord tmp = new LGoodsUserRecord(); tmp.setWhGoodsId(goodsId); tmp.setRecordType(recordType); tmp.setTransBusinessId(whFormTransferId); if (businessType == 1) { tmp.setNowUserName(nowUserName); tmp.setNowUserPhone(nowUserPhone); } else if (businessType == 2) { tmp.setNowUserName(null); tmp.setNowUserPhone(null); } tmp.setProcureModelUserRecordId(procureModelUserRecordId); tmp.setOperatorId(userId); tmp.setOperatorName(nickName); tmp.setDealTime(dealTime); tmp.setLastRecord(1); goodsUserRecordList.add(tmp); } // 更新下标位置 startIndex += goodsNum; } //批量插入使用人记录 lGoodsUserRecordService.insertBatch(goodsUserRecordList); //将保管仓库信息更新到 物品仓库保管记录【L_GOODS_WH_RECORD】 lGoodsWhRecordService.insertNewRecord(outGoodsIds, inWarehouseFlowId, dealTime); // 获得锁后查询该型号的期初数量 int goodsModelNum = lWhGoodsService.queryGoodsModelNum(inWarehouseType, inWarehouseId, baseGoodsModelsId, (short) 1, null); whGoodsRecord.setInitialCount(goodsModelNum); @@ -153,30 +219,14 @@ } LWhGoodsRecordDetails lWhGoodsRecordDetails = new LWhGoodsRecordDetails(); lWhGoodsRecordDetails.setWhGoodsRecordId(oldRecordId); List<LWhGoodsRecordDetails> goodsRecordDetailsList = null;// LWhGoodsRecordDetailsService.select(lWhGoodsRecordDetails); List<LWhGoodsRecordDetails> goodsRecordDetailsList = lWhGoodsRecordDetailsService.select(lWhGoodsRecordDetails); for (LWhGoodsRecordDetails whGoodsRecordDetails : goodsRecordDetailsList) { whGoodsRecordDetails.setId(NumberGenerator.getLongSequenceNumber()); whGoodsRecordDetails.setThisType(1); } // LWhGoodsRecordDetailsService.insertBatch(goodsRecordDetailsList); lWhGoodsRecordDetailsService.insertBatch(goodsRecordDetailsList); } lWhGoodsRecordService.insertBatch(whGoodsRecordList); // 库存物品详情(L_WH_GOODS)中 状态设置为1 lWhGoodsService.modGoodsTransfering(outGoodsIds, inWarehouseType, inWarehouseId, inWarehouseName, (short) 1); //将保管仓库信息更新到 物品仓库保管记录【L_GOODS_WH_RECORD】 lGoodsWhRecordService.insertNewRecord(outGoodsIds, inWarehouseFlowId, dealTime); //单据类型。0仓库调拨;1部门分发;2部门物品回退 Integer businessType = lWhFormTransfer.getBusinessType(); if (businessType == 1) { // 需要往 物品使用记录【L_GOODS_USER_RECORD】 增加记录 } else if (businessType == 2) { // 需要往 物品使用记录【L_GOODS_USER_RECORD】 增加记录 } // 更新调拨单 lWhFormTransfer = new LWhFormTransfer(whFormTransferId); @@ -198,11 +248,17 @@ * * @param lWarehouseFlowId */ private List<Long> getGoodsidByFlowId(long lWarehouseFlowId) { private List<Long> getGoodsidByFlowId(Long lWarehouseFlowId, Long whGoodsRecordId) { StringBuilder sql = new StringBuilder(GET_GOODSID_BY_FLOWID); Map<String, Object> paramts = new HashMap<>(); sql.append(" and gr.WAREHOUSE_FLOW_ID =:lWarehouseFlowId"); paramts.put("lWarehouseFlowId", lWarehouseFlowId); if (lWarehouseFlowId != null) { sql.append(" and gr.WAREHOUSE_FLOW_ID =:lWarehouseFlowId"); paramts.put("lWarehouseFlowId", lWarehouseFlowId); } if (whGoodsRecordId != null) { sql.append(" and gr.id =:whGoodsRecordId"); paramts.put("whGoodsRecordId", whGoodsRecordId); } List<Map<String, Object>> outGoods = goodsBaseService.select(sql.toString(), paramts); if (CollectionUtils.isEmpty(outGoods)) { return null; consum-base/src/main/java/com/consum/base/service/LWhGoodsService.java
@@ -13,7 +13,6 @@ /** * @ClassName LWhGoodsService * @Date 2023/10/24 * @Description * @Version 1.0 @@ -132,7 +131,9 @@ * @param goodsModelNum 取出的数量 * @return */ private static String QUERY_SCRAPPED_GOODS_PREFIX = "SELECT goods.id FROM L_WH_GOODS goods LEFT JOIN (SELECT t2.*FROM (SELECT max(DEAL_TIME) DEAL_TIME,WH_GOODS_ID FROM L_GOODS_USER_RECORD GROUP BY WH_GOODS_ID) t1 LEFT JOIN L_GOODS_USER_RECORD t2 ON t1.DEAL_TIME=t2.DEAL_TIME AND t1.WH_GOODS_ID=t2.WH_GOODS_ID) useRecord ON goods.id=useRecord.WH_GOODS_ID WHERE 1=1"; private static String QUERY_SCRAPPED_GOODS_PREFIX_1 = "SELECT goods.id FROM L_WH_GOODS goods LEFT JOIN L_GOODS_USER_RECORD useRecord ON goods.id=useRecord.WH_GOODS_ID AND useRecord.LAST_RECORD=1 WHERE 1=1 "; private static String QUERY_SCRAPPED_GOODS_PREFIX_2 = " AND goods.id IN (SELECT lwgrd.WH_GOODS_ID FROM L_WAREHOUSE_FLOW flow LEFT JOIN L_WH_GOODS_RECORD lwgr ON lwgr.WAREHOUSE_FLOW_ID=flow.id LEFT JOIN L_WH_GOODS_RECORD_DETAILS lwgrd ON lwgrd.WH_GOODS_RECORD_ID=lwgr.id WHERE flow.THIS_TYPE=4 AND flow.BUSINESS_FORM_ID=:transBusinessId)"; private static String QUERY_SCRAPPED_GOODS_END = " ORDER BY goods.PRICE DESC,goods.PROCURE_DATE ASC,goods.id"; public List<Map<String, Object>> queryScrappedGoods(Integer warehouseType, @@ -145,7 +146,7 @@ if (warehouseType == null) { warehouseType = 0; } StringBuilder sql = new StringBuilder(QUERY_SCRAPPED_GOODS_PREFIX); StringBuilder sql = new StringBuilder(QUERY_SCRAPPED_GOODS_PREFIX_1); Map<String, Object> paramts = new HashMap<>(); if (warehouseType != null) { sql.append(" AND goods.WAREHOUSE_TYPE=:warehouseType"); @@ -154,10 +155,6 @@ if (warehouseId != null) { sql.append(" AND goods.WAREHOUSE_ID=:warehouseId"); paramts.put("warehouseId", warehouseId); } if (transBusinessId != null) { sql.append(" and useRecord.TRANS_BUSINESS_ID=:transBusinessId"); paramts.put("transBusinessId", transBusinessId); } if (StringUtils.isNotEmpty(nowUserName)) { sql.append(" AND useRecord.NOW_USER_NAME=:nowUserName"); @@ -171,7 +168,15 @@ sql.append(" AND goods.STATES=:states"); paramts.put("states", states); } return select(sql.append(QUERY_SCRAPPED_GOODS_END).append(" limit").append(goodsModelNum).toString(), paramts); if (transBusinessId != null) { sql.append(QUERY_SCRAPPED_GOODS_PREFIX_2); paramts.put("transBusinessId", transBusinessId); } sql.append(QUERY_SCRAPPED_GOODS_END); if (goodsModelNum != null) { sql.append(" limit").append(goodsModelNum); } return select(sql.toString(), paramts); } /** @@ -237,6 +242,5 @@ params.add(whGoods); return update(sql.toString(), params.toArray()); } } consum-base/src/main/java/com/consum/base/service/LWhProcureModelUserServiceImpl.java
New file @@ -0,0 +1,16 @@ package com.consum.base.service; import com.walker.jdbc.service.BaseServiceImpl; import org.springframework.stereotype.Service; /** * @ClassName LWhProcureModelUserServiceImpl * @Author cy * @Date 2023/11/3 * @Description * @Version 1.0 **/ @Service public class LWhProcureModelUserServiceImpl extends BaseServiceImpl { }