Browse Source

增加报废单处理

koul 3 years ago
parent
commit
2d84ce04c8
1 changed files with 232 additions and 12 deletions
  1. 232 12
      src/main/java/com/uas/eis/service/Impl/MESServiceImpl.java

+ 232 - 12
src/main/java/com/uas/eis/service/Impl/MESServiceImpl.java

@@ -416,17 +416,30 @@ public class MESServiceImpl implements MESService {
         String code="";
         String msclass="生产报废单";
         String caller="MakeScrap";
+        String sourcetype="制造单";
         List<String> sqls = new ArrayList<>();
+        Employee employee = baseDao.getJdbcTemplate().queryForObject("select * from employee where em_code=?",
+                new BeanPropertyRowMapper<Employee>(Employee.class), "mes");
         for (int i = 0; i <jsonArray.size() ; i++) {
             JSONObject jsonObject = JSON.parseObject(StringUtil.nvl(jsonArray.get(i), ""));
             String fSelBillNo = StringUtil.nvl(jsonObject.get("FSelBillNo"), "");
             if ("".equals(fSelBillNo)){
                 return ApiResponse.failRsp("10029", requestId, "MES单号不能为空!");
             }
+            String prodNo = StringUtil.nvl(jsonObject.get("prodNo"), "");
+            if ("".equals(prodNo)){
+                return ApiResponse.failRsp("10023",requestId,"工单单号不能为空!");
+            }
+            String ma_tasktype = StringUtil.nvl(baseDao.getFieldDataByCondition("make", "ma_tasktype", "ma_code='" + prodNo + "'"), "");
+            if ("OS".equals(ma_tasktype)) {
+                msclass = "委外报废单";
+                caller = "MakeScrap!Make";
+                sourcetype="委外加工单";
+            }
             int count = baseDao.getCount("select count(1) from MakeScrap where ms_class='" + msclass + "' and ms_mescode='" + fSelBillNo + "'");
             if (count>0){
                 Object co = baseDao.getFieldDataByCondition("MakeScrap", "ms_code", "ms_class='" + msclass + "' and ms_mescode='" + fSelBillNo + "'");
-                return ApiResponse.successRsp("0",requestId,"MES单号:"+fSelBillNo+"已存在,请在ERP查看"+msclass+",单据编号:"+co);
+                return ApiResponse.failRsp("10024",requestId,"MES单号:"+fSelBillNo+"已存在,请在ERP查看"+msclass+",单据编号:"+co);
             }
             id = baseDao.getSeqId("MAKESCRAP_SEQ");
             code = baseDao.sGetMaxNumber(caller, 2);
@@ -435,14 +448,16 @@ public class MESServiceImpl implements MESService {
             if ("".equals(fwcCode)) {
                 return ApiResponse.failRsp("10021", requestId, "工作中心不能为空!");
             }
-            String createdUser = StringUtil.nvl(jsonObject.get("createdUser"), "mes");
+            String createdUser = StringUtil.nvl(jsonObject.get("createdUser"), employee.getEm_name());
             String createdDateTime = StringUtil.nvl(jsonObject.get("createdDateTime"), DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
             String companyNo = StringUtil.nvl(jsonObject.get("companyNo"), "BYT");
             String fremark = StringUtil.nvl(jsonObject.get("Fremark"), "");
-            sqls.add("insert into MakeScrap (ms_id,ms_code,ms_class,ms_statuscode,ms_status,ms_printstatuscode,ms_printstatus,ms_date,ms_wccode,ms_recordman,ms_indate,ms_cop,ms_remark,ms_mescode) values (" + id + ",'" + code + "','"+msclass+ "','ENTERING','在录入','UNPRINT','未打印',to_date('" + fdateTime + "','yyyy-MM-dd HH24:mi:ss'),'" + fwcCode + "','" + createdUser + "',to_date('" + createdDateTime + "','yyyy-MM-dd HH24:mi:ss'),'" + companyNo + "','" + fremark + "','"+fSelBillNo+"')");
+            sqls.add("insert into MakeScrap (ms_id,ms_code,ms_class,ms_statuscode,ms_status,ms_printstatuscode,ms_printstatus,ms_date,ms_wccode,ms_recordman,ms_indate,ms_cop,ms_remark,ms_mescode,ms_sourcetype,ms_sourcecode) values (" + id + ",'" + code + "','"+msclass+ "','COMMITED','已提交','UNPRINT','未打印',to_date('" + fdateTime + "','yyyy-MM-dd HH24:mi:ss'),'" + fwcCode + "','" + createdUser + "',to_date('" + createdDateTime + "','yyyy-MM-dd HH24:mi:ss'),'" + companyNo + "','" + fremark + "','"+fSelBillNo+"','"+sourcetype+"','"+prodNo+"')");
         }
         JSONArray array = data.get("detail");
         int detno=1;
+        String fDeptID=null;
+        String fDept=null;
         for (int i = 0; i <array.size(); i++) {
             JSONObject object = JSON.parseObject(StringUtil.nvl(array.get(i), "{}"));
             String lineId = StringUtil.nvl(object.get("lineId"), "");
@@ -454,10 +469,6 @@ public class MESServiceImpl implements MESService {
             if ("".equals(prodNo)){
                 return ApiResponse.failRsp("10023",requestId,"工单单号不能为空!");
             }
-            String prodDetno = StringUtil.nvl(object.get("prodDetno"), "");
-            if ("".equals(prodDetno)){
-                return ApiResponse.failRsp("10024",requestId,"工单行号不能为空!");
-            }
             String itemNo = StringUtil.nvl(object.get("itemNo"), "");
             if ("".equals(itemNo)){
                 return ApiResponse.failRsp("10024",requestId,"物料不能为空!");
@@ -470,11 +481,11 @@ public class MESServiceImpl implements MESService {
             if ("".equals(reason)){
                 return ApiResponse.failRsp("10026",requestId,"报废原因不能为空!");
             }
-            String fDeptID = StringUtil.nvl(object.get("FDeptID"), "");
+            fDeptID = StringUtil.nvl(object.get("FDeptID"), "");
             if ("".equals(fDeptID)){
                 return ApiResponse.failRsp("10027",requestId,"责任部门编号不能为空!");
             }
-            String fDept = StringUtil.nvl(object.get("FDept"), "");
+            fDept = StringUtil.nvl(object.get("FDept"), "");
             if ("".equals(fDept)){
                 return ApiResponse.failRsp("10028",requestId,"责任部门不能为空!");
             }
@@ -486,7 +497,114 @@ public class MESServiceImpl implements MESService {
             detno++;
         }
         baseDao.execute(sqls);
-        return ApiResponse.successRsp("0",requestId,"生产报废单:"+code+",请在ERP查看!");
+        Object[] status = baseDao.getFieldsDataByCondition("MakeScrap", new String[] { "ms_statuscode", "ms_indate","ms_date" }, "ms_id=" + id);
+        //审核
+        String s = checkFreezeMonth(status[2]);
+        // 账期和工单状态检查
+        String s1 = ScrapCheckAll(id, caller);
+        String s2 = ScrapCheck_scrapqty(id);
+        String s3 = copcheck(id);
+        String s4 = checkMakeMaterial(id);
+        if (s!=null||s1!=null||s2!=null||s3!=null||s4!=null){
+            baseDao.deleteById("MakeScrapdetail","md_msid",id);
+            baseDao.deleteById("MakeScrap","ms_id",id);
+            return ApiResponse.failRsp("10029",requestId,s+s1+s2+s3+s4);
+        }
+        baseDao.updateByCondition("MakeScrapdetail", "md_status=99", "md_msid=" + id);
+        List<Object[]> objects = baseDao.getFieldsDatasByCondition("MakeScrapdetail left join make on ma_code=md_mmcode ", new String[] {
+                "ma_id", "md_mmdetno", "md_qty", "md_prodcode" }, " md_msid=" + id);
+        for (Object[] object : objects) {
+            baseDao.updateByCondition("Makematerial ", "mm_scrapqty =nvl(mm_scrapqty,0)+" + object[2], "mm_detno=" + object[1]
+                    + " and mm_maid=" + object[0]);
+            baseDao.updateByCondition("Makematerial ", "mm_repscrapqty =nvl(mm_repscrapqty,0)+" + object[2], "mm_detno=" + object[1]
+                    + " and mm_maid=" + object[0] + " and mm_prodcode<>'" + object[3] + "'");
+            baseDao.updateByCondition("Makematerialreplace ", "mp_scrapqty =nvl(mp_scrapqty,0)+" + object[2], " mp_maid=" + object[0]
+                    + " and mp_mmdetno=" + object[1] + " and mp_prodcode='" + object[3] + "'");
+        }
+        // 执行审核操作
+        baseDao.updateByCondition("MakeScrap", "ms_status='已审核',ms_statuscode='AUDITED',ms_auditdate=sysdate,ms_auditman='"+employee.getEm_name()+"'","ms_id="+ id);
+        // 记录操作
+        baseDao.execute("INSERT INTO MessageLog(ml_id,ml_date,ml_man,ml_content,ml_result,ml_search) VALUES (MessageLog_seq.nextval,sysdate,'mes','审核操作','审核成功','MakeScrap|ms_id="+id+"')");
+        //生成超损请购
+        int apId = baseDao.getSeqId("APPLICATION_SEQ");
+        String apCode = baseDao.sGetMaxNumber("Application", 2);
+        baseDao.execute("insert into Application (ap_id,ap_code,ap_kind,ap_date,ap_statuscode,ap_status,ap_pleamanname,ap_pleamanid,ap_recorder,ap_recorderid,ap_recorddate,ap_departcode,ap_departname,ap_source,ap_sourceid,ap_printstatuscode,ap_printstatus,ap_remark) values " +
+                "("+apId+",'"+apCode+"','超损请购',sysdate,'ENTERING','在录入','"+employee.getEm_name()+"',"+employee.getEm_id()+",'"+employee.getEm_name()+"',"+employee.getEm_id()+",sysdate,'"+fDeptID+"','"+fDept+"','"+msclass+"',"+id+",'UNPRINT','未打印','MES生产报废单审核生成')");
+        baseDao.execute("insert into applicationdetail (ad_id,ad_apid,ad_code,ad_detno,ad_prodcode,ad_qty,ad_use,ad_statuscode,ad_status,ad_source,ad_sourcecode,ad_remark) " +
+                "select APPLICATIONDETAIL_SEQ.nextval,"+apId+",'"+apCode+"',md_detno,md_prodcode,md_qty,md_reason,'ENTERING','在录入','"+msclass+"','"+code+"','MES生产报废单审核生成' from MakeScrapdetail where md_msid=" + id);
+        baseDao.execute("update applicationdetail set ad_kcqty=(select ad_qty/(case when nvl(pr_purcrate,0)=0 then 1 else pr_purcrate end) from product where pr_code=ad_prodcode) where ad_apid="+apId);
+        return ApiResponse.successRsp("0",requestId,msclass+":"+code+",请在ERP查看!");
+    }
+
+    @Override
+    public ApiResult<String> deleteMakeScrap(HttpServletRequest request) {
+        String requestId = request.getHeader("RequestId");
+        JSONObject jsonData = getJsonData(request);
+        String msclass="生产报废单";
+        String caller="MakeScrap";
+        if (jsonData==null){
+            return ApiResponse.failRsp("10096",requestId,"参数异常!");
+        }
+        String fSelBillNo = StringUtil.nvl(jsonData.get("FSelBillNo"), "");
+        if ("".equals(fSelBillNo)) {
+            return ApiResponse.failRsp("10031", requestId, "MES单号不能为空!");
+        }
+        int count = baseDao.getCount("select count(1) from MakeScrap where ms_mescode='" + fSelBillNo + "'");
+        if (count <= 0) {
+            return ApiResponse.failRsp("10032", requestId, "MES单号对应报废单不存在,请核查!");
+        }
+        Object[] scraps = baseDao.getFieldsDataByCondition("MakeScrap","ms_id,ms_sourcecode,ms_sourcetype,ms_indate,ms_date,ms_code", "ms_mescode='" + fSelBillNo + "'");
+        if ("委外加工单".equals(StringUtil.nvl(scraps[2],""))){
+            msclass = "委外报废单";
+            caller = "MakeScrap!Make";
+        }
+        int msId = Integer.parseInt(StringUtil.nvl(scraps[0], "0"));
+        //判断请购单
+        int count1 = baseDao.getCount("select count(1) from application where nvl(ap_statuscode,'ENTERING')<>'ENTERING' and ap_source='" + msclass + "' and ap_sourceid=" + msId);
+        if(count1>0){
+            return ApiResponse.failRsp("10033", requestId, "请购单不是在录入状态,不允许反审核!");
+        }
+        //反审核报废单
+        String s = checkFreezeMonth(scraps[4]);
+        baseDao.execute("update MakeMaterial set mm_turnaddqty=(select sum(nvl(pd_outqty,0)) from prodiodetail,prodinout "
+                + "where pd_piid=pi_id  and pi_statuscode<>'DELETE' and pd_status=0 and "
+                + "pd_ordercode=mm_code and pd_orderdetno=mm_detno  and pd_piclass in ('生产补料单', '委外补料单')) where mm_code in (select md_mmcode from MakeScrapDetail where md_msid="
+                + msId + ")");
+        SqlRowList rs = baseDao
+                .queryForRowSet("select md_detno from MakeScrapDetail left join makematerial on mm_code=md_mmcode and md_mmdetno=mm_detno left join make on mm_maid=ma_id where md_msid='"
+                        + msId
+                        + "' and mm_addqty+NVL(mm_turnaddqty,0)>nvl(mm_scrapqty,0)+nvl(mm_returnmqty,0)-md_qty-nvl(mm_balance,0) and nvl(mm_scrapqty,0)+nvl(mm_returnmqty,0)-md_qty-nvl(mm_balance,0)>0 ");
+        if (rs.next()) {
+            return ApiResponse.failRsp("10033", requestId, "序号【" + rs.getString("md_detno") + "】报废数已生成补料单,不能反审核报废单!");
+        }
+        // 账期和工单状态检查
+        String s1 = ScrapCheckAll(msId, caller);
+        if (s!=null||s1!=null){
+            return ApiResponse.failRsp("10029",requestId,s+s1);
+        }
+        baseDao.deleteByCondition("applicationdetail","ad_apid in (select ap_id from application where ap_source='" + msclass + "' and ap_sourceid=" + msId+")");
+        baseDao.deleteByCondition("Application","ap_source='" + msclass + "' and ap_sourceid=" + msId);
+        baseDao.updateByCondition("MakeScrapdetail", "md_status=0", "md_msid=" + msId);
+        List<Object[]> objects = baseDao.getFieldsDatasByCondition("MakeScrapdetail left join make on ma_code=md_mmcode", new String[] {
+                "ma_id", "md_mmdetno", "md_qty", "md_prodcode" }, " md_msid=" + msId);
+        for (Object[] obj : objects) {
+            baseDao.updateByCondition("Makematerial ", "mm_scrapqty =nvl(mm_scrapqty,0)-" + obj[2], "mm_detno=" + obj[1] + " and mm_maid=" + obj[0]);
+            baseDao.updateByCondition("Makematerial ", "mm_repscrapqty =nvl(mm_repscrapqty,0)-" + obj[2], "mm_detno=" + obj[1] + " and mm_maid=" + obj[0] + " and mm_prodcode<>'" + obj[3] + "'");
+            baseDao.updateByCondition("Makematerialreplace ", "mp_scrapqty =nvl(mp_scrapqty,0)-" + obj[2], " mp_maid=" + obj[0] + " and mp_mmdetno=" + obj[1] + " and mp_prodcode='" + obj[3] + "'");
+        }
+        // 执行反审核操作
+        baseDao.updateByCondition("MakeScrap", "ms_statuscode='ENTERING',ms_status='在录入'", "ms_id=" + msId);
+        // 记录操作
+        baseDao.execute("INSERT INTO MessageLog(ml_id,ml_date,ml_man,ml_content,ml_result,ml_search) VALUES " +
+                "(MessageLog_seq.nextval,sysdate,'mes','反审核操作','反审核成功','MakeScrap|ms_id="+msId+"')");
+        // 删除主表
+        baseDao.deleteById("MakeScrap", "ms_id", msId);
+        // 删除明细表
+        baseDao.deleteById("MakeScrapdetail", "md_msid", msId);
+        // 记录操作
+        baseDao.execute("INSERT INTO MessageLog(ml_id,ml_date,ml_man,ml_content,ml_result,ml_search) VALUES " +
+                "(MessageLog_seq.nextval,sysdate,'mes','删除操作','删除成功','MakeScrap|ms_id="+msId+"')");
+        return ApiResponse.successRsp("0",requestId,msclass+":"+scraps[5]+"删除成功!");
     }
 
     @Override
@@ -704,6 +822,7 @@ public class MESServiceImpl implements MESService {
         }
         if (warehouses!=null){
             sqls.add("update prodinout set pi_purpose='"+warehouses[0]+"',pi_purposename='"+warehouses[1]+"' where pi_id="+bcpiid);
+            sqls.add("update prodinout set pi_whcode='"+warehouses[0]+"',pi_whname='"+warehouses[1]+"' where pi_id="+llpiid);
         }
         baseDao.execute(sqls);
         refreshTurnQty(maid,0);
@@ -1305,6 +1424,7 @@ public class MESServiceImpl implements MESService {
                     "values ("+llpiid+",'"+llcode+"','"+llpiclass+"',to_date('"+object.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('"+object.get("Fdate")+"','yyyy-MM-dd HH24:mi:ss'),'UNPRINT','未打印','"+map2.get("FName")+"','"+fSelBillNo+"')");
         }
         int detno=1;
+        Object[] warehouses=null;
         for (int i = 0; i <detail.size(); i++) {
             JSONObject object = JSON.parseObject(StringUtil.nvl(detail.get(i), "{}"));
             Map<Object, Object> map = JSONUtil.toMap(StringUtil.valueOf(object.get("FItemID")));
@@ -1326,7 +1446,7 @@ public class MESServiceImpl implements MESService {
             if (count<=0){
                 return ApiResponse.failRsp("10044",requestId,"MES仓库编号在ERP没有对应关系,请联系管理员新增!");
             }
-            Object[] warehouses = baseDao.getFieldsDataByCondition("customtabledetail left join customtable on cd_ctid=ct_id left join Warehouse on cd_varchar50_3=wh_code", "cd_varchar50_3,wh_description", "ct_statuscode='AUDITED' and ct_caller='MESWarehouse' and cd_varchar50_1='" + whcode + "'");
+            warehouses = baseDao.getFieldsDataByCondition("customtabledetail left join customtable on cd_ctid=ct_id left join Warehouse on cd_varchar50_3=wh_code", "cd_varchar50_3,wh_description", "ct_statuscode='AUDITED' and ct_caller='MESWarehouse' and cd_varchar50_1='" + whcode + "'");
             String ficmoBillNo = StringUtil.nvl(object.get("FICMOBillNo"), "");
             int lineId = Integer.parseInt(StringUtil.nvl(object.get("lineId"), "0"));
             int count4 = baseDao.getCount("select count(1) from MakeMaterial where mm_id in (" + lineId + ")");
@@ -1342,6 +1462,9 @@ public class MESServiceImpl implements MESService {
         if ("OS".equals(ma_tasktype)) {
             sqls.add("update prodinout set(pi_cardcode,pi_title,pi_receivecode,pi_receivename) = (select max(ma_vendcode),max(ma_vendname),max(nvl(ma_apvendcode,ma_vendcode)),max(nvl(ma_apvendname,ma_vendname)) from make where ma_id in (" + maid + ")) where pi_id=" + llpiid);
         }
+        if (warehouses!=null){
+            sqls.add("update prodinout set pi_whcode='"+warehouses[0]+"',pi_whname='"+warehouses[1]+"' where pi_id="+llpiid);
+        }
         baseDao.execute(sqls);
         Employee employee = baseDao.getJdbcTemplate().queryForObject("select * from employee where em_code=?",
                 new BeanPropertyRowMapper<Employee>(Employee.class), "mes");
@@ -3805,4 +3928,101 @@ public class MESServiceImpl implements MESService {
                                     + maidstr + ")");
         }
     }
-}
+
+    private String checkFreezeMonth(Object pidate) {
+        boolean bool = baseDao.checkIf("PeriodsDetail", "pd_code='MONTH-P' and pd_status=99 and pd_detno=to_char(to_date('" + pidate
+                + "','yyyy-mm-dd hh24:mi:ss'), 'yyyymm')");
+        if (bool) {
+            return "单据日期所属期间已结账,不允许进行当前操作!";
+        }
+        String freeze = baseDao.getDBSetting("sys","freezeMonth");
+        if (freeze != null && !freeze.equals("")) {
+            if (Integer.parseInt(freeze) == DateUtil.getYearmonth(pidate.toString())) {
+                return "单据日期所属期间已冻结,不允许进行当前操作!";
+            }
+        }
+        return null;
+    }
+
+    private String ScrapCheckAll(int ms_id, String caller) {
+        // 判断工单状态是否已审核
+        SqlRowList rs = baseDao.queryForRowSet("select md_detno,md_mmcode,ma_status from makescrapdetail,make  where md_msid=" + ms_id
+                + " and md_mmcode=ma_code and ma_statuscode<>'AUDITED' ");
+        if (rs.next()) {
+            return "制造单" + rs.getString("md_mmcode") + "状态[" + rs.getString("ma_status") + "],只能操作已审核状态的制造单!";
+        }
+        return null;
+    }
+
+    /**
+     * 判断报废数是否大于结存可报废数
+     *
+     * @param
+     */
+    private String ScrapCheck_scrapqty(Integer ms_id) {
+        String sql = "";
+        String err = "";
+        sql = "UPDATE MakeMaterial set mm_allscrapqty=nvl(mm_scrapqty,0)+nvl((select sum(md_qty) from MakeScrapDetail,MakeScrap where ms_id=md_msid and (ms_statuscode='COMMITED' or ms_id='"
+                + ms_id
+                + "') and mm_code=md_mmcode and md_mmdetno=mm_detno),0) "
+                + " WHERE (mm_code,mm_detno) in (select md_mmcode as mm_code,md_mmdetno as mm_detno from MakeScrapDetail where md_msid='"
+                + ms_id + "')";
+        baseDao.execute(sql);
+
+        if(baseDao.isDBSetting("sys","usingMakeCraft")){
+            sql = "select md_detno,md_mmcode,md_prodcode from MakeScrapDetail left join makematerial on md_mmcode=mm_code and md_mmdetno=mm_detno left join make on mm_maid=ma_id where md_msid="
+                    + ms_id + "  and round(nvl(mm_allscrapqty,0),4)>round(nvl(mm_havegetqty,0)+nvl(mm_stepinqty,0)-nvl(mm_clashqty,0) -NVL(mm_scrapqty,0),4) ";
+        }else{
+            sql = "select md_detno,md_mmcode,md_prodcode from MakeScrapDetail left join makematerial on md_mmcode=mm_code and md_mmdetno=mm_detno left join make on mm_maid=ma_id where md_msid="
+                    + ms_id ;
+            if(baseDao.isDBSetting("Make!Base", "allowChangeAfterCom")){
+                sql = sql+ "  and round(nvl(mm_allscrapqty,0),4) > round(nvl(mm_havegetqty,0)-nvl(mm_backqty,0),4) ";
+            }else{
+                sql += "  and round(nvl(mm_allscrapqty,0),4)>round(nvl(mm_havegetqty,0)-mm_oneuseqty*ma_madeqty,4) ";
+            }
+        }
+        SqlRowList rs = baseDao.queryForRowSet(sql);
+        while (rs.next()) {
+            err = err + "," + rs.getString("md_detno");
+        }
+        if (!err.equals("")) {
+            return "序号:" + err.substring(1) + "报废数大于结存数!";
+        }
+        sql = "SELECT count(1) detno ,wm_concat(md_detno) as detnostr FROM MakeScrapDetail WHERE  md_msid='" + ms_id + "' and md_qty<=0  ";
+        rs = baseDao.queryForRowSet(sql);
+        if (rs.next()) {
+            if (rs.getInt("detno") > 0) {
+                return "序号:" + rs.getString("detnostr") + "报废数小于或等于0,不能审核!";
+            }
+        }
+        return null;
+    }
+
+    private String copcheck(int ms_id) {
+        if (baseDao.isDBSetting("sys","CopCheck")) {
+            // 生产报废单:明细行制造单所属公司与当前单所属公司必须一致,可在提交、打印、审核、过账等操作前配置
+            String dets = baseDao
+                    .getJdbcTemplate()
+                    .queryForObject(
+                            "select wm_concat(md_detno) from MakeScrapDetail left join MakeScrap on md_msid=ms_id left join Make on md_mmcode=ma_code where ms_id=? and nvl(ma_cop,' ')<>nvl(ms_cop,' ') ",
+                            String.class, ms_id);
+            if (dets != null) {
+                return "行号:" + dets+"制造单所属公司与当前单所属公司不一致,不允许进行当前操作!";
+            }
+        }
+        return null;
+    }
+
+    // 验证从表中的工单的序号是否有效
+    private String checkMakeMaterial(int ms_id) {
+        String err = baseDao
+                .getJdbcTemplate()
+                .queryForObject(
+                        "select wm_concat(md_detno) from MakeScrapdetail where md_msid=? and not exists (select 1 from make left join makematerial on ma_id=mm_maid where md_mmcode=ma_code and md_mmdetno=mm_detno)",
+                        String.class, ms_id);
+        if (err != null) {
+            return "序号:" + err.toString() + " 无对应工单和序号,不允许进行当前操作!";
+        }
+        return null;
+    }
+}