Browse Source

调整MES调用ERP接口

koul 4 years ago
parent
commit
f22470bffc

+ 37 - 0
src/main/java/com/uas/eis/controller/MESController.java

@@ -66,4 +66,41 @@ public class MESController {
     public ApiResult<String> initMakeScrap(HttpServletRequest request,String data){
         return mesService.initMakeScrap(request,data);
     }
+
+
+    /**
+     * 原材料出库
+     * @return
+     */
+    @RequestMapping("/mes/prodInOutOtherOut")
+    public ApiResult<String> prodInOutOtherOut(HttpServletRequest request){
+        return mesService.prodInOutOtherOut(request);
+    }
+
+    /**
+     * 生产领料
+     * @return
+     */
+    @RequestMapping("/mes/prodInOutPicking")
+    public ApiResult<String> prodInOutPicking(HttpServletRequest request){
+        return mesService.prodInOutPicking(request);
+    }
+
+    /**
+     * 生产退料
+     * @return
+     */
+    @RequestMapping("/mes/prodInOutMakeReturn")
+    public ApiResult<String> prodInOutMakeReturn(HttpServletRequest request){
+        return mesService.prodInOutMakeReturn(request);
+    }
+
+    /**
+     * 库存转移
+     * @return
+     */
+    @RequestMapping("/mes/prodInOutAppropriationOut")
+    public ApiResult<String> prodInOutAppropriationOut(HttpServletRequest request){
+        return mesService.prodInOutAppropriationOut(request);
+    }
 }

+ 308 - 30
src/main/java/com/uas/eis/service/Impl/MESServiceImpl.java

@@ -70,26 +70,43 @@ public class MESServiceImpl implements MESService {
         }
         Object vaid = baseDao.getFieldDataByCondition("verifyApply", "va_id", "va_statuscode='AUDITED" +
                 "' and va_mescode='" + mesCode + "'");
+        int count1 = baseDao.getCount("select count(1) from VerifyApplyDetail where nvl(vad_pucode,' ')<>' ' and " +
+                "vad_vaid=" + vaid);
+        String caller="VerifyApply!ToOtherIn";
+        if (count1>0){
+            caller="VerifyApply!ToPurcIn";
+        }
         int piid ;
         //判断已转数
         Object chekQty = baseDao.getJdbcTemplate().queryForObject("select wmsys.wm_concat('收料单:'||vad_code||'序号:'||vad_detno)  from VerifyApplyDetail where vad_qty <= vad_yqty and vad_vaid = "+vaid, String.class);
         if(chekQty !=null){
             return ApiResponse.failRsp("10013",request.getHeader("RequestId"),"检测到" + chekQty + ",本次数量超出可转数量!");
         }
-        // 判断该收料通知单是否已经转入过采购验收单
-        Object code = baseDao.getFieldDataByCondition("VerifyApply", "va_code", "va_id=" + vaid);
-        code = baseDao.getFieldDataByCondition("ProdInOut", "pi_inoutno", "pi_sourcecode='" + code + "' and PI_REFNO='采购收料单'");
-        if (code != null && !code.equals("")) {
-            return ApiResponse.failRsp("10014",request.getHeader("RequestId"),"该收料单已转入过采购验收单,验收单号[" + code + "]");
-        } else {
-            String sellerName = StringUtil.nvl(store.get("sellerName"), "管理员");
-            Employee employee = baseDao.getJdbcTemplate().queryForObject("select * from employee where em_name=?",
-                    new BeanPropertyRowMapper<Employee>(Employee.class), sellerName);
-            // 转采购验收单
-            Key key = transferRepository.transfer("VerifyApply!ToPurcIn", vaid,employee);
-            piid = key.getId();
-            // 转入明细
-            transferRepository.transferDetail("VerifyApply!ToPurcIn", vaid, key,employee);
+        if ("VerifyApply!ToPurcIn".equals(caller)) {
+            // 判断该收料通知单是否已经转入过采购验收单
+            Object code = baseDao.getFieldDataByCondition("VerifyApply", "va_code", "va_id=" + vaid);
+            code = baseDao.getFieldDataByCondition("ProdInOut", "pi_inoutno", "pi_sourcecode='" + code + "' and PI_REFNO='采购收料单'");
+            if (code != null && !code.equals("")) {
+                return ApiResponse.failRsp("10014", request.getHeader("RequestId"), "该收料单已转入过采购验收单,验收单号[" + code + "]");
+            }
+        }
+        if ("VerifyApply!ToOtherIn".equals(caller)) {
+            // 判断该收料通知单是否已经转入过采购验收单
+            Object code = baseDao.getFieldDataByCondition("VerifyApply", "va_code", "va_id=" + vaid);
+            code = baseDao.getFieldDataByCondition("ProdInOut", "pi_inoutno", "pi_sourcecode='" + code + "' and PI_REFNO='采购收料单'");
+            if (code != null && !code.equals("")) {
+                return ApiResponse.failRsp("10014", request.getHeader("RequestId"), "该收料单已转入过其它入库单,单号[" + code + "]");
+            }
+        }
+        String sellerName = StringUtil.nvl(store.get("sellerName"), "管理员");
+        Employee employee = baseDao.getJdbcTemplate().queryForObject("select * from employee where em_name=?",
+                new BeanPropertyRowMapper<Employee>(Employee.class), sellerName);
+        // 转采购验收单
+        Key key = transferRepository.transfer(caller, vaid,employee);
+        piid = key.getId();
+        // 转入明细
+        transferRepository.transferDetail(caller, vaid, key,employee);
+        if ("VerifyApply!ToPurcIn".equals(caller)) {
             if (piid != 0) {
                 baseDao.execute("update prodiodetail set pd_prodid=(select pr_id from product where pd_prodcode=pr_code) where pd_piid=" + piid
                         + " and nvl(pd_prodcode,' ')<>' '");
@@ -102,8 +119,6 @@ public class MESServiceImpl implements MESService {
                 baseDao.execute("Insert into ProdChargeDetail(pd_id,pd_piid,pd_detno,pd_type,pd_amount,pd_currency,pd_rate) "
                         + "select ProdChargeDetail_seq.nextval, " + piid + ", pd_detno, pd_type,pd_amount,pd_currency,pd_rate "
                         + "from ProdChargeDetailAN where PD_ANID=" + vaid);
-                // 修改收料状态
-                baseDao.updateByCondition("VerifyApply", "va_turnstatuscode='TURNIN',va_turnstatus='已入库'", "va_id=" + vaid);
             }
             //
             if (piid != 0) {
@@ -136,24 +151,17 @@ public class MESServiceImpl implements MESService {
                             "pu_turnstatuscode='" + statuscode + "',pu_turnstatus='" + status + "'", "pu_code='" + pCode + "'");
                 }
             }
-            return ApiResponse.successRsp("0",request.getHeader("RequestId"),"入库成功");
         }
+        // 修改收料状态
+        baseDao.updateByCondition("VerifyApplyDetail", "vad_yqty=vad_qty", "va_id=" + vaid);
+        baseDao.updateByCondition("VerifyApply", "va_turnstatuscode='TURNIN',va_turnstatus='已入库'", "va_id=" + vaid);
+        return ApiResponse.successRsp("0",request.getHeader("RequestId"),"入库成功");
     }
 
     @Override
     public ApiResult<String> prodInOutMakeIn(HttpServletRequest request) {
-        String data="";
-        try {
-            data = PSHttpUtils.readRaw(request.getInputStream());
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-        JSONObject jsonObject = JSON.parseObject(data);
-        Object data1 = jsonObject.get("Data");
-        JSONObject jsonObject1 = JSON.parseObject(StringUtil.nvl(data1,""));
-        Object page1 = jsonObject1.get("Page1");
-        Object page2 = jsonObject1.get("Page2");
-        JSONArray jsonArray = JSON.parseArray(StringUtil.nvl(page1, ""));
+        Map<String, JSONArray> data = getData(request);
+        JSONArray jsonArray = data.get("main");
         int id=0;
         String code="";
         List<String> sqls = new ArrayList<>();
@@ -174,7 +182,7 @@ public class MESServiceImpl implements MESService {
                     "'未过账','"+map4.get("FNumber")+"','"+map4.get("FName")+"','"+map5.get("FNumber")+"','"+map5.get("FName")+"','"+map6.get("FNumber")+"','"+map7.get("FName")+"','ENTERING','在录入'," +
                     "'"+map8.get("FName")+"',to_date('"+jsonObject2.get("Fdate")+"','yyyy/MM/dd HH24:mi:ss'),'UNPRINT','未打印')");
         }
-        JSONArray jsonArray1 = JSON.parseArray(StringUtil.nvl(page2, ""));
+        JSONArray jsonArray1 = data.get("detail");
         int detno=0;
         for (int i = 0; i <jsonArray1.size() ; i++) {
             detno=i+1;
@@ -304,4 +312,274 @@ public class MESServiceImpl implements MESService {
         return ApiResponse.successRsp("0",request.getHeader("RequestId"),"生产报废单:"+code+",请在ERP查看!");
     }
 
+    @Override
+    public ApiResult<String> prodInOutOtherOut(HttpServletRequest request) {
+        Map<String, JSONArray> data = getData(request);
+        JSONArray jsonArray = data.get("main");
+        int id=0;
+        String code="";
+        List<String> sqls = new ArrayList<>();
+        for (int i = 0; i <jsonArray.size() ; i++) {
+            JSONObject jsonObject2 = JSON.parseObject(StringUtil.nvl(jsonArray.get(i), ""));
+            Map<Object, Object> map1 = JSONUtil.toMap(StringUtil.valueOf(jsonObject2.get("FDeptID")));
+            Map<Object, Object> map2 = JSONUtil.toMap(StringUtil.valueOf(jsonObject2.get("FBillTypeID")));
+            Map<Object, Object> map3 = JSONUtil.toMap(StringUtil.valueOf(jsonObject2.get("FFManagerID")));
+            Map<Object, Object> map4 = JSONUtil.toMap(StringUtil.valueOf(jsonObject2.get("FSManagerID")));
+            Map<Object, Object> map5 = JSONUtil.toMap(StringUtil.valueOf(jsonObject2.get("FBillerID")));
+            id = baseDao.getSeqId("PRODINOUT_SEQ");
+            code = baseDao.sGetMaxNumber("ProdInOut!OtherOut", 2);
+            sqls.add("insert into prodinout (pi_id,pi_inoutno,pi_class,pi_date,pi_statuscode,pi_status,pi_departmentcode,pi_departmentname,pi_emcode,pi_emname,pi_invostatuscode,pi_invostatus,pi_recordman,pi_recorddate,pi_printstatuscode,pi_printstatus,pi_type) " +
+                    "values ("+id+",'"+code+"','其它出库单',to_date('"+jsonObject2.get("Fdate")+"','yyyy/MM/dd HH24:mi:ss'),'UNPOST','未过账','"+map1.get("FNumber")+"','"+map1.get("FName")+"','"+map3.get("FNumber")+"','"+map3.get("FName")+"','ENTERING','在录入','"+map5.get("FName")+"',to_date('"+jsonObject2.get("Fdate")+"','yyyy/MM/dd HH24:mi:ss'),'UNPRINT','未打印','"+map2.get("FName")+"')");
+        }
+        JSONArray array = data.get("detail");
+        int detno=1;
+        for (int i = 0; i <array.size(); i++) {
+            JSONObject object = JSON.parseObject(StringUtil.nvl(array.get(i), "{}"));
+            Map<Object, Object> map = JSONUtil.toMap(StringUtil.valueOf(object.get("FItemID")));
+            String itemNo = StringUtil.nvl(map.get("FNumber"), "");
+            if ("".equals(itemNo)){
+                return ApiResponse.failRsp("10031",request.getHeader("RequestId"),"物料不能为空!");
+            }
+            String qty = StringUtil.nvl(object.get("FAuxQtyMust"), "");
+            if ("".equals(qty)){
+                return ApiResponse.failRsp("10032",request.getHeader("RequestId"),"实出数量数量不能为空!");
+            }
+            String fnote = StringUtil.nvl(object.get("Fnote"), "");
+            Map<Object, Object> map1 = JSONUtil.toMap(StringUtil.valueOf(object.get("FDCStockID1")));
+            String whcode = StringUtil.nvl(map1.get("FNumber"), "");
+            String whname = StringUtil.nvl(map1.get("FName"), "");
+            if ("".equals(whcode)){
+                return ApiResponse.failRsp("10033",request.getHeader("RequestId"),"仓库编号不能为空!");
+            }
+            sqls.add("insert into prodiodetail (pd_id,pd_piid,pd_inoutno,pd_piclass,pd_pdno,pd_prodcode," +
+                    "pd_outqty,pd_whcode,pd_whname,pd_remark) " +
+                    "values (PRODIODETAIL_SEQ.nextval,"+id+",'"+code+"','其它出库单',"+detno+",'"+itemNo+
+                    "',"+qty+",'"+whcode+"','"+whname+"','"+fnote+"')");
+            detno++;
+        }
+        baseDao.execute(sqls);
+        return ApiResponse.successRsp("0",request.getHeader("RequestId"),"其它出库单:"+code+",请在ERP查看!");
+    }
+
+    @Override
+    public ApiResult<String> prodInOutPicking(HttpServletRequest request) {
+        Map<String, JSONArray> data = getData(request);
+        JSONArray jsonArray = data.get("main");
+        String bccode = null;
+        int bcpiid = 0;
+        String llcode = null;
+        int llpiid=0;
+        String macode=null;
+        String llpiclass = "生产领料单", llcaller = "ProdInOut!Picking", bcpiclass = "拨出单", bccaller = "ProdInOut!AppropriationOut";
+        // 是否生成调拨单,勾选不生成,不勾选默认生成
+        Boolean notCreateAppropriation = baseDao.isDBSetting("MultiMakeSendLS", "notCreateAppropriation");
+        List<String> sqls = new ArrayList<>();
+        for (int i = 0; i <jsonArray.size() ; i++) {
+            JSONObject jsonObject2 = JSON.parseObject(StringUtil.nvl(jsonArray.get(i), ""));
+            Map<Object, Object> map1 = JSONUtil.toMap(StringUtil.valueOf(jsonObject2.get("FDeptID")));
+            Map<Object, Object> map2 = JSONUtil.toMap(StringUtil.valueOf(jsonObject2.get("FPurposeID")));
+            Map<Object, Object> map3 = JSONUtil.toMap(StringUtil.valueOf(jsonObject2.get("FFManagerID")));
+            Map<Object, Object> map4 = JSONUtil.toMap(StringUtil.valueOf(jsonObject2.get("FSManagerID")));
+            Map<Object, Object> map5 = JSONUtil.toMap(StringUtil.valueOf(jsonObject2.get("FBillerID")));
+            macode = StringUtil.valueOf(jsonObject2.get("FHeadSelfB0437"));
+            Object ma_tasktype = baseDao.getFieldDataByCondition("Make", "ma_tasktype", "ma_code in ('" + macode + "')");
+            if ("OS".equals(ma_tasktype)) {
+                llpiclass = "委外领料单";
+                llcaller = "ProdInOut!OutsidePicking";
+            }
+            if(!notCreateAppropriation){
+                //生成拨出单
+                bcpiid = baseDao.getSeqId("PRODINOUT_SEQ");
+                bccode = baseDao.sGetMaxNumber(bccaller, 2);
+                sqls.add("insert into prodinout (pi_id,pi_inoutno,pi_class,pi_date,pi_statuscode,pi_status," +
+                        "pi_departmentcode,pi_departmentname,pi_emcode,pi_emname,pi_invostatuscode,pi_invostatus," +
+                        "pi_recordman,pi_recorddate,pi_printstatuscode,pi_printstatus,pi_type) " +
+                        "values ("+bcpiid+",'"+bccode+"','"+bcpiclass+"',to_date('"+jsonObject2.get("Fdate")+"','yyyy/MM/dd " +
+                        "HH24:mi:ss'),'UNPOST','未过账','"+map1.get("FNumber")+"','"+map1.get("FName")+"','"+map4.get("FNumber")+"','"+map4.get("FName")+"','ENTERING','在录入','"+map5.get("FName")+"',to_date('"+jsonObject2.get("Fdate")+"','yyyy/MM/dd HH24:mi:ss'),'UNPRINT','未打印','库存转移')");
+            }
+            //生成生产领料单
+            llpiid = baseDao.getSeqId("PRODINOUT_SEQ");
+            llcode = baseDao.sGetMaxNumber(llcaller, 2);
+            sqls.add("insert into prodinout (pi_id,pi_inoutno,pi_class,pi_date,pi_statuscode,pi_status," +
+                    "pi_departmentcode,pi_departmentname,pi_emcode,pi_emname,pi_invostatuscode,pi_invostatus," +
+                    "pi_recordman,pi_recorddate,pi_printstatuscode,pi_printstatus,pi_type) " +
+                    "values ("+llpiid+",'"+llcode+"','"+llpiclass+"',to_date('"+jsonObject2.get("Fdate")+"','yyyy/MM/dd " +
+                    "HH24:mi:ss'),'UNPOST','未过账','"+map1.get("FNumber")+"','"+map1.get("FName")+"','"+map4.get(
+                            "FNumber")+"','"+map4.get("FName")+"','ENTERING','在录入','"+map5.get("FName")+"',to_date('"+jsonObject2.get("Fdate")+"','yyyy/MM/dd HH24:mi:ss'),'UNPRINT','未打印','"+map2.get("FName")+"')");
+            // 标示领料单的拨出单号
+            baseDao.execute("update ProdInOut set pi_fromcode='" + bccode + "' where pi_id=" + llpiid);
+        }
+        Object mmwhcode = baseDao.getFieldDataByCondition("MakeMaterial", "min(mm_whcode)", " nvl(mm_whcode,' ')<>' '" + " and mm_code in ('" + macode + "')");
+        Object mmwhname="";
+        if (mmwhcode!=null&&!"".equals(mmwhcode.toString())){
+            mmwhname = baseDao.getFieldDataByCondition("warehouse", "min(wh_description)",
+                    "wh_code in ('" + mmwhcode + "'");
+        }
+        JSONArray array = data.get("detail");
+        int detno=1;
+        for (int i = 0; i <array.size(); i++) {
+            JSONObject object = JSON.parseObject(StringUtil.nvl(array.get(i), "{}"));
+            Map<Object, Object> map = JSONUtil.toMap(StringUtil.valueOf(object.get("FItemID")));
+            String itemNo = StringUtil.nvl(map.get("FNumber"), "");
+            if ("".equals(itemNo)){
+                return ApiResponse.failRsp("10041",request.getHeader("RequestId"),"物料不能为空!");
+            }
+            String qty = StringUtil.nvl(object.get("FAuxQty"), "");
+            if ("".equals(qty)){
+                return ApiResponse.failRsp("10042",request.getHeader("RequestId"),"实发数量不能为空!");
+            }
+            Map<Object, Object> map1 = JSONUtil.toMap(StringUtil.valueOf(object.get("FSCStockID1")));
+            String whcode = StringUtil.nvl(map1.get("FNumber"), "");
+            String whname = StringUtil.nvl(map1.get("FName"), "");
+            if ("".equals(whcode)){
+                return ApiResponse.failRsp("10043",request.getHeader("RequestId"),"发料仓库不能为空!");
+            }
+            String fSourceInterId = StringUtil.nvl(object.get("FSourceInterId"), "");
+            String ficmoBillNo = StringUtil.nvl(object.get("FICMOBillNo"), "");
+            Object mmdetno = baseDao.getFieldDataByCondition("MakeMaterial", "mm_detno", "mm_id in (" + fSourceInterId+")");
+            if(bccode!=null) {
+                sqls.add("insert into prodiodetail (pd_id,pd_piid,pd_inoutno,pd_piclass,pd_pdno,pd_prodcode," +
+                        "pd_outqty,pd_whcode,pd_whname,pd_inwhcode,pd_inwhname) " +
+                        "values (PRODIODETAIL_SEQ.nextval," + bcpiid + ",'" + bccode + "','"+bcpiclass+"'," + detno + ",'" + itemNo +
+                        "'," + qty + ",'" + mmwhcode + "','" + mmwhname + "','" + whcode + "','" + whname + "')");
+            }
+            sqls.add("insert into prodiodetail (pd_id,pd_piid,pd_inoutno,pd_piclass,pd_pdno,pd_prodcode," +
+                    "pd_outqty,pd_whcode,pd_whname,pd_ordercode,pd_orderdetno) " +
+                    "values (PRODIODETAIL_SEQ.nextval," + llpiid + ",'" + llcode + "','"+llpiclass+"'," + detno + ",'" + itemNo +
+                    "'," + qty + ",'" + whcode + "','" + whname + "','"+ficmoBillNo+"',"+mmdetno+")");
+            detno++;
+        }
+        baseDao.execute(sqls);
+        return ApiResponse.successRsp("0",request.getHeader("RequestId"),"生产领料单:"+llcode+",拨出单:"+bccode+",请在ERP查看!");
+    }
+
+    @Override
+    public ApiResult<String> prodInOutMakeReturn(HttpServletRequest request) {
+        Map<String, JSONArray> data = getData(request);
+        JSONArray jsonArray = data.get("main");
+        int id=0;
+        String code="";
+        List<String> sqls = new ArrayList<>();
+        for (int i = 0; i <jsonArray.size() ; i++) {
+            Object obj = jsonArray.get(i);
+            JSONObject jsonObject2 = JSON.parseObject(StringUtil.nvl(obj, ""));
+            Map<Object, Object> map1 = JSONUtil.toMap(StringUtil.valueOf(jsonObject2.get("FDeptID")));
+            Map<Object, Object> map2 = JSONUtil.toMap(StringUtil.valueOf(jsonObject2.get("FPurposeID")));
+            Map<Object, Object> map3 = JSONUtil.toMap(StringUtil.valueOf(jsonObject2.get("FFManagerID")));
+            Map<Object, Object> map4 = JSONUtil.toMap(StringUtil.valueOf(jsonObject2.get("FSManagerID")));
+            Map<Object, Object> map5 = JSONUtil.toMap(StringUtil.valueOf(jsonObject2.get("FBillerID")));
+            id = baseDao.getSeqId("PRODINOUT_SEQ");
+            code = baseDao.sGetMaxNumber("ProdInOut!Make!Return", 2);
+            sqls.add("insert into prodinout (pi_id,pi_inoutno,pi_class,pi_date,pi_statuscode,pi_status,pi_departmentcode,pi_departmentname,pi_emcode,pi_emname,pi_invostatuscode,pi_invostatus,pi_recordman,pi_recorddate,pi_printstatuscode,pi_printstatus) " +
+                    "values ("+id+",'"+code+"','生产退料单',to_date('"+jsonObject2.get("Fdate")+"','yyyy/MM/dd HH24:mi:ss'),'UNPOST','未过账','"+map1.get("FNumber")+"','"+map1.get("FName")+"','"+map4.get("FNumber")+"','"+map4.get("FName")+"','ENTERING','在录入','"+map5.get("FName")+"',to_date('"+jsonObject2.get("Fdate")+"','yyyy/MM/dd HH24:mi:ss'),'UNPRINT','未打印')");
+        }
+        JSONArray array = data.get("detail");
+        int detno=1;
+        for (int i = 0; i <array.size(); i++) {
+            JSONObject object = JSON.parseObject(StringUtil.nvl(array.get(i), "{}"));
+            Map<Object, Object> map = JSONUtil.toMap(StringUtil.valueOf(object.get("FItemID")));
+            String itemNo = StringUtil.nvl(map.get("FNumber"), "");
+            if ("".equals(itemNo)){
+                return ApiResponse.failRsp("10051",request.getHeader("RequestId"),"物料不能为空!");
+            }
+            String qty = StringUtil.nvl(object.get("FAuxQty"), "");
+            if ("".equals(qty)){
+                return ApiResponse.failRsp("10052",request.getHeader("RequestId"),"实发数量不能为空!");
+            }
+            String fnote = StringUtil.nvl(object.get("Fnote"), "");
+            Map<Object, Object> map1 = JSONUtil.toMap(StringUtil.valueOf(object.get("FSCStockID1")));
+            String whcode = StringUtil.nvl(map1.get("FNumber"), "");
+            String whname = StringUtil.nvl(map1.get("FName"), "");
+            if ("".equals(whcode)){
+                return ApiResponse.failRsp("10053",request.getHeader("RequestId"),"仓库编号不能为空!");
+            }
+            String ficmoBillNo = StringUtil.nvl(object.get("FICMOBillNo"), "");
+            String fBatchNo = StringUtil.nvl(object.get("FBatchNo"), "");
+
+            sqls.add("insert into prodiodetail (pd_id,pd_piid,pd_inoutno,pd_piclass,pd_pdno,pd_prodcode," +
+                    "pd_inqty,pd_whcode,pd_whname,pd_remark,pd_batchcode,pd_ordercode) " +
+                    "values (PRODIODETAIL_SEQ.nextval,"+id+",'"+code+"','生产退料单',"+detno+",'"+itemNo+
+                    "',"+qty+",'"+whcode+"','"+whname+"','"+fnote+"','"+fBatchNo+"','"+ficmoBillNo+"')");
+            detno++;
+        }
+        baseDao.execute(sqls);
+        return ApiResponse.successRsp("0",request.getHeader("RequestId"),"生产退料单:"+code+",请在ERP查看!");
+    }
+
+    @Override
+    public ApiResult<String> prodInOutAppropriationOut(HttpServletRequest request) {
+        Map<String, JSONArray> data = getData(request);
+        JSONArray jsonArray = data.get("main");
+        int id=0;
+        String code="";
+        List<String> sqls = new ArrayList<>();
+        for (int i = 0; i <jsonArray.size() ; i++) {
+            JSONObject jsonObject2 = JSON.parseObject(StringUtil.nvl(jsonArray.get(i), ""));
+            Map<Object, Object> map1 = JSONUtil.toMap(StringUtil.valueOf(jsonObject2.get("FDeptID")));
+            Map<Object, Object> map2 = JSONUtil.toMap(StringUtil.valueOf(jsonObject2.get("FRefType")));
+            Map<Object, Object> map3 = JSONUtil.toMap(StringUtil.valueOf(jsonObject2.get("FFManagerID")));
+            Map<Object, Object> map4 = JSONUtil.toMap(StringUtil.valueOf(jsonObject2.get("FSManagerID")));
+            Map<Object, Object> map5 = JSONUtil.toMap(StringUtil.valueOf(jsonObject2.get("FBillerID")));
+            id = baseDao.getSeqId("PRODINOUT_SEQ");
+            code = baseDao.sGetMaxNumber("ProdInOut!AppropriationOut", 2);
+            sqls.add("insert into prodinout (pi_id,pi_inoutno,pi_class,pi_date,pi_statuscode,pi_status," +
+                    "pi_departmentcode,pi_departmentname,pi_emcode,pi_emname,pi_invostatuscode,pi_invostatus," +
+                    "pi_recordman,pi_recorddate,pi_printstatuscode,pi_printstatus,pi_type,pi_inoutman) " +
+                    "values ("+id+",'"+code+"','拨出单',to_date('"+jsonObject2.get("Fdate")+"','yyyy/MM/dd HH24:mi:ss')," +
+                    "'UNPOST','未过账','"+map1.get("FNumber")+"','"+map1.get("FName")+"','"+map4.get("FNumber")+"','"+map4.get("FName")+"','ENTERING','在录入','"+map5.get("FName")+"',to_date('"+jsonObject2.get("Fdate")+"','yyyy/MM/dd HH24:mi:ss'),'UNPRINT','未打印','"+map2.get("FName")+"','"+map3.get("FName")+"')");
+        }
+        JSONArray array = data.get("detail");
+        int detno=1;
+        for (int i = 0; i <array.size(); i++) {
+            JSONObject object = JSON.parseObject(StringUtil.nvl(array.get(i), "{}"));
+            Map<Object, Object> map = JSONUtil.toMap(StringUtil.valueOf(object.get("FItemID")));
+            String itemNo = StringUtil.nvl(map.get("FNumber"), "");
+            if ("".equals(itemNo)){
+                return ApiResponse.failRsp("10061",request.getHeader("RequestId"),"物料不能为空!");
+            }
+            String qty = StringUtil.nvl(object.get("Fauxqty"), "");
+            if ("".equals(qty)){
+                return ApiResponse.failRsp("10062",request.getHeader("RequestId"),"实转数量不能为空!");
+            }
+            Map<Object, Object> map1 = JSONUtil.toMap(StringUtil.valueOf(object.get("FSCStockID1")));
+            String whcode = StringUtil.nvl(map1.get("FNumber"), "");
+            String whname = StringUtil.nvl(map1.get("FName"), "");
+            if ("".equals(whcode)){
+                return ApiResponse.failRsp("10063",request.getHeader("RequestId"),"发货仓库不能为空!");
+            }
+            Map<Object, Object> map2 = JSONUtil.toMap(StringUtil.valueOf(object.get("FDCStockID1")));
+            String whcode2 = StringUtil.nvl(map2.get("FNumber"), "");
+            String whname2 = StringUtil.nvl(map2.get("FName"), "");
+            if ("".equals(whcode2)){
+                return ApiResponse.failRsp("10064",request.getHeader("RequestId"),"收货仓库不能为空!");
+            }
+
+            sqls.add("insert into prodiodetail (pd_id,pd_piid,pd_inoutno,pd_piclass,pd_pdno,pd_prodcode," +
+                    "pd_outqty,pd_whcode,pd_whname,pd_inwhcode,pd_inwhname) " +
+                    "values (PRODIODETAIL_SEQ.nextval,"+id+",'"+code+"','拨出单',"+detno+",'"+itemNo+
+                    "',"+qty+",'"+whcode+"','"+whname+"','"+whcode2+"','"+whname2+"')");
+            detno++;
+        }
+        baseDao.execute(sqls);
+        return ApiResponse.successRsp("0",request.getHeader("RequestId"),"生产拨出单:"+code+",请在ERP查看!");
+    }
+
+    private Map<String, JSONArray> getData(HttpServletRequest request){
+        Map<String, JSONArray> map = new HashMap<>();
+        try {
+            String data = PSHttpUtils.readRaw(request.getInputStream());
+            JSONObject jsonObject = JSON.parseObject(data);
+            Object data1 = jsonObject.get("Data");
+            JSONObject jsonObject1 = JSON.parseObject(StringUtil.nvl(data1,""));
+            Object page1 = jsonObject1.get("Page1");
+            Object page2 = jsonObject1.get("Page2");
+            JSONArray jsonArray = JSON.parseArray(StringUtil.nvl(page1, ""));
+            map.put("main",jsonArray);
+            JSONArray jsonArray1 = JSON.parseArray(StringUtil.nvl(page2, ""));
+            map.put("detail",jsonArray1);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return map;
+    }
 }

+ 23 - 0
src/main/java/com/uas/eis/service/MESService.java

@@ -45,4 +45,27 @@ public interface MESService {
      */
     ApiResult<String> initMakeScrap(HttpServletRequest request,String data);
 
+    /**
+     * 原材料出库
+     * @return
+     */
+    ApiResult<String> prodInOutOtherOut(HttpServletRequest request);
+
+    /**
+     * 生产领料
+     * @return
+     */
+    ApiResult<String> prodInOutPicking(HttpServletRequest request);
+
+    /**
+     * 生产退料
+     * @return
+     */
+    ApiResult<String> prodInOutMakeReturn(HttpServletRequest request);
+
+    /**
+     * 库存转移
+     * @return
+     */
+    ApiResult<String> prodInOutAppropriationOut(HttpServletRequest request);
 }