File was renamed from consum-base/src/main/java/com/consum/base/core/DepFormScrappedCoreServiceImpl.java |
| | |
| | | package com.consum.base.core; |
| | | package com.consum.base.service.core; |
| | | |
| | | import cn.hutool.core.convert.Convert; |
| | | import java.util.ArrayList; |
| | | import java.util.Arrays; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import javax.annotation.Resource; |
| | | |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Propagation; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.transaction.interceptor.TransactionAspectSupport; |
| | | |
| | | import com.consum.base.core.WhBusinessEnum; |
| | | import com.consum.base.core.utils.IdUtil; |
| | | import com.consum.base.core.utils.LockManage; |
| | | import com.consum.base.service.GoodsBaseServiceImpl; |
| | | import com.consum.base.service.GoodsBaseService; |
| | | import com.consum.base.service.LWarehouseFlowService; |
| | | import com.consum.base.service.LWhGoodsRecordService; |
| | | import com.consum.base.service.LWhGoodsService; |
| | |
| | | import com.iplatform.model.po.S_user_core; |
| | | import com.walker.infrastructure.utils.CollectionUtils; |
| | | import com.walker.web.ResponseValue; |
| | | import java.util.Arrays; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Propagation; |
| | | 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; |
| | | import java.util.stream.Collectors; |
| | | import cn.hutool.core.convert.Convert; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | |
| | | /** |
| | | * @ClassName DepFormScrappedCoreServiceImpl |
| | |
| | | @Service |
| | | @Slf4j |
| | | @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED) |
| | | public class DepFormScrappedCoreServiceImpl { |
| | | public class DepFormScrappedCoreService { |
| | | @Resource |
| | | private GoodsBaseServiceImpl goodsBaseService; |
| | | private GoodsBaseService goodsBaseService; |
| | | @Resource |
| | | private LWhGoodsService lWhGoodsService; |
| | | @Resource |
| | |
| | | @Resource |
| | | private LWhGoodsRecordService lWhGoodsRecordServiceImpl; |
| | | @Resource |
| | | private LWarehouseFlowService lWarehouseFlowService; |
| | | private LWarehouseFlowService lWarehouseFlowServiceImpl; |
| | | |
| | | /** |
| | | * 根据报废单报废:修改调拨单中可退回数量;仓库中物品状态设置为报废;生成一个保费流水;更新报废型号表中,物品价值 |
| | | * <p> |
| | | * 1.找到需要报废的型号, 按同一个 |
| | | * |
| | | * @param lWhFormScrappedId // * @param isBack 是否退回 |
| | | * @param lWhFormScrappedId // * @param isBack 是否退回 |
| | | */ |
| | | public ResponseValue updateScrapped(Long lWhFormScrappedId, S_user_core currentUser, Long dealTime) { |
| | | // 查询报废单状态 |
| | | DepFormScrapped depFormScrapped = new DepFormScrapped(lWhFormScrappedId); |
| | | depFormScrapped = goodsBaseService.get(depFormScrapped); |
| | | //状态 1=待报废;2=已报废 |
| | | // 状态 1=待报废;2=已报废 |
| | | if (depFormScrapped == null || depFormScrapped.getStates() != 1) { |
| | | return ResponseValue.error("请检查报废单"); |
| | | } |
| | |
| | | String nickName = currentUser.getNick_name(); |
| | | |
| | | // 根据报废单 查询需要报废的型号数量 |
| | | List<Map<String, Object>> bfModelList = goodsBaseService.select("SELECT scrGoods.TRANS_BUSINESS_ID,scrGoods.BUSINESS_FORM_CODE,scrGoods.TRANS_OUT_WAREHOUSE_TYPE,scrGoods.TRANS_OUT_WAREHOUSE_ID,scrGoods.BASE_GOODS_TEMPLATE_ID, scrGoods.BASE_GOODS_TEMPLATE_NAME,goodsModel.id formScrappedModelId,goodsModel.BASE_GOODS_TEMPLATE_ID,goodsModel.BASE_GOODS_MODELS_ID,goodsModel.COUNTS,goodsModel.PROCURE_MODEL_USER_ID,goodsModel.GOODS_USER_NAME,goodsModel.BASE_GOODS_MODELS_NAME FROM DEP_FORM_SCRAPPED_GOODS scrGoods LEFT JOIN DEP_FORM_SCRAPPED_MODEL goodsModel ON scrgoods.id=goodsModel.DEP_FORM_SCRAPPED_GOODS_ID where scrGoods.DEP_FORM_SCRAPPED_ID = ?", new Object[]{lWhFormScrappedId}); |
| | | Map<Object, List<Map<String, Object>>> groupByModelIdMap = bfModelList.stream() |
| | | .collect(Collectors.groupingBy(map -> map.get("BASE_GOODS_MODELS_ID"))); |
| | | List<Map<String, Object>> bfModelList = goodsBaseService.select( |
| | | "SELECT scrGoods.TRANS_BUSINESS_ID,scrGoods.BUSINESS_FORM_CODE,scrGoods.TRANS_OUT_WAREHOUSE_TYPE,scrGoods.TRANS_OUT_WAREHOUSE_ID,scrGoods.BASE_GOODS_TEMPLATE_ID, scrGoods.BASE_GOODS_TEMPLATE_NAME,goodsModel.id formScrappedModelId,goodsModel.BASE_GOODS_TEMPLATE_ID,goodsModel.BASE_GOODS_MODELS_ID,goodsModel.COUNTS,goodsModel.PROCURE_MODEL_USER_ID,goodsModel.GOODS_USER_NAME,goodsModel.BASE_GOODS_MODELS_NAME FROM DEP_FORM_SCRAPPED_GOODS scrGoods LEFT JOIN DEP_FORM_SCRAPPED_MODEL goodsModel ON scrgoods.id=goodsModel.DEP_FORM_SCRAPPED_GOODS_ID where scrGoods.DEP_FORM_SCRAPPED_ID = ?", |
| | | new Object[] {lWhFormScrappedId}); |
| | | Map<Object, List<Map<String, Object>>> groupByModelIdMap = |
| | | bfModelList.stream().collect(Collectors.groupingBy(map -> map.get("BASE_GOODS_MODELS_ID"))); |
| | | Integer warehouseType = depFormScrapped.getOutWarehouseType(); |
| | | Long warehouseId = depFormScrapped.getOutWarehouseId(); |
| | | String warehouseName = depFormScrapped.getOutWarehouseName(); |
| | |
| | | // |
| | | ArrayList<LWhGoodsRecord> lWhGoodsRecordList = new ArrayList<>(); |
| | | |
| | | //采购、调拨、出库等的物品型号【L_WH_PROCURE_MODEL】中 根据调拨单+型号 更新 在用数量 |
| | | // 采购、调拨、出库等的物品型号【L_WH_PROCURE_MODEL】中 根据调拨单+型号 更新 在用数量 |
| | | Map<String, Integer> procureModelMap = new HashMap<>(); |
| | | |
| | | for (Object key : groupByModelIdMap.keySet()) { |
| | | Long modelTotalPrice = 0L; |
| | | //要报废的总数量 |
| | | // 要报废的总数量 |
| | | int modelTotalNum = 0; |
| | | |
| | | Long baseGoodsModelsId = (Long) key; |
| | | Long baseGoodsModelsId = (Long)key; |
| | | List<Map<String, Object>> eachFfModelList = groupByModelIdMap.get(key); |
| | | Map<String, Object> eachFfModelBase = eachFfModelList.get(0); |
| | | Long tempGoodsId = Convert.toLong(eachFfModelBase.get("BASE_GOODS_TEMPLATE_ID")); |
| | |
| | | whGoodsRecord.setBaseGoodsModelsId(baseGoodsModelsId); |
| | | whGoodsRecord.setBaseGoodsModelsName(modelName); |
| | | whGoodsRecord.setDealTime(dealTime); |
| | | //本次调整类型 1=调增;2=调减 |
| | | // 本次调整类型 1=调增;2=调减 |
| | | whGoodsRecord.setThisType(2); |
| | | |
| | | //通过LockManage获得锁 |
| | | // 通过LockManage获得锁 |
| | | Object warehouseModelLockObj = LockManage.acquireLock(warehouseType, warehouseId, baseGoodsModelsId); |
| | | int goodsModelNum = 0; |
| | | synchronized (warehouseModelLockObj) { |
| | | List<Long> warehouseIds = new ArrayList<>(Arrays.asList(warehouseId)); |
| | | goodsModelNum = lWhGoodsService.queryGoodsModelNum(warehouseType, warehouseIds, baseGoodsModelsId, 2, null); |
| | | goodsModelNum = |
| | | lWhGoodsService.queryGoodsModelNum(warehouseType, warehouseIds, baseGoodsModelsId, 2, null); |
| | | for (Map<String, Object> depFormScrappedModel : eachFfModelList) { |
| | | // 调拨单信息 |
| | | Long transBusinessId = (Long) depFormScrappedModel.get("TRANS_BUSINESS_ID"); |
| | | Long transBusinessId = (Long)depFormScrappedModel.get("TRANS_BUSINESS_ID"); |
| | | String nowUserName = Convert.toStr(depFormScrappedModel.get("GOODS_USER_NAME")); |
| | | Integer counts = Convert.toInt(depFormScrappedModel.get("COUNTS")); |
| | | Long formScrappedModelId = Convert.toLong(depFormScrappedModel.get("formScrappedModelId")); |
| | |
| | | modelTotalNum += counts; |
| | | |
| | | // 根据分发单、型号、使用人信息查询物品信息 |
| | | List<Map<String, Object>> scrappedGoodsList = lWhGoodsService.queryScrappedGoods(warehouseType, warehouseId, transBusinessId, nowUserName, baseGoodsModelsId, (short) 2, counts); |
| | | List<Map<String, Object>> scrappedGoodsList = lWhGoodsService.queryScrappedGoods(warehouseType, |
| | | warehouseId, transBusinessId, nowUserName, baseGoodsModelsId, (short)2, counts); |
| | | if (CollectionUtils.isEmpty(scrappedGoodsList) || scrappedGoodsList.size() < counts) { |
| | | log.error("要报废的物品数量不足!"); |
| | | // 手动回滚 |
| | |
| | | throw new RuntimeException("报废失败!型号数量不足"); |
| | | } |
| | | |
| | | Long formScrappedModelPrice = scrappedGoodsList.stream().mapToLong(map -> (long) map.get("price")).sum(); |
| | | Long formScrappedModelPrice = |
| | | scrappedGoodsList.stream().mapToLong(map -> (long)map.get("price")).sum(); |
| | | modelTotalPrice += formScrappedModelPrice; |
| | | // 更新 报废单物品【DEP_FORM_SCRAPPED_MODEL】中 价格 |
| | | modelTotalPriceMap.put(formScrappedModelId, formScrappedModelPrice); |
| | | //采购、调拨、出库等的物品型号【L_WH_PROCURE_MODEL】中 在用数量 |
| | | Integer procureModelNum = Convert.toInt(procureModelMap.get(transBusinessId + "_" + baseGoodsModelsId), 0); |
| | | // 采购、调拨、出库等的物品型号【L_WH_PROCURE_MODEL】中 在用数量 |
| | | Integer procureModelNum = |
| | | Convert.toInt(procureModelMap.get(transBusinessId + "_" + baseGoodsModelsId), 0); |
| | | procureModelMap.put(transBusinessId + "_" + baseGoodsModelsId, counts + procureModelNum); |
| | | |
| | | // 汇总出需要修改状态的物品id |
| | | List<Long> srappedGoodsIds = scrappedGoodsList.stream().map(map -> (Long) map.get("id")).collect(Collectors.toList()); |
| | | List<Long> srappedGoodsIds = |
| | | scrappedGoodsList.stream().map(map -> (Long)map.get("id")).collect(Collectors.toList()); |
| | | |
| | | // 设置物品为报废状态 |
| | | lWhGoodsService.modGoodsTransfering(srappedGoodsIds, null, null, null, 3); |
| | | // 批量插入 进出库流水明细[L_WH_GOODS_RECORD_DETAILS] |
| | | lWhGoodsRecordDetailsService.sameGoodsInsertMore(srappedGoodsIds, whGoodsRecordId, (short) 2); |
| | | lWhGoodsRecordDetailsService.sameGoodsInsertMore(srappedGoodsIds, whGoodsRecordId, (short)2); |
| | | } |
| | | } |
| | | |
| | |
| | | whGoodsRecord.setEndCount(goodsModelNum - modelTotalNum); |
| | | whGoodsRecord.setThisCount(modelTotalNum); |
| | | whGoodsRecord.setTotalPrice(modelTotalPrice); |
| | | // lWhGoodsRecordService.insert(whGoodsRecord); |
| | | // lWhGoodsRecordService.insert(whGoodsRecord); |
| | | lWhGoodsRecordList.add(whGoodsRecord); |
| | | } |
| | | |
| | |
| | | warehouseFlow.setOperatorName(nickName); |
| | | warehouseFlow.setDealTime(dealTime); |
| | | // 插入流水总表 |
| | | int flowInsertFlag = lWarehouseFlowService.insert(warehouseFlow); |
| | | int flowInsertFlag = lWarehouseFlowServiceImpl.insert(warehouseFlow); |
| | | if (flowInsertFlag == 0) { |
| | | TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
| | | return null; |
| | |
| | | // 更新报废单 |
| | | depFormScrapped = new DepFormScrapped(lWhFormScrappedId); |
| | | depFormScrapped.setStates(2); |
| | | // depFormScrapped.setOperatorId(userId); |
| | | // depFormScrapped.setOperatorName(nickName); |
| | | // depFormScrapped.setDealTime(dealTime); |
| | | // depFormScrapped.setOperatorId(userId); |
| | | // depFormScrapped.setOperatorName(nickName); |
| | | // depFormScrapped.setDealTime(dealTime); |
| | | goodsBaseService.update(depFormScrapped); |
| | | |
| | | // 更新 报废单物品【DEP_FORM_SCRAPPED_MODEL】中价格的list |
| | |
| | | } |
| | | goodsBaseService.execBatchUpdate("update DEP_FORM_SCRAPPED_MODEL set TOTAL_AMOUNT=? where id=?", parameterList); |
| | | |
| | | //如果是A类物品,则更新 分发物品使用人【L_WH_PROCURE_MODEL_USER】 中 根据id 更新 在用数量(USE_COUNT) |
| | | // 如果是A类物品,则更新 分发物品使用人【L_WH_PROCURE_MODEL_USER】 中 根据id 更新 在用数量(USE_COUNT) |
| | | List<Object[]> procureModelUserIdList = new ArrayList<>(); |
| | | for (Map<String, Object> itemMap : bfModelList) { |
| | | Long procureModelUserId = Convert.toLong(itemMap.get("PROCURE_MODEL_USER_ID")); |
| | |
| | | } |
| | | Integer counts = Convert.toInt(itemMap.get("COUNTS")); |
| | | |
| | | // StringBuilder sb = new StringBuilder("update L_WH_PROCURE_MODEL_USER set USE_COUNT=USE_COUNT-").append(counts); |
| | | // sb.append(" where id=").append(procureModelUserId); |
| | | // sb.append(" and USE_COUNT-").append(counts).append(" >=0"); |
| | | // goodsBaseService.update(sb.toString()); |
| | | // StringBuilder sb = new StringBuilder("update L_WH_PROCURE_MODEL_USER set |
| | | // USE_COUNT=USE_COUNT-").append(counts); |
| | | // sb.append(" where id=").append(procureModelUserId); |
| | | // sb.append(" and USE_COUNT-").append(counts).append(" >=0"); |
| | | // goodsBaseService.update(sb.toString()); |
| | | |
| | | Object[] one = new Object[3]; |
| | | one[0] = counts; |
| | |
| | | procureModelUserIdList.add(one); |
| | | } |
| | | if (!CollectionUtils.isEmpty(procureModelUserIdList)) { |
| | | goodsBaseService.execBatchUpdate("update L_WH_PROCURE_MODEL_USER set USE_COUNT=USE_COUNT- ? where id= ? and USE_COUNT- ? >=0", procureModelUserIdList); |
| | | goodsBaseService.execBatchUpdate( |
| | | "update L_WH_PROCURE_MODEL_USER set USE_COUNT=USE_COUNT- ? where id= ? and USE_COUNT- ? >=0", |
| | | procureModelUserIdList); |
| | | } |
| | | |
| | | |
| | | //采购、调拨、出库等的物品型号【L_WH_PROCURE_MODEL】中 根据调拨单+型号 更新 在用数量 |
| | | // 采购、调拨、出库等的物品型号【L_WH_PROCURE_MODEL】中 根据调拨单+型号 更新 在用数量 |
| | | List<Object[]> procureModelParameterList = new ArrayList<>(); |
| | | for (Map.Entry<String, Integer> entry : procureModelMap.entrySet()) { |
| | | String key = entry.getKey(); |
| | |
| | | sb.append(modelUseingNum).append(" >=0"); |
| | | goodsBaseService.update(sb.toString()); |
| | | } |
| | | // goodsBaseService.execBatchUpdate("update L_WH_PROCURE_MODEL set USE_COUNT=USE_COUNT-? where BUSINESS_TYPE=4 and BUSINESS_ID=? and BASE_GOODS_MODELS_ID=? and USE_COUNT=USE_COUNT-? >0", procureModelParameterList); |
| | | //当库存变动时调用该方法 |
| | | //lWhWarningCoreService.updateKuCun(Convert.toShort(warehouseType,(short) 0), warehouseId, allChangModelList, null, dealTime); |
| | | // goodsBaseService.execBatchUpdate("update L_WH_PROCURE_MODEL set USE_COUNT=USE_COUNT-? where BUSINESS_TYPE=4 |
| | | // and BUSINESS_ID=? and BASE_GOODS_MODELS_ID=? and USE_COUNT=USE_COUNT-? >0", procureModelParameterList); |
| | | // 当库存变动时调用该方法 |
| | | // lWhWarningCoreService.updateKuCun(Convert.toShort(warehouseType,(short) 0), warehouseId, allChangModelList, |
| | | // null, dealTime); |
| | | return null; |
| | | } |
| | | } |