|
|
@@ -0,0 +1,419 @@
|
|
|
+package com.uas.erp.schedular.mall.task;
|
|
|
+
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.uas.erp.schedular.b2b.domain.Customer;
|
|
|
+import com.uas.erp.schedular.b2b.domain.Vendor;
|
|
|
+import com.uas.erp.schedular.diymall.domain.Order;
|
|
|
+import com.uas.erp.schedular.diymall.domain.OrderInvoice;
|
|
|
+import com.uas.erp.schedular.diymall.domain.OrderProduct;
|
|
|
+import com.uas.erp.schedular.diymall.domain.OrdersInfo;
|
|
|
+import com.uas.erp.schedular.entity.Master;
|
|
|
+import com.uas.erp.schedular.finance.mq.HttpsClientRequestFactory;
|
|
|
+import com.uas.erp.schedular.mall.domain.DeliverResp;
|
|
|
+import com.uas.erp.schedular.mall.domain.OrderDeliver;
|
|
|
+import com.uas.erp.schedular.mall.domain.PagingInfo;
|
|
|
+import com.uas.erp.schedular.task.support.TaskMapping;
|
|
|
+import com.uas.erp.schedular.util.ContextHolder;
|
|
|
+import com.uas.erp.schedular.util.ObjectUtil;
|
|
|
+import com.uas.erp.schedular.util.StringUtil;
|
|
|
+import com.usoft.security.utils.OpenApiSignUtil;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
+import org.springframework.http.HttpEntity;
|
|
|
+import org.springframework.http.HttpHeaders;
|
|
|
+import org.springframework.http.MediaType;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+import org.springframework.util.CollectionUtils;
|
|
|
+import org.springframework.util.ObjectUtils;
|
|
|
+import org.springframework.util.StringUtils;
|
|
|
+import org.springframework.web.client.RestTemplate;
|
|
|
+import org.springframework.web.util.DefaultUriTemplateHandler;
|
|
|
+
|
|
|
+import java.io.UnsupportedEncodingException;
|
|
|
+import java.net.URLEncoder;
|
|
|
+import java.security.InvalidKeyException;
|
|
|
+import java.security.NoSuchAlgorithmException;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @Author chenwei
|
|
|
+ * @Date 2019-05-21
|
|
|
+ */
|
|
|
+@Component
|
|
|
+@TaskMapping(title = "商城订单")
|
|
|
+public class OrderTask extends AbstractTask {
|
|
|
+
|
|
|
+ private static final String BASEPATH_TRADE = "https://malltraderest.usoftchina.com";
|
|
|
+
|
|
|
+ private static final Logger LOGGER = LoggerFactory.getLogger(OrderTask.class);
|
|
|
+
|
|
|
+ @TaskMapping(title = "上传出货单过账状态到商城")
|
|
|
+ public void uploadPoststatus() throws NoSuchAlgorithmException, InvalidKeyException, UnsupportedEncodingException {
|
|
|
+ Master master = ContextHolder.getMaster();
|
|
|
+ //获取需要上传的数据
|
|
|
+ List<OrderDeliver> orderDeliverList = jdbcTemplate.queryForBeanList("SELECT SA_POCODE as orderCode FROM SALE WHERE NVL(SA_SENDPOSTSTATUS,' ') = '待上传' AND SA_KIND = '商城订单'", OrderDeliver.class);
|
|
|
+ if (!CollectionUtils.isEmpty(orderDeliverList)) {
|
|
|
+ //发送同步数据
|
|
|
+ JSONObject json = new JSONObject();
|
|
|
+ json.put("secretId", master.getMa_uu());
|
|
|
+ json.put("signature", "");
|
|
|
+ json.put("DeliverReq", orderDeliverList);
|
|
|
+ String signatureValues = OpenApiSignUtil.sign(JSON.toJSONString(json), master.getMa_accesssecret());
|
|
|
+ json.put("signature", signatureValues);
|
|
|
+
|
|
|
+ RestTemplate restTemp = new RestTemplate(new HttpsClientRequestFactory());
|
|
|
+ HttpHeaders headers = new HttpHeaders();
|
|
|
+ headers.setContentType(MediaType.APPLICATION_JSON_UTF8);
|
|
|
+ HttpEntity<String> requestEntity = new HttpEntity<String>(json.toJSONString(), headers);
|
|
|
+ String response = restTemp.postForObject(BASEPATH_TRADE + "/openapi/trade/order/deliver", requestEntity, String.class);
|
|
|
+ LOGGER.info("response={}", response);
|
|
|
+ DeliverResp deliverResp = JSON.parseObject(response, DeliverResp.class);
|
|
|
+ //成功后,更新上传状态
|
|
|
+ if (deliverResp.getRespHeader().getCode() == 0) {
|
|
|
+ StringBuilder sb = new StringBuilder();
|
|
|
+ for (OrderDeliver orderDeliver : orderDeliverList) {
|
|
|
+ sb.append("'" + orderDeliver.getOrderCode() + "',");
|
|
|
+ }
|
|
|
+ String pocodes = sb.substring(0, sb.length() - 1);
|
|
|
+ jdbcTemplate.execute("UPDATE SALE SET SA_SENDPOSTSTATUS = '已上传' WHERE SA_KIND = '商城订单' AND SA_POCODE IN (" + pocodes +")");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @TaskMapping(title = "下载已过账销售订单,生成采购/销售/入库/出货单据")
|
|
|
+ public void downloadOrder() throws NoSuchAlgorithmException, InvalidKeyException, UnsupportedEncodingException {
|
|
|
+ String url = BASEPATH_TRADE + "/openapi/trade/order/page/get?";
|
|
|
+ Long updateTime = System.currentTimeMillis() - 24 * 60 * 60 * 1000;
|
|
|
+ //获取需要生成数据的供应商
|
|
|
+ List<Map<String, Object>> vendorList = jdbcTemplate.queryForList("SELECT VE_UU,VE_ACCESSSECRET FROM VENDOR WHERE VE_ENABLE");
|
|
|
+ if (CollectionUtils.isEmpty(vendorList)) {
|
|
|
+ LOGGER.error("没有启用的供应商");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ for (Map<String, Object> map : vendorList){
|
|
|
+ Object vendUU = map.get("VE_UU"), vendAccessSecret = map.get("VE_ACCESSSECRET");
|
|
|
+ OrdersInfo ordersInfo = getOrdersByUU(url, String.valueOf(vendUU), String.valueOf(vendAccessSecret), updateTime, 30, 1);
|
|
|
+ PagingInfo pageInfo = ordersInfo.getPagingInfo();
|
|
|
+ if (!ObjectUtils.isEmpty(pageInfo) && pageInfo.getTotalCount() > 0) {
|
|
|
+ int totalCount = pageInfo.getTotalCount();
|
|
|
+ if (totalCount > 30) {
|
|
|
+ //生成单据
|
|
|
+ generateOrder(ordersInfo.getOrder());
|
|
|
+ //获取额外部分的数据
|
|
|
+ int endCount = Double.valueOf(Math.ceil(totalCount / 30.0)).intValue();
|
|
|
+ for (int i = 2; i <= endCount; i++) {
|
|
|
+ ordersInfo = getOrdersByUU(url, String.valueOf(vendUU), String.valueOf(vendAccessSecret), updateTime, 30, i);
|
|
|
+ generateOrder(ordersInfo.getOrder());
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ //生成单据
|
|
|
+ generateOrder(ordersInfo.getOrder());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生成订单数据
|
|
|
+ * @param orderList
|
|
|
+ */
|
|
|
+ private void generateOrder(List<Order> orderList) {
|
|
|
+ for (Order order : orderList) {
|
|
|
+ //取已发货状态的订单生成
|
|
|
+ if (order.getStatus() == 141040 || order.getStatus() == 141050 || order.getStatus() == 141091) {
|
|
|
+ String purchaseCode = jdbcTemplate.generateCode("Purchase", 2);
|
|
|
+ String saleCode = jdbcTemplate.generateCode("Sale", 2);
|
|
|
+ //1.生成采购订单
|
|
|
+ boolean success = generatePurchase(order, purchaseCode, saleCode);
|
|
|
+ if (success) {
|
|
|
+ //2.生成销售订单
|
|
|
+ generateSale(order, saleCode);
|
|
|
+ //3.生成采购验收单
|
|
|
+ Map<String, String> purchaseInMap = purcahseIn(purchaseCode);
|
|
|
+ //4.生成销售出货单
|
|
|
+ String saleOutCode = saleOut(saleCode, purchaseInMap.get("batchCode"));
|
|
|
+ //5.过账
|
|
|
+ postPurchaseAndSale(purchaseInMap.get("inoutno"), saleOutCode);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private void postPurchaseAndSale(String purchaseInCode, String saleOutCode) {
|
|
|
+ String message = jdbcTemplate.callForString("{call SP_COMMITPRODINOUT(?,?,?,?)}", "采购验收单", purchaseInCode, "ADMIN");
|
|
|
+ if (StringUtils.isEmpty(message)) {
|
|
|
+ jdbcTemplate.callForString("{call SP_COMMITPRODINOUT(?,?,?,?)}", "出货单", saleOutCode, "ADMIN");
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生成销售出货单并过账
|
|
|
+ * @param saleCode
|
|
|
+ */
|
|
|
+ private String saleOut(String saleCode,String batchCode) {
|
|
|
+ String saleOutCode = jdbcTemplate.generateCode("ProdInOut!Sale", 2);
|
|
|
+ Integer saleOutId = jdbcTemplate.generate("prodinout_seq.nextval");
|
|
|
+ //主表
|
|
|
+ String mainSql = "INSERT INTO PRODINOUT(pi_id,pi_inoutno,pi_class,pi_date,pi_currency,pi_rate,pi_cardid,pi_cardcode,pi_title,pi_arcode,pi_arname,pi_paymentcode,pi_payment,pi_emcode,pi_emname,"
|
|
|
+ + "pi_departmentcode,pi_departmentname,pi_address,pi_invostatus,pi_invostatuscode,pi_status,pi_statuscode,pi_purposename,pi_expresscode,pi_tocode,pi_recordman,pi_recorddate,"
|
|
|
+ + "pi_auditman,pi_auditdate,pi_printstatus,pi_printstatuscode) SELECT " + saleOutId + ",'"+ saleOutCode +"','出货单',SYSDATE,'RMB','1',sa_custid,sa_custcode,sa_custname,"
|
|
|
+ + "sa_apcustcode,sa_apcustname,sa_departmentcode,sa_departmentname,sa_toplace,'在录入','ENTERING','未过账','UNPOST',sa_need1,sa_need2,'普通','ADMIN',SYSDATE,'ADMIN',SYSDATE,'未打印','UNPRINT' "
|
|
|
+ + " FROM SALE WHERE SA_CODE = ?";
|
|
|
+ //明细表
|
|
|
+ String detailSql = "INSERT INTO PRODIODETAIL(pd_id,pd_piid,pd_pdno,pd_inoutno,pd_piclass,pd_auditstatus,pd_outqty,pd_ordercode,pd_orderdetno,pd_prodcode,pd_prodid,pd_whcode,pd_whname,pd_sendprice,pd_taxrate,pd_batchCode) "
|
|
|
+ + " SELECT PRODIODETAIL_SEQ.NEXTVAL," + saleOutId + ",ROWNUM,'" + saleOutCode + "','出货单','ENTERING',SD_QTY,SA_CODE,SD_DETNO,SD_PRODCODE,SD_PRODID,'SZ001','深圳仓',SD_PRICE,'13','"+ batchCode +"' "
|
|
|
+ + " FROM SALE LEFT JOIN SALEDETAIL ON SA_ID = SD_SAID WHERE SA_CODE = ?";
|
|
|
+
|
|
|
+ jdbcTemplate.execute(mainSql, saleCode);
|
|
|
+ jdbcTemplate.execute(detailSql, saleCode);
|
|
|
+ return saleOutCode;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生成采购验收单
|
|
|
+ * @param purchaseCode
|
|
|
+ */
|
|
|
+ private Map<String, String> purcahseIn(String purchaseCode) {
|
|
|
+ Map<String, String> resultMap = new HashMap<>(2);
|
|
|
+ String purcCheckinCode = jdbcTemplate.generateCode("ProdInOut!PurcCheckin",2);
|
|
|
+ Integer purcCheckinId = jdbcTemplate.getInt("SELECT PRODINOUT_SEQ.NEXTVAL FROM DUAL");
|
|
|
+ Double total = jdbcTemplate.getDouble("select sum(pd_price * pd_qty) from purchase left join purchaseDetail on pu_id = pd_puid where pu_code = ?", purchaseCode);
|
|
|
+ // 1.主表数据
|
|
|
+ String mainSql = "INSERT INTO prodinout(pi_id,pi_inoutno,pi_class,pi_date,pi_currency,pi_rate,pi_cardcode,pi_title,pi_receivecode,pi_receivename,pi_paymentcode,pi_payment,pi_emcode,pi_emname,"
|
|
|
+ + "pi_departmentcode,pi_departmentname,pi_total,pi_invostatus,pi_invostatuscode,pi_status,pi_statuscode,pi_recordman,pi_recorddate,pi_auditman,pi_auditdate,pi_updateman,pi_updatedate,pi_printstatus,pi_printstatuscode) "
|
|
|
+ + "SELECT '" + purcCheckinId + "','" + purcCheckinCode + "','采购验收单',SYSDATE,'RMB','1',pu_vendcode,pu_vendname,pu_receivecode,pu_receivename,pu_paymentscode,pu_payments,'ADMIN','管理员',"
|
|
|
+ + "'B15','优软云运营组','"+ total +"','已审核','AUDITED','未过账','UNPOST','ADMIN',SYSDATE,'ADMIN',SYSDATE,'ADMIN',SYSDATE,'未打印','UNPRINT' FROM PURCHASE WHERE PU_CODE = ?";
|
|
|
+ // 2.明细表数据
|
|
|
+ //取批号
|
|
|
+ String batchCode = jdbcTemplate.callForString("{call utl_rseq(?,?,?)}", "BatchCode", "/yyMMdd/5");
|
|
|
+ String detailSql = "insert into prodiodetail(pd_id,pd_piid,pd_pdno,pd_inoutno,pd_piclass,pd_accountstatus,pd_accountstatuscode,pd_ordercode,pd_orderdetno,pd_prodcode,pd_prodid,pd_whcode,pd_whname,pd_inqty,pd_orderprice,pd_taxrate,pd_batchcode) "
|
|
|
+ + " select prodiodetail_seq.nextval," + purcCheckinId + ",rownum,'"+ purcCheckinCode +"','采购验收单','未核算','UNACCOUNT',pu_code,pd_detno,pd_prodcode,pd_prodid,'SZ01','深圳仓',pd_qty,pd_price,'13','"+batchCode+"' from purchase left join purchaseDetail on pu_id = pd_puid where pu_code = ?";
|
|
|
+
|
|
|
+ jdbcTemplate.execute(mainSql, purchaseCode);
|
|
|
+ jdbcTemplate.execute(detailSql, purchaseCode);
|
|
|
+ resultMap.put("batchCode", batchCode);
|
|
|
+ resultMap.put("inoutno", purcCheckinCode);
|
|
|
+ return resultMap;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生成销售订单
|
|
|
+ * @param order
|
|
|
+ * @param saleCode
|
|
|
+ */
|
|
|
+ private void generateSale(Order order,String saleCode) {
|
|
|
+ int saleId = jdbcTemplate.getInt("SELECT SALE_SEQ.NEXTVAL FROM DUAL");
|
|
|
+ //客户资料
|
|
|
+ Customer customer = generateCustomer(order);
|
|
|
+ //销售订单主表
|
|
|
+ String insertSaleSql = "INSERT INTO SALE(SA_ID,SA_CODE,SA_DATE,SA_KIND,SA_CURRENCY,SA_RATE,SA_CUSTID,SA_CUSTCODE,SA_CUSTNAME,SA_APCUSTCODE,"
|
|
|
+ + "SA_APCUSTNAME,SA_PAYMENTSCODE,SA_PAYMENTS,SA_SELLERCODE,SA_SELLER,SA_DEPARTMENTCODE,SA_DEPARTMENTNAME,"
|
|
|
+ + "SA_TOPLACE,SA_POCODE,SA_STATUS,SA_STATUSCODE,SA_RECORDER,SA_RECORDDATE,SA_AUDITMAN,SA_AUDITDATE,SA_NEED1,SA_NEED2) "
|
|
|
+ + "VALUES(?,?,SYSDATE,'代运营订单','RMB','1',?,?,?,?,?,'PC31','CBD(款到发货)','ADMIN','管理员','B15','优软云运营组',?,?,'已审核','AUDITED','ADMIN',SYSDATE,'ADMIN',SYSDATE,?,?)";
|
|
|
+ //销售订单明细表
|
|
|
+ String insertDetailSql = "INSERT INTO SALEDETAIL(SD_ID, SD_SAID, SD_CODE, SD_DETNO, SD_PRODID, SD_PRODCODE, SD_QTY, SD_PRICE, SD_TAXRATE, SD_DELIVERY) "
|
|
|
+ + "SELECT SALEDETAIL_SEQ.NEXTVAL,'"+saleId+"','"+saleCode+"',pd_detno,pd_prodid,pd_prodcode,pd_qty,pd_price,pd_rate,pd_delivery FROM PURCHASE LEFT JOIN PURCHASEDETAIL ON PU_ID = PD_PUID WHERE PU_REFCODE = '"+saleCode+"'";
|
|
|
+
|
|
|
+ jdbcTemplate.execute(insertSaleSql, saleId, saleCode, customer.getCu_id(), customer.getCu_code(), customer.getCu_name(), customer.getCu_arcode(), customer.getCu_arname(),
|
|
|
+ order.getOrderDeliveryAddr().getDeliveryAddress(), order.getCode(), order.getBuyerMobile(), order.getBuyerMobile());
|
|
|
+ jdbcTemplate.execute(insertDetailSql);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生成客户资料
|
|
|
+ */
|
|
|
+ private Customer generateCustomer(Order order) {
|
|
|
+ Customer customer = null;
|
|
|
+ if (order.getEnuu() == null || order.getEnuu() == 0) {
|
|
|
+ OrderInvoice orderInvoice = order.getOrderInvoice();
|
|
|
+ if (ObjectUtils.isEmpty(orderInvoice)) {
|
|
|
+ //虚拟客户
|
|
|
+ }else {
|
|
|
+ customer = jdbcTemplate.queryForBean("SELECT * FROM CUSTOMER WHERE CU_NAME = ? AND CU_BUSINESSCODE = ?", Customer.class, orderInvoice.getName(), orderInvoice.getIdentityNum());
|
|
|
+ if (!ObjectUtils.isEmpty(customer)){
|
|
|
+ return customer;
|
|
|
+ }else {
|
|
|
+ int id = jdbcTemplate.getInt("SELECT CUSTOMER_SEQ.NEXTVAL FROM DUAL");
|
|
|
+ String customerCode = jdbcTemplate.generateCode("Customer!Base", 2);
|
|
|
+ String insertCustomerSql = "insert into customer(cu_id,cu_code,cu_name,cu_shortname,cu_businesscode,cu_uu,cu_paymentscode,cu_payments,cu_sellercode,cu_sellername,cu_servicecode,"
|
|
|
+ + "cu_servicename,cu_agenttype,cu_cop,cu_enablecredit,cu_shipment,cu_email,cu_tel,cu_contact,cu_recordman,cu_recorddate,cu_auditman,cu_auditdate)"
|
|
|
+ + "values(" + id + ",'" + customerCode + "','" + orderInvoice.getName() + "','" + orderInvoice.getName() + "','" + orderInvoice.getIdentityNum() + "',null,'SK004','款到发货','ADMIN','管理员','ADMIN','管理员',"
|
|
|
+ + "'普通客户','深圳怡海能达','否','快递',null,null,null,'ADMIN',sysdate,'ADMIN',sysdate)";
|
|
|
+ jdbcTemplate.execute(insertCustomerSql);
|
|
|
+ customer = jdbcTemplate.queryForBean("SELECT * FROM CUSTOMER WHERE CU_ID = ?", Customer.class, id);
|
|
|
+ return customer;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ customer = jdbcTemplate.queryForBean("select * from CUSTOMER where CU_UU = ? and nvl(cu_uu,' ') <> 0 and CU_AUDITSTATUS = '已审核'",
|
|
|
+ Customer.class, order.getEnuu());
|
|
|
+ if (ObjectUtils.isEmpty(customer)) {
|
|
|
+ customer = jdbcTemplate.queryForBean("select * from CUSTOMER where CU_NAME = ? and CU_AUDITSTATUS = '已审核'",
|
|
|
+ Customer.class, order.getBuyerEnName());
|
|
|
+ if (ObjectUtils.isEmpty(customer)) {
|
|
|
+ //未找到对应的客户资料,新建一个
|
|
|
+ int id = jdbcTemplate.getInt("SELECT CUSTOMER_SEQ.NEXTVAL FROM DUAL");
|
|
|
+ String customerCode = jdbcTemplate.generateCode("Customer!Base", 2);
|
|
|
+ //营业执照号
|
|
|
+ String identityNum = "";
|
|
|
+ OrderInvoice orderInvoice = order.getOrderInvoice();
|
|
|
+ if (!ObjectUtils.isEmpty(orderInvoice)) {
|
|
|
+ identityNum = orderInvoice.getIdentityNum();
|
|
|
+ }
|
|
|
+ String insertCustomerSql = "insert into customer(cu_id,cu_code,cu_name,cu_shortname,cu_businesscode,cu_uu,cu_paymentscode,cu_payments,cu_sellercode,cu_sellername,cu_servicecode,"
|
|
|
+ + "cu_servicename,cu_agenttype,cu_cop,cu_enablecredit,cu_shipment,cu_email,cu_tel,cu_contact,cu_recordman,cu_recorddate,cu_auditman,cu_auditdate)"
|
|
|
+ + "values(" + id + ",'" + customerCode + "','" + order.getBuyerEnName() + "','" + order.getBuyerEnName() + "','" + identityNum + "','" + order.getEnuu() + "','SK004','款到发货','ADMIN','管理员','ADMIN','管理员',"
|
|
|
+ + "'普通客户','深圳怡海能达','否','快递','" + order.getBuyerEmail() + "','" + order.getBuyerMobile() + "','" + order.getBuyerName() + "','ADMIN',sysdate,'ADMIN',sysdate)";
|
|
|
+ jdbcTemplate.execute(insertCustomerSql);
|
|
|
+ customer = jdbcTemplate.queryForBean("SELECT * FROM CUSTOMER WHERE CU_ID = ?", Customer.class, id);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return customer;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生成采购订单
|
|
|
+ * @param order
|
|
|
+ */
|
|
|
+ private boolean generatePurchase(Order order,String purchaseCode, String saleCode) {
|
|
|
+ int purchaseId = jdbcTemplate.getInt("select purchase_seq.nextval from dual");
|
|
|
+ String insertMainSql = "insert into purchase(pu_id,pu_code,pu_date,pu_kind,pu_currency,pu_rate,pu_refcode,pu_vendcode,pu_vendname,pu_receivecode,pu_receivename,ve_uu,"
|
|
|
+ + "pu_paymentscode,pu_payments,pu_buyercode,pu_buyername,pu_departmentcode,pu_departmentname,pu_shipaddresscode,pu_pocode,pu_status,pu_statuscode,"
|
|
|
+ + "pu_recordman,pu_indate,pu_auditman,pu_auditdate,pu_getprice,pu_isadvance) values(?,?,sysdate,'代运营订单','RMB','1',?,?,?,?,?,?,?,?,'ADMIN','管理员','B15','优软云运营组',?,?,'已审核','AUDITED','ADMIN',sysdate,'ADMIN',sysdate,'0','unadvance')";
|
|
|
+ //供应商资料生成逻辑
|
|
|
+ Vendor vendor = getVendorByUUOrName(order.getCode(), order.getSellerEnuu(), order.getSellerName());
|
|
|
+ if (null == vendor) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ List<OrderProduct> productList = order.getOrderProduct();
|
|
|
+ List<String> insertDetailSqlList = new ArrayList<>(productList.size());
|
|
|
+ for (int i = 0, len = productList.size(); i < len; i++) {
|
|
|
+ OrderProduct product = productList.get(i);
|
|
|
+ String prodCode = "";
|
|
|
+ Integer prodId = null;
|
|
|
+ //物料生成逻辑
|
|
|
+ Map<String, Object> productMap = generateProduct(product, order.getCode(), vendor);
|
|
|
+ if (!CollectionUtils.isEmpty(productMap)) {
|
|
|
+ prodCode = String.valueOf(productMap.get("prodCode"));
|
|
|
+ prodId = Integer.valueOf(String.valueOf(productMap.get("prodId")));
|
|
|
+ }else {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ String insertDetailSql = "insert into PurchaseDetail(pd_id,pd_puid,pd_detno,pd_code,pd_prodcode,pd_prodid,pd_qty,pd_price,pd_rate,pd_delivery) "
|
|
|
+ + " value(PurchaseDetail_seq.nextval,"+ purchaseId +","+ (i+1) +",'"+ purchaseCode +"','"+ prodCode +"',"+prodId+",'"+ product.getAmount() +"','"+ product.getUnitPrice() +"','13',sysdate+"+product.getMaxDelivery()+")";
|
|
|
+ insertDetailSqlList.add(insertDetailSql);
|
|
|
+ }
|
|
|
+
|
|
|
+ jdbcTemplate.execute(insertMainSql, purchaseId, purchaseCode, saleCode, vendor.getVe_code(), vendor.getVe_name(), vendor.getVe_apvendcode(), vendor.getVe_apvendname(), vendor.getVe_uu(),
|
|
|
+ vendor.getVe_paymentcode(), vendor.getVe_payment(), order.getOrderDeliveryAddr(), order.getCode());
|
|
|
+ jdbcTemplate.batchExecute(insertDetailSqlList);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生成物料资料
|
|
|
+ * @param product
|
|
|
+ * @param orderCode
|
|
|
+ * @param vendor
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private Map<String, Object> generateProduct(OrderProduct product, String orderCode, Vendor vendor){
|
|
|
+ Map<String, Object> productMap = jdbcTemplate.queryForMap("SELECT PV_PRODCODE AS prodCode,PV_PRODID AS prodId FROM PRODUCTVENDOR WHERE PV_VENDPRODCODE = ? AND PV_VENDCODE = ?", product.getMaterialCode(), vendor.getVe_code());
|
|
|
+ if (!CollectionUtils.isEmpty(productMap)) {
|
|
|
+ return productMap;
|
|
|
+ }else {
|
|
|
+ int count = jdbcTemplate.getInt("SELECT COUNT(*) FROM PRODUCT WHERE PR_ORISPECCODE = ? AND PR_BRAND = ?", product.getModel(), product.getBrand());
|
|
|
+ if (count > 1) {
|
|
|
+ //不生成订单并生成日志
|
|
|
+ String logOrderSql = "INSERT INTO LOGORDER(LO_ID, ORDERCODE , STATUS , SALESTIME , ORDERNUMBER , REMARK) "
|
|
|
+ + "VALUES(LOGORDER_SEQ.NEXTVAL,'" + orderCode + "', '失败', SYSDATE, null, '根据平台订单物料的型号+品牌未在物料资料找到唯一对照关系')";
|
|
|
+ jdbcTemplate.execute(logOrderSql);
|
|
|
+ return null;
|
|
|
+ }else if (count == 1) {
|
|
|
+ //返回物料信息
|
|
|
+ productMap = jdbcTemplate.queryForMap("SELECT PR_CODE AS prodCode,PR_ID as prodId FROM PRODUCT WHERE PR_ORISPECCODE = ? AND PR_BRAND = ?", product.getModel(), product.getBrand());
|
|
|
+ //生成供应商物料对照关系
|
|
|
+ String insertProductVendorSql = "insert into productVendor(pv_id,pv_prodid,pv_detno,pv_vendid,pv_vendcode,pv_vendprodcode,pv_vendprodspec,pv_vendprodunit,pv_vendname,pv_prodcode,pv_zxbzs) "
|
|
|
+ + "values(productVendor_seq.nextval, ?, 1, ?, ?, ?, ?, ?, ?, ?, ?)";
|
|
|
+ jdbcTemplate.execute(insertProductVendorSql, productMap.get("prodId"), vendor.getVe_id(), vendor.getVe_code(), product.getMaterialCode(), product.getSpec(), product.getUnit(), vendor.getVe_name(), productMap.get("prodCode"), product.getMpq());
|
|
|
+ }else if (count == 0) {
|
|
|
+ String code = "YS" + product.getMaterialCode();
|
|
|
+ int id = jdbcTemplate.getInt("SELECT PRODUCT_SEQ.NEXTVAL FROM DUAL");
|
|
|
+ //生成物料资料
|
|
|
+ String insertProductSql = "INSERT INTO PRODUCT(PR_ID,PR_CODE,PR_DETAIL,PR_SPEC,PR_UNIT,PR_ORISPECCODE,PR_BRAND,PR_MAKETYPE,PR_PURCHASEPOLICY,PR_SUPPLYTYPE,PR_ZXBZS,PR_ZXDHL,PR_ACCEPTMETHOD,"
|
|
|
+ + "PR_RECORDMAN,PR_DOCDATE,PR_AUDITMAN,PR_AUDITDATE,PR_STATUS,PR_STATUSCODE) VALUES(?,?,?,?,?,?,?,'外购','MRP','推式',?,?,'不检验','ADMIN',SYSDATE,'ADMIN',SYSDATE,'已审核','AUDITED')";
|
|
|
+ jdbcTemplate.execute(insertProductSql, id, code, product.getModel(), product.getSpec(), product.getUnit(), product.getModel(), product.getBrand(), product.getMpq(), product.getMoq());
|
|
|
+ //生成供应商物料对照关系
|
|
|
+ jdbcTemplate.execute("insert into productVendor(pv_id,pv_prodid,pv_detno,pv_vendid,pv_vendcode,pv_vendprodcode,pv_vendprodspec,pv_vendprodunit,pv_vendname,pv_prodcode,pv_zxbzs) "
|
|
|
+ + "values(productVendor_seq.nextval, ?, 1, ?, ?, ?, ?, ?, ?, ?, ?)", id, vendor.getVe_id(), vendor.getVe_code(), product.getMaterialCode(), product.getSpec(), product.getUnit(), vendor.getVe_name(), code, product.getMpq());
|
|
|
+ productMap.put("prodCode", code);
|
|
|
+ productMap.put("prodId", id);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return productMap;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取供应商资料
|
|
|
+ * @param enUU
|
|
|
+ */
|
|
|
+ private Vendor getVendorByUUOrName(String orderCode, Integer enUU, String enName){
|
|
|
+ Vendor vendor = jdbcTemplate.queryForBean("select * from vendor where ve_uu = ? and rownum = 1", Vendor.class, enUU);
|
|
|
+ if (!ObjectUtils.isEmpty(vendor)) {
|
|
|
+ return vendor;
|
|
|
+ }else {
|
|
|
+ vendor = jdbcTemplate.queryForBean("SELECT * FROM VENDOR WHERE VE_NAME = ? AND ROWNUM = 1", Vendor.class, enName);
|
|
|
+ if (!ObjectUtils.isEmpty(vendor)) {
|
|
|
+ return vendor;
|
|
|
+ }else {
|
|
|
+ //记录日志
|
|
|
+ String logOrderSql = "insert into LOGORDER(LO_ID, ORDERCODE , STATUS , SALESTIME , ORDERNUMBER , REMARK)" +
|
|
|
+ "values(LOGORDER_SEQ.NEXTVAL,'" + orderCode + "', '失败', sysdate, null, '未找到对应的供应商资料!')";
|
|
|
+ jdbcTemplate.execute(logOrderSql);
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 取销售订单数据
|
|
|
+ * @param requestURL
|
|
|
+ * @param vendUU
|
|
|
+ * @param updateTime
|
|
|
+ * @param pageSize
|
|
|
+ * @param pageNumber
|
|
|
+ * @return
|
|
|
+ * @throws NoSuchAlgorithmException
|
|
|
+ * @throws InvalidKeyException
|
|
|
+ * @throws UnsupportedEncodingException
|
|
|
+ */
|
|
|
+ private OrdersInfo getOrdersByUU(String requestURL, String vendUU, String vendAccessSecret, Long updateTime, int pageSize, int pageNumber) throws NoSuchAlgorithmException, InvalidKeyException, UnsupportedEncodingException {
|
|
|
+ String paramStr = "secretId=" + vendUU + "&"+ "materialCode=" + "" + "&" + "updateTime=" + updateTime + "&" + "pageSize=" + pageSize +"&" + "pageNumber=" + pageNumber;
|
|
|
+ //进行签名
|
|
|
+ String signatureValue = OpenApiSignUtil.sign(paramStr,vendAccessSecret);
|
|
|
+ signatureValue = URLEncoder.encode(signatureValue, "UTF-8");
|
|
|
+ String signatureKV = OpenApiSignUtil.SIGNATURE_KEY + "=" + signatureValue;
|
|
|
+ paramStr += "&" + signatureKV;
|
|
|
+ requestURL = requestURL + paramStr;
|
|
|
+
|
|
|
+ DefaultUriTemplateHandler uriTemplateHandler = new DefaultUriTemplateHandler();
|
|
|
+ uriTemplateHandler.setStrictEncoding(true);
|
|
|
+
|
|
|
+ RestTemplate restTemp = new RestTemplate(new HttpsClientRequestFactory());
|
|
|
+ restTemp.setUriTemplateHandler(uriTemplateHandler);
|
|
|
+ String result = restTemp.getForObject(requestURL, String.class);
|
|
|
+ LOGGER.info("result={}", result);
|
|
|
+ OrdersInfo ordersInfo = JSON.parseObject(result, OrdersInfo.class);
|
|
|
+ return ordersInfo;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+}
|