Browse Source

材料费详情对比(解组批后任务按比例继承组批任务的物资出库明细)

lw 1 year ago
parent
commit
a89b35146b

+ 4 - 0
module_kzks/src/main/java/org/jeecg/modules/kyTaskInfo/mapper/KyTaskInfoMapper.java

@@ -59,5 +59,9 @@ public interface KyTaskInfoMapper extends BaseMapper<KyTaskInfo> {
     public List<String> getKyTaskNoByMonth2(String ym);
 
 
+    String getPcCodeByTaskno(String taskNo);
 
+    Long getTaskYzslByTaskno(String taskno);
+
+    Long getPcCodeTaskYzslByTaskno(String taskno);
 }

+ 10 - 2
module_kzks/src/main/java/org/jeecg/modules/kyTaskInfo/mapper/xml/KyTaskInfoMapper.xml

@@ -116,6 +116,14 @@
             </if>
         </where>
     </select>
+    <select id="getPcCodeByTaskno" resultType="java.lang.String">
+        select pcCode from ky_task_info where taskno = #{taskNo}
+    </select>
+    <select id="getTaskYzslByTaskno" resultType="java.lang.Long">
+        select yzsl from ky_task_info where taskno = #{taskno}
+    </select>
+    <select id="getPcCodeTaskYzslByTaskno" resultType="java.lang.Long">
+        select yzsl from ky_task_info where taskno = #{taskno}
+    </select>
 
-
-</mapper>
+</mapper>

+ 8 - 0
module_kzks/src/main/java/org/jeecg/modules/kyTaskInfo/service/IKyTaskInfoService.java

@@ -51,4 +51,12 @@ public interface IKyTaskInfoService extends IService<KyTaskInfo> {
     public List<String> getKyTaskNoByMonth(String depName, String ym);
     /**根据实际完成时间查询任务号  按月查询(随便某一年某个月的数据) ym形式如2023-09*/
     public List<String> getKyTaskNoByMonth2(String ym);
+
+    boolean hasPcCode(String taskNo);
+
+    Long getTaskYzslByTaskno(String taskno);
+
+    Long getPcCodeTaskYzslByTaskno(String taskno);
+
+    String getPcCodeByTaskno(String taskno);
 }

+ 89 - 32
module_kzks/src/main/java/org/jeecg/modules/kyTaskInfo/service/impl/KyTaskInfoServiceImpl.java

@@ -15,7 +15,7 @@ import java.util.List;
 /**
  * @Description: ky_task_info
  * @Author: jeecg-boot
- * @Date:   2023-08-30
+ * @Date: 2023-08-30
  * @Version: V1.0
  */
 @Service
@@ -26,72 +26,129 @@ public class KyTaskInfoServiceImpl extends ServiceImpl<KyTaskInfoMapper, KyTaskI
     @SuppressWarnings("all")
     private KyTaskInfoMapper kyTaskInfoMapper;
 
-    /**根据任务号查科研任务的业务员和下达部门*/
-    public KyTaskInfo getKyTaskInfoByTaskno(String taskno){
+    /**
+     * 根据任务号查科研任务的业务员和下达部门
+     */
+    public KyTaskInfo getKyTaskInfoByTaskno(String taskno) {
         return kyTaskInfoMapper.getKyTaskInfoByTaskno(taskno);
     }
 
-    /**根据部门名称和实际完成时间查询任务号  @param depName 部门名称  此处按年查询*/
-    public List<String> getKyTaskNoByNameCurrYear(String depName){
+    /**
+     * 根据部门名称和实际完成时间查询任务号  @param depName 部门名称  此处按年查询
+     */
+    public List<String> getKyTaskNoByNameCurrYear(String depName) {
         return kyTaskInfoMapper.getKyTaskNoByNameCurrYear(depName);
     }
-    /**根据实际完成时间查询任务号    此处按年查询*/
-    public List<String> getKyTaskNoByCurrYear(){
+
+    /**
+     * 根据实际完成时间查询任务号    此处按年查询
+     */
+    public List<String> getKyTaskNoByCurrYear() {
         return kyTaskInfoMapper.getKyTaskNoByCurrYear();
     }
 
-    /**根据部门名称和实际完成时间查询任务号  @param depName 部门名称  此处按上一年年查询*/
-    public List<String> getKyTaskNoByNameLastYear(String depName){
+    /**
+     * 根据部门名称和实际完成时间查询任务号  @param depName 部门名称  此处按上一年年查询
+     */
+    public List<String> getKyTaskNoByNameLastYear(String depName) {
         return kyTaskInfoMapper.getKyTaskNoByNameLastYear(depName);
     }
-    /**根据实际完成时间查询任务号  此处按上一年查询*/
-    public List<String> getKyTaskNoByLastYear(){
+
+    /**
+     * 根据实际完成时间查询任务号  此处按上一年查询
+     */
+    public List<String> getKyTaskNoByLastYear() {
         return kyTaskInfoMapper.getKyTaskNoByLastYear();
     }
 
-    /**根据部门名称和实际完成时间查询任务号  @param depName 部门名称  此处按当月查询*/
-    public List<String> getKyTaskNoByNameCurrMonth(String depName){
+    /**
+     * 根据部门名称和实际完成时间查询任务号  @param depName 部门名称  此处按当月查询
+     */
+    public List<String> getKyTaskNoByNameCurrMonth(String depName) {
         return kyTaskInfoMapper.getKyTaskNoByNameCurrMonth(depName);
     }
-    /**根据实际完成时间查询任务号    此处按当月查询*/
-    public List<String> getKyTaskNoByCurrMonth(){
+
+    /**
+     * 根据实际完成时间查询任务号    此处按当月查询
+     */
+    public List<String> getKyTaskNoByCurrMonth() {
         return kyTaskInfoMapper.getKyTaskNoByCurrMonth();
     }
 
-    /**根据部门名称和实际完成时间查询任务号  @param depName 部门名称  此处按上个月查询*/
-    public List<String> getKyTaskNoByNameLastMonth(String depName){
+    /**
+     * 根据部门名称和实际完成时间查询任务号  @param depName 部门名称  此处按上个月查询
+     */
+    public List<String> getKyTaskNoByNameLastMonth(String depName) {
         return kyTaskInfoMapper.getKyTaskNoByNameLastMonth(depName);
     }
-    /**根据实际完成时间查询任务号  此处按上个月查询*/
-    public List<String> getKyTaskNoByLastMonth(){
+
+    /**
+     * 根据实际完成时间查询任务号  此处按上个月查询
+     */
+    public List<String> getKyTaskNoByLastMonth() {
         return kyTaskInfoMapper.getKyTaskNoByLastMonth();
     }
 
-    /**根据部门名称和实际完成时间查询任务号  @param depName 部门名称  此处按去年同期月份查询*/
-    public List<String> getKyTaskNoByNameTqMonth(String depName){
+    /**
+     * 根据部门名称和实际完成时间查询任务号  @param depName 部门名称  此处按去年同期月份查询
+     */
+    public List<String> getKyTaskNoByNameTqMonth(String depName) {
         return kyTaskInfoMapper.getKyTaskNoByNameTqMonth(depName);
     }
-    /**根据实际完成时间查询任务号  此处按去年同期月份查询*/
-    public List<String> getKyTaskNoByTqMonth(){
+
+    /**
+     * 根据实际完成时间查询任务号  此处按去年同期月份查询
+     */
+    public List<String> getKyTaskNoByTqMonth() {
         return kyTaskInfoMapper.getKyTaskNoByTqMonth();
     }
 
-    /**根据部门名称和实际完成时间查询任务号  @param depName 部门名称  按年查询(随便某一年的数据)*/
-    public List<String> getKyTaskNoByYear(String depName, String year){
+    /**
+     * 根据部门名称和实际完成时间查询任务号  @param depName 部门名称  按年查询(随便某一年的数据)
+     */
+    public List<String> getKyTaskNoByYear(String depName, String year) {
         return kyTaskInfoMapper.getKyTaskNoByYear(depName, year);
     }
-    /**根据实际完成时间查询任务号  按年查询(随便某一年的数据)*/
-    public List<String> getKyTaskNoByYear2(String year){
+
+    /**
+     * 根据实际完成时间查询任务号  按年查询(随便某一年的数据)
+     */
+    public List<String> getKyTaskNoByYear2(String year) {
         return kyTaskInfoMapper.getKyTaskNoByYear2(year);
     }
 
-    /**根据部门名称和实际完成时间查询任务号  @param depName 部门名称  按月查询(随便某一年某个月的数据) ym形式如2023-09*/
-    public List<String> getKyTaskNoByMonth(String depName, String ym){
-        return  kyTaskInfoMapper.getKyTaskNoByMonth(depName, ym);
+    /**
+     * 根据部门名称和实际完成时间查询任务号  @param depName 部门名称  按月查询(随便某一年某个月的数据) ym形式如2023-09
+     */
+    public List<String> getKyTaskNoByMonth(String depName, String ym) {
+        return kyTaskInfoMapper.getKyTaskNoByMonth(depName, ym);
     }
-    /**根据实际完成时间查询任务号  按月查询(随便某一年某个月的数据) ym形式如2023-09*/
-    public List<String> getKyTaskNoByMonth2(String ym){
+
+    /**
+     * 根据实际完成时间查询任务号  按月查询(随便某一年某个月的数据) ym形式如2023-09
+     */
+    public List<String> getKyTaskNoByMonth2(String ym) {
         return kyTaskInfoMapper.getKyTaskNoByMonth2(ym);
     }
 
+    @Override
+    public boolean hasPcCode(String taskNo) {
+        String pcCode = kyTaskInfoMapper.getPcCodeByTaskno(taskNo);
+        return pcCode != null && !pcCode.isEmpty();
+    }
+
+    @Override
+    public Long getTaskYzslByTaskno(String taskno) {
+        return kyTaskInfoMapper.getTaskYzslByTaskno(taskno);
+    }
+
+    @Override
+    public Long getPcCodeTaskYzslByTaskno(String taskno) {
+        return kyTaskInfoMapper.getPcCodeTaskYzslByTaskno(taskno);
+    }
+
+    @Override
+    public String getPcCodeByTaskno(String taskno) {
+        return kyTaskInfoMapper.getPcCodeByTaskno(taskno);
+    }
 }

+ 55 - 7
module_kzks/src/main/java/org/jeecg/modules/wzOutboundOrder/controller/WzOutboundOrderHController.java

@@ -14,6 +14,7 @@ import org.jeecg.common.system.base.controller.JeecgController;
 import org.jeecg.common.system.query.QueryGenerator;
 import org.jeecg.common.util.RedisUtil;
 import org.jeecg.modules.Index.util.CacheKey;
+import org.jeecg.modules.kyTaskInfo.service.IKyTaskInfoService;
 import org.jeecg.modules.wzOutboundOrder.entity.CLfCompareDO;
 import org.jeecg.modules.wzOutboundOrder.entity.WzOutboundOrderH;
 import org.jeecg.modules.wzOutboundOrder.service.IWzOutboundOrderBService;
@@ -28,6 +29,7 @@ import org.springframework.web.servlet.ModelAndView;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.*;
 import java.util.concurrent.*;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -53,6 +55,9 @@ public class WzOutboundOrderHController extends JeecgController<WzOutboundOrderH
     @Autowired
     private RedisUtil redisUtil;
 
+    @Autowired
+    private IKyTaskInfoService kyTaskInfoService;
+
     /**
      * 导出材料费详情excel
      */
@@ -88,7 +93,7 @@ public class WzOutboundOrderHController extends JeecgController<WzOutboundOrderH
         String[] tasknoArray = tasknos.split(",");
         if (tasknoArray.length == 0) return Result.ok("非法请求");
 
-        ArrayList<CLFCompareResultVO> redisResultList = JSONObject.parseObject(JSONObject.toJSONString(redisUtil.get(CacheKey.CLF_COMPARE_RESULT_VOS + ":" + tasknos)), new TypeReference<ArrayList<CLFCompareResultVO>>() {
+        ArrayList<CLFCompareResultVO> redisResultList = JSONObject.parseObject(JSONObject.toJSONString(redisUtil. get(CacheKey.CLF_COMPARE_RESULT_VOS + ":" + tasknos)), new TypeReference<ArrayList<CLFCompareResultVO>>() {
         });
 
         if (redisResultList != null && !redisResultList.isEmpty()) {
@@ -121,7 +126,29 @@ public class WzOutboundOrderHController extends JeecgController<WzOutboundOrderH
         ArrayList<CompletableFuture<Void>> completableFutures = new ArrayList<>();
         for (String taskno : tasknoArray) {
             CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
-                List<CLfCompareDO> Dos = wzOutboundOrderHService.getCLFCompareDoListByTaskNoList(taskno);
+                String[] split = taskno.split("_-_");
+                boolean hasPcCode = false;
+                for (String s : split) {
+                    if ("pc".equals(s)) {
+                        hasPcCode = true;
+                        break;
+                    }
+                }
+                List<CLfCompareDO> Dos;
+                if (hasPcCode) {
+                    Long taskYzsl = kyTaskInfoService.getTaskYzslByTaskno(split[0]);
+                    String pcCode = kyTaskInfoService.getPcCodeByTaskno(split[0]);
+                    Long pcCodeTaskYzsl = kyTaskInfoService.getTaskYzslByTaskno(pcCode);
+                    double proportion;
+                    if (taskYzsl != 0 && pcCodeTaskYzsl != 0) {
+                        proportion = (double) taskYzsl / pcCodeTaskYzsl;
+                    } else {
+                        proportion = 0;
+                    }
+                    Dos = wzOutboundOrderHService.getCLFCompareDoListByTaskNoListHasPcCode(split[0], hasPcCode, proportion);
+                } else {
+                    Dos = wzOutboundOrderHService.getCLFCompareDoListByTaskNoList(taskno);
+                }
                 if (!Dos.isEmpty()) {
                     Dos.forEach(dos -> {
                         String hashKey = dos.getWlbm() + dos.getWlmc() + dos.getGgxh();
@@ -176,33 +203,54 @@ public class WzOutboundOrderHController extends JeecgController<WzOutboundOrderH
                     List<String> taskNoList = new ArrayList<>(Arrays.asList(tasknoArray));
 
                     BigDecimal unitPrice = null;
-                    boolean equals = true;
+                    boolean amountEquals = true;
+                    BigDecimal totalCountEquals = null;
+                    boolean countEquals = true;
 
                     for (CLfCompareDO CDo : cLfCompareDOS) {
                         CLFCompareTaskResultVo clfCompareTaskResultVo = new CLFCompareTaskResultVo();
                         clfCompareTaskResultVo.setTaskno(CDo.getRwh());
-                        taskNoList.remove(CDo.getRwh());
                         clfCompareTaskResultVo.setFlag("yes");
+
+                        if (CDo.getHasPcCode() != null && CDo.getHasPcCode()) {
+                            taskNoList.remove(CDo.getRwh()+"_-_pc");
+                            BigDecimal proportion = BigDecimal.valueOf(CDo.getProportion());
+                            if (proportion.compareTo(BigDecimal.ZERO) != 0) {
+                                CDo.setTotalAmount(CDo.getTotalAmount().multiply(proportion).setScale(2, RoundingMode.HALF_UP));
+                                CDo.setTotalCount(CDo.getTotalCount().multiply(proportion).setScale(2, RoundingMode.HALF_UP));
+                            }
+                        }else {
+                            taskNoList.remove(CDo.getRwh());
+                        }
                         clfCompareTaskResultVo.setTotalAmount(CDo.getTotalAmount());
                         clfCompareTaskResultVo.setTotalCount(CDo.getTotalCount());
                         clfCompareTaskResultVo.setUnitPrice(CDo.getUnitPrice());
                         if (unitPrice == null) {
                             unitPrice = CDo.getUnitPrice();
                         } else {
-                            if (CDo.getUnitPrice().compareTo(unitPrice) != 0) equals = false;
+                            if (CDo.getUnitPrice().compareTo(unitPrice) != 0) amountEquals = false;
+                        }
+                        if (totalCountEquals == null) {
+                            totalCountEquals = CDo.getTotalCount();
+                        } else {
+                            if (CDo.getTotalCount().compareTo(totalCountEquals) != 0) countEquals = false;
                         }
                         taskVoList.add(clfCompareTaskResultVo);
                     }
                     if (!taskNoList.isEmpty()) {
                         for (String no : taskNoList) {
+                            String[] split = no.split("_-_");
+                            no = split[0];
                             CLFCompareTaskResultVo clfCompareTaskResultVo = new CLFCompareTaskResultVo();
                             clfCompareTaskResultVo.setTaskno(no);
                             clfCompareTaskResultVo.setFlag("no");
                             taskVoList.add(clfCompareTaskResultVo);
                         }
-                        equals = false;
+                        amountEquals = false;
+                        countEquals = false;
                     }
-                    clfCompareResultVO.setEqual(equals);
+                    clfCompareResultVO.setAmountEqual(amountEquals);
+                    clfCompareResultVO.setCountEqual(countEquals);
                     clfCompareResultVO.setTaskVoList(taskVoList);
                     clfCompareResultVOS.add(clfCompareResultVO);
                 }

+ 6 - 0
module_kzks/src/main/java/org/jeecg/modules/wzOutboundOrder/entity/CLfCompareDO.java

@@ -27,4 +27,10 @@ public class CLfCompareDO {
 
     /*任务号*/
     private String rwh;
+
+    /*是否拥有pc号*/
+    private Boolean hasPcCode;
+
+    /*普通任务研制数量与批产任务研制数量比例*/
+    private double proportion;
 }

+ 2 - 0
module_kzks/src/main/java/org/jeecg/modules/wzOutboundOrder/mapper/WzOutboundOrderHMapper.java

@@ -27,4 +27,6 @@ public interface WzOutboundOrderHMapper extends BaseMapper<WzOutboundOrderH> {
     List<CLfCompareDO> getCLFCompareDoListByTaskNoList(@Param("taskno") String taskno);
 
     List<WzOutboundOrderBDetailListVO> getClfList(@Param("taskno") String taskno);
+
+    List<CLfCompareDO> getCLFCompareDoListByTaskNoListHasPcCode(@Param("taskno") String taskno,@Param("hasPcCode") Boolean hasPcCode,@Param("proportion") Double proportion);
 }

+ 42 - 0
module_kzks/src/main/java/org/jeecg/modules/wzOutboundOrder/mapper/xml/WzOutboundOrderHMapper.xml

@@ -65,5 +65,47 @@
             sfzsl,
             tm
     </select>
+    <select id="getCLFCompareDoListByTaskNoListHasPcCode"
+            resultType="org.jeecg.modules.wzOutboundOrder.entity.CLfCompareDO">
+        SELECT b.wlbm                   as wlbm,
+               b.wlmc                   as wlmc,
+               b.ggxh                   as ggxh,
+               b.totalAmount            as totalAmount,
+               b.totalCount             as totalCount,
+               totalAmount / totalCount as unitPrice,
+               #{taskno}                as rwh,
+               #{hasPcCode}             as hasPcCode,
+               #{proportion}            as proportion
+        FROM (SELECT a.wlbm,
+                     a.wlmc,
+                     a.ggxh,
+                     SUM(sfzsl * cgdj) AS totalAmount,
+                     sum(sfzsl)        AS totalCount
+              FROM (SELECT wlbm,
+                           wlmc,
+                           ggxh,
+                           sfzsl,
+                           cgdj
+                    FROM wz_outbound_order_b wb
+                    WHERE ckdh IN (SELECT ckdh
+                                   FROM wz_outbound_order_h
+                                   WHERE rwh in (select pcCode
+                                                 from ky_task_info
+                                                 where taskno = #{taskno}
+                                                 UNION all
+                                                 SELECT taskno
+                                                 from ky_task_info
+                                                 where refTaskNo in (select pcCode from ky_task_info where taskno = #{taskno})))
+                    GROUP BY ckrq,
+                             hh,
+                             wlbm,
+                             ggxh,
+                             yfzsl,
+                             sfzsl,
+                             tm) a
+              GROUP BY a.wlbm,
+                       a.wlmc,
+                       a.ggxh) b
+    </select>
 
 </mapper>

+ 2 - 0
module_kzks/src/main/java/org/jeecg/modules/wzOutboundOrder/service/IWzOutboundOrderHService.java

@@ -31,4 +31,6 @@ public interface IWzOutboundOrderHService extends IService<WzOutboundOrderH> {
     List<CLfCompareDO> getCLFCompareDoListByTaskNoList(String tasknos);
 
     List<WzOutboundOrderBDetailListVO> getClfList(String taskno);
+
+    List<CLfCompareDO> getCLFCompareDoListByTaskNoListHasPcCode(String taskno,Boolean hasPcCode,Double proportion);
 }

+ 5 - 0
module_kzks/src/main/java/org/jeecg/modules/wzOutboundOrder/service/impl/WzOutboundOrderHServiceImpl.java

@@ -79,4 +79,9 @@ public class WzOutboundOrderHServiceImpl extends ServiceImpl<WzOutboundOrderHMap
     public List<WzOutboundOrderBDetailListVO> getClfList(String taskno) {
         return hMapper.getClfList(taskno);
     }
+
+    @Override
+    public List<CLfCompareDO> getCLFCompareDoListByTaskNoListHasPcCode(String taskno,Boolean hasPcCode,Double proportion) {
+        return hMapper.getCLFCompareDoListByTaskNoListHasPcCode(taskno,hasPcCode,proportion);
+    }
 }

+ 5 - 2
module_kzks/src/main/java/org/jeecg/modules/wzOutboundOrder/vo/CLFCompareResultVO.java

@@ -21,6 +21,9 @@ public class CLFCompareResultVO {
     /*任务集合*/
     private List<CLFCompareTaskResultVo> taskVoList;
 
-    /*是否相等,true相等,false不相等*/
-    private Boolean equal;
+    /*金额是否相等,true相等,false不相等*/
+    private Boolean amountEqual;
+
+    /*数量是否相等,true相等,false不相等*/
+    private Boolean countEqual;
 }