Browse Source

杰生 转仓

home 2 năm trước cách đây
mục cha
commit
012b1f7db2
15 tập tin đã thay đổi với 216 bổ sung17 xóa
  1. 6 5
      hx-common/common-tool/src/main/java/com/fjhx/utils/WrapperUtil.java
  2. 11 0
      hx-service-api/storage-restructure-api/src/main/java/com/fjhx/entity/contract/ContractDetails.java
  3. 2 2
      hx-service-api/storage-restructure-api/src/main/java/com/fjhx/entity/water/WaterTag.java
  4. 5 5
      hx-service-api/storage-restructure-api/src/main/java/com/fjhx/enums/CheckStatusEnum.java
  5. 11 1
      hx-service/storage-restructure/src/main/java/com/fjhx/service/contract/ContractDetailsService.java
  6. 76 0
      hx-service/storage-restructure/src/main/java/com/fjhx/service/contract/impl/ContractDetailsServiceImpl.java
  7. 1 0
      hx-service/storage-restructure/src/main/java/com/fjhx/service/contract/impl/ContractServiceImpl.java
  8. 8 2
      hx-service/storage-restructure/src/main/java/com/fjhx/service/water/impl/WaterServiceImpl.java
  9. 2 2
      hx-service/storage-restructure/src/main/java/com/fjhx/service/water/impl/WaterTagServiceImpl.java
  10. 20 0
      hx-service/storage/src/main/java/com/fjhx/stock/controller/StockTransferController.java
  11. 4 0
      hx-service/storage/src/main/java/com/fjhx/stock/mapper/StockTransferMapper.java
  12. 31 0
      hx-service/storage/src/main/java/com/fjhx/stock/mapper/StockTransferMapper.xml
  13. 5 0
      hx-service/storage/src/main/java/com/fjhx/stock/service/StockTransferService.java
  14. 2 0
      hx-service/storage/src/main/java/com/fjhx/stock/service/impl/StockBackPlanServiceImpl.java
  15. 32 0
      hx-service/storage/src/main/java/com/fjhx/stock/service/impl/StockTransferServiceImpl.java

+ 6 - 5
hx-common/common-tool/src/main/java/com/fjhx/utils/WrapperUtil.java

@@ -5,6 +5,7 @@ import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.fjhx.constants.StatusConstant;
 import org.springblade.core.log.exception.ServiceException;
 import org.springblade.core.secure.utils.AuthUtil;
 
@@ -36,7 +37,7 @@ public class WrapperUtil {
      *
      * @param condition 查询条件
      */
-    public static WrapperUtil init(Map<String, String> condition) {
+    public static WrapperUtil init(Map<String, ?> condition) {
         WrapperUtil wrapperUtil = new WrapperUtil();
         wrapperUtil.wrapper = Wrappers.query();
         wrapperUtil.condition = condition;
@@ -86,7 +87,7 @@ public class WrapperUtil {
      * 查询未删除数据
      */
     public WrapperUtil notDelete() {
-        wrapper.eq("del_flag", 0);
+        wrapper.eq("del_flag", StatusConstant.NOT_DELETED);
         return this;
     }
 
@@ -97,9 +98,9 @@ public class WrapperUtil {
      */
     public WrapperUtil notDelete(String prefix) {
         if (ObjectUtil.isNotEmpty(prefix)) {
-            wrapper.eq(prefix + ".del_flag", 0);
+            wrapper.eq(prefix + ".del_flag", StatusConstant.NOT_DELETED);
         } else {
-            wrapper.eq("del_flag", 0);
+            wrapper.eq("del_flag", StatusConstant.NOT_DELETED);
         }
         return this;
     }
@@ -112,7 +113,7 @@ public class WrapperUtil {
     public WrapperUtil notDelete(String... prefix) {
         for (String item : prefix) {
             if (ObjectUtil.isNotEmpty(prefix)) {
-                wrapper.eq(item + ".del_flag", 0);
+                wrapper.eq(item + ".del_flag", StatusConstant.NOT_DELETED);
             }
         }
         return this;

+ 11 - 0
hx-service-api/storage-restructure-api/src/main/java/com/fjhx/entity/contract/ContractDetails.java

@@ -8,6 +8,7 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 import java.math.BigDecimal;
+import java.util.Date;
 
 /**
  * <p>
@@ -97,6 +98,16 @@ public class ContractDetails extends StorageBaseEntity {
     private BigDecimal backQuantity;
 
     /**
+     * 完成状态 (0未完成 1已完成)
+     */
+    private Integer completeStatus;
+
+    /**
+     * 完成时间
+     */
+    private Date completeTime;
+
+    /**
      * 逻辑删除 0未删除 1已删除
      */
     @TableField(fill = FieldFill.INSERT)

+ 2 - 2
hx-service-api/storage-restructure-api/src/main/java/com/fjhx/entity/water/WaterTag.java

@@ -82,14 +82,14 @@ public class WaterTag extends StorageBaseEntity {
     private Integer hadShipment;
 
     /**
-     * 采购进度 (0供应商打码,1供应商出货,2到货贴标,3本厂入库,4现场回仓
+     * 采购进度 (0供应商打码,1供应商出货,2到货贴标,3本厂入库)
      */
     private Integer purchaseProgress;
 
     /**
      * 质检状态 (0未质检,1已质检,2无需质检)
      */
-    private Integer checkState;
+    private Integer checkStatus;
 
     /**
      * 仓库ID

+ 5 - 5
hx-service-api/storage-restructure-api/src/main/java/com/fjhx/enums/CheckStateEnum.java → hx-service-api/storage-restructure-api/src/main/java/com/fjhx/enums/CheckStatusEnum.java

@@ -8,7 +8,7 @@ import java.util.HashMap;
  * 质检状态
  */
 @Getter
-public enum CheckStateEnum {
+public enum CheckStatusEnum {
 
     NO_QUALITY_INSPECTION(0, "未质检"),
     INSPECTED(1, "已质检"),
@@ -17,15 +17,15 @@ public enum CheckStateEnum {
     private final Integer type;
     private final String name;
 
-    private static final HashMap<Integer, CheckStateEnum> map = new HashMap<>();
+    private static final HashMap<Integer, CheckStatusEnum> map = new HashMap<>();
 
-    CheckStateEnum(Integer type, String name) {
+    CheckStatusEnum(Integer type, String name) {
         this.type = type;
         this.name = name;
     }
 
     static {
-        for (CheckStateEnum value : CheckStateEnum.values()) {
+        for (CheckStatusEnum value : CheckStatusEnum.values()) {
             map.put(value.getType(), value);
         }
     }
@@ -33,7 +33,7 @@ public enum CheckStateEnum {
     /**
      * 根据type获取枚举
      */
-    public static CheckStateEnum get(Integer type) {
+    public static CheckStatusEnum get(Integer type) {
         return map.get(type);
     }
 

+ 11 - 1
hx-service/storage-restructure/src/main/java/com/fjhx/service/contract/ContractDetailsService.java

@@ -2,6 +2,9 @@ package com.fjhx.service.contract;
 
 import com.fjhx.base.StorageBaseService;
 import com.fjhx.entity.contract.ContractDetails;
+import com.fjhx.entity.water.WaterTag;
+
+import java.util.List;
 
 /**
  * <p>
@@ -14,10 +17,17 @@ import com.fjhx.entity.contract.ContractDetails;
 public interface ContractDetailsService extends StorageBaseService<ContractDetails> {
 
     /**
-     * 修改合同明细出货数量
+     * 更新合同明细出货数量
      *
      * @param waterBatchId 合同批次id
      */
     void updateShipmentQuantity(Long waterBatchId);
 
+    /**
+     * 更新合同到货数量和在途数量
+     *
+     * @param waterTagList 入库标签列表
+     */
+    void updateAfloatAndArrivalQuantity(List<WaterTag> waterTagList);
+
 }

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

@@ -3,15 +3,27 @@ package com.fjhx.service.contract.impl;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fjhx.base.StorageBaseEntity;
+import com.fjhx.constants.StatusConstant;
+import com.fjhx.entity.contract.Contract;
 import com.fjhx.entity.contract.ContractDetails;
 import com.fjhx.entity.water.WaterBatch;
+import com.fjhx.entity.water.WaterTag;
+import com.fjhx.enums.ContractStatusEnum;
+import com.fjhx.enums.PurchaseProgressEnum;
 import com.fjhx.mapper.contract.ContractDetailsMapper;
 import com.fjhx.service.contract.ContractDetailsService;
+import com.fjhx.service.contract.ContractService;
 import com.fjhx.service.water.WaterBatchService;
+import com.fjhx.utils.BigDecimalUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -27,6 +39,9 @@ public class ContractDetailsServiceImpl extends ServiceImpl<ContractDetailsMappe
     @Autowired
     private WaterBatchService waterBatchService;
 
+    @Autowired
+    private ContractService contractService;
+
     @Override
     public synchronized void updateShipmentQuantity(Long waterBatchId) {
         WaterBatch waterBatch = waterBatchService.getById(waterBatchId);
@@ -39,5 +54,66 @@ public class ContractDetailsServiceImpl extends ServiceImpl<ContractDetailsMappe
         update(Wrappers.<ContractDetails>lambdaUpdate()
                 .eq(StorageBaseEntity::getId, contractDetails.getId())
                 .set(ContractDetails::getShipmentQuantity, shipmentQuantity.add(waterBatch.getTagQuantitySum())));
+
+        // TODO 出库数量大于百分之95,应供应商出货状态已完成,合同出货状态已完成
+    }
+
+    @Override
+    public synchronized void updateAfloatAndArrivalQuantity(List<WaterTag> waterTagList) {
+
+        // 统计出每个合同明细id的变更数量
+        Map<Long, BigDecimal> map = waterTagList.stream()
+                .filter(waterTag -> waterTag.getPurchaseProgress() < PurchaseProgressEnum.WAREHOUSING.getType())
+                .collect(Collectors.toMap(
+                        WaterTag::getContractDetailsId,
+                        WaterTag::getQuantity,
+                        BigDecimal::add
+                ));
+
+        if (map.size() == 0) return;
+
+        // 获取合同明细
+        List<ContractDetails> contractDetailsList = listByIds(map.keySet());
+
+        Date date = new Date();
+
+        List<Contract> contractList = new ArrayList<>();
+
+        for (ContractDetails contractDetails : contractDetailsList) {
+
+            // 入库数量
+            BigDecimal changeQuantity = map.get(contractDetails.getId());
+
+            // 采购数量
+            BigDecimal quantity = contractDetails.getQuantity();
+
+            // 更新到货数量
+            BigDecimal arrivalQuantity = contractDetails.getArrivalQuantity().add(changeQuantity);
+            contractDetails.setArrivalQuantity(arrivalQuantity);
+
+            // 更新在途数量
+            BigDecimal afloatQuantity = contractDetails.getAfloatQuantity().subtract(changeQuantity);
+            afloatQuantity = BigDecimalUtil.max(afloatQuantity, BigDecimal.ZERO);
+            contractDetails.setAfloatQuantity(afloatQuantity);
+
+            // 如果到货数量大于等于采购数量的百分之95,合同状态改为已完成
+            if (BigDecimalUtil.ge(arrivalQuantity, quantity.multiply(new BigDecimal("0.95")))) {
+                contractDetails.setCompleteTime(date);
+                contractDetails.setCompleteStatus(StatusConstant.YES);
+
+                // TODO 更新合同表(目前合同和明细为 1对1 关系,合同完成直接更新明细即可)
+                Contract contract = new Contract();
+                contract.setStatus(ContractStatusEnum.COMPLETED.getType());
+                contract.setShipmentStatus(StatusConstant.YES);
+                contractList.add(contract);
+            }
+
+        }
+
+        updateBatchById(contractDetailsList);
+        if (contractList.size() > 0) {
+            contractService.updateBatchById(contractList);
+        }
+
     }
 }

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

@@ -105,6 +105,7 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract> i
             contractDetails.setAfloatQuantity(quantity);
             contractDetails.setAdjustQuantity(quantity);
             contractDetails.setBackQuantity(BigDecimal.ZERO);
+            contractDetails.setCompleteStatus(StatusConstant.NO);
             contractDetailsList.add(contractDetails);
         }
         contractDetailsService.saveBatch(contractDetailsList);

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

@@ -9,6 +9,7 @@ import com.fjhx.enums.InTypeEnum;
 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.stock.StockService;
 import com.fjhx.service.water.WaterDetailService;
 import com.fjhx.service.water.WaterService;
@@ -41,6 +42,9 @@ public class WaterServiceImpl extends ServiceImpl<WaterMapper, Water> implements
     @Autowired
     private StockService stockService;
 
+    @Autowired
+    private ContractDetailsService contractDetailsService;
+
     @Transactional(rollbackFor = Exception.class)
     @Override
     public void add(WaterVo waterVo) {
@@ -69,8 +73,10 @@ public class WaterServiceImpl extends ServiceImpl<WaterMapper, Water> implements
         // 修改标签在库信息
         waterTagService.editInHouse(typeEnum, waterTagList, waterVo.getStockHouseId());
 
-        // 如果是入库,标签不是本场入库状态,则更新统计信息
-
+        // 如果是入库且标签不是本场入库状态,则更新合同到货数量和在途数量
+        if (typeEnum instanceof InTypeEnum) {
+            contractDetailsService.updateAfloatAndArrivalQuantity(waterTagList);
+        }
 
     }
 

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

@@ -13,7 +13,7 @@ import com.fjhx.constants.StatusConstant;
 import com.fjhx.entity.contract.Contract;
 import com.fjhx.entity.water.WaterBatch;
 import com.fjhx.entity.water.WaterTag;
-import com.fjhx.enums.CheckStateEnum;
+import com.fjhx.enums.CheckStatusEnum;
 import com.fjhx.enums.InTypeEnum;
 import com.fjhx.enums.PurchaseProgressEnum;
 import com.fjhx.mapper.water.WaterTagMapper;
@@ -312,7 +312,7 @@ public class WaterTagServiceImpl extends ServiceImpl<WaterTagMapper, WaterTag> i
         waterTagTemp.setHadPrinter(StatusConstant.NO);
         waterTagTemp.setHadShipment(StatusConstant.NO);
         waterTagTemp.setPurchaseProgress(PurchaseProgressEnum.CODING.getType());
-        waterTagTemp.setCheckState(CheckStateEnum.NO_QUALITY_INSPECTION.getType());
+        waterTagTemp.setCheckStatus(CheckStatusEnum.NO_QUALITY_INSPECTION.getType());
         waterTagTemp.setInHouse(StatusConstant.NO);
         return waterTagTemp;
     }

+ 20 - 0
hx-service/storage/src/main/java/com/fjhx/stock/controller/StockTransferController.java

@@ -1,6 +1,7 @@
 package com.fjhx.stock.controller;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.base.Condition;
 import com.fjhx.entity.stock.StockTransfer;
 import com.fjhx.params.stock.StockTransferVo;
 import com.fjhx.stock.service.StockTransferService;
@@ -53,5 +54,24 @@ public class StockTransferController {
         return R.success();
     }
 
+    @PostMapping("/delete")
+    public R delete(@RequestBody StockTransfer stockTransfer) {
+        stockTransferService.removeById(stockTransfer.getId());
+        return R.success();
+    }
+
+    @PostMapping("/webStatistics")
+    public R webStatistics(@RequestBody Condition condition) {
+        Map<String, Object> result = stockTransferService.webStatistics(condition);
+        return R.success(result);
+    }
+
+    @PostMapping("/webPage")
+    public R webPage(@RequestBody Condition condition) {
+        Page<Map<String, Object>> page = stockTransferService.webPage(condition);
+        return R.success(page);
+    }
+
+
 }
 

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

@@ -23,4 +23,8 @@ public interface StockTransferMapper extends BaseMapper<StockTransfer> {
 
     StockTransferVo StockTransferVo(@Param("id") Long id);
 
+    Map<String, Object> webStatistics(@Param("ew") QueryWrapper<?> wrapper);
+
+    Page<Map<String, Object>> webPage(@Param("page") Page<Object> page, @Param("ew") QueryWrapper<?> wrapper);
+
 }

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

@@ -33,4 +33,35 @@
         where st.id = #{id}
     </select>
 
+    <select id="webStatistics" resultType="java.util.Map">
+        select ifnull(count(0), 0)                                    count,
+               ifnull(sum(std.quantity), 0)                           quantity,
+               round(ifnull(sum(std.quantity * m.Width / 100), 0), 2) area,
+               round(ifnull(sum(std.quantity * m.Price), 0), 2)       Price
+        from stock_transfer st
+                 left join stock_transfer_details std on st.id = std.stock_transfer_id
+                 left join material m on std.material_id = m.id
+                 left join u_user uu on st.receive_user = uu.ID
+                 left join acc_account aa on st.submit_user = aa.AccountNo
+                 left join u_user uu2 on aa.ID = uu2.ID
+            ${ew.customSqlSegment}
+    </select>
+
+
+    <select id="webPage" resultType="java.util.Map">
+        select st.submit_time,
+               uu.RealName                              receiveUser,
+               uu2.RealName                             submitUser,
+               m.name                                   materialName,
+               std.quantity,
+               round((std.quantity * m.Width / 100), 2) area
+        from stock_transfer st
+                 left join stock_transfer_details std on st.id = std.stock_transfer_id
+                 left join material m on std.material_id = m.id
+                 left join u_user uu on st.receive_user = uu.ID
+                 left join acc_account aa on st.submit_user = aa.AccountNo
+                 left join u_user uu2 on aa.ID = uu2.ID
+            ${ew.customSqlSegment}
+    </select>
+
 </mapper>

+ 5 - 0
hx-service/storage/src/main/java/com/fjhx/stock/service/StockTransferService.java

@@ -1,6 +1,7 @@
 package com.fjhx.stock.service;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.base.Condition;
 import com.fjhx.entity.stock.StockTransfer;
 import com.fjhx.params.stock.StockTransferVo;
 import com.fjhx.base.BaseService;
@@ -26,4 +27,8 @@ public interface StockTransferService extends BaseService<StockTransfer> {
 
     void check(StockTransferVo stockTransferVo);
 
+    Map<String, Object> webStatistics(Condition condition);
+
+    Page<Map<String, Object>> webPage(Condition condition);
+
 }

+ 2 - 0
hx-service/storage/src/main/java/com/fjhx/stock/service/impl/StockBackPlanServiceImpl.java

@@ -136,6 +136,7 @@ public class StockBackPlanServiceImpl extends ServiceImpl<StockBackPlanMapper, S
         List<Map<String, Object>> transferPickingList = baseMapper.getTransferPickingList(Wrappers.query()
                 .ge("st.submit_time", DateUtil.format(beginDate, "yyyy-MM-dd 7:30:00"))
                 .eq("st.status", StatusConstant.YES)
+                .eq("st.del_flag", 0)
         );
         pickingList.addAll(transferPickingList);
 
@@ -198,6 +199,7 @@ public class StockBackPlanServiceImpl extends ServiceImpl<StockBackPlanMapper, S
         List<Map<String, Object>> transferBackList = baseMapper.getTransferBackList(Wrappers.query()
                 .ge("st.submit_time", DateUtil.format(beginDate, "yyyy-MM-dd 10:00:00"))
                 .eq("st.status", StatusConstant.YES)
+                .eq("st.del_flag", 0)
         );
         backList.addAll(transferBackList);
 

+ 32 - 0
hx-service/storage/src/main/java/com/fjhx/stock/service/impl/StockTransferServiceImpl.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.base.Condition;
 import com.fjhx.constants.StatusConstant;
 import com.fjhx.entity.stock.StockTransfer;
 import com.fjhx.entity.stock.StockTransferDetails;
@@ -13,6 +14,7 @@ import com.fjhx.stock.mapper.StockTransferMapper;
 import com.fjhx.stock.service.StockTransferDetailsService;
 import com.fjhx.stock.service.StockTransferService;
 import com.fjhx.utils.Assert;
+import com.fjhx.utils.WrapperUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -126,4 +128,34 @@ public class StockTransferServiceImpl extends ServiceImpl<StockTransferMapper, S
         stockTransferDetailsService.saveOrUpdateBatch(stockTransferDetailsList);
     }
 
+    @Override
+    public Map<String, Object> webStatistics(Condition condition) {
+        QueryWrapper<?> wrapper = WrapperUtil.init(condition)
+                .periodOfTime("st.submit_time")
+                .notDelete("st")
+                .getWrapper();
+
+        String userId = condition.getStr("userId");
+
+        wrapper.and(userId != null, q -> q.eq("uu.ID", userId).or().eq("uu2.ID", userId))
+                .eq("st.status", StatusConstant.YES);
+
+        return baseMapper.webStatistics(wrapper);
+    }
+
+    @Override
+    public Page<Map<String, Object>> webPage(Condition condition) {
+        QueryWrapper<?> wrapper = WrapperUtil.init(condition)
+                .periodOfTime("st.submit_time")
+                .notDelete("st")
+                .getWrapper();
+
+        String userId = condition.getStr("userId");
+
+        wrapper.and(userId != null, q -> q.eq("uu.ID", userId).or().eq("uu2.ID", userId))
+                .eq("st.status", StatusConstant.YES);
+
+        return baseMapper.webPage(condition.getPage(), wrapper);
+    }
+
 }