GEServiceImpl.java 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516
  1. package com.uas.eis.service.Impl;
  2. import com.alibaba.fastjson.JSON;
  3. import com.uas.eis.config.SynaConfig;
  4. import com.uas.eis.core.X12Converter;
  5. import com.uas.eis.core.config.SpObserver;
  6. import com.uas.eis.core.support.TokenProperties;
  7. import com.uas.eis.dao.BaseDao;
  8. import com.uas.eis.dao.SqlRowList;
  9. import com.uas.eis.entity.*;
  10. import com.uas.eis.sdk.entity.ApiResult;
  11. import com.uas.eis.sdk.entity.GRApiResult;
  12. import com.uas.eis.sdk.entity.Errors;
  13. import com.uas.eis.sdk.entity.ReturnData;
  14. import com.uas.eis.sdk.resp.ApiResponse;
  15. import com.uas.eis.service.CommonService;
  16. import com.uas.eis.service.GEService;
  17. import com.uas.eis.utils.HttpUtil;
  18. import com.uas.eis.utils.HuToolUtils;
  19. import com.uas.eis.vo.HttpResultResponse;
  20. import io.xlate.edi.schema.EDISchemaException;
  21. import io.xlate.edi.stream.EDIStreamException;
  22. import net.sf.json.JSONObject;
  23. import okhttp3.*;
  24. import org.slf4j.Logger;
  25. import org.slf4j.LoggerFactory;
  26. import org.springframework.beans.factory.annotation.Autowired;
  27. import org.springframework.beans.factory.annotation.Value;
  28. import org.springframework.stereotype.Service;
  29. import javax.servlet.http.HttpServletRequest;
  30. import javax.validation.constraints.Null;
  31. import java.io.IOException;
  32. import java.nio.charset.StandardCharsets;
  33. import java.text.ParseException;
  34. import java.text.SimpleDateFormat;
  35. import java.util.*;
  36. import com.uas.eis.dto.*;
  37. /**
  38. * @author zxl
  39. * @email zxl@usoftchina.com
  40. */
  41. @Service
  42. public class GEServiceImpl implements GEService {
  43. private final Logger logger = LoggerFactory.getLogger(this.getClass());
  44. private static Map<String, String> tokenConfig = TokenProperties.getAllProperty();
  45. @Autowired
  46. private BaseDao baseDao;
  47. @Autowired
  48. private SynaConfig synaConfig;
  49. @Autowired
  50. private CommonService commonService;
  51. @Value("${api.url.geer.asn}")
  52. private String asnUrl;
  53. final static String SALE_PRICE_CCP = "select spd_id,spd_price,spd_taxrate from (select spd_id,spd_price,spd_taxrate,spd_remark,spd_ratio from SalePriceDetail left join SalePrice on spd_spid=sp_id"
  54. + " where spd_arcustcode=? and spd_prodcode=? and spd_currency=? and to_char(sp_fromdate,'yyyymmdd')<=to_char(sysdate,'yyyymmdd') and nvl(spd_lapqty,0)<=? and"
  55. + " to_char(sp_todate,'yyyymmdd')>=to_char(sysdate,'yyyymmdd') AND spd_statuscode='VALID' and sp_statuscode='AUDITED' ORDER BY SalePrice.sp_indate DESC,SalePriceDetail.spd_price) where rownum<2";
  56. final static String SALE_PRICE_CCPR = "select spd_id,spd_price,spd_taxrate from (select spd_id,spd_price,spd_taxrate,spd_remark,spd_ratio from SalePriceDetail left join SalePrice on spd_spid=sp_id"
  57. + " where spd_arcustcode=? and spd_prodcode=? and spd_currency=? AND spd_taxrate=? and to_char(sp_fromdate,'yyyymmdd')<=to_char(sysdate,'yyyymmdd') and nvl(spd_lapqty,0)<=? and"
  58. + " to_char(sp_todate,'yyyymmdd')>=to_char(sysdate,'yyyymmdd') AND spd_statuscode='VALID' and sp_statuscode='AUDITED' ORDER BY SalePrice.sp_indate DESC,SalePriceDetail.spd_price) where rownum<2";
  59. final static String SALE_PRICE_KCP = "select spd_id,spd_price,spd_taxrate from (select spd_id,spd_price,spd_taxrate,spd_remark,spd_ratio from SalePriceDetail left join SalePrice on spd_spid=sp_id"
  60. + " where spd_prodcode=? and spd_currency=? and to_char(sp_fromdate,'yyyymmdd')<=to_char(sysdate,'yyyymmdd') and spd_pricetype=? and nvl(spd_lapqty,0)<=? and"
  61. + " to_char(sp_todate,'yyyymmdd')>=to_char(sysdate,'yyyymmdd') AND spd_statuscode='VALID' and sp_statuscode='AUDITED' ORDER BY SalePrice.sp_indate DESC,SalePriceDetail.spd_price) where rownum<2";
  62. final static String SALE_PRICE_PC = "select spd_id,spd_price,spd_taxrate from (select spd_id,spd_price,spd_taxrate,spd_remark,spd_ratio from SalePriceDetail left join SalePrice on spd_spid=sp_id"
  63. + " where spd_prodcode=? and spd_currency=? and to_char(sp_fromdate,'yyyymmdd')<=to_char(sysdate,'yyyymmdd') and nvl(spd_lapqty,0)<=? and"
  64. + " to_char(sp_todate,'yyyymmdd')>=to_char(sysdate,'yyyymmdd') AND spd_statuscode='VALID' and sp_statuscode='AUDITED' ORDER BY SalePrice.sp_indate DESC,SalePriceDetail.spd_price) where rownum<2";
  65. final static String SALE_PRICE_PCR = "select spd_id,spd_price,spd_taxrate from (select spd_id,spd_price,spd_taxrate,spd_remark,spd_ratio from SalePriceDetail left join SalePrice on spd_spid=sp_id"
  66. + " where spd_prodcode=? and spd_currency=? and spd_taxrate=? and to_char(sp_fromdate,'yyyymmdd')<=to_char(sysdate,'yyyymmdd') and nvl(spd_lapqty,0)<=? and"
  67. + " to_char(sp_todate,'yyyymmdd')>=to_char(sysdate,'yyyymmdd') AND spd_statuscode='VALID' and sp_statuscode='AUDITED' ORDER BY SalePrice.sp_indate DESC,SalePriceDetail.spd_price) where rownum<2";
  68. final static String SALE_PRICE_SCP = "select spd_id,spd_price,spd_taxrate from (select spd_id,spd_price,spd_taxrate,spd_remark,spd_ratio from SalePriceDetail left join SalePrice on spd_spid=sp_id"
  69. + " where sp_kind=? and spd_prodcode=? and spd_currency=? and to_char(sp_fromdate,'yyyymmdd')<=to_char(sysdate,'yyyymmdd') and nvl(spd_lapqty,0)<=? and"
  70. + " to_char(sp_todate,'yyyymmdd')>=to_char(sysdate,'yyyymmdd') AND spd_statuscode='VALID' and sp_statuscode='AUDITED' ORDER BY SalePrice.sp_indate DESC,SalePriceDetail.spd_price) where rownum<2";
  71. @Override
  72. public GRApiResult<String> getPoordergr(HttpServletRequest request, PoInternalDTO dtop) {
  73. PoOrderGrDTO dto = dtop.getPo();
  74. GRApiResult<String> grApiResult = new GRApiResult<String>();
  75. String vendcode = dto.getDetails().get(0).getSubDetails().get(0).getAttr4();
  76. if("18850".equals(vendcode)){
  77. SpObserver.putSp("N_HUASL_QD");
  78. }else if("14780".equals(vendcode)){
  79. SpObserver.putSp("N_HUASL_T");
  80. }else {
  81. ReturnData returnData = new ReturnData();
  82. returnData.setSuccess("false");
  83. returnData.setTransId(dto.getTransId());
  84. List<Errors> errorss = new ArrayList<Errors>();
  85. Errors errors = new Errors();
  86. errors.setErrorCode("E07");
  87. errors.setErrorMsg("供应商编号不是18850或者14780!");
  88. errorss.add(errors);
  89. returnData.setErrors(errorss);
  90. grApiResult.setReturnData(returnData);
  91. return grApiResult;
  92. }
  93. List<String> sqls = new ArrayList<>();
  94. //PO表增加主键ID
  95. int poid = baseDao.getSeqId("POORDERGR_SEQ");
  96. sqls.add("insert into POORDERGR (HID,TRANSID,SITECODE,SENDERQUALIFIER,SENDERID,RECEIVERQUALIFIER,RECEIVERID,REGIONCODE," +
  97. "POTYPE,POHEADID,PONO,POVERSION,AGENTNAME," +
  98. "PODATE,CUSTREFNO,CURRENCY,RATE,TOTALAMOUNT," +
  99. "POE,MODELTYPE,MANUFACTORYCODE,MANUFACTORYNAME,VENDORCODE,VENDORNAME,SONO,INCOTERMSCODE,PAYMENTTERM," +
  100. "CARRIERTYPE,CARRIERCODE,CARRIERNAME,TRANSMODE,COC,CUSTSTORLOC,PURGROUP,CUSTCOMPCODE,POSTATUS," +
  101. "TRANSFLAG,TRANSDATE,ATTR1,ATTR2,ATTR3,ATTR4,ATTR5,ATTR6,ATTR7,ATTR8,ATTR9," +
  102. "ATTR10,EXTRAREFCODE1,EXTRAREFTEXT1,EXTRAREFCODE2,EXTRAREFTEXT2,PORECORDDATE,POID) " +
  103. "values ('"+dto.getHid()+"','"+dto.getTransId()+"','"+dto.getSiteCode()+"','"+dto.getSenderQualifier()+"','"+dto.getSenderId()+"','"+dto.getReceiverQualifier()+"','"+dto.getReceiverId()+"','"+dto.getRegionCode()+"'" +
  104. ",'"+dto.getPoType()+"','"+dto.getPoHeadId()+"','"+dto.getPoNo()+"','"+dto.getPoVersion()+"','"+dto.getAgentName()+"'," +
  105. "case when '"+dto.getPoDate()+"' = 'null' then null else TO_DATE('"+dto.getPoDate()+"', 'YYYY-MM-DD HH24:MI:SS') end,'"+dto.getCustRefNo()+"','"+dto.getCurrency()+"','"+dto.getRate()+"','"+dto.getTotalAmount()+"'" +
  106. ",'"+dto.getPoe()+"','"+dto.getModelType()+"','"+dto.getManufactoryCode()+"','"+dto.getManufactoryName()+"','"+dto.getVendorCode()+"','"+dto.getVendorName()+"','"+dto.getSoNo()+"','"+dto.getIncotermsCode()+"','"+dto.getPaymentTerm()+"'" +
  107. ",'"+dto.getCarrierType()+"','"+dto.getCarrierCode()+"','"+dto.getCarrierName()+"','"+dto.getTransMode()+"','"+dto.getCoc()+"','"+dto.getCustStorLoc()+"','"+dto.getPurGroup()+"','"+dto.getCustCompCode()+"','"+dto.getPoStatus()+"'" +
  108. ",'"+dto.getTransFlag()+"'," +
  109. "case when '"+dto.getTransDate()+"' = 'null' then null else TO_DATE('"+dto.getTransDate()+"', 'YYYY-MM-DD HH24:MI:SS') end,'"+dto.getAttr1()+"','"+dto.getAttr2()+"','"+dto.getAttr3()+"','"+dto.getAttr4()+"','"+dto.getAttr5()+"','"+dto.getAttr6()+"','"+dto.getAttr7()+"','"+dto.getAttr8()+"','"+dto.getAttr9()+"'" +
  110. ",'"+dto.getAttr10()+"','"+dto.getExtraRefCode1()+"','"+dto.getExtraRefText1()+"','"+dto.getExtraRefCode2()+"','"+dto.getExtraRefText2()+"',sysdate,"+poid+")");
  111. for (int i = 0; i < dto.getDetails().size(); i++) {
  112. //PO明细表增加主键ID
  113. int podetailid = baseDao.getSeqId("POORDERDETAILSGR_SEQ");
  114. PoOrderDetailsGrDTO podetail = dto.getDetails().get(i);
  115. sqls.add("insert into POORDERDETAILSGR (HID,PONO,POLINENO,POLINETYPE,ORDEREDQTY,QTYUOM,UNITPRICE,PRICEUOM," +
  116. "CUSTPARTNO,CUSTPARTDESC,VENDORPARTNO,VENDORPARTDESC,MANUFACTORYCODE,MANUFACTORYNAME," +
  117. "REQDATE,ETD,ETA," +
  118. "TRANSMODE,SONO,SOLINENO,TOTALAMOUNT,TAXRATE,ATTR1,ATTR2,ATTR3,ATTR4,ATTR5,ATTR6," +
  119. "ATTR7,ATTR8,ATTR9,ATTR10,EXTRAREFCODE1,EXTRAREFTEXT1,EXTRAREFCODE2,EXTRAREFTEXT2,DPOID,DETID) " +
  120. "values ('"+podetail.getHid()+"','"+podetail.getPoNo()+"','"+podetail.getPoLineNo()+"','"+podetail.getPoLineType()+"','"+podetail.getOrderedQty()+"','"+podetail.getQtyUom()+"','"+podetail.getUnitPrice()+"','"+podetail.getPriceUom()+"'" +
  121. ",'"+podetail.getCustPartNo()+"','"+podetail.getCustPartDesc()+"','"+podetail.getVendorPartNo()+"','"+podetail.getVendorPartDesc()+"','"+podetail.getManufactoryCode()+"','"+podetail.getManufactoryName()+"'" +
  122. ",case when '"+podetail.getReqDate()+"' = 'null' then null else TO_DATE('"+podetail.getReqDate()+"', 'YYYY-MM-DD HH24:MI:SS') end " +
  123. ",case when '"+podetail.getEtd()+"' = 'null' then null else TO_DATE('"+podetail.getEtd()+"', 'YYYY-MM-DD HH24:MI:SS') end " +
  124. ",case when '"+podetail.getEta()+"' = 'null' then null else TO_DATE('"+podetail.getEta()+"', 'YYYY-MM-DD HH24:MI:SS') end " +
  125. ",'"+podetail.getTransMode()+"','"+podetail.getSoNo()+"','"+podetail.getSoLineNo()+"','"+podetail.getTotalAmount()+"','"+podetail.getTaxRate()+"','"+podetail.getAttr1()+"','"+podetail.getAttr2()+"','"+podetail.getAttr3()+"','"+podetail.getAttr4()+"','"+podetail.getAttr5()+"','"+podetail.getAttr6()+"'" +
  126. ",'"+podetail.getAttr7()+"','"+podetail.getAttr8()+"','"+podetail.getAttr9()+"','"+podetail.getAttr10()+"','"+podetail.getExtraRefCode1()+"','"+podetail.getExtraRefText1()+"','"+podetail.getExtraRefCode2()+"','"+podetail.getExtraRefText2()+"',"+poid+","+podetailid+")");
  127. for (int j = 0; j < podetail.getSubDetails().size(); j++) {
  128. PoOrderSubDetailsGrDTO subdetails = dto.getDetails().get(i).getSubDetails().get(j);
  129. subdetails.setSdpoid(poid);
  130. subdetails.setSdetid(podetailid);
  131. sqls.add("insert into POORDERSUBDETAILSGR (HID,PONO,POLINENO,POSUBLINENO,STORGCODE,REQQTY,QTYUOM," +
  132. "REQDATE," +
  133. "SUBETD,SUBETA,ATTR1,ATTR2,ATTR3,ATTR4,ATTR5,ATTR6,ATTR7," +
  134. "ATTR8,ATTR9,ATTR10,SDPOID,SDETID)" +
  135. "values ('"+subdetails.getHid()+"','"+subdetails.getPoNo()+"','"+subdetails.getPoLineNo()+"','"+subdetails.getPoSubLineNo()+"','"+subdetails.getStOrgCode()+"','"+subdetails.getReqQty()+"','"+subdetails.getQtyUom()+"'" +
  136. ",case when '"+subdetails.getReqDate()+"' = 'null' then null else TO_DATE('"+subdetails.getReqDate()+"', 'YYYY-MM-DD HH24:MI:SS') end " +
  137. ",case when '"+subdetails.getSubETD()+"' = 'null' then null else TO_DATE('"+subdetails.getSubETD()+"', 'YYYY-MM-DD HH24:MI:SS') end " +
  138. ",case when '"+subdetails.getSubETA()+"' = 'null' then null else TO_DATE('"+subdetails.getSubETA()+"', 'YYYY-MM-DD HH24:MI:SS') end " +
  139. ",'"+subdetails.getAttr1()+"','"+subdetails.getAttr2()+"','"+subdetails.getAttr3()+"','"+subdetails.getAttr4()+"','"+subdetails.getAttr5()+"','"+subdetails.getAttr6()+"','"+subdetails.getAttr7()+"'" +
  140. ",'"+subdetails.getAttr8()+"','"+subdetails.getAttr9()+"','"+subdetails.getAttr10()+"',"+poid+","+podetailid+")");
  141. }
  142. }
  143. for (int i = 0; i < dto.getAddrInfos().size(); i++) {
  144. PoOrderAddrinfosGrDTO addrinfos = dto.getAddrInfos().get(i);
  145. sqls.add("insert into POORDERADDRINFOSGR (ADDRID,SENDERQUALIFIER,SENDERID,RECEIVERQUALIFIER,RECEIVERID,MSGTYPE,MSGALIAS,MSGID," +
  146. "PARTYTYPE,PARTYNAME,PARTYCODE,ADDINAME1,ADDINAME2,STREET1,STREET2,STREET3,STREET4," +
  147. "CITY,STATE,POSTALCODE,COUNTRYCODE,COUNTRYNAME,DISTRICT,CONTACTNAME,CONTACTEMAIL,PHONE," +
  148. "FAX,ATTR1,ATTR2,ATTR3,ATTR4,ATTR5,ATTR6,ATTR7,ATTR8," +
  149. "ATTR9,ATTR10,APOID)" +
  150. "values ('"+addrinfos.getAddrId()+"','"+addrinfos.getSenderQualifier()+"','"+addrinfos.getSenderId()+"','"+addrinfos.getReceiverQualifier()+"','"+addrinfos.getReceiverId()+"','"+addrinfos.getMsgType()+"','"+addrinfos.getMsgAlias()+"','"+addrinfos.getMsgId()+"'" +
  151. ",'"+addrinfos.getPartyType()+"','"+addrinfos.getPartyName()+"','"+addrinfos.getPartyCode()+"','"+addrinfos.getAddiName1()+"','"+addrinfos.getAddiName2()+"','"+addrinfos.getStreet1()+"','"+addrinfos.getStreet2()+"','"+addrinfos.getStreet3()+"','"+addrinfos.getStreet4()+"'" +
  152. ",'"+addrinfos.getCity()+"','"+addrinfos.getState()+"','"+addrinfos.getPostalCode()+"','"+addrinfos.getCountryCode()+"','"+addrinfos.getCountryName()+"','"+addrinfos.getDistrict()+"','"+addrinfos.getContactName()+"','"+addrinfos.getContactEmail()+"','"+addrinfos.getPhone()+"'" +
  153. ",'"+addrinfos.getFax()+"','"+addrinfos.getAttr1()+"','"+addrinfos.getAttr2()+"','"+addrinfos.getAttr3()+"','"+addrinfos.getAttr4()+"','"+addrinfos.getAttr5()+"','"+addrinfos.getAttr6()+"','"+addrinfos.getAttr7()+"','"+addrinfos.getAttr8()+"'" +
  154. ",'"+addrinfos.getAttr9()+"','"+addrinfos.getAttr10()+"',"+poid+")");
  155. }
  156. //插入系统中间表
  157. int scgid = baseDao.getSeqId("SALECONFIRMGR_SEQ");
  158. String scgcode = baseDao.sGetMaxNumber("SaleConfirmGr", 2);
  159. sqls.add("insert into SALECONFIRMGR (SCG_ID,SCG_CODE,SCG_RECORDDATE,SCG_RECORDER,SCG_STATUS,SCG_STATUSCODE,SCG_REMARK,SCG_AUDITMAN,SCG_AUDITDATE," +
  160. "SCG_CUSTGRCODE,SCG_CUSTGRNAME,SCG_CUSTCODE,SCG_CUSTNAME,SCG_SAKIND,SCG_POCODE,SCG_CURRENCY,SCG_RATE," +
  161. "SCG_SADATE,SCG_GRPOCODE,SCG_GRHID,SCG_GRPOID)" +
  162. "select "+scgid+",'"+scgcode+"',sysdate,'王平','在录入','ENTERING','','','', " +
  163. "PARTYCODE,PARTYNAME,nvl(cd_varchar50_1,PARTYCODE),nvl(cd_varchar50_2,PARTYNAME),'正常订单','poNo',currency,case when rate = 'null' then '0' else rate end," +
  164. "poDate,soNo,case when HID = 'null' then '0' else HID end,POID " +
  165. "from POORDERGR left join POORDERADDRINFOSGR on APOID = POID and nvl(PARTYTYPE,' ') = 'BY' " +
  166. "left join N_HUASL_QD.CUSTOMTABLE on ct_caller='GECUSTDZ' left join N_HUASL_QD.CUSTOMTABLEDETAIL ON CD_CTID = CT_ID and cd_varchar50_4 = PARTYNAME " +
  167. "where POID = " + poid);
  168. sqls.add("insert into SALECONFIRMGRDETAIL (SCGD_ID,SCGD_SCGID,SCGD_DETNO,SCGD_REMARK,SCGD_GRDETNO,SCGD_GRPRCODE,SCGD_GRPRNAME," +
  169. "SCGD_PRCODE,SCGD_PRDETAIL,SCGD_SELLERCODE,SCGD_SELLERNAME,SCGD_DELIVERY," +
  170. "SCGD_QTY,SCGD_PRICE,SCGD_TOTAL," +
  171. "SCGD_GRPOCODE,SCGD_GRHID,SCGD_GRPOID,SCGD_GRDPOID)" +
  172. "select SALECONFIRMGRDETAIL_SEQ.nextval,"+scgid+",rownum,'',poLineNo,custPartNo,custPartDesc," +
  173. "nvl(custPartNo,pc_prodcode),nvl(custPartDesc,pr_detail),pc_sellercode_user,pc_sellername_user,reqDate," +
  174. "case when orderedQty = 'null' then '0' else orderedQty end, case when unitPrice = 'null' then '0' else unitPrice end,case when totalAmount = 'null' then '0' else totalAmount end, " +
  175. "PONO,case when HID = 'null' then '0' else HID end,DPOID,DETID " +
  176. "from POORDERDETAILSGR left join N_HUASL_QD.PRODUCTCUSTOMER on custPartNo = pc_custprodcode and pc_custcode = 'GOERTEK' left join Product on pc_prodid=pr_id " +
  177. "where DPOID = " + poid);
  178. sqls.add("update SALECONFIRMGRDETAIL set SCGD_TOTAL = round(nvl(SCGD_QTY,0)*nvl(SCGD_PRICE,0),2) where SCGD_SCGID = " + scgid);
  179. baseDao.execute(sqls);
  180. getPrice(scgid);
  181. ReturnData returnData = new ReturnData();
  182. returnData.setSuccess("true");
  183. returnData.setTransId(dto.getTransId());
  184. return new GRApiResult(returnData);
  185. }
  186. public void getPrice(int scg_id) {
  187. Object sakind = baseDao.getFieldDataByCondition("SALECONFIRMGR", "scg_sakind", "scg_id=" + scg_id);
  188. Object pricekind = baseDao.getFieldDataByCondition("SaleKind", "sk_pricekind", "sk_name='" + sakind + "'");
  189. List<Object[]> objects = baseDao.getFieldsDatasByCondition(
  190. "SALECONFIRMGRDETAIL left join SALECONFIRMGR on SCGD_SCGID=SCG_ID left join Customer on scg_custcode=cu_code", new String[] { "scgd_prcode",
  191. "scg_custcode", "scg_currency", "scgd_qty", "scgd_id", "cu_pricetype", "nvl(scgd_xtprice,0)", "nvl(cu_taxrate,0)"}, " scg_id="
  192. + scg_id);
  193. JSONObject js = null;
  194. if(baseDao.isDBSetting("Sale","getPriceBySale")){
  195. for (Object[] obj : objects) {
  196. Double a = 0.0;
  197. Double b = 0.0;
  198. if(Double.parseDouble(obj[8].toString()) == 0.0){
  199. Object[] last = baseDao.getFieldsDataByCondition("(select * from sale left join saledetail on sa_id=sd_said where sa_custcode='"+obj[1]+"' and sa_currency='"+obj[2]+"' and sd_prodcode='"+obj[0]+"' and sa_statuscode='AUDITED' order by sa_date desc)", new String[]{"nvl(sd_price,0)","nvl(sd_taxrate,0)"}, "rownum<2");
  200. if(last != null){
  201. a = last[0] == null ? 0.0 : Double.parseDouble(last[0].toString());
  202. baseDao.execute("update SALECONFIRMGRDETAIL set scgd_xtprice="+a+" where scgd_id="+obj[4]);
  203. }
  204. }
  205. }
  206. }else{
  207. for (Object[] obj : objects) {
  208. Object oqty = baseDao.getFieldDataByCondition("SALECONFIRMGRDETAIL", "sum(scgd_qty)",
  209. " SCGD_SCGID=" + scg_id + " and scgd_prcode='" + String.valueOf(obj[0]) + "'");
  210. if (pricekind == null
  211. || (!"CCPR".equals(pricekind) && !"CCP".equals(pricekind) && !"KCP".equals(pricekind) && !"PC".equals(pricekind) && !"SCP"
  212. .equals(pricekind)&&!"PCR".equals(pricekind))) {
  213. } else
  214. js = getSalePrice_N(String.valueOf(obj[1]), String.valueOf(sakind), String.valueOf(obj[0]), String.valueOf(obj[2]),
  215. String.valueOf(obj[5]), pricekind, Double.parseDouble(oqty.toString()), Double.parseDouble(obj[7].toString()));
  216. double price = 0;
  217. double tax = 0;
  218. double p = 0;
  219. int spdid = 0;
  220. if (js != null) {
  221. price = js.getDouble("sd_price");
  222. tax = js.getDouble("sd_taxrate");
  223. spdid = js.getInt("spd_id");
  224. }
  225. if (price != 0) {
  226. p = price;
  227. baseDao.updateByCondition("SALECONFIRMGRDETAIL", "scgd_xtprice=" + p, "scgd_id=" + obj[4]);
  228. }
  229. }
  230. }
  231. }
  232. public JSONObject getSalePrice_N(String custcode, String sakind, String prodcode, String currency, String cukind, Object pricekind,
  233. Double sumqty, Double taxrate) {
  234. SqlRowList rs = null;
  235. /**
  236. * 反馈编号:2017030117
  237. * 西博泰科UAS:销售类型-取价原则,增加一种原则PCR:“料号+币别+税率”;
  238. */
  239. if (pricekind != null) {
  240. if ("CCP".equals(pricekind)) {
  241. rs = baseDao.queryForRowSet(SALE_PRICE_CCP, custcode, prodcode, currency, sumqty);
  242. } else if ("CCPR".equals(pricekind)) {
  243. rs = baseDao.queryForRowSet(SALE_PRICE_CCPR, custcode, prodcode, currency, taxrate, sumqty);
  244. } else if ("KCP".equals(pricekind)) {
  245. rs = baseDao.queryForRowSet(SALE_PRICE_KCP, prodcode, currency, cukind, sumqty);
  246. } else if ("PC".equals(pricekind)) {
  247. rs = baseDao.queryForRowSet(SALE_PRICE_PC, prodcode, currency, sumqty);
  248. } else if ("SCP".equals(pricekind)) {
  249. rs = baseDao.queryForRowSet(SALE_PRICE_SCP, sakind, prodcode, currency, sumqty);
  250. } else if ("PCR".equals(pricekind)) {
  251. rs = baseDao.queryForRowSet(SALE_PRICE_PCR,prodcode, currency, taxrate,sumqty);
  252. }
  253. }
  254. if (rs.next()) {
  255. JSONObject obj = new JSONObject();
  256. obj.put("sd_price", rs.getObject("spd_price") == null ? 0 : rs.getObject("spd_price"));
  257. obj.put("sd_taxrate", rs.getObject("spd_taxrate") == null ? 0 : rs.getObject("spd_taxrate"));
  258. obj.put("spd_id", rs.getObject("spd_id") == null ? 0 : rs.getObject("spd_id"));
  259. return obj;
  260. }
  261. return null;
  262. }
  263. @Override
  264. public ApiResult<String> pushSenderInfo(PoOrderGrDTO dto) {
  265. // todo 入参dto需要改成数据库查询出来的数据
  266. //dtoFrom(); 方法完善后放开
  267. //接口返回
  268. HttpResultResponse resultResponse = null;
  269. try{
  270. //resultResponse = HuToolUtils.post(asnUrl,dto);
  271. //头部请求参数
  272. Map<String,String> headerMap = new HashMap<>();
  273. headerMap.put("user","WD");
  274. headerMap.put("password","WD@test+1");
  275. resultResponse = HuToolUtils.post(asnUrl,dto,headerMap);
  276. logger.info("推送发货信息到歌尔,接口返回结果:{}",resultResponse);
  277. }catch (Exception e){
  278. logger.error("推送发货信息到歌尔,调用接口异常:{}",e);
  279. return ApiResponse.failRsp("400","推送发货信息到歌尔,接口调用异常 !", null,e.getMessage());
  280. }
  281. return ApiResponse.successRsp("200", JSON.toJSONString(resultResponse));
  282. }
  283. /**
  284. * 数据转换,将数据参数转换成接口需要参数
  285. * */
  286. /*public 接口调用参数 dtoFrom(数据库查询出来的参数){
  287. return 接口调用需要的参数;
  288. }*/
  289. @Override
  290. public ApiResult<String> sendAsnShipment(String master, Integer id) throws EDISchemaException, EDIStreamException, IOException {
  291. SpObserver.putSp(master);
  292. Map<String, Object> modelMap = new HashMap<String, Object>();
  293. int count = baseDao.getCount("select count(1) from AsnShipment where as_id=" + id);
  294. if (count>0){
  295. //接口返回
  296. HttpResultResponse resultResponse = null;
  297. //头部请求参数
  298. Map<String,String> headerMap = new HashMap<>();
  299. /*headerMap.put("user","WD");
  300. headerMap.put("password","WD@test+1");*/
  301. String username = "WD";
  302. String password = "WD@test+1";
  303. String auth = username + ":" + password;
  304. String encodedAuth = Base64.getEncoder()
  305. .encodeToString(auth.getBytes(StandardCharsets.UTF_8));
  306. headerMap.put("Authorization", "Basic " + encodedAuth);
  307. headerMap.put("Content-Type", "application/json; charset=UTF-8");
  308. AsnDetDTO asnDetDTO = new AsnDetDTO();
  309. AsnDTO aAsnDTO = new AsnDTO();
  310. SqlRowList rs = baseDao.queryForRowSet("select as_transid,as_asnno,TO_CHAR(as_recorddate, 'yyyy-MM-dd hh24:mi:ss') as_recorddate,TO_CHAR(asd_senddate, 'yyyy-MM-dd hh24:mi:ss') asd_senddate, " +
  311. "as_packtype,asd_fyqty,asd_invoice,asd_tycode,TO_CHAR(asd_arrivaldate, 'yyyy-MM-dd hh24:mi:ss') asd_arrivaldate,TO_CHAR(asd_lgdate, 'yyyy-MM-dd hh24:mi:ss') asd_lgdate,TO_CHAR(asd_dgdate, 'yyyy-MM-dd hh24:mi:ss') asd_dgdate," +
  312. "asd_countryqy,asd_cityqy,asd_transportation,asd_organizecode,asd_iswooden " +
  313. "from AsnShipment left join (select asd_asid,max(asd_senddate) asd_senddate,sum(nvl(asd_fyqty,0)) asd_fyqty,max(asd_invoice) asd_invoice,max(asd_tycode) asd_tycode,max(asd_arrivaldate) asd_arrivaldate, " +
  314. "max(asd_lgdate) asd_lgdate,max(asd_dgdate) asd_dgdate,max(asd_countryqy) asd_countryqy,max(asd_cityqy) asd_cityqy,max(asd_transportation) asd_transportation,max(asd_organizecode) asd_organizecode,max(asd_iswooden) asd_iswooden " +
  315. "from ASNSHIPMENTDETAIL group by asd_asid) on asd_asid = as_id " +
  316. "where as_id = ?",id);
  317. while (rs.next()) {
  318. //ASN
  319. aAsnDTO.setTransId(rs.getGeneralString("as_transid"));
  320. aAsnDTO.setSenderQualifier("ZZ");
  321. aAsnDTO.setSenderId("WORLDSHINE");
  322. aAsnDTO.setReceiverQualifier("ZZ");
  323. aAsnDTO.setReceiverId("GOERTEK");
  324. aAsnDTO.setAsnNo(rs.getGeneralString("as_asnno"));
  325. aAsnDTO.setAsnDate(rs.getString("as_recorddate"));
  326. aAsnDTO.setShipDate(rs.getString("asd_senddate"));
  327. aAsnDTO.setPackType(rs.getGeneralString("as_packtype"));
  328. aAsnDTO.setPackCount(rs.getGeneralString("asd_fyqty"));
  329. aAsnDTO.setWaybillNo(rs.getGeneralString("asd_tycode"));
  330. aAsnDTO.setInvoiceNo(rs.getGeneralString("asd_invoice"));
  331. if ("N_HUASL_QD".equals(master)) {
  332. aAsnDTO.setVendorCode("18850");
  333. } else if ("N_HUASL_T".equals(master)) {
  334. aAsnDTO.setVendorCode("14780");
  335. }
  336. aAsnDTO.setEstCCDate(rs.getString("asd_arrivaldate"));
  337. aAsnDTO.setEtd(rs.getString("asd_lgdate"));
  338. aAsnDTO.setEta(rs.getString("asd_dgdate"));
  339. aAsnDTO.setAttr1(rs.getString("asd_organizecode"));
  340. aAsnDTO.setAttr2("Y");
  341. aAsnDTO.setAttr7("N");
  342. aAsnDTO.setAttr8(rs.getGeneralString("asd_iswooden"));
  343. aAsnDTO.setAttr5(rs.getGeneralString("asd_countryqy"));
  344. aAsnDTO.setAttr6(rs.getGeneralString("asd_cityqy"));
  345. aAsnDTO.setTransMethod(rs.getGeneralString("asd_transportation"));
  346. //addrInfo
  347. List<AsnAddrInfoDTO> asnAddrInfoDTOl = new ArrayList<AsnAddrInfoDTO>();
  348. AsnAddrInfoDTO asnAddrInfoDTO = new AsnAddrInfoDTO();
  349. asnAddrInfoDTO.setPartyType("SH");
  350. if ("N_HUASL_QD".equals(master)) {
  351. asnAddrInfoDTO.setPartyName("青岛华商龙科技有限公司");
  352. asnAddrInfoDTO.setPartyCode("P114310078");
  353. } else if ("N_HUASL_T".equals(master)) {
  354. asnAddrInfoDTO.setPartyName("华商龙科技有限公司");
  355. asnAddrInfoDTO.setPartyCode("SHPR083");
  356. }
  357. asnAddrInfoDTOl.add(asnAddrInfoDTO);
  358. aAsnDTO.setAddrInfo(asnAddrInfoDTOl);
  359. //asnOrder
  360. List<AsnOrderDTO> AsnOrderDTOl = new ArrayList<AsnOrderDTO>();
  361. SqlRowList rsOrder = baseDao.queryForRowSet("select distinct as_asnno,asd_cgcode,as_packtype " +
  362. "from AsnShipment left join ASNSHIPMENTDETAIL on as_id = asd_asid where as_id = ?",id);
  363. while (rsOrder.next()) {
  364. AsnOrderDTO asnOrderDTO = new AsnOrderDTO();
  365. asnOrderDTO.setAsnNo(rsOrder.getString("as_asnno"));
  366. asnOrderDTO.setPoNo(rsOrder.getString("asd_cgcode"));
  367. if("箱序".equals(rsOrder.getString("as_packtype"))){
  368. //箱序 asnPack
  369. SqlRowList rsasnPack = baseDao.queryForRowSet("select as_asnno,aspo_cgcode,aspo_cgdetno,aspo_bzway,aspo_packno,aspo_bzqty,aspo_grossload, " +
  370. "aspo_tall,aspo_wide,aspo_long,aspo_quantity,aspo_custpartno,aspo_cgqty,aspo_countryyc,aspo_bztype,aspo_weight,aspo_invoice " +
  371. "from AsnShipment left join ASNSHIPMENTORDER on as_id = aspo_asid where as_id = ?",id);
  372. List<AsnPackDTO> AsnPackDTOl = new ArrayList<AsnPackDTO>();
  373. while (rsasnPack.next()) {
  374. AsnPackDTO asnPackDTO = new AsnPackDTO();
  375. asnPackDTO.setAsnNo(rsasnPack.getString("as_asnno"));
  376. asnPackDTO.setPoNo(rsasnPack.getString("aspo_cgcode"));
  377. asnPackDTO.setPoLineNo(rsasnPack.getString("aspo_cgdetno"));
  378. //asnPackDTO.setPackType(rsasnPack.getString("aspo_bzway"));
  379. asnPackDTO.setPackType("P");
  380. asnPackDTO.setPackNo(rsasnPack.getString("aspo_packno"));
  381. asnPackDTO.setPackCount(rsasnPack.getString("aspo_bzqty"));
  382. asnPackDTO.setPackUnitWT(rsasnPack.getString("aspo_grossload"));
  383. asnPackDTO.setGrossWT(rsasnPack.getString("aspo_grossload"));
  384. asnPackDTO.setLength(rsasnPack.getString("aspo_tall"));
  385. asnPackDTO.setWidth(rsasnPack.getString("aspo_wide"));
  386. asnPackDTO.setHeight(rsasnPack.getString("aspo_long"));
  387. asnPackDTO.setDimUom("CM");
  388. asnPackDTO.setManPackCount(rsasnPack.getString("aspo_quantity"));
  389. asnPackDTO.setInnerPackCount(rsasnPack.getString("aspo_quantity"));
  390. asnPackDTO.setAttr1("1");
  391. //asnOrderDetail
  392. List<AsnOrderDetailDTO> asnOrderDetailDTOl = new ArrayList<AsnOrderDetailDTO>();
  393. AsnOrderDetailDTO asnOrderDetailDTO = new AsnOrderDetailDTO();
  394. asnOrderDetailDTO.setAsnNo(rsasnPack.getString("as_asnno"));
  395. asnOrderDetailDTO.setPoNo(rsasnPack.getString("aspo_cgcode"));
  396. asnOrderDetailDTO.setPoLineNo(rsasnPack.getString("aspo_cgdetno"));
  397. asnOrderDetailDTO.setPackNo(rsasnPack.getString("aspo_packno"));
  398. asnOrderDetailDTO.setCustPlant(rsasnPack.getString("aspo_custpartno"));
  399. asnOrderDetailDTO.setCustPartDesc(rsasnPack.getString("aspo_custpartname"));
  400. asnOrderDetailDTO.setQty(rsasnPack.getString("aspo_cgqty"));
  401. asnOrderDetailDTO.setAttr4(rsasnPack.getString("aspo_cgqty"));
  402. asnOrderDetailDTO.setAttr5(rsasnPack.getString("aspo_grossload"));
  403. asnOrderDetailDTO.setAttr6("KG");
  404. asnOrderDetailDTO.setAttr7(rsasnPack.getGeneralString("aspo_weight"));
  405. asnOrderDetailDTO.setAttr8(rsasnPack.getGeneralString("aspo_invoice"));
  406. asnOrderDetailDTO.setAttr9(rsasnPack.getString("aspo_countryyc"));
  407. asnOrderDetailDTO.setAttr19(rsasnPack.getString("aspo_bztype"));
  408. //asnSNDetail
  409. List<AsnSnDetailDTO> asnSnDetailDTOl = new ArrayList<AsnSnDetailDTO>();
  410. AsnSnDetailDTO asnSnDetailDTO = new AsnSnDetailDTO();
  411. asnSnDetailDTO.setAsnNo(rsasnPack.getString("as_asnno"));
  412. asnSnDetailDTO.setPoNo(rsasnPack.getString("aspo_cgcode"));
  413. asnSnDetailDTO.setPoLineNo(rsasnPack.getString("aspo_cgdetno"));
  414. asnSnDetailDTO.setPackNo(rsasnPack.getString("aspo_packno"));
  415. asnSnDetailDTO.setSnNo(rsasnPack.getString("aspo_custpartno"));
  416. asnSnDetailDTOl.add(asnSnDetailDTO);
  417. asnOrderDetailDTO.setAsnSNDetail(asnSnDetailDTOl);
  418. asnOrderDetailDTOl.add(asnOrderDetailDTO);
  419. asnPackDTO.setAsnOrderDetail(asnOrderDetailDTOl);
  420. AsnPackDTOl.add(asnPackDTO);
  421. asnOrderDTO.setAsnPack(AsnPackDTOl);
  422. }
  423. }else{
  424. //无托箱 asnPack
  425. SqlRowList rsasnPack = baseDao.queryForRowSet("select as_asnno,aspo_cgcode,aspo_cgdetno,aspo_bzway,aspo_packno,aspo_bzqty,aspo_grossload, " +
  426. "aspo_tall,aspo_wide,aspo_long,aspo_quantity,aspo_custpartno,aspo_cgqty,aspo_countryyc,aspo_bztype,aspo_weight,aspo_invoice " +
  427. "from AsnShipment left join ASNSHIPMENTORDER on as_id = aspo_asid where as_id = ?",id);
  428. List<AsnOrderDetailDTO> asnOrderDetailDTOl = new ArrayList<AsnOrderDetailDTO>();
  429. while (rsasnPack.next()) {
  430. //asnOrderDetail
  431. AsnOrderDetailDTO asnOrderDetailDTO = new AsnOrderDetailDTO();
  432. asnOrderDetailDTO.setAsnNo(rsasnPack.getString("as_asnno"));
  433. asnOrderDetailDTO.setPoNo(rsasnPack.getString("aspo_cgcode"));
  434. asnOrderDetailDTO.setPoLineNo(rsasnPack.getString("aspo_cgdetno"));
  435. asnOrderDetailDTO.setPackNo(rsasnPack.getString("aspo_packno"));
  436. asnOrderDetailDTO.setCustPlant(rsasnPack.getString("aspo_custpartno"));
  437. asnOrderDetailDTO.setCustPartDesc(rsasnPack.getString("aspo_custpartname"));
  438. asnOrderDetailDTO.setQty(rsasnPack.getString("aspo_cgqty"));
  439. asnOrderDetailDTO.setAttr4(rsasnPack.getString("aspo_cgqty"));
  440. asnOrderDetailDTO.setAttr5(rsasnPack.getString("aspo_grossload"));
  441. asnOrderDetailDTO.setAttr6("KG");
  442. asnOrderDetailDTO.setAttr7(rsasnPack.getGeneralString("aspo_weight"));
  443. asnOrderDetailDTO.setAttr8(rsasnPack.getGeneralString("aspo_invoice"));
  444. asnOrderDetailDTO.setAttr9(rsasnPack.getString("aspo_countryyc"));
  445. asnOrderDetailDTO.setAttr19(rsasnPack.getString("aspo_bztype"));
  446. //asnSNDetail
  447. List<AsnSnDetailDTO> asnSnDetailDTOl = new ArrayList<AsnSnDetailDTO>();
  448. AsnSnDetailDTO asnSnDetailDTO = new AsnSnDetailDTO();
  449. asnSnDetailDTO.setAsnNo(rsasnPack.getString("as_asnno"));
  450. asnSnDetailDTO.setPoNo(rsasnPack.getString("aspo_cgcode"));
  451. asnSnDetailDTO.setPoLineNo(rsasnPack.getString("aspo_cgdetno"));
  452. asnSnDetailDTO.setPackNo(rsasnPack.getString("aspo_packno"));
  453. asnSnDetailDTO.setSnNo(rsasnPack.getString("aspo_custpartno"));
  454. asnSnDetailDTOl.add(asnSnDetailDTO);
  455. asnOrderDetailDTO.setAsnSNDetail(asnSnDetailDTOl);
  456. asnOrderDetailDTOl.add(asnOrderDetailDTO);
  457. asnOrderDTO.setAsnOrderDetail(asnOrderDetailDTOl);
  458. }
  459. }
  460. AsnOrderDTOl.add(asnOrderDTO);
  461. }
  462. aAsnDTO.setAsnOrder(AsnOrderDTOl);
  463. }
  464. asnDetDTO.setASN(aAsnDTO);
  465. resultResponse = HuToolUtils.post(asnUrl,asnDetDTO,headerMap);
  466. //System.out.println("HttpUtils post 响应失败. url={"+asnUrl+"}, headerMap={"+headerMap+"}, response={"+asnDetDTO+"}");
  467. logger.info("推送发货信息到歌尔,接口返回结果:{}",resultResponse);
  468. return ApiResponse.successRsp("200", JSON.toJSONString(resultResponse));
  469. }else{
  470. logger.info("单据不存在:id={}",id);
  471. }
  472. return null;
  473. }
  474. }