Browse Source

【英唐-CATL条码对接】【央仓需求调整】

wuyx 1 year ago
parent
commit
1186c42af5

+ 185 - 0
src/main/java/com/uas/eis/service/Impl/ERPServiceImpl.java

@@ -199,6 +199,17 @@ public class ERPServiceImpl implements ERPService {
         retMap.put("success",true);
         logger.info("createSticker-Begin:master {} id {}",master,id);
         SpObserver.putSp(master);
+        SqlRowList docMain = baseDao.queryForRowSet("select nvl(ca_centerflag,0) ca_centerflag from CATLDOC where ca_id = "+id);
+        if(docMain.next()){
+            if(docMain.getGeneralInt("ca_centerflag")<0){
+                return createStickerByCenter(master,id);
+            }
+        }else {
+            retMap.put("success",false);
+            retMap.put("message","没有需要对接的单据.");
+            logger.info("createSticker-F:master {} id {} no docLoist!",master,id);
+            return retMap;
+        }
         SqlRowList docLoist = baseDao.queryForRowSet(
                 " select CD_CPN matnr,CD_DC ztcnno,pr_capacity zzbsmount,pr_zxbzs zzxsmount,pr_zxbzs zbzsmount " +
                         "  ,sum(CD_QTY) zmount,cd_wflag zwidth,cd_lotno zzstz " +
@@ -349,6 +360,180 @@ public class ERPServiceImpl implements ERPService {
         logger.info("createSticker-End:master {} id {} retMap {}",master,id,retMap.toString());
         return retMap;
     }
+
+    private Map<String, Object> createStickerByCenter(String master, Integer id) {
+        Map<String,Object> retMap = new HashMap<>();
+        retMap.put("success",true);
+        logger.info("createStickerByCenter-Begin:master {} id {}",master,id);
+        SpObserver.putSp(master);
+        SqlRowList docLoist = baseDao.queryForRowSet("select cd_cpn,min(CD_DC) ztcnno,pr_capacity zzbsmount,pr_zxbzs zzxsmount,pr_zxbzs zbzsmount ,cd_newboxcode " +
+                "  ,sum(CD_QTY) zmount,cd_wflag zwidth,min(cd_lotno) zzstz " +
+                " ,cd_newboxcode||(case when cd_remark is not null then ' '||cd_remark else '' end) zremark,count(1) codecount,wm_concat(cd_id) cd_ids  " +
+                "from CatlDocDetail left join product on pr_code = CD_PRCODE  " +
+                "where cd_caid = ? and nvl(pr_capacity,0)>0 and CD_PANID is null " +
+                " group by CD_CPN,pr_capacity,pr_zxbzs,cd_wflag,cd_remark,cd_newboxcode order by min(cd_detno)",id);
+        if(!docLoist.hasNext()){
+            retMap.put("success",false);
+            retMap.put("message","没有需要对接的明细.");
+            logger.info("createStickerByCenter-F:master {} id {} no docLoist!",master,id);
+        }
+        Object[] obs = baseDao.getFieldsDataByCondition("YITOA_DATACENTER.dock_catl_config A "
+                , new String[]{"URL_","deipaaskeyauth","appKey", "appSecret","VENDCODE"}
+                , "username='"+master+"' " +
+//                        "and a.ENVTYPE=0"
+                        "A.ENVTYPE = (SELECT B.ENVTYPE FROM YITOA_DATACENTER.DOCK_CATL_EVCONFIG B WHERE A.username = B.username )"
+                        );
+        String url = String.valueOf(obs[0]);
+        String deipaaskeyauth = String.valueOf(obs[1]);
+        String vendcode = String.valueOf(obs[4]);
+        Map<String,String> map = new HashMap<>();
+        map.put("url",url);
+        map.put("deipaaskeyauth",deipaaskeyauth);
+        map.put("appKey",String.valueOf(obs[2]));
+        map.put("appSecret",String.valueOf(obs[3]));
+        Map<String,Object> tokenMap = getToken(map);
+        if(!(boolean)tokenMap.get("success")){
+            return tokenMap;
+        }
+        String action="/SNC/outer_SNC_createSticker?sap-client=810&interfacename=ZIRFC_TP2SNC_CREATESTICKER";
+        String deipaasjwt = "Bearer "+tokenMap.get("token");
+        map.put("deipaasjwt",deipaasjwt);
+        StringBuffer errMsg = new StringBuffer();
+        for (Map<String,Object> docMap: docLoist.getResultList()) {
+            try {
+                // CD_CPN,pr_capacity,pr_zxbzs,cd_wflag,cd_remark
+                String matnr = String.valueOf(docMap.get("cd_cpn"));
+                String zwidth = StringUtil.nvl(docMap.get("zwidth"),"");
+                String zremark = StringUtil.nvl(docMap.get("zremark"),"");
+                String cd_ids = StringUtil.nvl(docMap.get("cd_ids"),"0");
+                Map<String,Object> paraMap=new HashMap<>();
+                paraMap.put("matnr",matnr);//物料号:客户料号
+                paraMap.put("ztcnno",docMap.get("ztcnno"));//制造日期: 取最小DC
+                paraMap.put("zzstz",docMap.get("zzstz"));//供应商批次: 用最小批次作为虚拟批次
+//				paraMap.put("zeiar",docMap.get("zeiar"));//版本
+                paraMap.put("zwidth",zwidth);//宽度
+                paraMap.put("zmount",docMap.get("zmount"));//本次生产总数量
+                paraMap.put("zzbsmount",docMap.get("zzbsmount"));//栈板容量
+                paraMap.put("zzxsmount",docMap.get("zzxsmount"));//纸箱容量
+                paraMap.put("zbzsmount",docMap.get("zbzsmount"));//包装袋容量
+                paraMap.put("zremark",zremark);//备注
+                paraMap.put("partner",vendcode);//供应商编码 固定值
+                HttpUtil.Response response = HttpUtil.doPost(url+action, JacksonUtil.toJson(paraMap), deipaaskeyauth,deipaasjwt);
+                if (response.getStatusCode() == HttpStatus.OK.value()){
+                    String res = response.getResponseText();
+                    if(res!=null && !"".equals(res)){
+                        System.out.println("res:"+res);
+                        Map<String,Object> resData = JacksonUtil.fromJson(res);
+                        if("S".equals(String.valueOf(resData.get("e_type")))){
+                            List<Map<String,Object>> outdata = (List) resData.get("outdata");
+//                            System.out.println("outdata.size:"+outdata.size());
+                            //栈ID 对应外箱
+//                            List<Map<String,Object>> palletIdList = outdata.stream().filter(od->{
+//                                return (Double.valueOf(od.get("levels").toString().trim()) == 0);
+//                            }).collect(Collectors.toList());
+                            //箱ID 对应内箱
+                            List<Map<String,Object>> boxIdList = outdata.stream().filter(od->{
+                                return (Double.valueOf(od.get("levels").toString().trim()) == 1);
+                            }).collect(Collectors.toList());
+                            //袋ID 对应包装
+                            List<Map<String,Object>> panIdList = outdata.stream().filter(od->{
+                                return (Double.valueOf(od.get("levels").toString().trim()) == 2);
+                            }).collect(Collectors.toList());
+                            String zeivr = StringUtil.nvl(outdata.get(0).get("zeivr"),"");
+                            String zeiar = StringUtil.nvl(outdata.get(0).get("zeiar"),"");
+                            //更新箱ID、袋ID
+                            List<String> sqls = new ArrayList<>();
+                            // CD_CPN,pr_capacity,pr_zxbzs,cd_wflag,cd_remark
+                            // matnr,zwidth,zremark
+                            SqlRowList updateList = baseDao.queryForRowSet("select cd_id,cd_lotno,cd_dc,nvl(cd_ed,to_char(to_date(cd_dc,'yyyymmdd')+365,'yyyymmdd')) cd_ed from CatlDocDetail " +
+                                    " where cd_caid = "+id+" and CD_PANID is null and CD_id in ("+cd_ids+") order by cd_detno");
+                            List<Map<String,Object>> updateStickerList = new ArrayList<>();
+                            if(panIdList.size() == updateList.getResultList().size()){
+                                for (int i = 0; i < updateList.getResultList().size(); i++) {
+                                    Map<String,Object> updateMap = updateList.getResultList().get(i);
+                                    Map<String,Object> idMap = panIdList.get(i);
+                                    String panId = idMap.get("zalt_id").toString();
+                                    String boxId = idMap.get("zalt_id_upper").toString();
+                                    //获取栈ID
+                                    String palletId = "";
+                                    Optional<Map<String,Object>> boxMsg = boxIdList.stream()
+                                            .filter(bMap -> bMap.get("zalt_id").equals(boxId))
+                                            .findFirst();
+                                    if(boxMsg.isPresent()&&!boxMsg.get().isEmpty()){
+                                        palletId = boxMsg.get().get("zalt_id_upper").toString();
+                                    }
+                                    sqls.add("update CatlDocDetail set cd_palletid='"+StringUtil.nvl(palletId,"")+"' ,cd_panid='"+panId+"',cd_boxid='"+boxId+"'" +
+                                            ",cd_batchid='"+idMap.get("batch_id")+"',cd_wbs='"+idMap.get("wbs")+"',cd_zeivr='" +zeivr+"',cd_zeiar='"+zeiar+"' "+
+                                            " where cd_id = "+updateMap.get("cd_id"));
+                                    //更新内箱、内包装袋真实DC LOTNO
+                                    Map<String,Object> updatePanMap = new HashMap<>();
+                                    updatePanMap.put("matnr",matnr);//物料号
+                                    updatePanMap.put("zalt_id",panId);//贴纸ID
+                                    updatePanMap.put("prtbatchid",updateMap.get("cd_lotno"));//供应商批次
+                                    updatePanMap.put("manufacturing_date",updateMap.get("cd_dc"));//生产日期
+                                    updatePanMap.put("atlyx",updateMap.get("cd_ed"));//有效日期
+                                    updateStickerList.add(updatePanMap);
+                                    Map<String,Object> updateBoxMap = new HashMap<>();
+                                    updateBoxMap.put("matnr",matnr);//物料号
+                                    updateBoxMap.put("zalt_id",boxId);//贴纸ID
+                                    updateBoxMap.put("prtbatchid",updateMap.get("cd_lotno"));//供应商批次
+                                    updateBoxMap.put("manufacturing_date",updateMap.get("cd_dc"));//生产日期
+                                    updateBoxMap.put("atlyx",updateMap.get("cd_ed"));//有效日期
+                                    updateStickerList.add(updateBoxMap);
+                                }
+                                // 更新栈ID、箱ID、袋ID
+                                if(sqls.size()>0){
+                                    baseDao.execute(sqls);
+                                    //第二个接口 更新供应商批次
+                                    Map<String,Object> updateStickerMap = updateStickerByList(master, id,map,updateStickerList);
+                                    if(!(boolean) updateStickerMap.get("success")){
+                                        errMsg.append("更新供应商批次失败:客户料号:"+matnr).append(updateStickerMap.get("message")).append("</br>");
+                                    }
+                                }
+                            }else {
+                                errMsg.append("条码创建数与实际不一致,型号:"+matnr).append("创建数:"+panIdList.size()+",待更新数量:"+updateList.getResultList().size()).append("</br>");
+                            }
+                        }else {
+                            if(StringUtil.hasText(resData.get("e_message"))){
+                                errMsg.append("客户料号:"+matnr).append(resData.get("e_message")).append("</br>");
+                            }else {
+                                errMsg.append("客户料号:"+matnr).append("创建条码失败").append("</br>");
+                            }
+                        }
+                    }else{
+                        logger.info("createStickerByCenter-F:No ResponseText");
+                        retMap.put("success",false);
+                        retMap.put("message", "No ResponseText");
+                    }
+                }else {
+                    logger.info("createStickerByCenter-F:StatusCode {} ResponseText {}",response.getStatusCode(),response.getResponseText());
+                    retMap.put("success",false);
+                    retMap.put("message", response.getStatusCode()+":"+response.getResponseText());
+                }
+            }catch (Exception e){
+                e.printStackTrace();
+                retMap.put("success",false);
+                retMap.put("message","创建条码异常。");
+            }
+        }
+        if(errMsg.length()>0){
+//            System.out.println("errMsg:"+errMsg.toString());
+            retMap.put("success",false);
+            retMap.put("message","对接失败:</br>"+errMsg.toString());
+        }else {
+            baseDao.execute("update CatlDoc set CA_DOCSTATE=1 where ca_id = "+id);
+        }
+        if(errMsg.length()>0){
+//            System.out.println("errMsg:"+errMsg.toString());
+            retMap.put("success",false);
+            retMap.put("message","对接失败:</br>"+errMsg.toString());
+        }else {
+            baseDao.execute("update CatlDoc set CA_DOCSTATE=1 where ca_id = "+id);
+        }
+        logger.info("createStickerByCenter-End:master {} id {} retMap {}",master,id,retMap.toString());
+        return retMap;
+    }
+
     @Override
     public Map<String, Object> getToken(Map<String, String> map) {
         Map<String, Object> retMap = new HashMap<>();

+ 1 - 1
src/test/java/com/uas/eis/UasEisApplicationTests.java

@@ -124,7 +124,7 @@ public class UasEisApplicationTests {
 	}
 	@Test
 	public void TestCreateSticker(){
-		Map<String, Object> resMap = erpService.createSticker2("N_HUASL_SZ", 125);
+		Map<String, Object> resMap = erpService.createSticker2("N_HUASL_SZ", 361);
 		System.out.println("resMap:"+resMap.toString());
 	}