ERPServiceImpl.java 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. package com.uas.eis.service.Impl;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.alibaba.fastjson.serializer.SerializerFeature;
  5. import com.uas.eis.core.support.TokenProperties;
  6. import com.uas.eis.dao.BaseDao;
  7. import com.uas.eis.dao.SqlRowList;
  8. import com.uas.eis.entity.*;
  9. import com.uas.eis.sdk.entity.ApiResult;
  10. import com.uas.eis.sdk.resp.ApiResponse;
  11. import com.uas.eis.service.ERPService;
  12. import com.uas.eis.utils.*;
  13. import org.slf4j.Logger;
  14. import org.slf4j.LoggerFactory;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.jdbc.core.BeanPropertyRowMapper;
  17. import org.springframework.stereotype.Service;
  18. import java.util.HashMap;
  19. import java.util.List;
  20. import java.util.Map;
  21. /**
  22. * @author koul
  23. * @email koul@usoftchina.com
  24. * @date 2021-12-06 18:27
  25. */
  26. @Service
  27. public class ERPServiceImpl implements ERPService {
  28. private final Logger logger = LoggerFactory.getLogger(this.getClass());
  29. private static Map<String,String> tokenConfig = TokenProperties.getAllProperty();
  30. @Autowired
  31. private BaseDao baseDao;
  32. @Override
  33. public ApiResult<String> syncProduct(String data) {
  34. Map<Object, Object> store = BaseUtil.parseFormStoreToMap(data);
  35. Product product = baseDao.getJdbcTemplate().queryForObject("select case when pr_kh_user='柏英特' or nvl(pr_kh_user,' ')=' ' then 'BYT' else nvl(cu_mescode,cu_code) end pr_kh_user,pr_code ,pr_detail ,replace(PR_SPEC,'''','''''') pr_spec,nvl(pr_unit,'PCS') pr_unit,nvl(pr_cop,'BYT') pr_cop,nvl(pr_version,'0') pr_version,case when nvl(pr_kind,'')='半成品' or nvl(pr_kind,' ')='成品' then 'product' else 'raw' end pr_serial,nvl(pr_validdays,'0') pr_validdays,pr_msdlevel ,pr_fhelpcode ,pr_f_115 ,pr_f_116 ,pr_f_102,pr_kind,flag,pr_statuscode,pr_status from mes_product left join customer on pr_kh_user=cu_shortname where pr_id=?",
  36. new BeanPropertyRowMapper<Product>(Product.class),store.get("pr_id"));
  37. product.setFlag(Integer.parseInt(StringUtil.nvl(store.get("flag"),"-1")));
  38. product.setMesUser(tokenConfig.get("mesUser"));
  39. product.setMesPwd(MD5Util.encodeByMD5(tokenConfig.get("mesPwd")));
  40. return syncMES(JSON.toJSONString(product, SerializerFeature.WriteMapNullValue).replace("null","\"\""),tokenConfig.get("syncProduct"));
  41. }
  42. @Override
  43. public ApiResult<String> syncMakeBase(String data) {
  44. Map<Object, Object> store = BaseUtil.parseFormStoreToMap(data);
  45. Make make = baseDao.getJdbcTemplate().queryForObject("select ma_code,ma_prodcode,ma_qty,nvl(cu_mescode,ma_custcode) ma_custcode,pr_unit,pr_detail,replace(PR_SPEC,'''','''''') pr_spec,ma_salecode,to_char(ma_planbegindate,'yyyy-MM-dd') ma_planbegindate,to_char(ma_planenddate,'yyyy-MM-dd') ma_planenddate,nvl(ma_cop,'BYT') ma_cop,'S' status,to_char(ma_date,'yyyy-MM-dd HH24:mi:ss') ma_date,ma_recorder,nvl(ma_version,0) ma_version,ma_id,wc_id,pr_id,to_char(ma_modifydate,'yyyy-MM-dd HH24:mi:ss') ma_modifydate,ma_modifier from make left join product on ma_prodcode=pr_code left join workcenter on ma_wccode=wc_code left join customer on ma_custcode=cu_code where ma_id=?",
  46. new BeanPropertyRowMapper<Make>(Make.class),store.get("ma_id"));
  47. make.setFlag(Integer.parseInt(StringUtil.nvl(store.get("flag"),"-1")));
  48. make.setMesPwd(MD5Util.encodeByMD5(tokenConfig.get("mesPwd")));
  49. make.setMesUser(tokenConfig.get("mesUser"));
  50. return syncMES(JSON.toJSONString(make, SerializerFeature.WriteMapNullValue).replace("null","\"\""),tokenConfig.get("syncMakeBase"));
  51. }
  52. @Override
  53. public ApiResult<String> syncMakeBaseDetail(String data) {
  54. Map<Object, Object> store = BaseUtil.parseFormStoreToMap(data);
  55. MakeMaterial makeMaterial = baseDao.getJdbcTemplate().queryForObject("select mm_code,erpid,mm_prodcode,pr_detail,replace(PR_SPEC,'''','''''') pr_spec,pr_unit,mm_oneuseqty qty,mm_qty,mm_oneuseqty,case when mm_ifrep=-1 then 'alternative' else 'main' end type,bo_recorder,to_char(bo_date,'yyyy-MM-dd HH24:mi:ss') bo_date,nvl(bo_version,0) bo_version,nvl(bo_cop,'BYT') bo_cop,mm_repprodcode,mm_balance,nvl(cu_mescode,ma_custcode) ma_custcode,to_char(mc_indate,'yyyy-MM-dd HH24:mi:ss') mc_indate,mc_recorder,flag from mes_makematerial left join make on ma_id=mm_maid left join Product on mm_prodcode=pr_code left join bom on bo_id=mm_bomid left join MakeMaterialChangeDet on md_makecode=ma_code and md_mmdetno=mm_detno left join MakeMaterialChange on mc_id=md_mcid left join customer on ma_custcode=cu_code where mm_id=? order by mm_detno",
  56. new BeanPropertyRowMapper<MakeMaterial>(MakeMaterial.class),store.get("mm_id"));
  57. makeMaterial.setFlag(Integer.parseInt(StringUtil.nvl(store.get("flag"),"-1")));
  58. makeMaterial.setMesUser(tokenConfig.get("mesUser"));
  59. makeMaterial.setMesPwd(MD5Util.encodeByMD5(tokenConfig.get("mesPwd")));
  60. return syncMES(JSON.toJSONString(makeMaterial, SerializerFeature.WriteMapNullValue).replace("null","\"\""),tokenConfig.get("syncMakeBaseDetail"));
  61. }
  62. @Override
  63. public ApiResult<String> syncUpdateReceiveByErp(String data) {
  64. try {
  65. Map<Object, Object> store = BaseUtil.parseFormStoreToMap(data);
  66. VerifyApply verifyApply = baseDao.getJdbcTemplate().queryForObject("select va_id,va_mescode,va_code,to_char(va_date,'yyyy-MM-dd HH24:mi:ss') va_date,va_vendcode,va_vendname,va_currency,va_rate,va_paymentscode,va_payments,va_transport,va_sendcode,va_emcode,va_emname,va_departmentcode,va_department,va_recorder,case when nvl(va_cop,' ')=' ' then 'BYT' else va_cop end va_cop,va_remark,va_ancode,va_factory,0 version,va_type,va_pucode,case when nvl(va_pucode,' ')=' ' then 0 else (select pu_id from purchase where pu_code=va_pucode) end pu_id,va_status,1 posted,to_char(va_auditdate,'yyyy-MM-dd HH24:mi:ss') va_auditdate,va_auditman,va_custcode,va_custname from VerifyApply where va_id=?",
  67. new BeanPropertyRowMapper<VerifyApply>(VerifyApply.class), store.get("va_id"));
  68. SqlRowList rs = baseDao.queryForRowSet("select case when va_custcode='AR214' or nvl(va_custcode,' ')=' ' then 'BYT' else nvl(cu_mescode,cu_code) end cu_code,cu_name from verifyapply left join customer on va_custcode=cu_code where va_id="+store.get("va_id"));
  69. if (rs.next()){
  70. verifyApply.setVa_custcode(rs.getString("cu_code"));
  71. //verifyApply.setVa_custname(rs.getString("cu_name"));
  72. }
  73. verifyApply.setMesPwd(MD5Util.encodeByMD5(tokenConfig.get("mesPwd")));
  74. verifyApply.setMesUser(tokenConfig.get("mesUser"));
  75. verifyApply.setFlag(Integer.parseInt(StringUtil.nvl(store.get("flag"),"-1")));
  76. List<VerifyApplyDetail> verifyApplyDetails = baseDao.query("select vad_code,vad_prodcode,pr_detail,replace(PR_SPEC,'''','''''') pr_spec,pr_unit,va_recorder,va_date,pr_kh_user,cu_name,sum(nvl(vad_qty,0)) vad_qty,vad_salecode from ( select vad_code,vad_prodcode,pr_detail,pr_spec,pr_unit,vad_qty,va_recorder,to_char(va_date,'yyyy-MM-dd HH24:mi:ss') va_date,case when pr_kh_user='柏英特' or nvl(pr_kh_user,' ')=' ' then 'BYT' else nvl(cu_mescode,cu_code) end pr_kh_user,cu_name,vad_salecode from verifyapplydetail left join VerifyApply on va_id=vad_vaid left join product on vad_prodcode=pr_code left join customer on cu_shortname=pr_kh_user where nvl(vad_qty,0)>0 and vad_vaid="+store.get("va_id")+") group by vad_code,vad_prodcode,pr_detail,pr_spec,pr_unit,va_recorder,va_date,pr_kh_user,cu_name,vad_salecode", VerifyApplyDetail.class);
  77. verifyApply.setDetail(verifyApplyDetails);
  78. return syncMES(JSON.toJSONString(verifyApply, SerializerFeature.WriteMapNullValue).replace("null","\"\""),tokenConfig.get("syncUpdateReceiveByErp"));
  79. }catch (Exception e){
  80. logger.info("同步收料单异常信息:"+e.getMessage());
  81. e.printStackTrace();
  82. return ApiResponse.failRsp("104",e.getMessage());
  83. }
  84. }
  85. @Override
  86. public Map<String, Object> syncDeleteMake(String data) {
  87. Map<Object, Object> store = BaseUtil.parseFormStoreToMap(data);
  88. Object maId = store.get("ma_id");
  89. int flag = Integer.parseInt(StringUtil.nvl(store.get("flag"), "-1"));
  90. Map<String, Object> hashMap = new HashMap<>();
  91. hashMap.put("code", 0);
  92. int count = baseDao.getCount("select count(1) from mes_make where erpid="+maId);
  93. if (count>0) {
  94. Make make = baseDao.getJdbcTemplate().queryForObject("select ma_code,ma_prodcode,ma_qty,nvl(cu_mescode,'BYT') ma_custcode,pr_unit,pr_detail,replace(PR_SPEC,'''','''''') pr_spec,nvl(ma_zgrwl,ma_salecode) ma_salecode,to_char(ma_planbegindate,'yyyy-MM-dd') ma_planbegindate,to_char(ma_planenddate,'yyyy-MM-dd') ma_planenddate,nvl(ma_cop,'BYT') ma_cop,'C' status,to_char(ma_date,'yyyy-MM-dd HH24:mi:ss') ma_date,ma_recorder,nvl(ma_version,0) ma_version,erpid,wc_id,nvl(mk_id,0) ma_kind,to_char(ma_modifydate,'yyyy-MM-dd HH24:mi:ss') ma_modifydate,ma_modifier," + flag + " flag from mes_make left join MakeKind on ma_kind=mk_name left join product on ma_prodcode=pr_code left join workcenter on ma_wccode=wc_code left join customer on pr_kh_user=cu_shortname where erpid=?", new BeanPropertyRowMapper<Make>(Make.class), maId);
  95. make.setMesPwd(MD5Util.encodeByMD5(tokenConfig.get("mesPwd")));
  96. make.setMesUser(tokenConfig.get("mesUser"));
  97. Map<String, Object> map = syncMESDeleteMake(JSON.toJSONString(make, SerializerFeature.WriteMapNullValue).replace("null", "\"\""), tokenConfig.get("syncMakeBase"));
  98. hashMap.put("code", -1);
  99. hashMap.put("msg", "删除工单异常,请联系MES处理!");
  100. if (map != null) {
  101. int code = Integer.parseInt(StringUtil.nvl(map.get("code"), "-1"));
  102. if (code == 0) {
  103. List<MakeMaterial> makeMaterials = baseDao.getJdbcTemplate().queryForList("select mm_code,erpid,mm_prodcode,pr_detail,replace(PR_SPEC,'''','''''') pr_spec,pr_unit,mm_oneuseqty qty,mm_qty,mm_oneuseqty,'main' type,bo_recorder,to_char(bo_date,'yyyy-MM-dd HH24:mi:ss') bo_date,0 bo_version,nvl(bo_cop,'BYT') bo_cop,mm_prodcode mm_repprodcode,mm_balance,(select nvl(cu_mescode,'BYT') from Product left join customer on pr_kh_user=cu_shortname where pr_code=ma_prodcode) ma_custcode,to_char(mc_indate,'yyyy-MM-dd HH24:mi:ss') mc_indate,mc_recorder," + flag + " flag,0 rpid from mes_makematerial left join make on ma_id=mm_maid left join Product on mm_prodcode=pr_code left join bom on bo_id=mm_bomid left join (select max(mc_indate) mc_indate,max(mc_recorder) mc_recorder,max(md_mmdetno) md_mmdetno,max(md_makecode) md_makecode from MakeMaterialChangeDet left join MakeMaterialChange on mc_id=md_mcid) on md_makecode=ma_code and md_mmdetno=mm_detno where mm_maid=" + maId + " order by mm_detno", MakeMaterial.class);
  104. for (MakeMaterial makeMaterial: makeMaterials) {
  105. makeMaterial.setMesUser(tokenConfig.get("mesUser"));
  106. makeMaterial.setMesPwd(MD5Util.encodeByMD5(tokenConfig.get("mesPwd")));
  107. Map<String, Object> map1 = syncMESDeleteMake(JSON.toJSONString(makeMaterial, SerializerFeature.WriteMapNullValue).replace("null", "\"\""), tokenConfig.get("syncMakeBaseDetail"));
  108. hashMap.put("msg", "删除BOM异常,请联系MES处理!");
  109. if (map1 != null) {
  110. int code1 = Integer.parseInt(StringUtil.nvl(map1.get("code"), "-1"));
  111. hashMap.put("code", code1);
  112. hashMap.put("msg", map1.get("msg"));
  113. }
  114. }
  115. List<MakeMaterial> makeMaterials2 = baseDao.getJdbcTemplate().queryForList("select mm.mm_code,mm.erpid,mr.mp_prodcode mm_prodcode,pr_detail,replace(PR_SPEC,'''','''''') pr_spec,pr_unit,mm.mm_oneuseqty qty,mr.mp_canuseqty mm_qty,mm.mm_oneuseqty,'alternative' type,bo_recorder,to_char(bo_date,'yyyy-MM-dd HH24:mi:ss') bo_date,0 bo_version,nvl(bo_cop,'BYT') bo_cop,mm.mm_prodcode mm_repprodcode,mm.mm_balance,(select nvl(cu_mescode,'BYT') from Product left join customer on pr_kh_user=cu_shortname where pr_code=ma_prodcode) ma_custcode,to_char(mc_indate,'yyyy-MM-dd HH24:mi:ss') mc_indate,mc_recorder," + flag + " flag,mr.erpid rpid from mes_makematerialreplace mr left join mes_makematerial mm on mr.mp_mmid=mm.erpid left join make on mm.mm_maid=ma_id left join Product on mr.mp_prodcode=pr_code left join bom on bo_id=mm.mm_bomid left join (select max(mc_indate) mc_indate,max(mc_recorder) mc_recorder,max(md_mmdetno) md_mmdetno,max(md_makecode) md_makecode from MakeMaterialChangeDet left join MakeMaterialChange on mc_id=md_mcid) on md_makecode=ma_code and md_mmdetno=mm.mm_detno where mr.mp_maid="+ maId,MakeMaterial.class);
  116. for (MakeMaterial makeMaterial: makeMaterials2) {
  117. makeMaterial.setMesUser(tokenConfig.get("mesUser"));
  118. makeMaterial.setMesPwd(MD5Util.encodeByMD5(tokenConfig.get("mesPwd")));
  119. Map<String, Object> map2 = syncMESDeleteMake(JSON.toJSONString(makeMaterial, SerializerFeature.WriteMapNullValue).replace("null", "\"\""), tokenConfig.get("syncMakeBaseDetail"));
  120. hashMap.put("msg", "删除替代料异常,请联系MES处理!");
  121. if (map2 != null) {
  122. int code2 = Integer.parseInt(StringUtil.nvl(map2.get("code"), "-1"));
  123. hashMap.put("code", code2);
  124. hashMap.put("msg", map2.get("msg"));
  125. }
  126. }
  127. }
  128. hashMap.put("code", code);
  129. hashMap.put("msg", map.get("msg"));
  130. }
  131. }
  132. return hashMap;
  133. }
  134. private ApiResult<String> syncMES(String params,String url) {
  135. try {
  136. logger.info("params:" + params);
  137. String post = PSHttpUtils.sendPost(tokenConfig.get("mesHttp") + url, params);
  138. logger.info("post:" + post);
  139. JSONObject jsonObject = JSON.parseObject(post);
  140. int code = jsonObject.getIntValue("result");
  141. if (code == 0) {
  142. return ApiResponse.successRsp("0", "同步MES成功");
  143. } else if (code == 1) {
  144. return ApiResponse.failRsp("101", jsonObject.getString("message"));
  145. } else {
  146. return ApiResponse.failRsp("102", "接口调用异常,请联系MES处理!");
  147. }
  148. } catch (Exception e) {
  149. logger.info("异常信息:" + e.getMessage());
  150. return ApiResponse.failRsp("103", "接口调用异常,请联系MES处理!");
  151. }
  152. }
  153. private Map<String, Object> syncMESDeleteMake(String params,String url){
  154. Map<String, Object> map = new HashMap<>();
  155. map.put("code",-1);
  156. logger.info("params:"+params);
  157. try {
  158. String post = PSHttpUtils.sendPost(tokenConfig.get("mesHttp") + url, params);
  159. logger.info("post:"+post);
  160. JSONObject jsonObject = JSON.parseObject(post);
  161. int code = jsonObject.getIntValue("result");
  162. if (code==0){
  163. map.put("code",code);
  164. map.put("msg","同步MES成功");
  165. }else if(code==1){
  166. map.put("code",code);
  167. map.put("msg",jsonObject.getString("message"));
  168. }else {
  169. map.put("msg","接口调用异常,错误代码:"+code+",请联系MES处理!");
  170. }
  171. }catch (Exception e){
  172. map.put("msg","接口调用异常,异常信息:"+e.getMessage()+",请联系MES处理!");
  173. logger.info("异常信息:"+e.getMessage());
  174. e.printStackTrace();
  175. }
  176. return map;
  177. }
  178. }