浏览代码

制造单审核

zhoudw 7 年之前
父节点
当前提交
ddc94f756b

+ 1 - 2
applications/storage/storage-server/src/main/java/com/usoftchina/saas/storage/mapper/MakeMapper.java

@@ -25,9 +25,8 @@ public interface MakeMapper extends CommonBaseMapper<Make> {
 
     int validateCodeWhenUpdate(@Param("code") String code, @Param("id") Long id, @Param("companyId") Long company);
 
-    double getOnHand(@Param("prodcode") String prodcode, @Param("whcode") String whcode, @Param("companyId") Long companyId);
+    Double getOnHand(@Param("prodcode") String prodcode, @Param("whcode") String whcode, @Param("companyId") Long companyId);
 
     String selectMakeInOutCode(@Param("code") String code, @Param("companyId") Long companyId, @Param("type") String type);
 
-    void calcMakePriceAndTotal(Long id);
 }

+ 2 - 0
applications/storage/storage-server/src/main/java/com/usoftchina/saas/storage/mapper/MakeMaterialMapper.java

@@ -25,4 +25,6 @@ public interface MakeMaterialMapper {
     void batchInsert(List<MakeMaterial> vendorcontactList);
 
     void batchUpdate(List<MakeMaterial> vendorcontactList);
+
+    void calcdetailtotal(Long ma_id);
 }

+ 59 - 36
applications/storage/storage-server/src/main/java/com/usoftchina/saas/storage/service/impl/MakeServiceImpl.java

@@ -105,11 +105,6 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
             docBaseDTO = generateMsgObj(make.getId(), make.getMa_code());
             messageLogService.save(docBaseDTO);
 
-
-            //抓取出库单位成本,计算出库成本
-            calcMakePriceAndTotal(make.getId());
-
-
         }else{
             //更新主表
             make.setUpdaterId(BaseContextHolder.getUserId());
@@ -147,17 +142,10 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
             docBaseDTO = generateMsgObj(make.getId(), make.getMa_code());
             messageLogService.update(docBaseDTO);
 
-            //抓取出库单位成本,计算出库成本
-            calcMakePriceAndTotal(make.getId());
-
         }
         return docBaseDTO;
     }
 
-    private void calcMakePriceAndTotal(Long id) {
-        getMapper().calcMakePriceAndTotal(id);
-    }
-
 
     /**
      * 校验库存是否足够
@@ -171,8 +159,11 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
             int i = 0;
             for(MakeMaterial makeMaterial : makeMaterialList){
                 i++;
-                double qty = makeMaterial.getMm_qty();
-                double onHand = getMapper().getOnHand(makeMaterial.getMm_prodcode(),makeMaterial.getMm_whcode(), BaseContextHolder.getCompanyId());
+                double qty = makeMaterial.getMm_qty()==null?0:makeMaterial.getMm_qty();
+                Double onHand = getMapper().getOnHand(makeMaterial.getMm_prodcode(),makeMaterial.getMm_whcode(), BaseContextHolder.getCompanyId());
+                if (onHand==null){
+                    onHand=0d;
+                }
                 if(onHand < qty){
                     throw new BizException(79402, "行" + i + "库存不足");
                 }
@@ -265,22 +256,21 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
             DocBaseDTO docBaseDTO = saveOrUpdate(makeListDTO);
             make.setId(docBaseDTO.getId());
         }
-        //抓取出库单位成本,计算出库成本
-        calcMakePriceAndTotal(make.getId());
-
         //2.校验库存是否足够
         validStorage(makeListDTO);
         //3.生成  完工入库单和领料单 并 过账
         generateProdIO(makeListDTO);
+
         //4.修改单据状态
         Make updateMake = new Make();
+        updateMake.setId(make.getId());
         updateMake.setMa_status(Status.AUDITED.getDisplay());
         updateMake.setMa_statuscode(Status.AUDITED.name());
         updateMake.setUpdateTime(new Date());
         updateMake.setUpdaterId(BaseContextHolder.getUserId());
         updateMake.setMa_auditman("");
         updateMake.setMa_auditdate(new Date());
-        getMapper().updateByPrimaryKeySelective(make);
+        getMapper().updateByPrimaryKeySelective(updateMake);
         DocBaseDTO docBaseDTO = generateMsgObj(make.getId(), make.getMa_code());
         //5.记录LOG
         messageLogService.audit(docBaseDTO);
@@ -292,9 +282,12 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
      * 2.过账
      * @param makeListDTO
      */
+    @Transactional(rollbackFor = Exception.class)
     private void generateProdIO(MakeListDTO makeListDTO) {
         Make make = makeListDTO.getMain();
+        Long ma_id = make.getId();
         List<MakeMaterial> items = makeListDTO.getItems();
+
         if ("组装".equals(make.getMa_type())){
             /** 1.生产领料单 **/
             //a.主表
@@ -303,7 +296,6 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
             String code = maxnumberService.getMaxnumber("MakeOut", true).getData();
             prodInOut.setPi_inoutno(code);
             prodInOut.setPi_date(new Date());       //出入库日期
-            //prodInOut.setPi_total(make.getMa_price());
             prodInOut.setPi_recordmanid(BaseContextHolder.getUserId());     //录入人ID
             prodInOut.setPi_recorddate(new Date());     //录入日期
             prodInOut.setPi_auditdate(new Date());      //审核日期
@@ -353,6 +345,10 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
             if (!StringUtils.isEmpty(map.get("result"))){
                 throw new BizException(76201, map.get("result").toString());
             }
+
+            //重新获取更新后的工单
+            make = getMapper().selectByPrimaryKey(ma_id);
+
             /** 2.完工入库单 **/
             //a.主表
             prodInOut = new ProdInOut();
@@ -360,7 +356,6 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
             code = maxnumberService.getMaxnumber("MakeIn", true).getData();
             prodInOut.setPi_inoutno(code);
             prodInOut.setPi_date(new Date());       //出入库日期
-            //prodInOut.setPi_total(make.getMa_price());
             prodInOut.setPi_recordmanid(BaseContextHolder.getUserId());     //录入人ID
             prodInOut.setPi_recorddate(new Date());     //录入日期
             prodInOut.setPi_auditdate(new Date());      //审核日期
@@ -371,6 +366,7 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
             prodInOut.setCompanyId(BaseContextHolder.getCompanyId());   //公司ID
             prodInOut.setCreateTime(new Date());
             prodInOut.setCreatorId(BaseContextHolder.getUserId());      //创建人ID
+            prodInOut.setPi_total(make.getMa_total());
             prodInOutMapper.insertSelective(prodInOut);
             pi_id = prodInOut.getId();
             //b.从表
@@ -403,10 +399,10 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
                 throw new BizException(76201, map.get("result").toString());
             }
         }else if ("拆件".equals(make.getMa_type())){
-            /** 1.生产领料单 **/
+            /** 1.拆件领料单 **/
             //a.主表
             ProdInOut prodInOut = new ProdInOut();
-            prodInOut.setPi_class("生产领料单");
+            prodInOut.setPi_class("拆件领料单");
             String code = maxnumberService.getMaxnumber("MakeOut", true).getData();
             prodInOut.setPi_inoutno(code);
             prodInOut.setPi_date(new Date());       //出入库日期
@@ -434,8 +430,8 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
             prodIODetail.setPd_prodid(make.getMa_prodid());    //物料ID
             prodIODetail.setPd_prodcode(make.getMa_prodcode()); //物料CODE
             prodIODetail.setPd_outqty(make.getMa_qty());        //出库数
-            prodIODetail.setPd_price(make.getMa_price());       //成本单价 ???
-            prodIODetail.setPd_total(make.getMa_total());      //金额
+            prodIODetail.setPd_price(new Double(0));       //成本单价 ???
+            prodIODetail.setPd_total(new Double(0));      //金额
             prodIODetail.setPd_whid(make.getMa_whid());         //仓库ID
             prodIODetail.setPd_whcode(make.getMa_whcode());     //仓库CODE
             prodIODetail.setPd_whname(make.getMa_whname());     //仓库名称
@@ -446,7 +442,7 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
             //c.领料单过账
             Map<String, Object> map = new HashMap<String, Object>();
             map.put("inoutNo", code);
-            map.put("class", "生产领料单");
+            map.put("class", "拆件领料单");
             map.put("commitid", BaseContextHolder.getUserId());
             map.put("companyId", BaseContextHolder.getCompanyId());
             map.put("result", null);
@@ -454,6 +450,14 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
             if (!StringUtils.isEmpty(map.get("result"))){
                 throw new BizException(76201, map.get("result").toString());
             }
+
+            //重新获取更新后的工单
+            //合计工单明细
+            makeMaterialMapper.calcdetailtotal(ma_id);
+            make = getMapper().selectByPrimaryKey(ma_id);
+            items = makeMaterialMapper.selectByFK(ma_id,BaseContextHolder.getCompanyId());
+
+
             /** 2.完工入库单 **/
             //a.主表
             prodInOut = new ProdInOut();
@@ -461,7 +465,6 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
             code = maxnumberService.getMaxnumber("MakeIn", true).getData();
             prodInOut.setPi_inoutno(code);
             prodInOut.setPi_date(new Date());       //出入库日期
-            //prodInOut.setPi_total(make.getMa_price());
             prodInOut.setPi_recordmanid(BaseContextHolder.getUserId());     //录入人ID
             prodInOut.setPi_recorddate(new Date());     //录入日期
             prodInOut.setPi_auditdate(new Date());      //审核日期
@@ -474,6 +477,8 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
             prodInOut.setCreatorId(BaseContextHolder.getUserId());      //创建人ID
             prodInOutMapper.insertSelective(prodInOut);
             pi_id = prodInOut.getId();
+            //计算完工入库单主表金额
+            prodIODetailMapper.calcProdIn(pi_id);
             //b.从表
             List<ProdIODetail> prodIODetailList = new ArrayList<ProdIODetail>();
             int detno = 0;
@@ -526,11 +531,12 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
         selectProdIO(make);
         //5.修改单据状态
         Make updateMake = new Make();
-        make.setMa_status(Status.UNAUDITED.getDisplay());
-        make.setMa_statuscode(Status.UNAUDITED.name());
-        make.setUpdateTime(new Date());
-        make.setUpdaterId(BaseContextHolder.getUserId());
-        getMapper().updateByPrimaryKeySelective(make);
+        updateMake.setId(make.getId());
+        updateMake.setMa_status(Status.UNAUDITED.getDisplay());
+        updateMake.setMa_statuscode(Status.UNAUDITED.name());
+        updateMake.setUpdateTime(new Date());
+        updateMake.setUpdaterId(BaseContextHolder.getUserId());
+        getMapper().updateByPrimaryKeySelective(updateMake);
         DocBaseDTO docBaseDTO = generateMsgObj(id, make.getMa_code());
         //6.记录LOG
         messageLogService.unAudit(docBaseDTO);
@@ -580,11 +586,18 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
      * 2.反过账
      * @param make
      */
+    @Transactional(rollbackFor = Exception.class)
     private void selectProdIO(Make make) {
         String code = make.getMa_code();
+        String type = make.getMa_type();
+        String outCode="";
         Long companyId = BaseContextHolder.getCompanyId();
         String inCode = getMapper().selectMakeInOutCode(code, companyId, "完工入库单");
-        String outCode = getMapper().selectMakeInOutCode(code, companyId, "生产领料单");
+        if ("拆件".equals(type)){
+            outCode = getMapper().selectMakeInOutCode(code, companyId, "拆件领料单");
+        }else if ("组装".equals(type)){
+            outCode = getMapper().selectMakeInOutCode(code, companyId, "生产领料单");
+        }
         Map<String, Object> map = new HashMap<String, Object>();
         map.put("inoutNo", inCode);
         map.put("class", "完工入库单");
@@ -599,15 +612,25 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
         prodInOutMapper.deleteByInOutNo(inCode, "完工入库单", BaseContextHolder.getCompanyId());
         prodIODetailMapper.deleteByInOutNo(inCode, "完工入库单", BaseContextHolder.getCompanyId());
 
+        if ("拆件".equals(type)){
+            map.put("class", "拆件领料单");
+        }else if ("组装".equals(type)){
+            map.put("class", "生产领料单");
+        }
         map.put("inoutNo", outCode);
-        map.put("class", "生产领料单");
-        //生产领料单反过账
+        map.put("result", null);
+        //生产领料单/拆件领料反过账
         prodInOutMapper.unPost(map);
         if(!StringUtils.isEmpty(map.get("result"))){
             throw new BizException(76204, map.get("result").toString());
         }
-        prodInOutMapper.deleteByInOutNo(outCode, "生产领料单", BaseContextHolder.getCompanyId());
-        prodIODetailMapper.deleteByInOutNo(outCode, "生产领料单", BaseContextHolder.getCompanyId());
+        if ("拆件".equals(type)){
+            prodInOutMapper.deleteByInOutNo(outCode, "拆件领料单", BaseContextHolder.getCompanyId());
+            prodIODetailMapper.deleteByInOutNo(outCode, "拆件领料单", BaseContextHolder.getCompanyId());
+        }else if ("组装".equals(type)){
+            prodInOutMapper.deleteByInOutNo(outCode, "生产领料单", BaseContextHolder.getCompanyId());
+            prodIODetailMapper.deleteByInOutNo(outCode, "生产领料单", BaseContextHolder.getCompanyId());
+        }
     }
 
     /**

+ 5 - 0
applications/storage/storage-server/src/main/resources/mapper/MakematerialMapper.xml

@@ -337,4 +337,9 @@
         where mm_id=#{item.id}
     </foreach>
   </update>
+
+  <update id="calcdetailtotal" parameterType="long" >
+    update MakeMaterial set mm_amount = mm_price*mm_qty where mm_maid = #{id}
+  </update>
+
 </mapper>