Browse Source

采购变更轮询

Hu Jie 7 years ago
parent
commit
827e26ba34

+ 2 - 2
src/main/java/com/uas/erp/schedular/agent/v1/SaleChangeAgent.java

@@ -17,9 +17,9 @@ public class SaleChangeAgent extends AbstractAgent {
      * @param id
      * @return
      */
-    public boolean audit(int id) {
+    public boolean audit(Integer id) {
         return postForEntity("/scm/sale/auditSaleChange.action",
-                new ModelMap("caller", caller).addAttribute("id", id));
+                new ModelMap("caller", caller).addAttribute("id", String.valueOf(id)));
     }
 
 }

+ 1 - 1
src/main/java/com/uas/erp/schedular/b2b/task/PurchaseNotifyTask.java

@@ -147,7 +147,7 @@ public class PurchaseNotifyTask extends AbstractTask {
      * @return
      */
     private List<AcceptNotify> getAcceptNotify() {
-        List<AcceptNotify> accepts = jdbcTemplate.queryForBeanList("select AcceptNotify.* from AcceptNotify left join vendor on an_vendcode=ve_code where AN_SENDSTATUS='待上传' and an_statuscode='AUDITED' and ve_uu is not null and nvl(ve_b2benable,0)=1 and B2B_SS_ID is not null order by an_date",
+        List<AcceptNotify> accepts = jdbcTemplate.queryForBeanList("select AcceptNotify.* from AcceptNotify left join vendor on an_vendcode=ve_code where AN_SENDSTATUS='待上传' and an_statuscode='AUDITED' and ve_uu is not null and nvl(ve_b2benable,0)=1 order by an_date",
                 AcceptNotify.class);
         for (AcceptNotify accept : accepts) {
             List<AcceptNotifyDetail> details = jdbcTemplate.queryForBeanList("select * from AcceptNotifyDetail where and_anid=?",

+ 1 - 1
src/main/java/com/uas/erp/schedular/b2b/task/PurchaseTask.java

@@ -154,7 +154,7 @@ public class PurchaseTask extends AbstractTask {
 
     @TaskMapping(title = "上传结案、反结案采购订单", fixedDelay = 60000)
     public void uploadPurchaseEnd() {
-        List<PurchaseDetailEnd> details = jdbcTemplate.queryForBeanList("select * from (select pd_id,pd_code,pd_detno,case when pd_mrpstatuscode='FINISH' then 1 else 0 end pd_ended from PurchaseDetail left join purchase on pd_puid=pu_id left join vendor on pu_vendcode=ve_code where PU_SENDSTATUS='已上传' and nvl(pu_ordertype,' ')<>'B2C' and pd_endstatus='待上传' and ve_uu is not null and nvl(ve_b2benable,0)=1 order by pd_code,pd_detno) where rownum <= 200",
+        List<PurchaseDetailEnd> details = jdbcTemplate.queryForBeanList("select pd_id,pd_code,pd_detno,case when pd_mrpstatuscode='FINISH' then 1 else 0 end pd_ended from PurchaseDetail left join purchase on pd_puid=pu_id left join vendor on pu_vendcode=ve_code where PU_SENDSTATUS='已上传' and nvl(pu_ordertype,' ')<>'B2C' and pd_endstatus='待上传' and ve_uu is not null and nvl(ve_b2benable,0)=1 order by pd_code,pd_detno",
                 PurchaseDetailEnd.class);
         if (!CollectionUtils.isEmpty(details)) {
             ContextHolder.setDataSize(details.size());

+ 78 - 0
src/main/java/com/uas/erp/schedular/b2b/task/SaleDownChangeTask.java

@@ -4,6 +4,7 @@ import com.uas.erp.schedular.agent.v1.SaleChangeAgent;
 import com.uas.erp.schedular.b2b.domain.SaleDownChange;
 import com.uas.erp.schedular.b2b.domain.SaleDownChangeDetail;
 import com.uas.erp.schedular.b2b.domain.SaleDownChangeReply;
+import com.uas.erp.schedular.core.Constant;
 import com.uas.erp.schedular.core.Status;
 import com.uas.erp.schedular.task.support.Method;
 import com.uas.erp.schedular.task.support.Role;
@@ -40,6 +41,25 @@ public class SaleDownChangeTask extends AbstractTask {
         }
     }
 
+    @TaskMapping(title = "从平台下载平台新增的采购变更单(买方b2b)", fixedDelay = 60000, method = Method.DOWNLOAD)
+    public void downloadSaleDownChangeB2b() {
+        List<SaleDownChange> changes = getForList("/erp/sale/change/b2b", SaleDownChange.class);
+        if (!CollectionUtils.isEmpty(changes)) {
+            ContextHolder.setDataSize(changes.size());
+            saveSaleDownChange(changes);
+            //保存无需确认的采购订单
+            for (SaleDownChange saleDownChange : changes) {
+                if (saleDownChange.getSc_unNeedReply().equals(Constant.YES)) {
+                    saveUnNeedReply(saleDownChange);
+                }
+            }
+            // 回执
+            onSaleDownChangeSuccess(changes);
+
+
+        }
+    }
+
     /**
      * 保存saledownchange
      *
@@ -150,6 +170,49 @@ public class SaleDownChangeTask extends AbstractTask {
         jdbcTemplate.batchExecute(sqls);
     }
 
+    private void saveUnNeedReply(SaleDownChange saleDownChange) {
+        Integer changeId = 0;
+        List<String> sqls = new ArrayList<>();
+        Integer sc_id = jdbcTemplate.getInt("select sc_id from saledownchange where sc_code=?", saleDownChange.getSc_code());
+        if (null != sc_id) {
+            sqls.add("update saledownchange set sc_agreed= -1 , sc_replyremark='无需回复',sc_status='" + Status.AUDITED.display()
+                    + "',sc_statuscode='" + Status.AUDITED.code() + "',sc_sendstatus='已下载' where sc_id=" + sc_id);
+            // 变更达成
+            sqls.add("update SaleDown set (sa_payments,sa_currency,sa_rate)=(select max(nvl(sc_newpayments,sc_payments)),max(nvl(sc_currency,sc_newcurrency)),max(nvl(sc_rate,sc_newrate)) from SaleDownChange where sc_sacode=sa_code and sc_id=" + sc_id +
+                    ") where sa_code=(select sc_sacode from SaleDownChange where sc_id=" + sc_id + ")");
+            sqls.add("update SaleDownDetail set (sd_custprodcode,sd_custproddetail,sd_custprodspec,sd_custprodunit,sd_prodcode)=(select max(scd_newcustprodcode),max(scd_newcustproddetail),max(scd_newcustprodspec),max(scd_newcustprodunit),max(scd_newprodcode) from SaleDownChangeDetail where scd_sacode=sd_code and scd_sddetno=sd_detno and scd_scid=" + sc_id +
+                    ") where exists (select 1 from SaleDownChangeDetail where scd_scid=" + sc_id +
+                    " and scd_sacode=sd_code and scd_sddetno=sd_detno and nvl(scd_newprodcode,scd_prodcode)<>scd_prodcode)");
+            sqls.add("update SaleDownDetail set (sd_delivery,sd_qty,sd_price,sd_taxrate)=(select max(nvl(scd_newdelivery,scd_delivery)),max(nvl(scd_newqty,scd_qty)),max(nvl(scd_newprice,scd_price)),max(nvl(scd_newtaxrate,scd_taxrate)) from SaleDownChangeDetail where scd_scid=" + sc_id +
+                    " and scd_sacode=sd_code and scd_sddetno=sd_detno) where exists (select 1 from SaleDownChangeDetail where scd_scid=" + sc_id + " and scd_sacode=sd_code and scd_sddetno=sd_detno)");
+            // 存在订单
+            Integer sa_id = jdbcTemplate.getInt("select max(sa_id) from sale where (sa_pocode,sa_custcode)=(select sa_code,sa_custcode from saledown left join saledownchange on sa_code=sc_sacode and sa_customeruu=sc_custuu where sc_id=?)", sc_id);
+            if (null != sa_id && sa_id != 0) {
+                changeId = jdbcTemplate.generate("SaleChange_SEQ");
+                String code = jdbcTemplate.generateCode("SaleChange", 2);
+                //  //自动产生对应销售变更单
+                sqls.add(String.format("insert into SaleChange(sc_id,sc_code,sc_saleid,sc_salecode,sc_recorderman,sc_indate,sc_remark,sc_status,sc_statuscode,sc_pocode,sc_sakind)"
+                                + " select %s,'%s',sa_id,sa_code,sc_recorder,sysdate,sc_remark,'已提交','COMMITED',sa_pocode,sa_kind from sale,saledownchange where sa_id=%s and sc_id=%s and sa_pocode=sc_sacode and sa_custcode=sc_custcode",
+                        changeId, code, sa_id, sc_id));
+                sqls.add(String.format("insert into SaleChangeDetail(scd_id,scd_scid,scd_code,scd_said,scd_sacode,scd_sddetno,scd_prodid,scd_prodcode,scd_newprodcode," +
+                                "scd_qty,scd_newqty,scd_price,scd_newprice,scd_delivery,scd_newdelivery,scd_taxrate,scd_newtaxrate,scd_payments,scd_paymentname," +
+                                "scd_newpayments,scd_currency,scd_newcurrency,scd_total,scd_newtotal) select SaleChangeDetail_SEQ.nextval,%s,'%s',sa_id,sa_code," +
+                                "sd_detno,sd_prodid,sd_prodcode,scd_newprodcode,sd_qty,scd_newqty,sd_price,scd_newprice,sd_delivery,scd_newdelivery,sd_taxrate," +
+                                "scd_newtaxrate,sa_paymentscode,sa_payments,sc_newpaymentscode,sa_currency,sc_newcurrency,sd_total,round(scd_newqty*scd_newprice,2) " +
+                                "from saledetail,sale,saledownchangedetail,saledownchange where sd_said=%s and scd_scid=%s and sd_said=sa_id and scd_scid=sc_id and sa_pocode=sc_sacode and sd_detno=scd_sddetno",
+                        changeId, code, sa_id, sc_id));
+            }
+        }
+        jdbcTemplate.batchExecute(sqls);
+        if (!changeId.equals(Constant.NO)) {
+            // 变更单审核动作,包括变更信息写到订单等操作
+            if (!saleChangeAgent.audit(changeId)) {
+                throw new RuntimeException("[调用UAS接口执行变更单审核动作]出现异常");
+            }
+        }
+    }
+
+
     /**
      * 将从平台下载的回复记录保存成功之后,回执给平台
      *
@@ -179,4 +242,19 @@ public class SaleDownChangeTask extends AbstractTask {
         }
     }
 
+    @TaskMapping(title ="上传ERP供应商回复信息,修改采购变更单、客户采购单",fixedDelay = 60000,method = Method.UPLOAD)
+    public void downSaleChangeReplyB2b() {
+        List<SaleDownChangeReply> replies = jdbcTemplate.queryForBeanList("select b2b_pc_id,sc_id,sc_code,sc_agreed,sc_replyremark from SaleDownChange where sc_agreed is not null and sc_custuu is not null and SC_SENDSTATUS = '待上传'",
+                SaleDownChangeReply.class);
+        if (!CollectionUtils.isEmpty(replies)) {
+            ContextHolder.setDataSize(replies.size());
+            post("/erp/sale/change/reply/b2b",dataWrap(replies));
+            //saveChangeReply(replies);
+            //修改状态
+            String idStr = CollectionUtil.getKeyString(replies);
+            jdbcTemplate.execute("update SaleDownChange set sc_sendstatus='已下载' where sc_id in (" + idStr + ")");
+        }
+
+    }
+
 }

+ 4 - 1
src/main/java/com/uas/erp/schedular/b2b/task/SaleDownTask.java

@@ -1,6 +1,9 @@
 package com.uas.erp.schedular.b2b.task;
 
-import com.uas.erp.schedular.b2b.domain.*;
+import com.uas.erp.schedular.b2b.domain.SaleDown;
+import com.uas.erp.schedular.b2b.domain.SaleDownDetail;
+import com.uas.erp.schedular.b2b.domain.SaleDownDetailEnd;
+import com.uas.erp.schedular.b2b.domain.SaleReply;
 import com.uas.erp.schedular.core.Status;
 import com.uas.erp.schedular.task.support.Method;
 import com.uas.erp.schedular.task.support.Role;

+ 9 - 26
src/main/java/com/uas/erp/schedular/publicinquiry/task/EnterInquiryTask.java

@@ -40,16 +40,16 @@ public class EnterInquiryTask {
             }
             String res = sendGet(url, params);
             //是否存在商机库
-            Map<String, Object> map = jdbcTemplate.queryForMap("SELECT COUNT(*) COUNT,BD_NAME FROM BUSINESSDATABASE WHERE BD_NAME ='平台商机库' AND BD_PROP='管理员分配' AND ROWNUM=1 GROUP BY BD_NAME");
+            Map<String, Object> map = jdbcTemplate.queryForMap("SELECT COUNT(*) COUNT,BD_NAME FROM BUSINESSDATABASE WHERE (BD_NAME like '%公共%' or bd_name like '%公有%') AND BD_PROP='可领取可分配' AND ROWNUM=1 GROUP BY BD_NAME");
             if(map == null){
                 Map<String, Object> adminMap = jdbcTemplate.queryForMap("SELECT EM_CODE,EN_ADMINNAME FROM ENTERPRISE LEFT JOIN EMPLOYEE ON EN_ADMINUU=EM_UU");
-                jdbcTemplate.execute("INSERT INTO BUSINESSDATABASE(bd_id,bd_name,bd_prop,bd_admin,bd_admincode,bd_overtime) VALUES(BUSINESSDATABASE_SEQ.NEXTVAL,'平台商机库','管理员分配','"+adminMap.get("EN_ADMINNAME")+"','"+adminMap.get("EM_CODE")+"',30)");
+                jdbcTemplate.execute("INSERT INTO BUSINESSDATABASE(bd_id,bd_name,bd_prop,bd_admin,bd_admincode,bd_overtime) VALUES(BUSINESSDATABASE_SEQ.NEXTVAL,'公共商机库','可领取可分配','"+adminMap.get("EN_ADMINNAME")+"','"+adminMap.get("EM_CODE")+"',30)");
                 map = new HashMap<String, Object>();
-                map.put("BD_NAME","平台商机库");
+                map.put("BD_NAME","公共商机库");
             }else if(map != null && "0".equals(map.get("COUNT"))){
                 Map<String, Object> adminMap = jdbcTemplate.queryForMap("SELECT EM_CODE,EN_ADMINNAME FROM ENTERPRISE LEFT JOIN EMPLOYEE ON EN_ADMINUU=EM_UU");
-                jdbcTemplate.execute("INSERT INTO BUSINESSDATABASE(bd_id,bd_name,bd_prop,bd_admin,bd_admincode,bd_overtime) VALUES(BUSINESSDATABASE_SEQ.NEXTVAL,'平台商机库','管理员分配','"+adminMap.get("EN_ADMINNAME")+"','"+adminMap.get("EM_CODE")+"',30)");
-                map.put("BD_NAME","平台商机库");
+                jdbcTemplate.execute("INSERT INTO BUSINESSDATABASE(bd_id,bd_name,bd_prop,bd_admin,bd_admincode,bd_overtime) VALUES(BUSINESSDATABASE_SEQ.NEXTVAL,'公共商机库','可领取可分配','"+adminMap.get("EN_ADMINNAME")+"','"+adminMap.get("EM_CODE")+"',30)");
+                map.put("BD_NAME","公共商机库");
             }
             String sql = "select count(bs_name) count,bs_name from businesschancestage where bs_detno=1 group by bs_name";
             Map<String, Object> bsNameMap= jdbcTemplate.queryForMap(sql);
@@ -73,15 +73,7 @@ public class EnterInquiryTask {
                     try {
                         executeDownload(jsonArray, String.valueOf(bsNameMap.get("BS_NAME")), String.valueOf(map.get("BD_NAME")));
                     }catch (Exception e){
-                        for(int j = 0; j < jsonArray.size(); j++){
-                            try{
-                                JSONArray array = new JSONArray();
-                                array.add(jsonArray.getJSONObject(j));
-                                executeDownload(array, String.valueOf(bsNameMap.get("BS_NAME")), String.valueOf(map.get("BD_NAME")));
-                            }catch (Exception e1){
-                                continue;
-                            }
-                        }
+                        continue;
                     }
                 }
             }else{
@@ -102,36 +94,27 @@ public class EnterInquiryTask {
             sb.append("if v_count = 0 then ");
             String code = jdbcTemplate.generateCode("businesschance",2);
             String needQty ="";
-            String inbrand = "";
-            inbrand = json.getString("inbrand");
             needQty = json.getString("needQty");
             if(needQty == null || "null".equals(needQty)){
                 needQty = "";
             }
-            if(inbrand == null || "null".equals(inbrand)){
-                inbrand = "";
-            }
-            //商机名称
             String description = json.getString("prodTitle")+" "+ json.getString("cmpCode")+" ";
             if(json.getString("spec") != null && !"null".equals(json.getString("spec")) && !"".equals(json.getString("spec"))){
                 description += json.getString("spec") +" ";
             }
-            description += inbrand;
+            description += json.getString("inbrand");
             if(needQty != null && !"null".equals(needQty) && !"".equals(needQty)){
                 description += ",需求:"+needQty;
             }
-            //客户编号、客户uu
-            String cuUU = json.getString("enUU");
-            String custCode = jdbcTemplate.getString("select cu_code from customer where cu_uu=?", cuUU);
             Calendar c = Calendar.getInstance();
             c.setTime(new Date(json.getLong("date")));
             c.add(Calendar.MONTH, 2);
             String date = "to_date('" + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(c.getTime())+"','YYYY-MM-DD HH24:MI:SS')";
             String endDate = "to_date('"+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(json.getLong("endDate")))+"','YYYY-MM-DD HH24:MI:SS')";
             sb.append("insert into businesschance(bc_id,bc_fromid,bc_code,bc_description,bc_from,bc_nichehouse,bc_currentprocess,bc_date7,bc_status,bc_statuscode,bc_recorder,bc_recorddate,"
-                    + "bc_custname,bc_contact,bc_tel,bc_desc7,bc_desc9,bc_desc10,bc_desc11,bc_desc13,bc_date13,bc_desc14,bc_custcode) values(businesschance_seq.nextval,"+json.getInteger("id")+",'"+code+"','"+description.replaceAll("'","''").replaceAll("&","'||'&'||'")+"','平台商机','"+bdName+"','"+bsName+"',"+date+","
+                    + "bc_custname,bc_contact,bc_tel,bc_desc7,bc_desc9,bc_desc10,bc_desc11,bc_desc13,bc_date13) values(businesschance_seq.nextval,"+json.getInteger("id")+",'"+code+"','"+description.replaceAll("'","''").replaceAll("&","'||'&'||'")+"','平台商机','"+bdName+"','"+bsName+"',"+date+","
                     + "'已审核','AUDITED','自动转入',sysdate,'"+json.getString("enName")+"','"+json.getString("userName")+"','"+json.getString("userTel")+"','"+json.getString("prodTitle").replaceAll("'","''").replaceAll("&","'||'&'||'")+"','"+json.getString("spec")+"',"
-                    + "'"+json.getString("cmpCode").replaceAll("&","'||'&'||'")+"','"+json.getString("inbrand")+"','"+needQty+"',"+endDate+",'"+cuUU+"','"+custCode+"');");
+                    + "'"+json.getString("cmpCode").replaceAll("&","'||'&'||'")+"','"+json.getString("inbrand")+"','"+needQty+"',"+endDate+");");
             sb.append(" end if;");
         }
         sb.append(" end;");