Browse Source

杰生重构 退货出库报废出库

home 2 years ago
parent
commit
85ecbec36c

+ 7 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/service/contract/ContractDetailsService.java

@@ -30,4 +30,11 @@ public interface ContractDetailsService extends StorageBaseService<ContractDetai
      */
     void updateAfloatAndArrivalQuantity(List<WaterTag> waterTagList);
 
+    /**
+     * 更新合同明细退货数量
+     *
+     * @param waterTagList 标签列表
+     */
+    void updateBackQuantity(List<WaterTag> waterTagList);
+
 }

+ 8 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/service/contract/ContractService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.base.Condition;
 import com.fjhx.base.StorageBaseService;
 import com.fjhx.entity.contract.Contract;
+import com.fjhx.entity.water.WaterTag;
 import com.fjhx.params.apply.ApplyPurchaseVo;
 import com.fjhx.params.contract.ContractVo;
 
@@ -51,4 +52,11 @@ public interface ContractService extends StorageBaseService<Contract> {
      */
     void updateAdjustByQualityTestingId(Long qualityTestingId);
 
+    /**
+     * 更新合同退货数量和退货金额
+     *
+     * @param waterTagList 标签列表
+     */
+    void updateBackAmountAndQuantity(List<WaterTag> waterTagList);
+
 }

+ 20 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/service/contract/impl/ContractDetailsServiceImpl.java

@@ -131,4 +131,24 @@ public class ContractDetailsServiceImpl extends ServiceImpl<ContractDetailsMappe
         }
 
     }
+
+    @Override
+    public void updateBackQuantity(List<WaterTag> waterTagList) {
+        // 合同明细id,退货数量map
+        Map<Long, BigDecimal> ContractDetailsIdBackQuantityMap = waterTagList.stream()
+                .collect(Collectors.toMap(
+                        WaterTag::getContractDetailsId,
+                        WaterTag::getQuantity,
+                        BigDecimal::add));
+
+        // 合同明细列表
+        List<ContractDetails> contractDetailsList = listByIds(ContractDetailsIdBackQuantityMap.keySet());
+
+        // 更新退货数量
+        contractDetailsList.forEach(item -> item.setBackQuantity(
+                item.getBackQuantity().add(ContractDetailsIdBackQuantityMap.get(item.getId()))));
+
+        updateBatchById(contractDetailsList);
+    }
+
 }

+ 37 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/service/contract/impl/ContractServiceImpl.java

@@ -14,6 +14,7 @@ import com.fjhx.constants.StatusConstant;
 import com.fjhx.entity.apply.ApplyPurchaseDetails;
 import com.fjhx.entity.contract.Contract;
 import com.fjhx.entity.contract.ContractDetails;
+import com.fjhx.entity.water.WaterTag;
 import com.fjhx.enums.ContractStatusEnum;
 import com.fjhx.enums.FlowStatusEnum;
 import com.fjhx.enums.MaterialTypeEnum;
@@ -25,6 +26,7 @@ import com.fjhx.service.common.CommonConfigService;
 import com.fjhx.service.contract.ContractDetailsService;
 import com.fjhx.service.contract.ContractService;
 import org.springblade.core.secure.utils.AuthUtil;
+import org.springblade.core.tool.utils.ThreadUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -210,6 +212,17 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract> i
 
     }
 
+    @Override
+    public synchronized void updateBackAmountAndQuantity(List<WaterTag> waterTagList) {
+
+        // 更新合同退货金额
+        updateBackAmount(waterTagList);
+
+        // 更新合同明细退货数量
+        contractDetailsService.updateBackQuantity(waterTagList);
+
+    }
+
 
     /**
      * 获取当天合同编号前缀
@@ -284,4 +297,28 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract> i
                 );
     }
 
+    /**
+     * 更新合同退货金额
+     *
+     * @param waterTagList 标签列表
+     */
+    private void updateBackAmount(List<WaterTag> waterTagList) {
+        // 合同id,退货金额map
+        Map<Long, BigDecimal> ContractIdBackAmountMap = waterTagList.stream()
+                .collect(Collectors.toMap(
+                        WaterTag::getContractId,
+                        waterTag -> waterTag.getQuantity().add(waterTag.getPrice()),
+                        BigDecimal::add));
+
+        // 合同明细列表
+        List<Contract> contractList = listByIds(ContractIdBackAmountMap.keySet());
+
+        // 更新退货数量
+        contractList.forEach(item -> item.setBackAmount(
+                item.getBackAmount().add(ContractIdBackAmountMap.get(item.getId()))));
+
+        updateBatchById(contractList);
+
+    }
+
 }

+ 8 - 3
hx-service/storage-restructure/src/main/java/com/fjhx/service/water/impl/WaterBatchServiceImpl.java

@@ -13,6 +13,7 @@ import com.fjhx.service.contract.ContractDetailsService;
 import com.fjhx.service.water.WaterBatchService;
 import com.fjhx.service.water.WaterTagService;
 import com.fjhx.utils.Assert;
+import org.springblade.core.secure.utils.AuthUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -147,9 +148,13 @@ public class WaterBatchServiceImpl extends ServiceImpl<WaterBatchMapper, WaterBa
 
     @Override
     public void editTagCountAndQuantitySum(WaterBatch waterBatch, int tagCount, BigDecimal tagQuantitySum) {
-        waterBatch.setTagCount(waterBatch.getTagCount() + tagCount);
-        waterBatch.setTagQuantitySum(waterBatch.getTagQuantitySum().add(tagQuantitySum));
-        updateById(waterBatch);
+        update(Wrappers.<WaterBatch>lambdaUpdate()
+                .eq(StorageBaseEntity::getId, waterBatch.getId())
+                .set(WaterBatch::getTagCount, waterBatch.getTagCount() + tagCount)
+                .set(WaterBatch::getTagQuantitySum, waterBatch.getTagQuantitySum().add(tagQuantitySum))
+                .set(StorageBaseEntity::getUpdateTime, new Date())
+                .set(StorageBaseEntity::getUpdateUser, AuthUtil.getUserId())
+        );
     }
 
     private String getCode(String contractCode) {

+ 10 - 1
hx-service/storage-restructure/src/main/java/com/fjhx/service/water/impl/WaterServiceImpl.java

@@ -11,6 +11,7 @@ import com.fjhx.enums.OutTypeEnum;
 import com.fjhx.mapper.water.WaterMapper;
 import com.fjhx.params.water.WaterVo;
 import com.fjhx.service.contract.ContractDetailsService;
+import com.fjhx.service.contract.ContractService;
 import com.fjhx.service.flow.ReturnOrScrapIssueFlowService;
 import com.fjhx.service.quality.QualityTestingService;
 import com.fjhx.service.stock.StockService;
@@ -54,6 +55,9 @@ public class WaterServiceImpl extends ServiceImpl<WaterMapper, Water> implements
     @Autowired
     private ReturnOrScrapIssueFlowService returnOrScrapIssueFlowService;
 
+    @Autowired
+    private ContractService contractService;
+
     @Transactional(rollbackFor = Exception.class)
     @Override
     public void add(WaterVo waterVo) {
@@ -67,7 +71,7 @@ public class WaterServiceImpl extends ServiceImpl<WaterMapper, Water> implements
         // 如果是退货或者报废,审批通过后再出库
         if (typeEnum instanceof OutTypeEnum
                 && (typeEnum.equals(OutTypeEnum.RETURN_ISSUE) || typeEnum.equals(OutTypeEnum.SCRAP_ISSUE))
-                && waterVo.getFlowFlag() == null) {
+                && !StatusConstant.YES.equals(waterVo.getFlowFlag())) {
             waterVo.setId(IdWorker.getId());
             waterVo.setFlowFlag(StatusConstant.YES);
             returnOrScrapIssueFlowService.create(waterVo);
@@ -101,6 +105,11 @@ public class WaterServiceImpl extends ServiceImpl<WaterMapper, Water> implements
             // 生成质检单
             qualityTestingService.create(waterTagList);
 
+        } else if (typeEnum.equals(OutTypeEnum.RETURN_ISSUE)) {
+
+            // 退货出库新增合同明细退货数量与合同退货金额
+            contractService.updateBackAmountAndQuantity(waterTagList);
+
         }
 
     }

+ 38 - 20
hx-service/storage-restructure/src/main/java/com/fjhx/service/water/impl/WaterTagServiceImpl.java

@@ -47,6 +47,9 @@ import java.util.stream.Collectors;
 @Service
 public class WaterTagServiceImpl extends ServiceImpl<WaterTagMapper, WaterTag> implements WaterTagService {
 
+    // 保证批次统计标签个数和数量正常
+    private static final Object BATCH_COUNT_LOCK_OBJECT = new Object();
+
     @Autowired
     private WaterBatchService waterBatchService;
 
@@ -66,50 +69,53 @@ public class WaterTagServiceImpl extends ServiceImpl<WaterTagMapper, WaterTag> i
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public synchronized void add(WaterTagVo waterTagVo) {
+    public void add(WaterTagVo waterTagVo) {
         BigDecimal quantity = waterTagVo.getQuantity();
         Assert.notEmpty(quantity, "物料长度不能为空");
 
         Long waterBatchId = waterTagVo.getWaterBatchId();
         Assert.notEmpty(waterBatchId, "批次id不能为空");
 
-        // 获取批次详情
-        WaterBatch waterBatch = waterBatchService.getById(waterBatchId);
-        Assert.notEmpty(waterBatch, "没有找到批次信息");
-
         // 标签数量
         int num = waterTagVo.getNum() == null || waterTagVo.getNum() < 1 ? 1 : waterTagVo.getNum();
 
         // 获取最新添加标签
         WaterTag waterTag = getNewestWaterTag(waterBatchId);
+        int number = waterTag != null ? waterTag.getNumber() : 0;
 
         List<WaterTag> waterTagList = new ArrayList<>();
-        int number = waterTag != null ? waterTag.getNumber() : 0;
+
+        WaterBatch waterBatch;
+        synchronized (BATCH_COUNT_LOCK_OBJECT) {
+            // 获取批次详情
+            waterBatch = waterBatchService.getById(waterBatchId);
+            Assert.notEmpty(waterBatch, "没有找到批次信息");
+            // 更新批次标签总个数以及标签总米数
+            waterBatchService.editTagCountAndQuantitySum(waterBatch, num, quantity.multiply(BigDecimal.valueOf(num)));
+        }
+
+        // 添加标签信息
         for (int i = 1; i <= num; i++) {
             waterTagList.add(createWaterTag(waterBatch, quantity, number + i));
         }
+
+        // 保存标签信息
         saveBatch(waterTagList);
 
         // 修改合同处理状态为已处理,后续操作不再允许删除合同
         updateContractProcessed(waterBatch);
 
-        // 更新批次标签总个数以及标签总米数
-        waterBatchService.editTagCountAndQuantitySum(waterBatch, num, quantity.multiply(BigDecimal.valueOf(num)));
     }
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public synchronized void uploadTag(MultipartFile file, Long waterBatchId) {
+    public void uploadTag(MultipartFile file, Long waterBatchId) {
 
         Assert.notEmpty(waterBatchId, "批次id不能为空");
 
         // 解析excel文件中的数据
         List<BigDecimal> quantityList = getQuantityListByExcel(file);
 
-        // 获取批次详情
-        WaterBatch waterBatch = waterBatchService.getById(waterBatchId);
-        Assert.notEmpty(waterBatch, "没有找到批次信息");
-
         // 获取此批次最新标签
         WaterTag waterTag = getNewestWaterTag(waterBatchId);
 
@@ -117,19 +123,30 @@ public class WaterTagServiceImpl extends ServiceImpl<WaterTagMapper, WaterTag> i
 
         List<WaterTag> waterTagList = new ArrayList<>();
         BigDecimal tagQuantitySum = BigDecimal.ZERO;
-        for (BigDecimal quantity : quantityList) {
-            number++;
-            waterTagList.add(createWaterTag(waterBatch, quantity, number));
-            tagQuantitySum = tagQuantitySum.add(quantity);
+
+
+        WaterBatch waterBatch;
+        synchronized (BATCH_COUNT_LOCK_OBJECT) {
+            // 获取批次详情
+            waterBatch = waterBatchService.getById(waterBatchId);
+            Assert.notEmpty(waterBatch, "没有找到批次信息");
+
+            for (BigDecimal quantity : quantityList) {
+                number++;
+                waterTagList.add(createWaterTag(waterBatch, quantity, number));
+                tagQuantitySum = tagQuantitySum.add(quantity);
+            }
+
+            // 更新批次标签总个数以及标签总米数
+            waterBatchService.editTagCountAndQuantitySum(waterBatch, quantityList.size(), tagQuantitySum);
         }
+
+        // 保存标签信息
         saveBatch(waterTagList);
 
         // 修改合同处理状态为已处理,后续操作不再允许删除合同
         updateContractProcessed(waterBatch);
 
-        // 更新批次标签总个数以及标签总米数
-        waterBatchService.editTagCountAndQuantitySum(waterBatch, quantityList.size(), tagQuantitySum);
-
     }
 
     @Override
@@ -169,6 +186,7 @@ public class WaterTagServiceImpl extends ServiceImpl<WaterTagMapper, WaterTag> i
                 .set(StorageBaseEntity::getUpdateUser, userId)
         );
 
+        // 新标签设置为已使用
         update(Wrappers.<WaterTag>lambdaUpdate()
                 .eq(StorageBaseEntity::getId, id)
                 .set(WaterTag::getRfidCode, rfidCode)

+ 4 - 0
hx-service/storage/src/main/java/com/fjhx/stock/mapper/StockBackPlanMapper.java

@@ -37,4 +37,8 @@ public interface StockBackPlanMapper extends BaseMapper<StockBackPlan> {
 
     @TenantIgnore
     List<Map<String, Object>> getTransferPickingList(@Param("ew") QueryWrapper<Object> wrapper);
+
+    @TenantIgnore
+    List<Map<String, Object>> getReturnWarehouse(@Param("ew") QueryWrapper<Object> wrapper);
+
 }

+ 15 - 0
hx-service/storage/src/main/java/com/fjhx/stock/mapper/StockBackPlanMapper.xml

@@ -82,4 +82,19 @@
             ${ew.customSqlSegment}
     </select>
 
+    <select id="getReturnWarehouse" resultType="java.util.Map">
+        select sbd.material_meters changeNum,
+               sb.checker_time     createTime,
+               m.Name              materialName,
+               m.Price             price,
+               m.Width             width,
+               uu.JobNo            jobNo
+        from stock_back sb
+                 left join stock_back_details sbd on sb.id = sbd.stock_back_id
+                 left join material m on sbd.material_id = m.id
+                 left join acc_account aa on sb.operator_id = aa.AccountNo
+                 left join u_user uu on uu.ID = aa.ID
+            ${ew.customSqlSegment}
+    </select>
+
 </mapper>

+ 13 - 11
hx-service/storage/src/main/java/com/fjhx/stock/service/impl/StockBackPlanServiceImpl.java

@@ -115,7 +115,7 @@ public class StockBackPlanServiceImpl extends ServiceImpl<StockBackPlanMapper, S
 
             // 统计近3天排班
             Date endDate = new Date();
-            Date beginDate = DateUtil.beginOfDay(DateUtil.offsetDay(endDate, -26));
+            Date beginDate = DateUtil.beginOfDay(DateUtil.offsetDay(endDate, -2));
 
             List<StockBackPlan> list = list(Wrappers.<StockBackPlan>lambdaQuery()
                     .between(StockBackPlan::getPlanTime, beginDate, endDate));
@@ -162,10 +162,12 @@ public class StockBackPlanServiceImpl extends ServiceImpl<StockBackPlanMapper, S
         stockBackPlanDetails.setQuantity(BigDecimal.ZERO);
         stockBackPlanDetails.setJobNo(jobNo);
         stockBackPlanDetails.setCorrectArea(BigDecimal.ZERO);
+
         stockBackPlanDetails.setPickingMoney(BigDecimal.ZERO);
         stockBackPlanDetails.setPickingNum(0);
         stockBackPlanDetails.setPickingMeters(BigDecimal.ZERO);
         stockBackPlanDetails.setPickingArea(BigDecimal.ZERO);
+
         stockBackPlanDetails.setBackMoney(BigDecimal.ZERO);
         stockBackPlanDetails.setBackNum(0);
         stockBackPlanDetails.setBackMeters(BigDecimal.ZERO);
@@ -286,11 +288,11 @@ public class StockBackPlanServiceImpl extends ServiceImpl<StockBackPlanMapper, S
      * 回仓
      */
     private void returnWarehouse(Date beginDate, Map<String, StockBackPlanDetails> stockBackPlanMap) {
-        List<Map<String, Object>> backList = baseMapper.getWater(Wrappers.query()
-                .ge("swd.CreatedTime", DateUtil.format(beginDate, "yyyy-MM-dd 10:00:00"))
-                .eq("swd.StockChangeType", 16)
-                .likeRight("m.Code", "01.")
-                .isNotNull("uu.JobNo"));
+        List<Map<String, Object>> backList = baseMapper.getReturnWarehouse(Wrappers.query()
+                .ge("sb.checker_time", DateUtil.format(beginDate, "yyyy-MM-dd 10:00:00"))
+                .eq("uu.IsDelete", 0)
+                .isNotNull("uu.JobNo")
+                .likeRight("m.Code", "01."));
 
         for (Map<String, Object> map : backList) {
 
@@ -374,7 +376,7 @@ public class StockBackPlanServiceImpl extends ServiceImpl<StockBackPlanMapper, S
      */
     private void transferIn(Date beginDate, Map<String, StockBackPlanDetails> stockBackPlanMap) {
         List<Map<String, Object>> transferPickingList = baseMapper.getTransferPickingList(Wrappers.query()
-                .ge("st.submit_time", DateUtil.format(beginDate, "yyyy-MM-dd 10:00:00"))
+                .ge("st.submit_time", DateUtil.format(beginDate, "yyyy-MM-dd 00:00:00"))
                 .eq("st.status", StatusConstant.YES)
                 .eq("st.del_flag", 0)
         );
@@ -384,13 +386,13 @@ public class StockBackPlanServiceImpl extends ServiceImpl<StockBackPlanMapper, S
             // 出库时间
             Date createTime = (Date) map.get("createTime");
             // 时
-            int h = Integer.parseInt(DateUtil.format(createTime, "H"));
+//            int h = Integer.parseInt(DateUtil.format(createTime, "H"));
             // 分
 //            int m = Integer.parseInt(DateUtil.format(createTime, "m"));
             // 小于7点30算前一日
-            if (h < 10) {
-                createTime = DateUtil.offsetDay(createTime, -1);
-            }
+//            if (h < 10) {
+//                createTime = DateUtil.offsetDay(createTime, -1);
+//            }
 
             // 排班时间
             Date planDate = DateUtil.beginOfDay(createTime);

+ 1 - 1
hx-service/storage/src/main/java/com/fjhx/stock/service/impl/StockBackServiceImpl.java

@@ -391,7 +391,7 @@ public class StockBackServiceImpl extends ServiceImpl<StockBackMapper, StockBack
 
         return Wrappers.query()
                 .between("sb.operation_time", beginTime, endTime)
-                .eq(ObjectUtil.isNotEmpty(userId), "sb.operator_id", userId);
+                .eq(ObjectUtil.isNotEmpty(userId), "uu.ID", userId);
 
     }
 

+ 1 - 1
hx-service/storage/src/main/java/com/fjhx/task/controller/ScheduleTaskController.java

@@ -56,7 +56,7 @@ public class ScheduleTaskController {
      * 统计排班数据
      */
     @Scheduled(cron = "30 0/5 * * * ?")
-//    @Scheduled(cron = "0 08 9 * * ?")
+//    @Scheduled(cron = "0 03 16 * * ?")
     private void statisticsScheduleDateTask() {
         if (BladeApplication.isLocalDev()) {
             return;