ERPServiceImpl.java 42 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654
  1. package com.uas.eis.service.Impl;
  2. import com.uas.eis.core.config.SpObserver;
  3. import com.uas.eis.core.support.TokenProperties;
  4. import com.uas.eis.dao.*;
  5. import com.uas.eis.service.ERPService;
  6. import com.uas.eis.utils.*;
  7. import org.slf4j.Logger;
  8. import org.slf4j.LoggerFactory;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.http.HttpStatus;
  11. import org.springframework.stereotype.Service;
  12. import java.util.*;
  13. import java.util.stream.Collectors;
  14. /**
  15. * @author koul
  16. * @email koul@usoftchina.com
  17. * @date 2021-12-06 18:27
  18. */
  19. @Service
  20. public class ERPServiceImpl implements ERPService {
  21. private final Logger logger = LoggerFactory.getLogger(this.getClass());
  22. private static Map<String, String> tokenConfig = TokenProperties.getAllProperty();
  23. @Autowired
  24. private BaseDao baseDao;
  25. @Override
  26. public Map<String, Object> createSticker(String master, Integer id) {
  27. Map<String,Object> retMap = new HashMap<>();
  28. retMap.put("success",true);
  29. logger.info("createSticker-Begin:master {} id {}",master,id);
  30. SpObserver.putSp(master);
  31. SqlRowList docLoist = baseDao.queryForRowSet("select cd_cpn,min(CD_DC) ztcnno,pr_capacity zzbsmount,pr_zxbzs zzxsmount,pr_zxbzs zbzsmount" +
  32. " ,sum(CD_QTY) zmount,cd_wflag zwidth,cd_remark zremark,min(cd_lotno) zzstz " +
  33. "from CatlDocDetail left join product on pr_code = CD_PRCODE " +
  34. "where cd_caid = ? and CD_PANID is null and nvl(pr_capacity,0)>0 " +
  35. "group by CD_CPN,pr_capacity,pr_zxbzs,cd_wflag,cd_remark order by min(cd_detno)",id);
  36. if(!docLoist.hasNext()){
  37. // System.out.println("no docLoist!");
  38. retMap.put("success",false);
  39. retMap.put("message","没有需要对接的明细.");
  40. logger.info("createSticker-F:master {} id {} no docLoist!",master,id);
  41. }
  42. Object[] obs = baseDao.getFieldsDataByCondition("YITOA_DATACENTER.dock_catl_config A "
  43. , new String[]{"URL_","deipaaskeyauth","appKey", "appSecret","VENDCODE"}
  44. , "username='"+master+"' and A.ENVTYPE = (SELECT B.ENVTYPE FROM YITOA_DATACENTER.DOCK_CATL_EVCONFIG B WHERE A.username = B.username )");
  45. String url = String.valueOf(obs[0]);
  46. String deipaaskeyauth = String.valueOf(obs[1]);
  47. String vendcode = String.valueOf(obs[4]);
  48. Map<String,String> map = new HashMap<>();
  49. map.put("url",url);
  50. map.put("deipaaskeyauth",deipaaskeyauth);
  51. map.put("appKey",String.valueOf(obs[2]));
  52. map.put("appSecret",String.valueOf(obs[3]));
  53. Map<String,Object> tokenMap = getToken(map);
  54. if(!(boolean)tokenMap.get("success")){
  55. return tokenMap;
  56. }
  57. String action="/SNC/outer_SNC_createSticker?sap-client=810&interfacename=ZIRFC_TP2SNC_CREATESTICKER";
  58. String deipaasjwt = "Bearer "+tokenMap.get("token");
  59. map.put("deipaasjwt",deipaasjwt);
  60. StringBuffer errMsg = new StringBuffer();
  61. for (Map<String,Object> docMap: docLoist.getResultList()) {
  62. try {
  63. // CD_CPN,pr_capacity,pr_zxbzs,cd_wflag,cd_remark
  64. String matnr = String.valueOf(docMap.get("cd_cpn"));
  65. String zwidth = StringUtil.nvl(docMap.get("zwidth"),"");
  66. String zremark = StringUtil.nvl(docMap.get("zremark"),"");
  67. Map<String,Object> paraMap=new HashMap<>();
  68. paraMap.put("matnr",matnr);//物料号:客户料号
  69. paraMap.put("ztcnno",docMap.get("ztcnno"));//制造日期: 取最小DC
  70. paraMap.put("zzstz",docMap.get("zzstz"));//供应商批次: 用最小批次作为虚拟批次
  71. // paraMap.put("zeiar",docMap.get("zeiar"));//版本
  72. paraMap.put("zwidth",zwidth);//宽度
  73. paraMap.put("zmount",docMap.get("zmount"));//本次生产总数量
  74. paraMap.put("zzbsmount",docMap.get("zzbsmount"));//栈板容量
  75. paraMap.put("zzxsmount",docMap.get("zzxsmount"));//纸箱容量
  76. paraMap.put("zbzsmount",docMap.get("zbzsmount"));//包装袋容量
  77. paraMap.put("zremark",zremark);//备注
  78. paraMap.put("partner",vendcode);//供应商编码 固定值
  79. HttpUtil.Response response = HttpUtil.doPost(url+action, JacksonUtil.toJson(paraMap), deipaaskeyauth,deipaasjwt);
  80. if (response.getStatusCode() == HttpStatus.OK.value()){
  81. String res = response.getResponseText();
  82. if(res!=null && !"".equals(res)){
  83. // System.out.println("res:"+res);
  84. Map<String,Object> resData = JacksonUtil.fromJson(res);
  85. if("S".equals(String.valueOf(resData.get("e_type")))){
  86. List<Map<String,Object>> outdata = (List) resData.get("outdata");
  87. // System.out.println("outdata.size:"+outdata.size());
  88. //栈ID
  89. // List<Map<String,Object>> palletIdList = outdata.stream().filter(od->{
  90. // return (Double.valueOf(od.get("levels").toString().trim()) == 0);
  91. // }).collect(Collectors.toList());
  92. //箱ID
  93. List<Map<String,Object>> boxIdList = outdata.stream().filter(od->{
  94. return (Double.valueOf(od.get("levels").toString().trim()) == 1);
  95. }).collect(Collectors.toList());
  96. //袋ID
  97. List<Map<String,Object>> panIdList = outdata.stream().filter(od->{
  98. return (Double.valueOf(od.get("levels").toString().trim()) == 2);
  99. }).collect(Collectors.toList());
  100. //更新箱ID、袋ID
  101. List<String> sqls = new ArrayList<>();
  102. // CD_CPN,pr_capacity,pr_zxbzs,cd_wflag,cd_remark
  103. // matnr,zwidth,zremark
  104. 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 " +
  105. " where cd_caid = "+id+" and CD_PANID is null and CD_CPN = '"+matnr+"' " +
  106. " and nvl(cd_wflag,' ') = '"+StringUtil.nvl(zwidth," ")+"'" +
  107. " and nvl(cd_remark,' ') = '"+StringUtil.nvl(zremark," ")+"'" +
  108. " order by cd_dc,cd_detno");
  109. List<Map<String,Object>> updateStickerList = new ArrayList<>();
  110. if(panIdList.size() == updateList.getResultList().size()){
  111. for (int i = 0; i < updateList.getResultList().size(); i++) {
  112. Map<String,Object> updateMap = updateList.getResultList().get(i);
  113. Map<String,Object> idMap = panIdList.get(i);
  114. String panId = idMap.get("zalt_id").toString();
  115. String boxId = idMap.get("zalt_id_upper").toString();
  116. //获取栈ID
  117. String palletId = "";
  118. Optional<Map<String,Object>> boxMsg = boxIdList.stream()
  119. .filter(bMap -> bMap.get("zalt_id").equals(boxId))
  120. .findFirst();
  121. if(boxMsg.isPresent()&&!boxMsg.get().isEmpty()){
  122. palletId = boxMsg.get().get("zalt_id_upper").toString();
  123. }
  124. sqls.add("update CatlDocDetail set cd_palletid='"+StringUtil.nvl(palletId,"")+"' ,CD_PANID='"+panId+"',CD_BOXID='"+boxId+"'" +
  125. ",cd_batchid='"+idMap.get("batch_id")+"',cd_wbs='"+idMap.get("wbs")+"' " +
  126. "where cd_id = "+updateMap.get("cd_id"));
  127. if(!updateMap.get("cd_lotno").equals(idMap.get("prtbatchid"))){
  128. Map<String,Object> updatePanMap = new HashMap<>();
  129. updatePanMap.put("matnr",matnr);//物料号
  130. updatePanMap.put("zalt_id",panId);//贴纸ID
  131. updatePanMap.put("prtbatchid",updateMap.get("cd_lotno"));//供应商批次
  132. updatePanMap.put("manufacturing_date",updateMap.get("cd_dc"));//生产日期
  133. updatePanMap.put("atlyx",updateMap.get("cd_ed"));//有效日期
  134. updateStickerList.add(updatePanMap);
  135. Map<String,Object> updateBoxMap = new HashMap<>();
  136. updateBoxMap.put("matnr",matnr);//物料号
  137. updateBoxMap.put("zalt_id",boxId);//贴纸ID
  138. updateBoxMap.put("prtbatchid",updateMap.get("cd_lotno"));//供应商批次
  139. updateBoxMap.put("manufacturing_date",updateMap.get("cd_dc"));//生产日期
  140. updateBoxMap.put("atlyx",updateMap.get("cd_ed"));//有效日期
  141. updateStickerList.add(updateBoxMap);
  142. }
  143. }
  144. // 更新栈ID、箱ID、袋ID
  145. if(sqls.size()>0){
  146. baseDao.execute(sqls);
  147. //第二个接口 更新供应商批次
  148. Map<String,Object> updateStickerMap = updateStickerByList(master, id,map,updateStickerList);
  149. if(!(boolean) updateStickerMap.get("success")){
  150. errMsg.append("更新供应商批次失败:客户料号:"+matnr).append(updateStickerMap.get("message")).append("</br>");
  151. }
  152. }
  153. }else {
  154. errMsg.append("条码创建数与实际不一致,型号:"+matnr).append("创建数:"+panIdList.size()+",待更新数量:"+updateList.getResultList().size()).append("</br>");
  155. }
  156. }else {
  157. if(StringUtil.hasText(resData.get("e_message"))){
  158. errMsg.append("客户料号:"+matnr).append(resData.get("e_message")).append("</br>");
  159. }else {
  160. errMsg.append("客户料号:"+matnr).append("创建条码失败").append("</br>");
  161. }
  162. }
  163. }else{
  164. logger.info("getToken-F:No ResponseText");
  165. retMap.put("success",false);
  166. retMap.put("message", "No ResponseText");
  167. }
  168. }else {
  169. logger.info("createSticker-F:StatusCode {} ResponseText {}",response.getStatusCode(),response.getResponseText());
  170. retMap.put("success",false);
  171. retMap.put("message", response.getStatusCode()+":"+response.getResponseText());
  172. }
  173. }catch (Exception e){
  174. e.printStackTrace();
  175. retMap.put("success",false);
  176. retMap.put("message","创建条码异常。");
  177. }
  178. }
  179. if(errMsg.length()>0){
  180. // System.out.println("errMsg:"+errMsg.toString());
  181. retMap.put("success",false);
  182. retMap.put("message","对接失败:</br>"+errMsg.toString());
  183. }else {
  184. baseDao.execute("update CatlDoc set CA_DOCSTATE=1 where ca_id = "+id);
  185. }
  186. logger.info("createSticker-End:master {} id {} retMap {}",master,id,retMap.toString());
  187. return retMap;
  188. }
  189. @Override
  190. public Map<String, Object> createSticker2(String master, Integer id) {
  191. Map<String,Object> retMap = new HashMap<>();
  192. retMap.put("success",true);
  193. logger.info("createSticker-Begin:master {} id {}",master,id);
  194. SpObserver.putSp(master);
  195. SqlRowList docMain = baseDao.queryForRowSet("select nvl(ca_centerflag,0) ca_centerflag from CATLDOC where ca_id = "+id);
  196. if(docMain.next()){
  197. if(docMain.getGeneralInt("ca_centerflag")<0){
  198. return createStickerByCenter(master,id);
  199. }
  200. }else {
  201. retMap.put("success",false);
  202. retMap.put("message","没有需要对接的单据.");
  203. logger.info("createSticker-F:master {} id {} no docLoist!",master,id);
  204. return retMap;
  205. }
  206. SqlRowList docLoist = baseDao.queryForRowSet(
  207. " select CD_CPN matnr,CD_DC ztcnno,pr_capacity zzbsmount,pr_zxbzs zzxsmount,pr_zxbzs zbzsmount " +
  208. " ,sum(CD_QTY) zmount,cd_wflag zwidth,cd_lotno zzstz " +
  209. ",cd_newboxcode||(case when cd_remark is not null then ' '||cd_remark else '' end) zremark,count(1) codecount " +
  210. " from CatlDocDetail left join product on pr_code = CD_PRCODE " +
  211. " where cd_caid = ? and CD_PANID is null and nvl(pr_capacity,0)>0 " +
  212. " group by CD_CPN,CD_DC,pr_capacity,pr_zxbzs,cd_lotno,cd_wflag,cd_newboxcode||(case when cd_remark is not null then ' '||cd_remark else '' end) " +
  213. " order by min(cd_detno) ",id);
  214. if(!docLoist.hasNext()){
  215. // System.out.println("no docLoist!");
  216. retMap.put("success",false);
  217. retMap.put("message","没有需要对接的明细.");
  218. logger.info("createSticker-F:master {} id {} no docLoist!",master,id);
  219. }
  220. Object[] obs = baseDao.getFieldsDataByCondition("YITOA_DATACENTER.dock_catl_config A "
  221. , new String[]{"URL_","deipaaskeyauth","appKey", "appSecret","VENDCODE"}
  222. , "username='"+master+"' and A.ENVTYPE = (SELECT B.ENVTYPE FROM YITOA_DATACENTER.DOCK_CATL_EVCONFIG B WHERE A.username = B.username )");
  223. String url = String.valueOf(obs[0]);
  224. String deipaaskeyauth = String.valueOf(obs[1]);
  225. String vendcode = String.valueOf(obs[4]);
  226. Map<String,String> map = new HashMap<>();
  227. map.put("url",url);
  228. map.put("deipaaskeyauth",deipaaskeyauth);
  229. map.put("appKey",String.valueOf(obs[2]));
  230. map.put("appSecret",String.valueOf(obs[3]));
  231. Map<String,Object> tokenMap = getToken(map);
  232. if(!(boolean)tokenMap.get("success")){
  233. return tokenMap;
  234. }
  235. String action="/SNC/outer_SNC_createSticker?sap-client=810&interfacename=ZIRFC_TP2SNC_CREATESTICKER";
  236. String deipaasjwt = "Bearer "+tokenMap.get("token");
  237. map.put("deipaasjwt",deipaasjwt);
  238. StringBuffer errMsg = new StringBuffer();
  239. for (Map<String,Object> docMap: docLoist.getResultList()) {
  240. try {
  241. int codeCount = Integer.valueOf(String.valueOf(docMap.get("codecount")));
  242. // CD_CPN,pr_capacity,pr_zxbzs,cd_wflag,cd_remark
  243. String matnr = String.valueOf(docMap.get("matnr"));
  244. String zwidth = StringUtil.nvl(docMap.get("zwidth"),"");
  245. String zremark = StringUtil.nvl(docMap.get("zremark"),"");
  246. String ztcnno = String.valueOf(docMap.get("ztcnno"));
  247. String zzstz = String.valueOf(docMap.get("zzstz"));
  248. Map<String,Object> paraMap=new HashMap<>();
  249. paraMap.put("matnr",matnr);//物料号:客户料号
  250. paraMap.put("ztcnno",ztcnno);//制造日期: 取最小DC
  251. paraMap.put("zzstz",zzstz);//供应商批次: 用最小批次作为虚拟批次
  252. // paraMap.put("zeiar",docMap.get("zeiar"));//版本
  253. paraMap.put("zwidth",zwidth);//宽度
  254. paraMap.put("zmount",docMap.get("zmount"));//本次生产总数量
  255. paraMap.put("zzbsmount",docMap.get("zzbsmount"));//栈板容量
  256. paraMap.put("zzxsmount",docMap.get("zzxsmount"));//纸箱容量
  257. paraMap.put("zbzsmount",docMap.get("zbzsmount"));//包装袋容量
  258. paraMap.put("zremark",zremark);//备注
  259. paraMap.put("partner",vendcode);//供应商编码 固定值
  260. HttpUtil.Response response = HttpUtil.doPost(url+action, JacksonUtil.toJson(paraMap), deipaaskeyauth,deipaasjwt);
  261. if (response.getStatusCode() == HttpStatus.OK.value()){
  262. String res = response.getResponseText();
  263. if(res!=null && !"".equals(res)){
  264. // System.out.println("res:"+res);
  265. Map<String,Object> resData = JacksonUtil.fromJson(res);
  266. if("S".equals(String.valueOf(resData.get("e_type")))){
  267. List<Map<String,Object>> outdata = (List) resData.get("outdata");
  268. // System.out.println("outdata.size:"+outdata.size());
  269. //栈ID
  270. // List<Map<String,Object>> palletIdList = outdata.stream().filter(od->{
  271. // return (Double.valueOf(od.get("levels").toString().trim()) == 0);
  272. // }).collect(Collectors.toList());
  273. //箱ID
  274. List<Map<String,Object>> boxIdList = outdata.stream().filter(od->{
  275. return (Double.valueOf(od.get("levels").toString().trim()) == 1);
  276. }).collect(Collectors.toList());
  277. //袋ID
  278. List<Map<String,Object>> panIdList = outdata.stream().filter(od->{
  279. return (Double.valueOf(od.get("levels").toString().trim()) == 2);
  280. }).collect(Collectors.toList());
  281. //更新箱ID、袋ID
  282. List<String> sqls = new ArrayList<>();
  283. // if(outdata.size() != codeCount){
  284. // errMsg.append("条码创建数与实际不一致,型号:"+matnr).append("创建数:"+outdata.size()+",待更新数量:"+codeCount).append("</br>");
  285. // continue;
  286. // }
  287. // CD_CPN matnr,CD_DC ztcnno,cd_wflag zwidth,cd_lotno zzstz,cd_newboxcode||(case when cd_remark is not null then ' '||cd_remark else '' end) zremark,count(1) codecount " +
  288. SqlRowList updateList = baseDao.queryForRowSet("select cd_id from CatlDocDetail " +
  289. " where cd_caid = "+id+" and CD_PANID is null " +
  290. " and CD_CPN = '"+matnr+"' " +
  291. " and nvl(CD_DC,' ') = '"+StringUtil.nvl(ztcnno," ")+"'" +
  292. " and nvl(cd_wflag,' ') = '"+StringUtil.nvl(zwidth," ")+"'" +
  293. " and nvl(cd_lotno,' ') = '"+StringUtil.nvl(zzstz," ")+"'" +
  294. " and cd_newboxcode||(case when cd_remark is not null then ' '||cd_remark else '' end) = '"+StringUtil.nvl(zremark," ")+"'" +
  295. " order by cd_detno");
  296. if(panIdList.size() != updateList.getResultList().size()){
  297. errMsg.append("条码创建数与实际不一致,型号:"+matnr).append("创建数:"+panIdList.size()+",待更新数量:"+updateList.getResultList().size()).append("</br>");
  298. continue;
  299. }
  300. for (int i = 0; i < updateList.getResultList().size(); i++) {
  301. Map<String,Object> updateMap = updateList.getResultList().get(i);
  302. Map<String,Object> idMap = panIdList.get(i);
  303. String panId = idMap.get("zalt_id").toString();
  304. String boxId = idMap.get("zalt_id_upper").toString();
  305. //获取栈ID
  306. String palletId = "";
  307. Optional<Map<String,Object>> boxMsg = boxIdList.stream()
  308. .filter(bMap -> bMap.get("zalt_id").equals(boxId))
  309. .findFirst();
  310. if(boxMsg.isPresent()&&!boxMsg.get().isEmpty()){
  311. palletId = boxMsg.get().get("zalt_id_upper").toString();
  312. }
  313. sqls.add("update CatlDocDetail set cd_palletid='"+StringUtil.nvl(palletId,"")+"' ,CD_PANID='"+panId+"',CD_BOXID='"+boxId+"'" +
  314. ",cd_batchid='"+idMap.get("batch_id")+"',cd_wbs='"+idMap.get("wbs")+"' " +
  315. "where cd_id = "+updateMap.get("cd_id"));
  316. }
  317. // 更新栈ID、箱ID、袋ID
  318. if(sqls.size()>0){
  319. // System.out.println(sqls);
  320. baseDao.execute(sqls);
  321. }
  322. }else {
  323. if(StringUtil.hasText(resData.get("e_message"))){
  324. errMsg.append("客户料号:"+matnr).append(resData.get("e_message")).append("</br>");
  325. }else {
  326. errMsg.append("客户料号:"+matnr).append("创建条码失败").append("</br>");
  327. }
  328. }
  329. }else{
  330. logger.info("getToken-F:No ResponseText");
  331. retMap.put("success",false);
  332. retMap.put("message", "No ResponseText");
  333. }
  334. }else {
  335. logger.info("createSticker-F:StatusCode {} ResponseText {}",response.getStatusCode(),response.getResponseText());
  336. retMap.put("success",false);
  337. retMap.put("message", response.getStatusCode()+":"+response.getResponseText());
  338. }
  339. }catch (Exception e){
  340. e.printStackTrace();
  341. retMap.put("success",false);
  342. retMap.put("message","创建条码异常。");
  343. }
  344. }
  345. if(errMsg.length()>0){
  346. // System.out.println("errMsg:"+errMsg.toString());
  347. retMap.put("success",false);
  348. retMap.put("message","对接失败:</br>"+errMsg.toString());
  349. }else {
  350. baseDao.execute("update CatlDoc set CA_DOCSTATE=1 where ca_id = "+id);
  351. }
  352. logger.info("createSticker-End:master {} id {} retMap {}",master,id,retMap.toString());
  353. return retMap;
  354. }
  355. private Map<String, Object> createStickerByCenter(String master, Integer id) {
  356. Map<String,Object> retMap = new HashMap<>();
  357. retMap.put("success",true);
  358. logger.info("createStickerByCenter-Begin:master {} id {}",master,id);
  359. SpObserver.putSp(master);
  360. SqlRowList docLoist = baseDao.queryForRowSet("select cd_cpn,min(CD_DC) ztcnno,pr_capacity zzbsmount,pr_zxbzs zzxsmount,pr_zxbzs zbzsmount ,cd_newboxcode " +
  361. " ,sum(CD_QTY) zmount,cd_wflag zwidth,ca_code||'_'||cd_newboxcode zzstz " +
  362. " ,cd_newboxcode||(case when cd_remark is not null then ' '||cd_remark else '' end) zremark,count(1) codecount,wm_concat(cd_id) cd_ids " +
  363. "from CatlDocDetail left join product on pr_code = CD_PRCODE left join CatlDoc on ca_id = cd_caid " +
  364. "where cd_caid = ? and nvl(pr_capacity,0)>0 and CD_PANID is null " +
  365. " group by CD_CPN,pr_capacity,pr_zxbzs,cd_wflag,cd_remark,cd_newboxcode,ca_code||'_'||cd_newboxcode order by min(cd_detno)",id);
  366. if(!docLoist.hasNext()){
  367. retMap.put("success",false);
  368. retMap.put("message","没有需要对接的明细.");
  369. logger.info("createStickerByCenter-F:master {} id {} no docLoist!",master,id);
  370. }
  371. Object[] obs = baseDao.getFieldsDataByCondition("YITOA_DATACENTER.dock_catl_config A "
  372. , new String[]{"URL_","deipaaskeyauth","appKey", "appSecret","VENDCODE"}
  373. , "username='"+master+"' " +
  374. // "and a.ENVTYPE=0"
  375. " and A.ENVTYPE = (SELECT B.ENVTYPE FROM YITOA_DATACENTER.DOCK_CATL_EVCONFIG B WHERE A.username = B.username )"
  376. );
  377. String url = String.valueOf(obs[0]);
  378. String deipaaskeyauth = String.valueOf(obs[1]);
  379. String vendcode = String.valueOf(obs[4]);
  380. Map<String,String> map = new HashMap<>();
  381. map.put("url",url);
  382. map.put("deipaaskeyauth",deipaaskeyauth);
  383. map.put("appKey",String.valueOf(obs[2]));
  384. map.put("appSecret",String.valueOf(obs[3]));
  385. Map<String,Object> tokenMap = getToken(map);
  386. if(!(boolean)tokenMap.get("success")){
  387. return tokenMap;
  388. }
  389. String action="/SNC/outer_SNC_createSticker?sap-client=810&interfacename=ZIRFC_TP2SNC_CREATESTICKER";
  390. String deipaasjwt = "Bearer "+tokenMap.get("token");
  391. map.put("deipaasjwt",deipaasjwt);
  392. StringBuffer errMsg = new StringBuffer();
  393. for (Map<String,Object> docMap: docLoist.getResultList()) {
  394. try {
  395. // CD_CPN,pr_capacity,pr_zxbzs,cd_wflag,cd_remark
  396. String matnr = String.valueOf(docMap.get("cd_cpn"));
  397. String zwidth = StringUtil.nvl(docMap.get("zwidth"),"");
  398. String zremark = StringUtil.nvl(docMap.get("zremark"),"");
  399. String cd_ids = StringUtil.nvl(docMap.get("cd_ids"),"0");
  400. Map<String,Object> paraMap=new HashMap<>();
  401. paraMap.put("matnr",matnr);//物料号:客户料号
  402. paraMap.put("ztcnno",docMap.get("ztcnno"));//制造日期: 取最小DC
  403. paraMap.put("zzstz",docMap.get("zzstz"));//供应商批次: 用最小批次作为虚拟批次
  404. // paraMap.put("zeiar",docMap.get("zeiar"));//版本
  405. paraMap.put("zwidth",zwidth);//宽度
  406. paraMap.put("zmount",docMap.get("zmount"));//本次生产总数量
  407. paraMap.put("zzbsmount",docMap.get("zzbsmount"));//栈板容量
  408. paraMap.put("zzxsmount",docMap.get("zzxsmount"));//纸箱容量
  409. paraMap.put("zbzsmount",docMap.get("zbzsmount"));//包装袋容量
  410. paraMap.put("zremark",zremark);//备注
  411. paraMap.put("partner",vendcode);//供应商编码 固定值
  412. HttpUtil.Response response = HttpUtil.doPost(url+action, JacksonUtil.toJson(paraMap), deipaaskeyauth,deipaasjwt);
  413. if (response.getStatusCode() == HttpStatus.OK.value()){
  414. String res = response.getResponseText();
  415. if(res!=null && !"".equals(res)){
  416. // System.out.println("res:"+res);
  417. Map<String,Object> resData = JacksonUtil.fromJson(res);
  418. if("S".equals(String.valueOf(resData.get("e_type")))){
  419. List<Map<String,Object>> outdata = (List) resData.get("outdata");
  420. // System.out.println("outdata.size:"+outdata.size());
  421. for (Map<String,Object> odMap: outdata) {
  422. List<String> odsqls = new ArrayList<>();
  423. odsqls.add("insert into CATLDOC_OUTDATA(CDO_ID, CDO_CAID, CDO_DOCDATE,CDO_CDIDS" +
  424. ", ZALT_ID, BATCH_ID, MATNR, ZEIVR, ZEIAR, ZLABEL_STOCK, ZLABEL_TRANSFER, PRTBATCHID, ZMANUFACTURING_DATE, ZEFFECTIVE_DATE, WBS, ZREMARKS" +
  425. ", LEVELS_, ZALT_ID_UPPER)" +
  426. "values (CATLDOC_OUTDATA_SEQ.NEXTVAL,"+id+",SYSDATE,'"+cd_ids+"'"
  427. +",'"+odMap.get("zalt_id")+"' ,'"+odMap.get("batch_id")+"' ,'"+odMap.get("matnr")+"' ,'"+odMap.get("zeivr")+"' ,'"+odMap.get("zeiar")+"' ,'"+odMap.get("zlabel_stock")+"' ,'"+odMap.get("zlabel_transfer")+"' ,'"+odMap.get("prtbatchid")+"' ,'"+odMap.get("zmanufacturing_date")+"' ,'"+odMap.get("zeffective_date")+"' ,'"+odMap.get("wbs") +"' ,'"+odMap.get("zremarks")+"' " +
  428. ",'"+odMap.get("levels")+"' ,'"+odMap.get("zalt_id_upper")+"')");
  429. baseDao.execute(odsqls);
  430. }
  431. //栈ID 对应外箱
  432. // List<Map<String,Object>> palletIdList = outdata.stream().filter(od->{
  433. // return (Double.valueOf(od.get("levels").toString().trim()) == 0);
  434. // }).collect(Collectors.toList());
  435. //箱ID 对应内箱
  436. List<Map<String,Object>> boxIdList = outdata.stream().filter(od->{
  437. return (Double.valueOf(od.get("levels").toString().trim()) == 1);
  438. }).collect(Collectors.toList());
  439. //袋ID 对应包装
  440. List<Map<String,Object>> panIdList = outdata.stream().filter(od->{
  441. return (Double.valueOf(od.get("levels").toString().trim()) == 2);
  442. }).collect(Collectors.toList());
  443. String zeivr = StringUtil.nvl(outdata.get(0).get("zeivr"),"");
  444. String zeiar = StringUtil.nvl(outdata.get(0).get("zeiar"),"");
  445. //更新箱ID、袋ID
  446. List<String> sqls = new ArrayList<>();
  447. // CD_CPN,pr_capacity,pr_zxbzs,cd_wflag,cd_remark
  448. // matnr,zwidth,zremark
  449. 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 " +
  450. " where cd_caid = "+id+" and CD_PANID is null and CD_id in ("+cd_ids+") order by cd_detno");
  451. List<Map<String,Object>> updateStickerList = new ArrayList<>();
  452. if(panIdList.size() == updateList.getResultList().size()){
  453. for (int i = 0; i < updateList.getResultList().size(); i++) {
  454. Map<String,Object> updateMap = updateList.getResultList().get(i);
  455. Map<String,Object> idMap = panIdList.get(i);
  456. String panId = idMap.get("zalt_id").toString();
  457. String boxId = idMap.get("zalt_id_upper").toString();
  458. //获取栈ID
  459. String palletId = "";
  460. Optional<Map<String,Object>> boxMsg = boxIdList.stream()
  461. .filter(bMap -> bMap.get("zalt_id").equals(boxId))
  462. .findFirst();
  463. if(boxMsg.isPresent()&&!boxMsg.get().isEmpty()){
  464. palletId = boxMsg.get().get("zalt_id_upper").toString();
  465. }
  466. sqls.add("update CatlDocDetail set cd_palletid='"+StringUtil.nvl(palletId,"")+"' ,cd_panid='"+panId+"',cd_boxid='"+boxId+"'" +
  467. ",cd_batchid='"+idMap.get("batch_id")+"',cd_wbs='"+idMap.get("wbs")+"',cd_zeivr='" +zeivr+"',cd_zeiar='"+zeiar+"' "+
  468. " where cd_id = "+updateMap.get("cd_id"));
  469. //更新内箱、内包装袋真实DC LOTNO
  470. if(!idMap.get("prtbatchid").equals(updateMap.get("cd_lotno"))){
  471. Map<String,Object> updatePanMap = new HashMap<>();
  472. updatePanMap.put("matnr",matnr);//物料号
  473. updatePanMap.put("zalt_id",panId);//贴纸ID
  474. updatePanMap.put("prtbatchid",updateMap.get("cd_lotno"));//供应商批次
  475. updatePanMap.put("manufacturing_date",updateMap.get("cd_dc"));//生产日期
  476. updatePanMap.put("atlyx",updateMap.get("cd_ed"));//有效日期
  477. updateStickerList.add(updatePanMap);
  478. Map<String,Object> updateBoxMap = new HashMap<>();
  479. updateBoxMap.put("matnr",matnr);//物料号
  480. updateBoxMap.put("zalt_id",boxId);//贴纸ID
  481. updateBoxMap.put("prtbatchid",updateMap.get("cd_lotno"));//供应商批次
  482. updateBoxMap.put("manufacturing_date",updateMap.get("cd_dc"));//生产日期
  483. updateBoxMap.put("atlyx",updateMap.get("cd_ed"));//有效日期
  484. updateStickerList.add(updateBoxMap);
  485. }
  486. }
  487. // 更新栈ID、箱ID、袋ID
  488. if(sqls.size()>0){
  489. baseDao.execute(sqls);
  490. //第二个接口 更新供应商批次
  491. Map<String,Object> updateStickerMap = updateStickerByList(master, id,map,updateStickerList);
  492. if(!(boolean) updateStickerMap.get("success")){
  493. errMsg.append("更新供应商批次失败:客户料号:"+matnr).append(updateStickerMap.get("message")).append("</br>");
  494. }
  495. }
  496. }else {
  497. errMsg.append("条码创建数与实际不一致,型号:"+matnr).append("【cd_ids:").append(cd_ids).append("】创建数:"+panIdList.size()+",待更新数量:"+updateList.getResultList().size()).append("</br>");
  498. }
  499. }else {
  500. if(StringUtil.hasText(resData.get("e_message"))){
  501. errMsg.append("客户料号:"+matnr).append(resData.get("e_message")).append("</br>");
  502. }else {
  503. errMsg.append("客户料号:"+matnr).append("创建条码失败").append("</br>");
  504. }
  505. }
  506. }else{
  507. logger.info("createStickerByCenter-F:No ResponseText");
  508. retMap.put("success",false);
  509. retMap.put("message", "No ResponseText");
  510. }
  511. }else {
  512. logger.info("createStickerByCenter-F:StatusCode {} ResponseText {}",response.getStatusCode(),response.getResponseText());
  513. retMap.put("success",false);
  514. retMap.put("message", response.getStatusCode()+":"+response.getResponseText());
  515. }
  516. }catch (Exception e){
  517. e.printStackTrace();
  518. retMap.put("success",false);
  519. retMap.put("message","创建条码异常。");
  520. }
  521. }
  522. if(errMsg.length()>0){
  523. // System.out.println("errMsg:"+errMsg.toString());
  524. retMap.put("success",false);
  525. retMap.put("message","对接失败,请取消条码重新创建:</br>"+errMsg.toString());
  526. }else {
  527. baseDao.execute("update CatlDoc set CA_DOCSTATE=1 where ca_id = "+id);
  528. }
  529. if(errMsg.length()>0){
  530. // System.out.println("errMsg:"+errMsg.toString());
  531. retMap.put("success",false);
  532. retMap.put("message","对接失败,请取消条码重新创建:</br>"+errMsg.toString());
  533. }else {
  534. baseDao.execute("update CatlDoc set CA_DOCSTATE=1 where ca_id = "+id);
  535. }
  536. logger.info("createStickerByCenter-End:master {} id {} retMap {}",master,id,retMap.toString());
  537. return retMap;
  538. }
  539. @Override
  540. public Map<String, Object> getToken(Map<String, String> map) {
  541. Map<String, Object> retMap = new HashMap<>();
  542. retMap.put("success",true);
  543. String url = map.get("url");
  544. String deipaaskeyauth = map.get("deipaaskeyauth");
  545. String appKey = map.get("appKey");
  546. String appSecret = map.get("appSecret");
  547. logger.info("getToken-begin: url {} ,deipaaskeyauth {},appKey {},appSecret {} ", url,deipaaskeyauth,appKey,appSecret);
  548. String action="/ipaas/ipaas_getJwtToken";
  549. Map<String,Object> paraMap=new HashMap<>();
  550. paraMap.put("appKey",appKey);
  551. paraMap.put("appSecret",appSecret);
  552. paraMap.put("time",60);
  553. try {
  554. HttpUtil.Response response =HttpUtil.doPost(url+action, JacksonUtil.toJson(paraMap), deipaaskeyauth,"");
  555. if (response.getStatusCode() == HttpStatus.OK.value()){
  556. String res = response.getResponseText();
  557. if(res!=null && !"".equals(res)){
  558. Map<String,Object> resMap = JacksonUtil.fromJson(res);
  559. logger.info("getToken-S: {} ", String.valueOf(resMap.get("accessToken")));
  560. retMap.put("token", String.valueOf(resMap.get("accessToken")));
  561. }else{
  562. logger.info("getToken-F:No ResponseText");
  563. retMap.put("success",false);
  564. retMap.put("message", "No ResponseText");
  565. }
  566. }else {
  567. logger.info("getToken-F:StatusCode {} ResponseText {}",response.getStatusCode(),response.getResponseText());
  568. retMap.put("success",false);
  569. retMap.put("message", response.getStatusCode()+":"+response.getResponseText());
  570. }
  571. }catch (Exception e){
  572. e.printStackTrace();
  573. retMap.put("success",false);
  574. retMap.put("message", "对接异常");
  575. }
  576. return retMap;
  577. }
  578. @Override
  579. public Map<String, Object> updateStickerByList(String master, Integer id,Map<String, String> map,List<Map<String,Object>> updateLists) {
  580. Map<String, Object> retMap = new HashMap<>();
  581. retMap.put("success",true);
  582. if(CollectionUtil.isEmpty(updateLists)){
  583. return retMap;
  584. }
  585. String url = map.get("url");
  586. String deipaaskeyauth = map.get("deipaaskeyauth");
  587. String appKey = map.get("appKey");
  588. String appSecret = map.get("appSecret");
  589. String deipaasjwt = map.get("deipaasjwt");
  590. logger.info("updateSticker-begin: url {} ,deipaaskeyauth {},appKey {},appSecret {},deipaasjwt {} ", url,deipaaskeyauth,appKey,appSecret,deipaasjwt);
  591. String action="/SNC/outer_SNC_updateGyspc?sap-client=810&interfacename=ZIRFC_TP2SNC_UPDATEGYSPC";
  592. Map<String,Object> paraMap=new HashMap<>();
  593. paraMap.put("inputdata",updateLists);
  594. StringBuffer errMsg = new StringBuffer();
  595. try {
  596. HttpUtil.Response response =HttpUtil.doPost(url+action, JacksonUtil.toJson(paraMap), deipaaskeyauth,deipaasjwt);
  597. if (response.getStatusCode() == HttpStatus.OK.value()){
  598. String res = response.getResponseText();
  599. if(res!=null && !"".equals(res)){
  600. Map<String,Object> resMap = JacksonUtil.fromJson(res);
  601. if(StringUtil.hasText(resMap.get("OUTPUTDATA"))){
  602. if(StringUtil.hasText(String.valueOf(resMap.get("OUTPUTDATA")))){
  603. List<Map<String,Object>> outputdataList = (List) resMap.get("OUTPUTDATA");
  604. for (Map<String,Object> outputdataMap:outputdataList) {
  605. if(!"S".equals(outputdataMap.get("e_msgtype"))){
  606. errMsg.append("条码:").append(outputdataMap.get("zalt_id")).append(",原因:").append(outputdataMap.get("e_msg")).append("</br>");
  607. baseDao.execute("update CatlDocDetail set cd_errmsg='"+outputdataMap.get("e_msg")+"' where cd_caid = "+id+" and cd_panid = '"+outputdataMap.get("zalt_id")+"'");
  608. }
  609. }
  610. }else {
  611. logger.info("updateSticker-F:No ResponseText");
  612. retMap.put("success",false);
  613. retMap.put("message", "No outPutData");
  614. }
  615. }else {
  616. logger.info("updateSticker-F:No ResponseText");
  617. retMap.put("success",false);
  618. retMap.put("message", "No ResponseText");
  619. }
  620. }else{
  621. logger.info("updateSticker-F:No ResponseText");
  622. retMap.put("success",false);
  623. retMap.put("message", "No ResponseText");
  624. }
  625. }else {
  626. logger.info("updateSticker-F:StatusCode {} ResponseText {}",response.getStatusCode(),response.getResponseText());
  627. retMap.put("success",false);
  628. retMap.put("message", response.getStatusCode()+":"+response.getResponseText());
  629. }
  630. }catch (Exception e){
  631. e.printStackTrace();
  632. retMap.put("success",false);
  633. retMap.put("message", "对接异常");
  634. }
  635. if(errMsg.length()>0){
  636. retMap.put("success",false);
  637. retMap.put("message",errMsg.toString());
  638. }
  639. return retMap;
  640. }
  641. }