home 2 rokov pred
rodič
commit
54d09ca9de
32 zmenil súbory, kde vykonal 875 pridanie a 75 odobranie
  1. 3 1
      bladex/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserMapper.xml
  2. 7 0
      hx-common/common-client-util/src/main/java/com/fjhx/utils/UserClientUtil.java
  3. 9 0
      hx-common/common-tool/src/main/java/com/fjhx/base/Condition.java
  4. 1 1
      hx-service-api/storage-restructure-api/src/main/java/com/fjhx/base/StorageBaseService.java
  5. 10 0
      hx-service-api/storage-restructure-api/src/main/java/com/fjhx/entity/apply/ApplyPurchaseDetails.java
  6. 117 0
      hx-service-api/storage-restructure-api/src/main/java/com/fjhx/entity/stock/StockTag.java
  7. 92 0
      hx-service-api/storage-restructure-api/src/main/java/com/fjhx/entity/water/WaterDetail.java
  8. 17 0
      hx-service-api/storage-restructure-api/src/main/java/com/fjhx/params/stock/StockTagEx.java
  9. 17 0
      hx-service-api/storage-restructure-api/src/main/java/com/fjhx/params/stock/StockTagVo.java
  10. 17 0
      hx-service-api/storage-restructure-api/src/main/java/com/fjhx/params/water/WaterDetailEx.java
  11. 17 0
      hx-service-api/storage-restructure-api/src/main/java/com/fjhx/params/water/WaterDetailVo.java
  12. 5 0
      hx-service/storage-restructure/pom.xml
  13. 23 1
      hx-service/storage-restructure/src/main/java/com/fjhx/controller/apply/ApplyPurchaseController.java
  14. 56 0
      hx-service/storage-restructure/src/main/java/com/fjhx/controller/stock/StockTagController.java
  15. 0 2
      hx-service/storage-restructure/src/main/java/com/fjhx/controller/supplier/SupplierPriceController.java
  16. 56 0
      hx-service/storage-restructure/src/main/java/com/fjhx/controller/water/WaterDetailController.java
  17. 6 1
      hx-service/storage-restructure/src/main/java/com/fjhx/mapper/apply/ApplyPurchaseMapper.java
  18. 34 0
      hx-service/storage-restructure/src/main/java/com/fjhx/mapper/apply/ApplyPurchaseMapper.xml
  19. 16 0
      hx-service/storage-restructure/src/main/java/com/fjhx/mapper/stock/StockTagMapper.java
  20. 5 0
      hx-service/storage-restructure/src/main/java/com/fjhx/mapper/stock/StockTagMapper.xml
  21. 16 0
      hx-service/storage-restructure/src/main/java/com/fjhx/mapper/water/WaterDetailMapper.java
  22. 5 0
      hx-service/storage-restructure/src/main/java/com/fjhx/mapper/water/WaterDetailMapper.xml
  23. 4 1
      hx-service/storage-restructure/src/main/java/com/fjhx/service/apply/ApplyPurchaseService.java
  24. 166 67
      hx-service/storage-restructure/src/main/java/com/fjhx/service/apply/impl/ApplyPurchaseServiceImpl.java
  25. 3 0
      hx-service/storage-restructure/src/main/java/com/fjhx/service/flow/InitiateApplyFlowService.java
  26. 3 0
      hx-service/storage-restructure/src/main/java/com/fjhx/service/flow/MaterialUpdateFlowService.java
  27. 3 0
      hx-service/storage-restructure/src/main/java/com/fjhx/service/flow/SupplierPriceUpdateFlow.java
  28. 28 0
      hx-service/storage-restructure/src/main/java/com/fjhx/service/stock/StockTagService.java
  29. 54 0
      hx-service/storage-restructure/src/main/java/com/fjhx/service/stock/impl/StockTagServiceImpl.java
  30. 28 0
      hx-service/storage-restructure/src/main/java/com/fjhx/service/water/WaterDetailService.java
  31. 54 0
      hx-service/storage-restructure/src/main/java/com/fjhx/service/water/impl/WaterDetailServiceImpl.java
  32. 3 1
      hx-service/storage/src/main/java/com/fjhx/stock/service/impl/StockDetailServiceImpl.java

+ 3 - 1
bladex/blade-service/blade-user/src/main/java/org/springblade/system/user/mapper/UserMapper.xml

@@ -88,9 +88,11 @@
     <select id="getUserNameAndPostByUserId" resultType="java.util.Map">
         select bu.id                      userId,
                bu.real_name               userName,
-               group_concat(bp.post_name) postName
+               group_concat(bp.post_name) postName,
+               group_concat(bd.dept_name) deptName
         from blade_user bu
                  left join blade_post bp on bu.post_id like bp.id
+                 left join blade_dept bd on bu.dept_id like bd.id
             ${ew.customSqlSegment}
     </select>
 

+ 7 - 0
hx-common/common-client-util/src/main/java/com/fjhx/utils/UserClientUtil.java

@@ -81,6 +81,13 @@ public class UserClientUtil {
     }
 
 
+    public static <T> Map<Long, Map<String, Object>> getUserNameAndPostFunctionLong(List<T> list, Function<T, Long> mapper) {
+        List<Long> userIdList = list.stream().map(mapper)
+                .distinct().filter(Objects::nonNull)
+                .collect(Collectors.toList());
+        return getUserNameAndPostByUserId(userIdList);
+    }
+
     /**
      * 通过用户id获取用户名称以及岗位名称
      */

+ 9 - 0
hx-common/common-tool/src/main/java/com/fjhx/base/Condition.java

@@ -63,6 +63,15 @@ public class Condition extends HashMap<String, Object> {
     }
 
     /**
+     * 获取字符串
+     */
+    public String getStr(String str, String error) {
+        Object value = super.get(str);
+        Assert.notEmpty(value, error);
+        return value.toString();
+    }
+
+    /**
      * 获取int
      */
     public Integer getInt(String str) {

+ 1 - 1
hx-service-api/storage-restructure-api/src/main/java/com/fjhx/base/StorageBaseService.java

@@ -57,7 +57,7 @@ public interface StorageBaseService<T> extends IService<T> {
      * @param queryWrapper wrapper
      * @return 分页后的对象
      */
-    default Page<Map<String, Object>> pageMaps(Map<String, String> condition, Wrapper<T> queryWrapper) {
+    default Page<Map<String, Object>> pageMaps(Map<String, ?> condition, Wrapper<T> queryWrapper) {
         Page<Map<String, Object>> page = createPageMap(condition);
         return pageMaps(page, queryWrapper);
     }

+ 10 - 0
hx-service-api/storage-restructure-api/src/main/java/com/fjhx/entity/apply/ApplyPurchaseDetails.java

@@ -38,6 +38,16 @@ public class ApplyPurchaseDetails extends StorageBaseEntity {
     private BigDecimal quantity;
 
     /**
+     * 到货数量
+     */
+    private BigDecimal arrivalQuantity;
+
+    /**
+     * 在途数量
+     */
+    private BigDecimal afloatQuantity;
+
+    /**
      * 用途
      */
     private String purpose;

+ 117 - 0
hx-service-api/storage-restructure-api/src/main/java/com/fjhx/entity/stock/StockTag.java

@@ -0,0 +1,117 @@
+package com.fjhx.entity.stock;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.Version;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.fjhx.base.StorageBaseEntity;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 标签
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-09-16
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class StockTag extends StorageBaseEntity {
+
+
+    /**
+     * 物料id
+     */
+    private Long materialId;
+
+    /**
+     * 物料数量
+     */
+    private BigDecimal quantity;
+
+    /**
+     * 单价
+     */
+    private BigDecimal price;
+
+    /**
+     * 二维码
+     */
+    private String qrCode;
+
+    /**
+     * rfid
+     */
+    private String rfidCode;
+
+    /**
+     * 合同批次id
+     */
+    private Long contractBatchId;
+
+    /**
+     * 已打印
+     */
+    private Integer hadPrinter;
+
+    /**
+     * 已出货
+     */
+    private Integer hadShipment;
+
+    /**
+     * 采购进度 (0供应商打码,1供应商出货,2到货贴标,3本厂入库,4现场回仓)
+     */
+    private Integer purchaseProgress;
+
+    /**
+     * 质检状态 (0未质检,1已质检,2无需质检)
+     */
+    private Integer checkState;
+
+    /**
+     * 仓库ID
+     */
+    private Long stockHouseId;
+
+    /**
+     * 放置区域
+     */
+    private Long stockAreaId;
+
+    /**
+     * 是否确认在库
+     */
+    private Integer inHouse;
+
+    /**
+     * 贴标人
+     */
+    private Long labelUserId;
+
+    /**
+     * 入库id
+     */
+    private Long waterBillId;
+
+    /**
+     * 入库编号
+     */
+    private String waterBillCode;
+
+    /**
+     * 逻辑删除 0未删除 1已删除
+     */
+    @TableField(fill = FieldFill.INSERT)
+    @TableLogic
+    private Integer delFlag;
+
+    private String oldId;
+
+
+}

+ 92 - 0
hx-service-api/storage-restructure-api/src/main/java/com/fjhx/entity/water/WaterDetail.java

@@ -0,0 +1,92 @@
+package com.fjhx.entity.water;
+
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.Version;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.fjhx.base.StorageBaseEntity;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableField;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * <p>
+ * 流水明细表
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-09-16
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class WaterDetail extends StorageBaseEntity {
+
+
+    /**
+     * 流水id
+     */
+    private Long stockWaterId;
+
+    /**
+     * 批次id
+     */
+    private Long contractBatchId;
+
+    /**
+     * 标签id
+     */
+    private Long stockTagId;
+
+    /**
+     * 操作人
+     */
+    private Long operUserId;
+
+    /**
+     * 物料id
+     */
+    private Long materialId;
+
+    /**
+     * 数量
+     */
+    private BigDecimal quantity;
+
+    /**
+     * 二维码
+     */
+    private String qrCode;
+
+    /**
+     * rfid
+     */
+    private String rfidCode;
+
+    /**
+     * 单价
+     */
+    private BigDecimal price;
+
+    /**
+     * 库存变更类型 (6库存初始化,10入库,11盘盈,12数量添加修正,13补入库,14标签损坏入库,15归还入库,16现场回仓,17调仓入库,20出库,21盘亏,22数量减少修正,23补出库,24绑定错误,25标签损坏出库,26退货出库,27报废出库,28调仓出库)
+     */
+    private Integer type;
+
+    /**
+     * 出入库设备 (0一体机,1手持机,2web端)
+     */
+    private Integer device;
+
+    /**
+     * 逻辑删除 0未删除 1已删除
+     */
+    @TableField(fill = FieldFill.INSERT)
+    @TableLogic
+    private Integer delFlag;
+
+    private String oldId;
+
+
+}

+ 17 - 0
hx-service-api/storage-restructure-api/src/main/java/com/fjhx/params/stock/StockTagEx.java

@@ -0,0 +1,17 @@
+package com.fjhx.params.stock;
+
+import com.fjhx.entity.stock.StockTag;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 标签
+ *
+ * @author ${author}
+ * @since 2022-09-16
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class StockTagEx extends StockTag {
+
+}

+ 17 - 0
hx-service-api/storage-restructure-api/src/main/java/com/fjhx/params/stock/StockTagVo.java

@@ -0,0 +1,17 @@
+package com.fjhx.params.stock;
+
+import com.fjhx.entity.stock.StockTag;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 标签
+ *
+ * @author ${author}
+ * @since 2022-09-16
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class StockTagVo extends StockTag {
+
+}

+ 17 - 0
hx-service-api/storage-restructure-api/src/main/java/com/fjhx/params/water/WaterDetailEx.java

@@ -0,0 +1,17 @@
+package com.fjhx.params.water;
+
+import com.fjhx.entity.water.WaterDetail;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 流水明细表
+ *
+ * @author ${author}
+ * @since 2022-09-16
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class WaterDetailEx extends WaterDetail {
+
+}

+ 17 - 0
hx-service-api/storage-restructure-api/src/main/java/com/fjhx/params/water/WaterDetailVo.java

@@ -0,0 +1,17 @@
+package com.fjhx.params.water;
+
+import com.fjhx.entity.water.WaterDetail;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * 流水明细表
+ *
+ * @author ${author}
+ * @since 2022-09-16
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class WaterDetailVo extends WaterDetail {
+
+}

+ 5 - 0
hx-service/storage-restructure/pom.xml

@@ -38,6 +38,11 @@
             <artifactId>service-flow-api</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>com.fjhx</groupId>
+            <artifactId>common-client-util</artifactId>
+        </dependency>
+
     </dependencies>
 
 </project>

+ 23 - 1
hx-service/storage-restructure/src/main/java/com/fjhx/controller/apply/ApplyPurchaseController.java

@@ -4,9 +4,9 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.base.Condition;
 import com.fjhx.params.JumpVo;
 import com.fjhx.params.apply.ApplyPurchaseVo;
+import com.fjhx.service.apply.ApplyPurchaseService;
 import com.fjhx.service.flow.InitiateApplyFlowService;
 import org.springblade.core.tool.api.R;
-import com.fjhx.service.apply.ApplyPurchaseService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -70,11 +70,33 @@ public class ApplyPurchaseController {
         return R.success(result);
     }
 
+    /**
+     * 物料申购
+     */
     @PostMapping("/page")
     public R page(@RequestBody Condition condition) {
         Page<Map<String, Object>> result = applyPurchaseService.getPage(condition);
         return R.success(result);
     }
 
+    /**
+     * 申购单分页
+     */
+    @PostMapping("/applyPurchasePage")
+    public R applyPurchasePage(@RequestBody Condition condition) {
+        Page<Map<String, Object>> result = applyPurchaseService.getApplyPurchasePage(condition);
+        return R.success(result);
+    }
+
+    /**
+     * 根据申购id获取申购明细
+     */
+    @PostMapping("/applyPurchaseDetailsList")
+    public R applyPurchaseDetailsList(@RequestBody Condition condition) {
+        List<Map<String, Object>> result = applyPurchaseService.getApplyPurchaseDetailsList(condition);
+        return R.success(result);
+    }
+
+
 }
 

+ 56 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/controller/stock/StockTagController.java

@@ -0,0 +1,56 @@
+package com.fjhx.controller.stock;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springblade.core.tool.api.R;
+import com.fjhx.entity.stock.StockTag;
+import com.fjhx.params.stock.StockTagVo;
+import com.fjhx.service.stock.StockTagService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 标签 前端控制器
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-09-16
+ */
+@RestController
+@RequestMapping("/stockTag")
+public class StockTagController {
+
+    @Autowired
+    private StockTagService stockTagService;
+
+    @PostMapping("/page")
+    public R page(@RequestBody Map<String, String> condition){
+        Page<StockTag> result = stockTagService.getPage(condition);
+        return R.success(result);
+    }
+
+    @PostMapping("/add")
+    public R add(@RequestBody StockTagVo stockTagVo){
+        stockTagService.add(stockTagVo);
+        return R.success();
+    }
+
+    @PostMapping("/edit")
+    public R edit(@RequestBody StockTagVo stockTagVo){
+        stockTagService.edit(stockTagVo);
+        return R.success();
+    }
+
+    @PostMapping("/delete")
+    public R delete(@RequestBody StockTagVo stockTagVo){
+        stockTagService.delete(stockTagVo);
+        return R.success();
+    }
+
+}
+

+ 0 - 2
hx-service/storage-restructure/src/main/java/com/fjhx/controller/supplier/SupplierPriceController.java

@@ -52,14 +52,12 @@ public class SupplierPriceController {
         return R.success();
     }
 
-    @Transactional(rollbackFor = Exception.class)
     @PostMapping("/updateFlowCreate")
     public R updateFlowCreate(@RequestBody SupplierPriceVo supplierPriceVo) {
         supplierPriceUpdateFlow.create(supplierPriceVo);
         return R.success();
     }
 
-    @Transactional(rollbackFor = Exception.class)
     @PostMapping("/updateFlowJump")
     public R updateFlowJump(@RequestBody JumpVo jumpVo) {
         supplierPriceUpdateFlow.jump(jumpVo);

+ 56 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/controller/water/WaterDetailController.java

@@ -0,0 +1,56 @@
+package com.fjhx.controller.water;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.springblade.core.tool.api.R;
+import com.fjhx.entity.water.WaterDetail;
+import com.fjhx.params.water.WaterDetailVo;
+import com.fjhx.service.water.WaterDetailService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 流水明细表 前端控制器
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-09-16
+ */
+@RestController
+@RequestMapping("/waterDetail")
+public class WaterDetailController {
+
+    @Autowired
+    private WaterDetailService waterDetailService;
+
+    @PostMapping("/page")
+    public R page(@RequestBody Map<String, String> condition){
+        Page<WaterDetail> result = waterDetailService.getPage(condition);
+        return R.success(result);
+    }
+
+    @PostMapping("/add")
+    public R add(@RequestBody WaterDetailVo waterDetailVo){
+        waterDetailService.add(waterDetailVo);
+        return R.success();
+    }
+
+    @PostMapping("/edit")
+    public R edit(@RequestBody WaterDetailVo waterDetailVo){
+        waterDetailService.edit(waterDetailVo);
+        return R.success();
+    }
+
+    @PostMapping("/delete")
+    public R delete(@RequestBody WaterDetailVo waterDetailVo){
+        waterDetailService.delete(waterDetailVo);
+        return R.success();
+    }
+
+}
+

+ 6 - 1
hx-service/storage-restructure/src/main/java/com/fjhx/mapper/apply/ApplyPurchaseMapper.java

@@ -1,8 +1,9 @@
 package com.fjhx.mapper.apply;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.fjhx.entity.apply.ApplyPurchase;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.entity.apply.ApplyPurchase;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -22,4 +23,8 @@ public interface ApplyPurchaseMapper extends BaseMapper<ApplyPurchase> {
 
     List<Map<String, Object>> flowStatistics(@Param("ew") QueryWrapper<Object> wrapper);
 
+    Page<Map<String, Object>> getPage(@Param("page") Page<ApplyPurchase> page, @Param("ew") QueryWrapper<Object> wrapper);
+
+    List<Map<String, Object>> getApplyPurchaseDetailsList(@Param("page") Page<ApplyPurchase> page, @Param("applyPurchaseId") String applyPurchaseId);
+
 }

+ 34 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/mapper/apply/ApplyPurchaseMapper.xml

@@ -21,4 +21,38 @@
             ${ew.customSqlSegment}
     </select>
 
+    <select id="getPage" resultType="java.util.LinkedHashMap">
+        select m.id                  materialId,
+               m.code                materialCode,
+               m.name                materialName,
+               m.spec                materialSpec,
+               apd.create_time       applyTime,
+               apd.quantity          applyQuantity,
+               ifnull(s.quantity, 0) stockQuantity,
+               apd.afloat_quantity   afloatQuantity,
+               m.safety_stock        safetyStock,
+               apd.purpose           purpose,
+               ap.remark             remark,
+               c.flow_status         flowStatus
+        from apply_purchase_details apd
+                 left join apply_purchase ap on apd.apply_purchase_id = ap.id
+                 left join material m on apd.material_id = m.id
+                 left join stock s on s.material_id = m.id
+                 left join contract_details cd on apd.id = cd.apply_purchase_details_id
+                 left join contract c on c.id = cd.contract_id
+            ${ew.customSqlSegment}
+    </select>
+
+    <select id="getApplyPurchaseDetailsList" resultType="java.util.Map">
+        select m.name materialName,
+               m.code materialCode,
+               m.spec materialSpec,
+               m.unit materialUnit,
+               apd.quantity,
+               apd.purpose
+        from apply_purchase_details apd
+                 left join material m on apd.material_id = m.id
+        where apd.apply_purchase_id = #{applyPurchaseId}
+    </select>
+
 </mapper>

+ 16 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/mapper/stock/StockTagMapper.java

@@ -0,0 +1,16 @@
+package com.fjhx.mapper.stock;
+
+import com.fjhx.entity.stock.StockTag;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 标签 Mapper 接口
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-09-16
+ */
+public interface StockTagMapper extends BaseMapper<StockTag> {
+
+}

+ 5 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/mapper/stock/StockTagMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fjhx.mapper.stock.StockTagMapper">
+
+</mapper>

+ 16 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/mapper/water/WaterDetailMapper.java

@@ -0,0 +1,16 @@
+package com.fjhx.mapper.water;
+
+import com.fjhx.entity.water.WaterDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 流水明细表 Mapper 接口
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-09-16
+ */
+public interface WaterDetailMapper extends BaseMapper<WaterDetail> {
+
+}

+ 5 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/mapper/water/WaterDetailMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fjhx.mapper.water.WaterDetailMapper">
+
+</mapper>

+ 4 - 1
hx-service/storage-restructure/src/main/java/com/fjhx/service/apply/ApplyPurchaseService.java

@@ -3,7 +3,6 @@ package com.fjhx.service.apply;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.fjhx.base.Condition;
 import com.fjhx.entity.apply.ApplyPurchase;
-import com.fjhx.params.apply.ApplyPurchaseVo;
 import com.fjhx.base.StorageBaseService;
 
 import java.util.List;
@@ -27,4 +26,8 @@ public interface ApplyPurchaseService extends StorageBaseService<ApplyPurchase>
 
     Page<Map<String, Object>> getPage(Condition condition);
 
+    Page<Map<String, Object>> getApplyPurchasePage(Condition condition);
+
+    List<Map<String, Object>> getApplyPurchaseDetailsList(Condition condition);
+
 }

+ 166 - 67
hx-service/storage-restructure/src/main/java/com/fjhx/service/apply/impl/ApplyPurchaseServiceImpl.java

@@ -3,15 +3,24 @@ package com.fjhx.service.apply.impl;
 import cn.hutool.core.convert.Convert;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 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.base.StorageBaseEntity;
+import com.fjhx.constants.StatusConstant;
 import com.fjhx.entity.apply.ApplyPurchase;
+import com.fjhx.entity.stock.StockTag;
+import com.fjhx.entity.water.WaterDetail;
 import com.fjhx.mapper.apply.ApplyPurchaseMapper;
 import com.fjhx.service.apply.ApplyPurchaseService;
+import com.fjhx.service.stock.StockTagService;
+import com.fjhx.service.water.WaterDetailService;
 import com.fjhx.utils.BigDecimalUtil;
+import com.fjhx.utils.UserClientUtil;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
@@ -29,6 +38,12 @@ import java.util.stream.Collectors;
 @Service
 public class ApplyPurchaseServiceImpl extends ServiceImpl<ApplyPurchaseMapper, ApplyPurchase> implements ApplyPurchaseService {
 
+    @Autowired
+    private StockTagService stockTagService;
+
+    @Autowired
+    private WaterDetailService waterDetailService;
+
     @Override
     public String getCode() {
         return "PB-" + DateUtil.format(new Date(), "yyMMdd-HHmmss-SSS");
@@ -152,73 +167,79 @@ public class ApplyPurchaseServiceImpl extends ServiceImpl<ApplyPurchaseMapper, A
                 .orderByAsc("pc.PurContractState")
                 .orderByDesc("ap.CreatedTime");
 
-//        Page<Map<String, Object>> page = baseMapper.getPage(createPage(condition), wrapper);
-//
-//        List<Map<String, Object>> records = page.getRecords();
-//        if (records.size() == 0) {
-//            return page;
-//        }
-
-//        // 获取物料编码集合
-//        List<String> materialCodeList = records.stream()
-//                .map(item -> item.get("materialCode").toString()).collect(Collectors.toList());
-//
-//        // 查询库存,最长滞留时间和滞留超过30天数量
-//        Date date = new Date();
-//        DateTime dateTime = DateUtil.offsetDay(date, -30);
-//        Map<String, Map<String, Object>> delayMap = baseMapper.selectDelay(
-//                dateTime,
-//                Wrappers.query().in("sd.MaterialCode", materialCodeList).groupBy("sd.MaterialCode")
-//        );
-//
-//        // 近30天消耗量
-//        Map<String, Object> consumeMap = stockWaterService.listMaps(
-//                Wrappers.<StockWater>query().select("sum(TotalQty) overUseQty", "MaterialCode materialCode")
-//                        .lambda()
-//                        .in(StockWater::getStockchangetype, 20, 23)
-//                        .gt(StockWater::getCreatedtime, dateTime)
-//                        .groupBy(StockWater::getMaterialcode)
-//        ).stream().collect(Collectors.toMap(
-//                item -> item.get("materialCode").toString(),
-//                item -> item.get("overUseQty")
-//        ));
-//
-//        for (Map<String, Object> record : records) {
-//            String materialCode = record.get("materialCode").toString();
-//            Map<String, Object> map = delayMap.get(materialCode);
-//
-//            if (map != null) {
-//                record.putAll(map);
-//                record.put("maxDelayTime", DateUtil.betweenDay(date, (Date) map.get("maxDelayTime"), true));
-//            }
-//
-//            record.putIfAbsent("stockQty", 0);
-//            record.putIfAbsent("maxDelayTime", 0);
-//            record.putIfAbsent("delayQuantity", 0);
-//
-//            Object overUseQty = consumeMap.get(materialCode);
-//            record.put("overUseQty", overUseQty == null ? BigDecimal.ZERO : overUseQty);
-//
-//            record.put("purchaseQty", BigDecimalUtil.keepDecimals(record.get("purchaseQty")));
-//            record.put("onWayQuantity", BigDecimalUtil.keepDecimals(record.get("onWayQuantity")));
-//
-//            int purContractState = Integer.parseInt(record.get("purContractState").toString());
-//            switch (purContractState) {
-//                case 0:
-//                    record.put("purContractState", "待确认");
-//                    break;
-//                case 1:
-//                    record.put("purContractState", "审批中");
-//                    break;
-//                case 2:
-//                    record.put("purContractState", "进行中");
-//                    break;
-//                case 3:
-//                    record.put("purContractState", "已完成");
-//            }
-//        }
-
-        return null;
+        Page<Map<String, Object>> page = baseMapper.getPage(createPage(condition), wrapper);
+
+        List<Map<String, Object>> records = page.getRecords();
+        if (records.size() == 0) {
+            return page;
+        }
+
+        // 获取物料id
+        List<Long> materialIdList = records.stream().map(item -> Convert.toLong(item.get("materialId")))
+                .distinct().collect(Collectors.toList());
+
+        Date date = new Date();
+
+        // 最长滞留时间
+        Map<Long, Long> maximumDetentionTimeMap = getMaximumDetentionTime(date, materialIdList);
+
+        // 滞留超过30天数量
+        Map<Long, BigDecimal> moreThanOneMonthMap = getMoreThanOneMonth(date, materialIdList);
+
+        // 近30天消耗量
+        Map<Long, BigDecimal> useOneMonthMap = getUseOneMonth(date, materialIdList);
+
+        for (Map<String, Object> record : records) {
+
+            Long materialId = Convert.toLong(record.get("materialId"));
+
+            // 赋值最长滞留周期
+            Long maxDelayTime = maximumDetentionTimeMap.get(materialId);
+            record.put("maxDelayTime", maxDelayTime == null ? 0 : maxDelayTime);
+
+            // 赋值滞留超过30天数量
+            BigDecimal delayQuantity = moreThanOneMonthMap.get(materialId);
+            record.put("delayQuantity", delayQuantity == null ? BigDecimal.ZERO : delayQuantity);
+
+            // 赋值近30天消耗量
+            BigDecimal useQuantity = useOneMonthMap.get(materialId);
+            record.put("useQuantity", useQuantity == null ? BigDecimal.ZERO : delayQuantity);
+        }
+
+        return page;
+    }
+
+    public Page<Map<String, Object>> getApplyPurchasePage(Condition condition) {
+        String keyword = condition.getKeyword();
+
+        LambdaQueryWrapper<ApplyPurchase> wrapper = Wrappers.<ApplyPurchase>lambdaQuery()
+                .like(ObjectUtil.isNotEmpty(keyword), ApplyPurchase::getCode, keyword);
+
+        Page<Map<String, Object>> page = pageMaps(condition, wrapper);
+
+        List<Map<String, Object>> records = page.getRecords();
+        if (records.size() == 0) {
+            return page;
+        }
+
+        Map<Long, Map<String, Object>> createUser = UserClientUtil
+                .getUserNameAndPostFunctionLong(records, item -> Convert.toLong(item.get("createUser")));
+
+        for (Map<String, Object> record : records) {
+            Long createUserId = Convert.toLong(record.get("createUser"));
+            Map<String, Object> map = createUser.get(createUserId);
+            if (map != null) {
+                record.putAll(map);
+            }
+        }
+
+        return page;
+    }
+
+    @Override
+    public List<Map<String, Object>> getApplyPurchaseDetailsList(Condition condition) {
+        String applyPurchaseId = condition.getStr("applyPurchaseId", "申购单id不能为空");
+        return baseMapper.getApplyPurchaseDetailsList(createPage(condition), applyPurchaseId);
     }
 
     /**
@@ -258,4 +279,82 @@ public class ApplyPurchaseServiceImpl extends ServiceImpl<ApplyPurchaseMapper, A
         return map;
     }
 
+    /**
+     * 获取最长滞留时间
+     *
+     * @param date           当前时间
+     * @param materialIdList 物料id列表
+     * @return map<物料id, 最长滞留时间>
+     */
+    private Map<Long, Long> getMaximumDetentionTime(Date date, List<Long> materialIdList) {
+
+        List<Map<String, Object>> list = stockTagService.listMaps(Wrappers.<StockTag>query()
+                .select("min(create_time) createTime")
+                .lambda()
+                .select(StockTag::getMaterialId)
+                .eq(StockTag::getInHouse, StatusConstant.YES)
+                .in(StockTag::getMaterialId, materialIdList)
+                .groupBy(StockTag::getMaterialId)
+        );
+
+        return list.stream().collect(Collectors.toMap(
+                item -> Convert.toLong(item.get("materialId")),
+                item -> DateUtil.betweenDay(date, Convert.toDate(item.get("createTime")), true)
+        ));
+
+    }
+
+    /**
+     * 滞留超过30天数量
+     *
+     * @param date           当前时间
+     * @param materialIdList 物料id列表
+     * @return map<物料id, 滞留超过30天数量>
+     */
+    private Map<Long, BigDecimal> getMoreThanOneMonth(Date date, List<Long> materialIdList) {
+
+
+        List<Map<String, Object>> list = stockTagService.listMaps(Wrappers.<StockTag>query()
+                .select("sum(quantity) delayQuantity")
+                .lambda()
+                .select(StockTag::getMaterialId)
+                .eq(StockTag::getInHouse, StatusConstant.YES)
+                .le(StorageBaseEntity::getCreateTime, DateUtil.offsetDay(date, -30))
+                .in(StockTag::getMaterialId, materialIdList)
+                .groupBy(StockTag::getMaterialId)
+        );
+
+        return list.stream().collect(Collectors.toMap(
+                item -> Convert.toLong(item.get("materialId")),
+                item -> Convert.toBigDecimal(item.get("delayQuantity"))
+        ));
+
+    }
+
+    /**
+     * 近30天使用量
+     *
+     * @param date           当前时间
+     * @param materialIdList 物料id列表
+     * @return map<物料id, 滞留超过30天数量>
+     */
+    private Map<Long, BigDecimal> getUseOneMonth(Date date, List<Long> materialIdList) {
+
+        List<Map<String, Object>> list = waterDetailService.listMaps(Wrappers.<WaterDetail>query()
+                .select("sum(quantity) useQuantity")
+                .lambda()
+                .select(WaterDetail::getMaterialId)
+                .ge(StorageBaseEntity::getCreateTime, DateUtil.offsetDay(date, -30))
+                .in(WaterDetail::getType, 20, 23)
+                .in(WaterDetail::getMaterialId, materialIdList)
+                .groupBy(WaterDetail::getMaterialId)
+        );
+
+        return list.stream().collect(Collectors.toMap(
+                item -> Convert.toLong(item.get("materialId")),
+                item -> Convert.toBigDecimal(item.get("useQuantity"))
+        ));
+
+    }
+
 }

+ 3 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/service/flow/InitiateApplyFlowService.java

@@ -11,6 +11,7 @@ import com.fjhx.utils.ExampleAbstract;
 import com.fjhx.utils.FlowConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 
@@ -57,6 +58,7 @@ public class InitiateApplyFlowService {
     });
 
 
+    @Transactional(rollbackFor = Exception.class)
     public void create(ApplyPurchaseVo applyPurchaseVo) {
 
         // 添加申购
@@ -75,6 +77,7 @@ public class InitiateApplyFlowService {
         flowConstructor.create(id, "发起申购", applyPurchaseVo.getRemark(), applyPurchaseVo);
     }
 
+    @Transactional(rollbackFor = Exception.class)
     public void jump(JumpVo jumpVo) {
         flowConstructor.jump(jumpVo);
     }

+ 3 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/service/flow/MaterialUpdateFlowService.java

@@ -7,6 +7,7 @@ import com.fjhx.utils.ExampleAbstract;
 import com.fjhx.utils.FlowConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * 物料修改审批
@@ -32,10 +33,12 @@ public class MaterialUpdateFlowService {
 
     });
 
+    @Transactional(rollbackFor = Exception.class)
     public void create(Material material) {
         flowConstructor.create(material.getId(), "物料修改", "", material);
     }
 
+    @Transactional(rollbackFor = Exception.class)
     public void jump(JumpVo jumpVo) {
         flowConstructor.jump(jumpVo);
     }

+ 3 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/service/flow/SupplierPriceUpdateFlow.java

@@ -10,6 +10,7 @@ import com.fjhx.utils.ExampleAbstract;
 import com.fjhx.utils.FlowConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * 供应商价格维护修改审批
@@ -51,10 +52,12 @@ public class SupplierPriceUpdateFlow {
 
     });
 
+    @Transactional(rollbackFor = Exception.class)
     public void create(SupplierPriceVo supplierPriceVo) {
         flowConstructor.create(supplierPriceVo.getId(), "价格维护", supplierPriceVo.getRemarks(), supplierPriceVo);
     }
 
+    @Transactional(rollbackFor = Exception.class)
     public void jump(JumpVo jumpVo) {
         flowConstructor.jump(jumpVo);
     }

+ 28 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/service/stock/StockTagService.java

@@ -0,0 +1,28 @@
+package com.fjhx.service.stock;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.entity.stock.StockTag;
+import com.fjhx.params.stock.StockTagVo;
+import com.fjhx.base.StorageBaseService;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 标签 服务类
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-09-16
+ */
+public interface StockTagService extends StorageBaseService<StockTag> {
+
+    Page<StockTag> getPage(Map<String, String> condition);
+
+    void add(StockTagVo stockTagVo);
+
+    void edit(StockTagVo stockTagVo);
+
+    void delete(StockTagVo stockTagVo);
+
+}

+ 54 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/service/stock/impl/StockTagServiceImpl.java

@@ -0,0 +1,54 @@
+package com.fjhx.service.stock.impl;
+
+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.fjhx.utils.WrapperUtil;
+import com.fjhx.entity.stock.StockTag;
+import com.fjhx.params.stock.StockTagVo;
+import com.fjhx.mapper.stock.StockTagMapper;
+import com.fjhx.service.stock.StockTagService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 标签 服务实现类
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-09-16
+ */
+@Service
+public class StockTagServiceImpl extends ServiceImpl<StockTagMapper, StockTag> implements StockTagService {
+
+    @Override
+    public Page<StockTag> getPage(Map<String, String> condition) {
+
+        QueryWrapper<StockTag> wrapper = Wrappers.query();
+
+        WrapperUtil.init(condition, wrapper)
+                .createTimeDesc();
+
+        Page<StockTag> page = page(condition, wrapper);
+        return page;
+    }
+
+    @Override
+    public void add(StockTagVo stockTagVo) {
+        save(stockTagVo);
+    }
+
+    @Override
+    public void edit(StockTagVo stockTagVo) {
+        updateById(stockTagVo);
+    }
+
+    @Override
+    public void delete(StockTagVo stockTagVo) {
+        removeById(stockTagVo.getId());
+    }
+
+}

+ 28 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/service/water/WaterDetailService.java

@@ -0,0 +1,28 @@
+package com.fjhx.service.water;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.fjhx.entity.water.WaterDetail;
+import com.fjhx.params.water.WaterDetailVo;
+import com.fjhx.base.StorageBaseService;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 流水明细表 服务类
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-09-16
+ */
+public interface WaterDetailService extends StorageBaseService<WaterDetail> {
+
+    Page<WaterDetail> getPage(Map<String, String> condition);
+
+    void add(WaterDetailVo waterDetailVo);
+
+    void edit(WaterDetailVo waterDetailVo);
+
+    void delete(WaterDetailVo waterDetailVo);
+
+}

+ 54 - 0
hx-service/storage-restructure/src/main/java/com/fjhx/service/water/impl/WaterDetailServiceImpl.java

@@ -0,0 +1,54 @@
+package com.fjhx.service.water.impl;
+
+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.fjhx.utils.WrapperUtil;
+import com.fjhx.entity.water.WaterDetail;
+import com.fjhx.params.water.WaterDetailVo;
+import com.fjhx.mapper.water.WaterDetailMapper;
+import com.fjhx.service.water.WaterDetailService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 流水明细表 服务实现类
+ * </p>
+ *
+ * @author ${author}
+ * @since 2022-09-16
+ */
+@Service
+public class WaterDetailServiceImpl extends ServiceImpl<WaterDetailMapper, WaterDetail> implements WaterDetailService {
+
+    @Override
+    public Page<WaterDetail> getPage(Map<String, String> condition) {
+
+        QueryWrapper<WaterDetail> wrapper = Wrappers.query();
+
+        WrapperUtil.init(condition, wrapper)
+                .createTimeDesc();
+
+        Page<WaterDetail> page = page(condition, wrapper);
+        return page;
+    }
+
+    @Override
+    public void add(WaterDetailVo waterDetailVo) {
+        save(waterDetailVo);
+    }
+
+    @Override
+    public void edit(WaterDetailVo waterDetailVo) {
+        updateById(waterDetailVo);
+    }
+
+    @Override
+    public void delete(WaterDetailVo waterDetailVo) {
+        removeById(waterDetailVo.getId());
+    }
+
+}

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

@@ -1,7 +1,6 @@
 package com.fjhx.stock.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.convert.Convert;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -198,6 +197,9 @@ public class StockDetailServiceImpl extends ServiceImpl<StockDetailMapper, Stock
                             break;
                         }
                     }
+                    v.get(i).putIfAbsent("rfidCode", "");
+                    v.get(i).putIfAbsent("quantity", "1");
+
                 }
             }
         });