package com.uas.eis.service.Impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.serializer.SerializerFeature; import com.uas.eis.core.support.TokenProperties; import com.uas.eis.dao.BaseDao; import com.uas.eis.dao.SqlRowList; import com.uas.eis.entity.Customer; import com.uas.eis.entity.Make; import com.uas.eis.entity.MakeMaterial; import com.uas.eis.entity.Product; import com.uas.eis.service.ScheduleTaskService; import com.uas.eis.utils.MD5Util; import com.uas.eis.utils.PSHttpUtils; import com.uas.eis.utils.StringUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.stereotype.Service; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author koul * @email koul@usoftchina.com * @date 2021-12-23 15:30 */ @Service public class ScheduleTaskServiceImpl implements ScheduleTaskService { private final Logger logger = LoggerFactory.getLogger(this.getClass()); private static Map tokenConfig = TokenProperties.getAllProperty(); @Autowired private BaseDao baseDao; /** * STATUS(W等待执行,F执行失败,D已执行) * */ @Override public void syncProducts() { try { SqlRowList rs = baseDao.queryForRowSet("select id from mes_product where status='W' order by id"); while (rs.next()){ Product product = baseDao.getJdbcTemplate().queryForObject("select case when pr_kh_user='柏英特' or nvl(pr_kh_user,' ')=' ' then 'HS' 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,'HS') 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_kind3 ,pr_f_115 ,pr_f_116 ,pr_f_102,pr_kind,flag,pr_statuscode,pr_status,pr_whcode,pr_kind2,pr_acceptmethod from mes_product left join customer on pr_kh_user=cu_shortname where id=?", new BeanPropertyRowMapper(Product.class), rs.getInt("id")); //获取MES对应仓库 String prWhcode = product.getPr_whcode(); if (prWhcode!=null&&!"".equals(prWhcode)) { SqlRowList rowSet = baseDao.queryForRowSet("select cd_varchar50_1,cd_varchar50_2,cd_varchar50_3,cd_varchar50_5 from customtabledetail left join customtable on ct_id=cd_ctid where ct_caller='MESWarehouse' and ct_statuscode='AUDITED' and cd_varchar50_3='" + prWhcode + "' order by ct_id desc,cd_id desc"); if (rowSet.next()){ product.setPr_whcode(rowSet.getGeneralString("cd_varchar50_1")); } } product.setMesUser(tokenConfig.get("mesUser")); product.setMesPwd(MD5Util.encodeByMD5(tokenConfig.get("mesPwd"))); Map map = syncMES(JSON.toJSONString(product, SerializerFeature.WriteMapNullValue).replace("null", "\"\""), tokenConfig.get("syncProduct")); if (map!=null){ int code = Integer.parseInt(StringUtil.nvl(map.get("code"), "-1")); if (code==0){ baseDao.updateByCondition("mes_product","status='D'","status='W' and id="+rs.getInt("id")); }else { int flag = product.getFlag(); if (flag == 1) { product.setFlag(0); } else if (flag == 0) { product.setFlag(1); } Map map1 = syncMES(JSON.toJSONString(product, SerializerFeature.WriteMapNullValue).replace("null", "\"\""), tokenConfig.get("syncProduct")); if (map1!=null){ int code1 = Integer.parseInt(StringUtil.nvl(map.get("code"), "-1")); if (code1==0){ baseDao.updateByCondition("mes_product","status='D'","status='W' and id="+rs.getInt("id")); }else { baseDao.updateByCondition("mes_product","status='F'","status='W' and id="+rs.getInt("id")); baseDao.execute("insert into meserrorlog (mel_id,mel_url,mel_error,mel_indate,mel_djcode,mel_type) values (MESERRORLOG_SEQ.NEXTVAL,'"+tokenConfig.get("syncProduct")+"','"+StringUtil.nvl(map.get("msg"),"")+"',sysdate,'"+product.getPr_code()+"','物料资料')"); } } } } if ("ZG".equals(StringUtil.nvl(product.getPr_kh_user(),""))){ product.setPr_kh_user("ZGSDC"); Map map1 = syncMES(JSON.toJSONString(product, SerializerFeature.WriteMapNullValue).replace("null", "\"\""), tokenConfig.get("syncProduct")); if (map1!=null) { int code1 = Integer.parseInt(StringUtil.nvl(map1.get("code"), "-1")); if (code1>0) { int flag = product.getFlag(); if (flag == 1) { product.setFlag(0); } else if (flag == 0) { product.setFlag(1); } Map map2 = syncMES(JSON.toJSONString(product, SerializerFeature.WriteMapNullValue).replace("null", "\"\""), tokenConfig.get("syncProduct")); if (map2 != null) { int code2 = Integer.parseInt(StringUtil.nvl(map1.get("code"), "100")); if (code2 > 0) { baseDao.execute("insert into meserrorlog (mel_id,mel_url,mel_error,mel_indate,mel_djcode,mel_type) values (MESERRORLOG_SEQ.NEXTVAL,'" + tokenConfig.get("syncProduct") + "','" + StringUtil.nvl(map.get("msg"), "") + "',sysdate,'" + product.getPr_code() + "','物料资料')"); } } } } } } }catch (Exception e){ logger.info("物料资料异常信息:"+e.getMessage()); e.printStackTrace(); } } @Override public void syncMakeBases() { try { SqlRowList rs = baseDao.queryForRowSet("select id,ma_code from mes_make where status='W' order by id"); while (rs.next()) { int count = baseDao.getCount("select count(1) from make where ma_statuscode='FINISH' and ma_code='" + rs.getString("ma_code") + "'"); String status = "S"; if (count > 0) { status = "C"; } Make make = baseDao.getJdbcTemplate().queryForObject("select ma_code,ma_prodcode,ma_qty,nvl(cu_mescode,'HS') 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,'HS') ma_cop,'" + status + "' status,to_char(ma_date,'yyyy-MM-dd HH24:mi:ss') ma_date,ma_recorder,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 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 id=?", new BeanPropertyRowMapper(Make.class), rs.getInt("id")); make.setMesPwd(MD5Util.encodeByMD5(tokenConfig.get("mesPwd"))); make.setMesUser(tokenConfig.get("mesUser")); Map map = syncMES(JSON.toJSONString(make, SerializerFeature.WriteMapNullValue).replace("null", "\"\""), tokenConfig.get("syncMakeBase")); if (map != null) { int code = Integer.parseInt(StringUtil.nvl(map.get("code"), "-1")); if (code == 0) { baseDao.updateByCondition("mes_make", "status='D'", "status='W' and id=" + rs.getInt("id")); } else { int flag = make.getFlag(); if (flag == 1) { make.setFlag(0); } else if (flag == 0) { make.setFlag(1); } Map map1 = syncMES(JSON.toJSONString(make, SerializerFeature.WriteMapNullValue).replace("null", "\"\""), tokenConfig.get("syncMakeBase")); if (map1 != null) { int code1 = Integer.parseInt(StringUtil.nvl(map1.get("code"), "-1")); if (code1 == 0) { baseDao.updateByCondition("mes_makematerial", "status='D'", "status='W' and id=" + rs.getInt("id")); } else { baseDao.updateByCondition("mes_make", "status='F'", "status='W' and id=" + rs.getInt("id")); baseDao.execute("insert into meserrorlog (mel_id,mel_url,mel_error,mel_indate,mel_djcode,mel_type) values (MESERRORLOG_SEQ.NEXTVAL,'" + tokenConfig.get("syncMakeBase") + "','" + StringUtil.nvl(map.get("msg"), "") + "',sysdate,'" + make.getMa_code() + "','工单')"); } } } } } }catch (Exception e){ logger.info("同步工单异常信息:"+e.getMessage()); e.printStackTrace(); } } @Override public void syncMakeBaseDetails() { try { SqlRowList rs = baseDao.queryForRowSet("select id,mm_code,mm_detno from mes_makematerial where status='W' order by id"); while (rs.next()) { int count = baseDao.getCount("select count(1) from mes_make where status='D' and ma_code='" + rs.getGeneralString("mm_code") + "'"); if (count > 0) { 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,'main' type,bo_recorder,to_char(bo_date,'yyyy-MM-dd HH24:mi:ss') bo_date,0 bo_version,nvl(bo_cop,'HS') bo_cop,mm_prodcode mm_repprodcode,mm_balance,(select nvl(cu_mescode,'HS') 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,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 id=? order by mm_detno", new BeanPropertyRowMapper(MakeMaterial.class), rs.getInt("id")); makeMaterial.setMesUser(tokenConfig.get("mesUser")); makeMaterial.setMesPwd(MD5Util.encodeByMD5(tokenConfig.get("mesPwd"))); Map map = syncMES(JSON.toJSONString(makeMaterial, SerializerFeature.WriteMapNullValue).replace("null", "\"\""), tokenConfig.get("syncMakeBaseDetail")); if (map != null) { int code = Integer.parseInt(StringUtil.nvl(map.get("code"), "-1")); if (code == 0) { baseDao.updateByCondition("mes_makematerial", "status='D'", "status='W' and id=" + rs.getInt("id")); } else { int flag = makeMaterial.getFlag(); if (flag==1) { makeMaterial.setFlag(0); }else if (flag==0) { makeMaterial.setFlag(1); } Map map1 = syncMES(JSON.toJSONString(makeMaterial, SerializerFeature.WriteMapNullValue).replace("null", "\"\""), tokenConfig.get("syncMakeBaseDetail")); if (map1 != null) { int code1 = Integer.parseInt(StringUtil.nvl(map1.get("code"), "-1")); if (code1 == 0) { baseDao.updateByCondition("mes_makematerial", "status='D'", "status='W' and id=" + rs.getInt("id")); }else { baseDao.updateByCondition("mes_makematerial", "status='F'", "status='W' and id=" + rs.getInt("id")); baseDao.execute("insert into meserrorlog (mel_id,mel_url,mel_error,mel_indate,mel_djcode,mel_djdetno,mel_type) values(MESERRORLOG_SEQ.NEXTVAL,'" + tokenConfig.get("syncMakeBaseDetail") + "','" + StringUtil.nvl(map.get("msg"), "") + "',sysdate,'" + rs.getGeneralString("mm_code") + "'," + rs.getInt("mm_detno") + ",'工单BOM')"); } } } } } } }catch (Exception e){ logger.info("同步工单BOM异常信息:"+e.getMessage()); e.printStackTrace(); } } @Override public void syncMakematerialReplace() { try { SqlRowList rs = baseDao.queryForRowSet("select id,mp_mmcode, mp_mmdetno,mp_mmid from mes_makematerialreplace where status='W' order by id"); while (rs.next()) { int count = baseDao.getCount("select count(1) from mes_makematerial where status='D' and " + "erpid=" + rs.getInt("mp_mmid")); if (count > 0) { MakeMaterial makeMaterial = baseDao.getJdbcTemplate().queryForObject("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,'HS') bo_cop,mm.mm_prodcode mm_repprodcode,mm.mm_balance,(select nvl(cu_mescode,'HS') 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,mr.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.id=?", new BeanPropertyRowMapper(MakeMaterial.class), rs.getInt("id")); makeMaterial.setMesUser(tokenConfig.get("mesUser")); makeMaterial.setMesPwd(MD5Util.encodeByMD5(tokenConfig.get("mesPwd"))); Map map = syncMES(JSON.toJSONString(makeMaterial, SerializerFeature.WriteMapNullValue).replace("null", "\"\""), tokenConfig.get("syncMakeBaseDetail")); if (map != null) { int code = Integer.parseInt(StringUtil.nvl(map.get("code"), "-1")); if (code == 0) { baseDao.updateByCondition("mes_makematerialreplace", "status='D'", "status='W' and id=" + rs.getInt("id")); } else { int flag = makeMaterial.getFlag(); if (flag==1) { makeMaterial.setFlag(0); }else if (flag==0) { makeMaterial.setFlag(1); } Map map1 = syncMES(JSON.toJSONString(makeMaterial, SerializerFeature.WriteMapNullValue).replace("null", "\"\""), tokenConfig.get("syncMakeBaseDetail")); if (map1 != null) { int code1 = Integer.parseInt(StringUtil.nvl(map1.get("code"), "-1")); if (code1 == 0) { baseDao.updateByCondition("mes_makematerialreplace", "status='D'", "status='W' and id=" + rs.getInt("id")); } else { baseDao.updateByCondition("mes_makematerialreplace", "status='F'", "status='W' and id=" + rs.getInt("id")); baseDao.execute("insert into meserrorlog (mel_id,mel_url,mel_error,mel_indate,mel_djcode,mel_djdetno,mel_type) values(MESERRORLOG_SEQ.NEXTVAL,'" + tokenConfig.get("syncMakeBaseDetail") + "','" + StringUtil.nvl(map.get("msg"), "") + "',sysdate,'" + rs.getGeneralString("mp_mmcode") + "'," + rs.getInt("mp_mmdetno") + ",'工单BOM替代料')"); } } } } } } }catch (Exception e){ logger.info("同步替代料异常信息:"+e.getMessage()); e.printStackTrace(); } } @Override public void syncCustomer() { try { List customers = baseDao.query("select cu_id,nvl(cu_mescode,cu_code) cu_oldcode,nvl(cu_mescode,cu_code) cu_code,cu_name,cu_shortname,nvl(cu_cop,'HS') cu_cop,flag from mes_customer where status='W' order by cu_id", Customer.class); if (customers!=null&&customers.size()>0){ for (Customer customer:customers) { customer.setMesUser(tokenConfig.get("mesUser")); customer.setMesPwd(MD5Util.encodeByMD5(tokenConfig.get("mesPwd"))); Map map = syncMES(JSON.toJSONString(customer, SerializerFeature.WriteMapNullValue).replace("null", "\"\""), tokenConfig.get("syncCustomer")); if (map!=null){ int code = Integer.parseInt(StringUtil.nvl(map.get("msgId"), "-1")); if (code==0){ baseDao.updateByCondition("mes_customer","status='D'","status='W' and cu_id="+customer.getCu_id()); }else { int flag = customer.getFlag(); if (flag == 1) { customer.setFlag(0); } else if (flag == 0) { customer.setFlag(1); } Map map1 = syncMES(JSON.toJSONString(customer, SerializerFeature.WriteMapNullValue).replace("null", "\"\""), tokenConfig.get("syncCustomer")); if (map1!=null){ int code1 = Integer.parseInt(StringUtil.nvl(map.get("msgId"), "-1")); if (code1==0){ baseDao.updateByCondition("mes_customer","status='D'","status='W' and cu_id="+customer.getCu_id()); }else { baseDao.updateByCondition("mes_customer","status='F'","status='W' and cu_id="+customer.getCu_id()); baseDao.execute("insert into meserrorlog (mel_id,mel_url,mel_error,mel_indate,mel_djcode,mel_type) values (MESERRORLOG_SEQ.NEXTVAL,'"+tokenConfig.get("syncCustomer")+"','"+StringUtil.nvl(map.get("msg"),"")+"',sysdate,'"+customer.getCu_code()+"','客户资料')"); } } } } } } }catch (Exception e){ logger.info("客户资料异常信息:"+e.getMessage()); e.printStackTrace(); } } private Map syncMES(String params,String url){ Map map = new HashMap<>(); map.put("code",-1); logger.info("params:"+params); try { String post = PSHttpUtils.sendPost(tokenConfig.get("mesHttp") + url, params); logger.info("post:"+post); JSONObject jsonObject = JSON.parseObject(post); int code = jsonObject.getIntValue("result"); logger.info("code:"+code); if (code==0){ map.put("code",code); map.put("msg","同步MES成功"); }else if(code==1){ map.put("code",code); logger.info("msg:"+jsonObject.getString("message")); map.put("msg",jsonObject.getString("message")); }else { map.put("code",-1); map.put("msg","接口调用异常,错误代码:"+code+",请联系MES处理!"); } }catch (Exception e){ map.put("msg","接口调用异常,异常信息:"+e.getMessage()+",请联系MES处理!"); logger.info("异常信息:"+e.getMessage()); e.printStackTrace(); } return map; } }