瀏覽代碼

2022-09-1 化学品管控-化学品申购-采购申请,新增时有剩余可存放量数据,保存草稿后再次编辑此处数据则显示为0

zhuchangxue 3 年之前
父節點
當前提交
f233b61ef0

+ 3 - 0
zd-modules/zd-chemical/src/main/java/com/zd/chemical/domain/vo/ActRestStockManySearch.java

@@ -18,6 +18,9 @@ public class ActRestStockManySearch {
     @ApiModelProperty(value = "化学品id")
     private Long chemicalId;
 
+    @ApiModelProperty(value = "化学品列表id")
+    private List <Long> chemicalIds = new ArrayList<>();
+
     @ApiModelProperty(value = "机柜列表id")
     private List <Long> cabinetIds = new ArrayList<>();
 }

+ 3 - 0
zd-modules/zd-chemical/src/main/java/com/zd/chemical/domain/vo/ActRestStockManyVo.java

@@ -15,6 +15,9 @@ import java.util.List;
 @Data
 public class ActRestStockManyVo {
 
+    @ApiModelProperty(value = "化学品id")
+    private Long chemicalId;
+
     @ApiModelProperty(value = "机柜id")
     private Long cabinetId;
 

+ 9 - 0
zd-modules/zd-chemical/src/main/java/com/zd/chemical/mapper/ActHxpapplyMapper.java

@@ -103,4 +103,13 @@ public interface ActHxpapplyMapper
      * @return 化学品申购
      */
     List<ActRestStockManyVo> getRestStockByManyCabinet(ActRestStockManySearch actRestStockVo);
+
+
+    /**
+     * 获取化学品剩余可存放量(多个化学品和多个机柜返回的计算)
+     *
+     * @param actRestStockVo  机柜主键
+     * @return 化学品申购
+     */
+    List<ActRestStockManyVo> getRestStockByManyCabinetAndChemical(ActRestStockManySearch actRestStockVo);
 }

+ 49 - 0
zd-modules/zd-chemical/src/main/java/com/zd/chemical/service/impl/ActHxpapplyServiceImpl.java

@@ -152,6 +152,41 @@ public class ActHxpapplyServiceImpl implements IActHxpapplyService
                         return actAuditconfigInfoVo;
                     }).collect(Collectors.toList());
             actHxpapplyInfoVo.setConfigInfoList(configInfoList);
+        }else{
+            //todo 如果是草稿箱的,需要查询机柜化学品剩余量的计算值
+            List <Long> cabinetCollect = Optional.ofNullable(actHxpapplyDetailVos).orElseGet(Collections::emptyList)
+                    .stream()
+                    .map(ActHxpapplyDetailVo::getCabinetId)
+                    .collect(Collectors.toList());
+            List <Long> chemicalCollect = Optional.ofNullable(actHxpapplyDetailVos).orElseGet(Collections::emptyList)
+                    .stream()
+                    .map(ActHxpapplyDetailVo::getChemicalId)
+                    .collect(Collectors.toList());
+
+            ActRestStockManySearch actRestStockVo = new ActRestStockManySearch();
+            actRestStockVo.setChemicalIds(chemicalCollect);
+            actRestStockVo.setCabinetIds(cabinetCollect);
+            List <ActRestStockManyVo> restStockByManyCabinetAndChemical = this.getRestStockByManyCabinetAndChemical(actRestStockVo);
+
+//            for(ActHxpapplyDetailVo detailVo:actHxpapplyDetailVos){
+//                for(ActRestStockManyVo manyVo:restStockByManyCabinetAndChemical){
+//                    if(detailVo.getCabinetId()==manyVo.getCabinetId() && detailVo.getChemicalId()==manyVo.getChemicalId()){
+//                        detailVo.setRemainingStorage(manyVo.getRestStock());
+//                    }
+//                }
+//            }
+
+            Optional.ofNullable(actHxpapplyDetailVos)
+                    .orElseGet(Collections::emptyList)
+                    .stream()
+                    .forEach(a->Optional.ofNullable(restStockByManyCabinetAndChemical)
+                    .orElseGet(Collections::emptyList)
+                    .stream()
+                    .filter(b->(b.getCabinetId().longValue()==a.getCabinetId().longValue()&&b.getChemicalId().longValue()==a.getChemicalId().longValue()))
+                    .forEach(c->{
+                        a.setRemainingStorage(c.getRestStock()+"g");
+                    }));
+
         }
         return actHxpapplyInfoVo;
     }
@@ -511,4 +546,18 @@ public class ActHxpapplyServiceImpl implements IActHxpapplyService
 
         return actRestStockManyVoList;
     }
+
+
+
+    /**
+     * 获取化学品剩余可存放量(多个化学品和多个机柜返回的计算)
+     *
+     * @param actRestStockVo 机柜主键主键
+     * @return 化学品申购
+     */
+    public List<ActRestStockManyVo> getRestStockByManyCabinetAndChemical(ActRestStockManySearch actRestStockVo)
+    {
+        List <ActRestStockManyVo> restStockByManyCabinet = actHxpapplyMapper.getRestStockByManyCabinetAndChemical(actRestStockVo);
+        return restStockByManyCabinet;
+    }
 }

+ 46 - 0
zd-modules/zd-chemical/src/main/resources/mapper/chemical/ActHxpapplyMapper.xml

@@ -615,6 +615,52 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
 
 
+    <select id="getRestStockByManyCabinetAndChemical" parameterType="com.zd.chemical.domain.vo.ActRestStockManySearch" resultType="com.zd.chemical.domain.vo.ActRestStockManyVo">
+        SELECT x1.chemical_id chemicalId,x1.cabinet_id cabinetId,CASE WHEN CONCAT((IFNULL(x1.applyNum,0)-IFNULL(x2.stockNum,0)))>0
+        THEN CONCAT((IFNULL(x1.applyNum,0)-IFNULL(x2.stockNum,0))) ELSE 0 END restStock FROM (
+        SELECT hd.`chemical_id`,hd.`cabinet_id`,IFNULL(SUM(hd.`apply_num`),0) applyNum FROM act_hxpapply ah LEFT JOIN act_hxpapply_detail hd ON ah.`id` = hd.`hxpapply_id`
+        LEFT JOIN act_applytask ak ON ah.`id` = ak.`task_id`
+        LEFT JOIN lab_subject st ON ah.sub_id = st.id
+        WHERE
+            ak.`approval_status`=1 AND hd.`tick_status`=1
+            <if test="chemicalIds != null ">
+                AND hd.`chemical_id`  IN
+                <foreach item="id" collection="chemicalIds" open="(" separator="," close=")">
+                    #{id}
+                </foreach>
+            </if>
+            <if test="cabinetIds != null ">
+                AND hd.`cabinet_id` IN
+                <foreach item="id" collection="cabinetIds" open="(" separator="," close=")">
+                    #{id}
+                </foreach>
+            </if>
+
+        GROUP BY hd.`chemical_id`,hd.`cabinet_id`
+        )x1 LEFT JOIN
+        (
+        SELECT cjc.`chemical_id`,cjc.`cabinet_id`,SUM(cjc.chemical_amount-cjc.tare) stockNum FROM
+        hxp_chemical_join_cabinet cjc
+        WHERE
+            cjc.`status` IN(0,1)
+            <if test="chemicalIds != null ">
+                AND cjc.`chemical_id` IN
+                <foreach item="id" collection="chemicalIds" open="(" separator="," close=")">
+                    #{id}
+                </foreach>
+            </if>
+            <if test="cabinetIds != null ">
+                AND cjc.`cabinet_id` IN
+                <foreach item="id" collection="cabinetIds" open="(" separator="," close=")">
+                    #{id}
+                </foreach>
+            </if>
+
+        GROUP BY cjc.`chemical_id`,cjc.`cabinet_id`
+        )x2 ON x1.chemical_id = x2.chemical_id AND x1.cabinet_id = x2.cabinet_id
+    </select>
+
+
     <insert id="insertActHxpapply" parameterType="com.zd.chemical.domain.ActHxpapply" useGeneratedKeys="true" keyProperty="id">
         insert into act_hxpapply
         <trim prefix="(" suffix=")" suffixOverrides=",">