package com.uas.eis.service.Impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.serializer.SerializerFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.uas.eis.core.support.TokenProperties; import com.uas.eis.dao.BaseDao; import com.uas.eis.dao.SqlRowList; import com.uas.eis.entity.*; import com.uas.eis.entity.fanwei.AccountRegisterDetail1; import com.uas.eis.entity.fanwei.AccountRegisterDetail2; import com.uas.eis.entity.fanwei.AccountRegisterMain; import com.uas.eis.entity.fanwei.AccountRegisterReq; import com.uas.eis.sdk.entity.ApiResult; import com.uas.eis.sdk.resp.ApiResponse; import com.uas.eis.service.ERPService; import com.uas.eis.utils.BaseUtil; 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 org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @author koul * @email koul@usoftchina.com * @date 2021-12-06 18:27 */ @Service public class ERPServiceImpl implements ERPService { private final Logger logger = LoggerFactory.getLogger(this.getClass()); private static Map tokenConfig = TokenProperties.getAllProperty(); @Autowired private BaseDao baseDao; @Autowired private ObjectMapper objectMapper; // @Override // public ApiResult syncProductStock(String data) { // logger.info("sendProd-Begin:master {} ids {}"); // try { // SqlRowList docMsg = baseDao.queryForRowSet(" select pr_id,to_char(sysdate,'yyyy-mm-dd') ba_date,ba_remain,tspr_eightcode,pr_code,tspr_ninecode,tspr_description,ba_code from product left join batch on pr_code=ba_prodcode left join transsionproduct on pr_code=tspr_uasprcode " + // " where tspr_enable=-1 and pr_statuscode='AUDITED' and ba_whcode='BSD056' and ba_remain>0"); // if(!docMsg.hasNext()){ // return ApiResponse.failRsp("102","没有需要同步的商品库存"); // } // List> docMsgResultList = docMsg.getResultList(); // StringBuffer errMsg = new StringBuffer(); // List docCodes = new ArrayList<>(); // List list = new ArrayList<>(); // Map reqMap = new HashMap<>(); // String prCodes = ""; // for (Map map : docMsgResultList) { // docCodes.add(map.get("pr_code")); // logger.info("sendProd-test: id {} code {}",map.get("pr_id"),map.get("pr_code")); // // 创建SaleMaterialStockVO对象 // SaleMaterialStockVO saleMaterialStockVO = new SaleMaterialStockVO.Builder() // .location("BSD056") // .qdate(StringUtil.nvl(map.get("ba_date")," ")) // .quanity(StringUtil.nvl(map.get("ba_remain")," ")) // .materialNumber(StringUtil.nvl(map.get("tspr_eightcode")," ")) // .supplierMaterialNumber(StringUtil.nvl(map.get("pr_code")," ")) // .mpn(StringUtil.nvl(map.get("tspr_ninecode")," ")) // .status(1) // .materialDescription(StringUtil.nvl(map.get("tspr_description")," ")) // .batchNo(StringUtil.nvl(map.get("ba_code")," ")) // .build(); // list.add(saleMaterialStockVO); // } // reqMap.put("list",list); // logger.info("sendProd-End:master {} ids {}"); // if(errMsg.length()>0){ // return ApiResponse.failRsp("101",errMsg.toString()); // } // String json = null; // try{ // json = objectMapper.writeValueAsString(reqMap); // logger.info("Request JSON: {}", json); // // // } // catch (JsonProcessingException e) { // e.printStackTrace(); // logger.info("sendProd-Error:JSON转换失败 codes {} ",prCodes); // return ApiResponse.failRsp("106","JSON转换失败"); // } catch (Exception e) { // e.printStackTrace(); // //eMsg = StringUtil.nvl(e.getMessage(),"无"); // //baseDao.execute("update product set pr_sendwmsstatus='同步失败' ,pr_sendwmserr='操作:同步' where pr_code in ("+prCodes+")"); // throw new RuntimeException(e); // } // //接口入参,接口平台会直接将当前账号信息传入接口 // //String json ="{\"elsAccount\":\"864385\"}"; // //接口提供方企业应用账号 // String elsAccount = "864385"; // //接口标识 // String interfaceCode = "SRM009"; // //接口参数组装 // EntryForPOST post = EntryForPOST.builder().elsAccount(elsAccount) // .businessType(interfaceCode) // .reuestData(json) // .specialSign(interfaceCode) // .build(); // // JSONObject jsonObject = new JSONObject(); // JSONObject result = null; // try { // //接口调用 // result = OpenApiUtil.doPost(post); // } catch (Exception e) { // jsonObject.put("message", e.getMessage()); // System.out.println("error1"+e.getMessage()); // } // //接口返回结果 // jsonObject.put("message", result.toJSONString()); // System.out.println(jsonObject.get("message")); // return ApiResponse.successRsp("0","同步库存成功"); // } catch (Exception e) { // JSONObject jsonObject = new JSONObject(); // jsonObject.put("message", e.getMessage()); // System.out.println("error1"+e.getMessage()); // return ApiResponse.failRsp("101",jsonObject.getString("message")); // } // } // // @Override // public ApiResult syncOriFactoryDelivery(String data) { // logger.info("sendOriFactoryDelivery-Begin:master {} ids {}"); // try { // SqlRowList docMsg = baseDao.queryForRowSet(" select nvl(pd_qty-nvl(pd_acceptqty,0),0) wrkQty,tspr_uasprcode,tspr_eightcode,tspr_ninecode,to_char(pu_date,'yyyy-mm-dd') pu_date,pu_code,pd_detno, " + // " to_char(pd_delivery,'yyyy-mm-dd') pd_delivery,pd_qty,pd_qty pd_qtyreply,to_char(pd_delivery,'yyyy-mm-dd') pd_deliveryreply,'' pd_remark " + // " from purchasedetail left join purchase on pd_puid=pu_id left join transsionproduct on pd_prodcode=tspr_uasprcode " + // " where pu_statuscode = 'AUDITED' and nvl(pd_mrpstatuscode,' ')<>'FINISH' and pd_qty-nvl(pd_acceptqty,0)>0 and upper(pd_custname) in ('传音','上海传音') and nvl(tspr_uasprcode,' ') <> 'STK35F62' " + // " and nvl(TSPR_EIGHTCODE,' ')<>' ' and nvl(tspr_ENABLE,0) = -1 order by pd_prodcode,pd_puid,pd_detno"); // if(!docMsg.hasNext()){ // return ApiResponse.failRsp("102","没有需要同步的商品库存"); // } // List> docMsgResultList = docMsg.getResultList(); // StringBuffer errMsg = new StringBuffer(); // List docCodes = new ArrayList<>(); // List list = new ArrayList<>(); // Map reqMap = new HashMap<>(); // String prCodes = ""; // for (Map map : docMsgResultList) { // docCodes.add(map.get("pr_code")); // logger.info("sendProd-test: id {} code {}",map.get("pr_id"),map.get("pr_code")); // // 创建SaleMaterialStockVO对象 // SupplierSecondMaterialStockVO supplierSecondMaterialStockVO = new SupplierSecondMaterialStockVO.Builder() // .materialOem(StringUtil.nvl(map.get("tspr_uasprcode")," ")) // .matOrderDate(StringUtil.nvl(map.get("pu_date")," ")) // .orderNumber(StringUtil.nvl(map.get("pu_code")," ")) // .orderItemNumber(StringUtil.nvl(map.get("pd_detno")," ")) // .orderReqDate(StringUtil.nvl(map.get("pd_delivery")," ")) // .orderQty(StringUtil.nvl(map.get("pd_qty")," ")) // .orderCondate(StringUtil.nvl(map.get("pd_deliveryreply")," ")) // .orderConQty(StringUtil.nvl(map.get("pd_qtyreply")," ")) // .supplierRemark(StringUtil.nvl(map.get("pd_remark")," ")) // .build(); // list.add(supplierSecondMaterialStockVO); // } // reqMap.put("list",list); // logger.info("sendOriFactoryDelivery-End:master {} ids {}"); // if(errMsg.length()>0){ // return ApiResponse.failRsp("101",errMsg.toString()); // } // String json = null; // try{ // json = objectMapper.writeValueAsString(reqMap); // logger.info("Request JSON: {}", json); // // // } // catch (JsonProcessingException e) { // e.printStackTrace(); // logger.info("sendOriFactoryDelivery-Error:JSON转换失败 codes {} ",prCodes); // return ApiResponse.failRsp("106","JSON转换失败"); // } catch (Exception e) { // e.printStackTrace(); // //eMsg = StringUtil.nvl(e.getMessage(),"无"); // //baseDao.execute("update product set pr_sendwmsstatus='同步失败' ,pr_sendwmserr='操作:同步' where pr_code in ("+prCodes+")"); // throw new RuntimeException(e); // } // //接口入参,接口平台会直接将当前账号信息传入接口 // //String json ="{\"elsAccount\":\"864385\"}"; // //接口提供方企业应用账号 // String elsAccount = "864385"; // //接口标识 // String interfaceCode = "SRM013"; // //接口参数组装 // EntryForPOST post = EntryForPOST.builder().elsAccount(elsAccount) // .businessType(interfaceCode) // .reuestData(json) // .specialSign(interfaceCode) // .build(); // // JSONObject jsonObject = new JSONObject(); // JSONObject result = null; // try { // //接口调用 // result = OpenApiUtil.doPost(post); // } catch (Exception e) { // jsonObject.put("message", e.getMessage()); // System.out.println("error1"+e.getMessage()); // } // //接口返回结果 // jsonObject.put("message", result.toJSONString()); // System.out.println(jsonObject.get("message")); // return ApiResponse.successRsp("0","同步库存成功"); // } catch (Exception e) { // JSONObject jsonObject = new JSONObject(); // jsonObject.put("message", e.getMessage()); // System.out.println("error1"+e.getMessage()); // return ApiResponse.failRsp("101",jsonObject.getString("message")); // } // } @Override @Transactional public ApiResult> saveAccountRegister(AccountRegisterReq accountRegisterReq) { Map result = new HashMap(); try { JSONObject jsonObject = new JSONObject(); logger.info("saveAccountRegister-Begin:master {} ids {}"); String caller="AccountRegister!Bank"; AccountRegisterMain accountRegisterMain = accountRegisterReq.getAccountRegisterMain(); int ar_id = baseDao.getSeqId("ACCOUNTREGISTER_SEQ"); String code = baseDao.sGetMaxNumber("AccountRegister", 2); List sqls = new ArrayList<>(); // 应收票据收款、应付票据付款 必须有来源,不允许手工新增 String type = accountRegisterMain.getType(); //Employee employee = SystemSession.getUser(); if ("应收票据收款".equals(type) || "应付票据付款".equals(type)){ return ApiResponse.failRsp("102",type + " 必须有来源,不允许手工新增"); } List accountRegisterDetail1s = accountRegisterReq.getListDetail1(); String err_out = ""; int count = accountRegisterDetail1s.size(); for (AccountRegisterDetail1 map : accountRegisterDetail1s) { String cate_code = map.getCatecode(); // 科目编码 BigDecimal detno = map.getDetno(); if (!cate_code.trim().equals("")) { Object o = baseDao.getFieldDataByCondition("CATEGORY", "ca_isleaf", "ca_code='" + cate_code + "'"); String isleaf = o == null ? "0" : o.toString(); if (isleaf.equals("0")) { // 科目不是子节点 报错 err_out = err_out + String.valueOf(detno); if (accountRegisterDetail1s.indexOf(map) == count - 1) { } else { err_out = err_out + ","; } } } } if (!err_out.equals("")) { return ApiResponse.failRsp("102","第" + err_out + "条明细行科目不是末级科目,不能保存明细行!"); } Object date = (Object) accountRegisterMain.getDate(); baseDao.checkCloseMonth("MONTH-B", date); boolean bool = baseDao.checkIf("PeriodsDetail", "pd_code='MONTH-B' and pd_status=99 and pd_detno=to_char(to_date('" + date + "','yyyy-mm-dd hh24:mi:ss'), 'yyyymm')"); if (bool) { return ApiResponse.failRsp("102",type + " 单据日期所属期间已结账,不允许进行当前操作!"); } if (accountRegisterMain.getDate() == null || "".equals(accountRegisterMain.getDate())){ return ApiResponse.failRsp("102",type + " 参数单据日期为空!"); } if (accountRegisterMain.getAccountcode() == null || "".equals(accountRegisterMain.getAccountcode())){ return ApiResponse.failRsp("102",type + " 账户编号为空!"); } // 获取当前日期 LocalDate today = LocalDate.now(); // 格式化 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-mm-dd"); String formattedDate = today.format(formatter); String ar_date = accountRegisterMain.getDate() == null || "".equals(accountRegisterMain.getDate()) ? formattedDate : accountRegisterMain.getDate(); String ar_type = accountRegisterMain.getType() == null ? "" : accountRegisterMain.getType(); String ar_currencytype = accountRegisterMain.getCurrencytype() == null ? "" : accountRegisterMain.getCurrencytype(); String ar_accountcode = accountRegisterMain.getAccountcode() == null ? "" : accountRegisterMain.getAccountcode(); String ar_accountname = accountRegisterMain.getAccountname() == null ? "" : accountRegisterMain.getAccountname(); String ar_accountcurrency = accountRegisterMain.getAccountcurrency() == null ? "" : accountRegisterMain.getAccountcurrency(); //String ar_accountrate = accountRegisterMain.getAccountrate() == null ? "" : accountRegisterMain.getAccountrate(); //String ar_payment = accountRegisterMain.getType() == null ? "" : accountRegisterMain.getType(); String ar_departmentcode = accountRegisterMain.getDepartmentcode() == null ? "" : accountRegisterMain.getDepartmentcode(); String ar_departmentname = accountRegisterMain.getDepartmentname() == null ? "" : accountRegisterMain.getDepartmentname(); //String ar_cateid = accountRegisterMain.getType() == null ? "" : accountRegisterMain.getType(); String Sql="insert into AccountRegister(ar_id,ar_code,ar_date,ar_type,ar_currencytype,ar_accountcode,ar_accountname,ar_accountcurrency,ar_accountrate" + ",ar_payment,ar_departmentcode,ar_departmentname,ar_cateid,ar_emid,ar_recordman,ar_status,ar_statuscode,ar_poststatus,ar_poststatuscode)" + "values("+ar_id+",'"+code+"',to_date('"+ar_date+"','yyyy-mm-dd'),'"+ar_type+"','"+ar_currencytype+"','"+ar_accountcode+"'," + "'"+ar_accountname+"','"+ar_accountcurrency+"',"+accountRegisterMain.getAccountrate()+"," + accountRegisterMain.getPayment() +",'"+ar_departmentcode+"','"+ar_departmentname+"',"+accountRegisterMain.getCateid() +"," + "1033922,'管理员','在录入','ENTERING','未过账','UNPOST')"; sqls.add(Sql); List accountRegisterDetail2s = accountRegisterReq.getListDetail2(); for (AccountRegisterDetail1 accountRegisterDetail1: accountRegisterDetail1s) { int ard_id = baseDao.getSeqId("ACCOUNTREGISTERDETAIL_SEQ"); Sql="insert into AccountRegisterDetail(ard_id,ard_arid,ard_detno,ard_explanation,ard_catecode,ard_catedesc,ard_currency,ard_rate,ard_doubledebit,ard_debit,ard_doublecredit,ard_credit)" + "values("+ard_id+","+ar_id+","+accountRegisterDetail1.getDetno()+",'"+accountRegisterDetail1.getExplanation()+"','"+accountRegisterDetail1.getCatecode()+"','"+ accountRegisterDetail1.getCatedesc()+"','"+accountRegisterDetail1.getCurrency()+"',"+accountRegisterDetail1.getRate()+","+accountRegisterDetail1.getDoubledebit()+","+accountRegisterDetail1.getDebit()+","+accountRegisterDetail1.getDoublecredit()+","+accountRegisterDetail1.getCredit() +")"; sqls.add(Sql); for (AccountRegisterDetail2 accountRegisterDetail2: accountRegisterDetail2s) { if (accountRegisterDetail2.getDetailFkId().doubleValue() == accountRegisterDetail1.getDetailId().doubleValue()){ Sql="insert into ACCOUNTREGISTERDETAILASS(ARS_ID, ARS_ARDID, ARS_DETNO, ARS_ASSTYPE, ARS_ASSCODE, ARS_ASSNAME, ARS_TYPE)" + "values(ACCOUNTREGISTERDETAILASS_seq.nextval,"+ard_id+","+accountRegisterDetail2.getDetno()+",'"+accountRegisterDetail2.getAsstype()+"','"+accountRegisterDetail2.getAsscode()+"','"+ accountRegisterDetail2.getAssname()+"','AccountRegister!Bank')"; sqls.add(Sql); } } } baseDao.execute(sqls); String defaultCurr = baseDao.getDBSetting(caller, "fyCurr"); if(defaultCurr != null){ baseDao.execute("update accountregisterdetail set ard_currency='"+defaultCurr+"' WHERE ard_arid in (select ar_id from accountregister where ar_id=" + ar_id +" and nvl(ar_currencytype,0)<>0 and ar_type='费用') and nvl(ard_currency,' ')=' '"); } baseDao.execute("update accountregisterdetail set ard_rate=(select cm_crrate from CurrencysMonth,accountregister where ard_arid=ar_id and cm_crname=ard_currency " + " and CM_YEARMONTH=to_char(ar_date,'yyyymm')) where ard_arid=" + ar_id + " and nvl(ard_currency,' ')<>' '"); baseDao.execute("update accountregisterdetail set ard_debit=round(ard_rate*ard_doubledebit,2) where nvl(ard_doubledebit,0)<>0 and nvl(ard_rate,0)<>0 and ard_arid=" + ar_id); baseDao.execute("update accountregisterdetail set ard_credit=round(ard_rate*ard_doublecredit,2) where nvl(ard_doublecredit,0)<>0 and nvl(ard_rate,0)<>0 and ard_arid=" + ar_id); baseDao.execute("update accountregisterdetail set ard_doubledebit=round(ard_debit/ard_rate,2) where nvl(ard_doubledebit,0)=0 and nvl(ard_rate,0)<>0 and ard_arid=" + ar_id); baseDao.execute("update accountregisterdetail set ard_doublecredit=round(ard_credit/ard_rate,2) where nvl(ard_doublecredit,0)=0 and nvl(ard_rate,0)<>0 and ard_arid=" + ar_id); String insertAssDetSql = "insert into accountregisterdetailass(ars_id,ars_ardid,ars_detno,ars_asstype,ars_asscode,ars_assname,ars_type) values (?,?,?,?,?,?,'AccountRegister!Bank')"; SqlRowList rs = baseDao .queryForRowSet( "select * from accountregister left join accountregisterdetail on ard_arid=ar_id where ard_arid=? and nvl(ard_catecode,' ')<>' '", ar_id); while (rs.next()) { Object catecode = rs.getObject("ard_catecode"); int ardid = rs.getInt("ard_id"); SqlRowList ass = baseDao.queryForRowSet("select ca_assname from category where ca_code=? and nvl(ca_assname,' ')<>' '", catecode); if (ass.next()) { String assStr = ass.getString("ca_assname"); String[] codes = assStr.split("#"); for (String assname : codes) { int i = baseDao.getCount("select count(1) from accountregisterdetailass where ars_ardid=" + ardid + " and ARS_ASSTYPE='" + assname + "'"); if (i == 0) { Object maxno = baseDao.getFieldDataByCondition("accountregisterdetailass", "max(nvl(ars_detno,0))", "ars_ardid=" + ardid); maxno = maxno == null ? 0 : maxno; int detno = Integer.parseInt(maxno.toString()) + 1; int arsid = baseDao.getSeqId("ACCOUNTREGISTERDETAILASS_SEQ"); baseDao.execute(insertAssDetSql, new Object[] { arsid, ardid, detno, assname, null, null }); } int arsid = baseDao.getFieldValue("accountregisterdetailass", "ars_id", "ars_ardid=" + ardid + " and ARS_ASSTYPE='" + assname + "'", Integer.class); if ("部门".equals(assname) && StringUtil.hasText(rs.getObject("ar_departmentcode"))) { baseDao.execute("update accountregisterdetailass set ars_asscode='" + rs.getObject("ar_departmentcode") + "', ars_assname='" + rs.getObject("ar_departmentname") + "' where ars_id=" + arsid + " and nvl(ars_asscode,' ')=' '"); } if ("项目".equals(assname) && StringUtil.hasText(rs.getObject("ar_prjcode"))) { baseDao.execute("update accountregisterdetailass set ars_asscode='" + rs.getObject("ar_prjcode") + "', ars_assname='" + rs.getObject("ar_prjname") + "' where ars_id=" + arsid + " and nvl(ars_asscode,' ')=' '"); } if ("客户往来".equals(assname) && StringUtil.hasText(rs.getObject("ar_custcode"))) { baseDao.execute("update accountregisterdetailass set ars_asscode='" + rs.getObject("ar_custcode") + "', ars_assname='" + rs.getObject("ar_custname") + "' where ars_id=" + arsid + " and nvl(ars_asscode,' ')=' '" + " and nvl(ars_asscode,' ')=' '"); } if ("供应商往来".equals(assname) && StringUtil.hasText(rs.getObject("ar_vendcode"))) { baseDao.execute("update accountregisterdetailass set ars_asscode='" + rs.getObject("ar_vendcode") + "', ars_assname='" + rs.getObject("ar_vendname") + "' where ars_id=" + arsid + " and nvl(ars_asscode,' ')=' '" + " and nvl(ars_asscode,' ')=' '"); } if ("员工".equals(assname) && StringUtil.hasText(rs.getObject("ar_emcode"))) { baseDao.execute("update accountregisterdetailass set ars_asscode='" + rs.getObject("ar_emcode") + "', ars_assname='" + rs.getObject("ar_emname") + "' where ars_id=" + arsid + " and nvl(ars_asscode,' ')=' '" + " and nvl(ars_asscode,' ')=' '"); } } } } updateErrorString(ar_id); result.put("code", code); result.put("date", ar_date); }catch (Exception e){ JSONObject jsonObject = new JSONObject(); jsonObject.put("message", e.getMessage()); return ApiResponse.failRsp("101",jsonObject.getString("message")); } return ApiResponse.successRsp("0","同步银行登记成功","",result); } public void updateErrorString(int id) { // 多辅助核算项的核算明细按照科目编号中辅助核算名称顺序重排 SqlRowList detailList = baseDao .queryForRowSet( "select ard_id,ca_assname from accountregisterdetail left join category on ard_catecode=ca_code where ard_arid=? and ca_assname is not null and instr(ca_assname,'#')>0", id); while (detailList.next()) { String[] assNames = detailList.getString("ca_assname").split("#"); int index = 1; for (String assName : assNames) { baseDao.execute("update accountregisterdetailass set ars_detno=? where ars_ardid=? and ars_asstype=? and ars_detno<>?", index, detailList.getObject("ard_id"), assName, index); index++; } } // 单据类型为 费用 或者其它收款 或者其它付款 baseDao.updateByCondition("AccountRegister", "ar_errstring = null", "ar_id=" + id); SqlRowList rs = baseDao .queryForRowSet( "SELECT abs((ROUND(AR_DEPOSIT*AR_ACCOUNTRATE,2)+SUM_DEBIT)-(ROUND(AR_PAYMENT*AR_ACCOUNTRATE,2)+SUM_CREDIT)) amount, round((AR_DEPOSIT+AR_PAYMENT)*AR_ACCOUNTRATE,2) bbamount " + "FROM (SELECT NVL(AR_ACCOUNTRATE,1) AR_ACCOUNTRATE,NVL(AR_PAYMENT,0) AR_PAYMENT,NVL(AR_DEPOSIT,0) AR_DEPOSIT,round(NVL(ARDDEBIT,0),2) SUM_DEBIT,round(NVL(ARDCREDIT,0),2) sum_credit " + "FROM ACCOUNTREGISTER LEFT JOIN (SELECT SUM(NVL(ARD_DEBIT,0)) ARDDEBIT,SUM(NVL(ARD_CREDIT,0)) ARDCREDIT,ARD_ARID FROM ACCOUNTREGISTERDETAIL GROUP BY ARD_ARID) on ar_id=ard_arid " + "where ar_id=? and ar_type in ('费用','其它收款','其它付款'))", id); if (rs.next()) { if (rs.getGeneralDouble("amount") >= 0.01) { baseDao.updateByCondition("AccountRegister", "ar_errstring = '不平衡(" + rs.getGeneralDouble("amount") + "),本币(" + rs.getGeneralDouble("bbamount") + ")'", "ar_id=" + id); } } } @Override public ApiResult syncProduct(String data) { Map store = BaseUtil.parseFormStoreToMap(data); 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=?", new BeanPropertyRowMapper(Product.class),store.get("pr_id")); product.setFlag(Integer.parseInt(StringUtil.nvl(store.get("flag"),"-1"))); product.setMesUser(tokenConfig.get("mesUser")); product.setMesPwd(MD5Util.encodeByMD5(tokenConfig.get("mesPwd"))); return syncMES(JSON.toJSONString(product, SerializerFeature.WriteMapNullValue).replace("null","\"\""),tokenConfig.get("syncProduct")); } @Override public ApiResult syncMakeBase(String data) { Map store = BaseUtil.parseFormStoreToMap(data); 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=?", new BeanPropertyRowMapper(Make.class),store.get("ma_id")); make.setFlag(Integer.parseInt(StringUtil.nvl(store.get("flag"),"-1"))); make.setMesPwd(MD5Util.encodeByMD5(tokenConfig.get("mesPwd"))); make.setMesUser(tokenConfig.get("mesUser")); return syncMES(JSON.toJSONString(make, SerializerFeature.WriteMapNullValue).replace("null","\"\""),tokenConfig.get("syncMakeBase")); } @Override public ApiResult syncMakeBaseDetail(String data) { Map store = BaseUtil.parseFormStoreToMap(data); 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", new BeanPropertyRowMapper(MakeMaterial.class),store.get("mm_id")); makeMaterial.setFlag(Integer.parseInt(StringUtil.nvl(store.get("flag"),"-1"))); makeMaterial.setMesUser(tokenConfig.get("mesUser")); makeMaterial.setMesPwd(MD5Util.encodeByMD5(tokenConfig.get("mesPwd"))); return syncMES(JSON.toJSONString(makeMaterial, SerializerFeature.WriteMapNullValue).replace("null","\"\""),tokenConfig.get("syncMakeBaseDetail")); } @Override public ApiResult syncUpdateReceiveByErp(String data) { try { Map store = BaseUtil.parseFormStoreToMap(data); 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=?", new BeanPropertyRowMapper(VerifyApply.class), store.get("va_id")); 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")); if (rs.next()){ verifyApply.setVa_custcode(rs.getString("cu_code")); //verifyApply.setVa_custname(rs.getString("cu_name")); } verifyApply.setMesPwd(MD5Util.encodeByMD5(tokenConfig.get("mesPwd"))); verifyApply.setMesUser(tokenConfig.get("mesUser")); verifyApply.setFlag(Integer.parseInt(StringUtil.nvl(store.get("flag"),"-1"))); List 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); verifyApply.setDetail(verifyApplyDetails); return syncMES(JSON.toJSONString(verifyApply, SerializerFeature.WriteMapNullValue).replace("null","\"\""),tokenConfig.get("syncUpdateReceiveByErp")); }catch (Exception e){ logger.info("同步收料单异常信息:"+e.getMessage()); e.printStackTrace(); return ApiResponse.failRsp("104",e.getMessage()); } } private ApiResult syncMES(String params,String url){ try { logger.info("params:"+params); String post = PSHttpUtils.sendPost(tokenConfig.get("mesHttp") + url, params); logger.info("post:"+post); JSONObject jsonObject = JSON.parseObject(post); int code = jsonObject.getIntValue("result"); if (code==0){ return ApiResponse.successRsp("0","同步MES成功"); }else if(code==1){ return ApiResponse.failRsp("101",jsonObject.getString("message")); }else { return ApiResponse.failRsp("102","接口调用异常,请联系MES处理!"); } }catch (Exception e){ logger.info("异常信息:"+e.getMessage()); return ApiResponse.failRsp("103","接口调用异常,请联系MES处理!"); } } }