Browse Source

Merge remote-tracking branch 'origin/master'

scr 8 years ago
parent
commit
ec24282e16

+ 138 - 0
src/main/java/com/uas/erp/schedular/b2b/task/PublicInquiryTask.java

@@ -1,6 +1,8 @@
 package com.uas.erp.schedular.b2b.task;
 
 import com.uas.erp.schedular.b2b.domain.*;
+import com.uas.erp.schedular.database.SqlTemplate;
+import com.uas.erp.schedular.task.support.Method;
 import com.uas.erp.schedular.task.support.Role;
 import com.uas.erp.schedular.task.support.TaskMapping;
 import com.uas.erp.schedular.util.CollectionUtil;
@@ -9,9 +11,14 @@ import org.springframework.stereotype.Component;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
+ * 关于公共询价的轮询操作
+ *
  * Created by Pro1 on 2017/9/23.
  */
 @Component
@@ -76,4 +83,135 @@ public class PublicInquiryTask extends AbstractTask {
         }
     }
 
+    /**
+     * 从平台获取供应商已经报价的公共询价单
+     *
+     * @author hejq
+     * @date 2018-01-10 16:32
+     * @throws Exception
+     */
+    @TaskMapping(title = "从平台下载供应商的询价单报价", fixedDelay = 60000, method = Method.DOWNLOAD)
+    public void downloadReply() throws Exception{
+        List<InquiryDetail> details = getForList("/erp/purchase/publicinquiry/infos", InquiryDetail.class);
+        if (!CollectionUtils.isEmpty(details)) {
+            ContextHolder.setDataSize(details.size());
+            saveInquiryReply(details);
+            // 回执
+            onReplySuccess(details);
+            // 附件
+            saveInquiryDetailAttach(details);
+        }
+    }
+
+    /**
+     * 保存供应商的报价信息,存到ERP
+     *
+     * @author hejq
+     * @date 2018-01-10 16:39
+     * @param details 询价明细
+     * @throws Exception
+     */
+    private void saveInquiryReply(List<InquiryDetail> details) throws Exception {
+        // 先获取状态(用于区分消息类型)
+        for (InquiryDetail detail : details) {
+            String status = jdbcTemplate.getString("select max(id_status) from inquirydetail,inquiry where id_inid=in_id and in_code=? and id_vendyyzzh=? and id_prodcode=?",
+                    detail.getIn_code(), detail.getId_vendyyzzh(), detail.getId_prodcode());
+            detail.setId_status(status);
+        }
+
+        Map<String, Object> model = new HashMap<>();
+        model.put("inquiryDetails", details);
+        // 解析sql模板
+        String sql = SqlTemplate.fromXmlFile("database/template/pubInquiryReply.xml", model);
+        jdbcTemplate.execute(sql);
+    }
+
+    /**
+     * 修改平台里面询价单的下载状态
+     *
+     * @author hejq
+     * @date 2018-01-10 16:40
+     * @param details 询价单明细
+     */
+    private void onReplySuccess(List<InquiryDetail> details) {
+        String idStr = CollectionUtil.getKeyString(details);
+        post("/erp/purchase/publicinquiry/reply/back", dataWrap(idStr));
+    }
+
+    /**
+     * 保存来自平台的公共询价单附件信息
+     *
+     * @author hejq
+     * @date 2018-01-10 16:41
+     * @param details 询价单明细
+     */
+    private void saveInquiryDetailAttach(List<InquiryDetail> details) {
+        List<String> sqls = new ArrayList<String>();
+        String remoteUrl = "B2B://file";
+        for (InquiryDetail detail : details) {
+            if (!CollectionUtils.isEmpty(detail.getFiles())) {
+                StringBuffer attachIds = new StringBuffer();
+                for (RemoteFile file : detail.getFiles()) {
+                    int id = jdbcTemplate.generate("filepath_seq");
+                    sqls.add(file.toSqlString(id, remoteUrl));
+                    attachIds.append(id).append(";");
+                }
+                sqls.add("update InquiryDetail set id_attach='" + attachIds.toString() + "' where id_id=" + detail.getId_id());
+            }
+        }
+        jdbcTemplate.batchExecute(sqls);
+    }
+
+    /**
+     * ERP询价单提交后,同步到平台进行状态更新
+     *
+     * @author hejq
+     * @date 2018-01-10 19:32
+     */
+    @TaskMapping(title = "询价单提交后,上传平台", fixedDelay = 60000)
+    public void uploadCheckInquiry() {
+        List<Inquiry> inquiries = jdbcTemplate.queryForBeanList("select * from (select in_id,in_code from inquiryAuto where in_checkStatus = '已提交' and in_checkSendStatus='待上传' and nvl(in_class,' ')<>'主动报价' and in_sendStatus='已上传' order by in_id) where rownum < 100", Inquiry.class);
+        if (!CollectionUtils.isEmpty(inquiries)) {
+            ContextHolder.setDataSize(inquiries.size());
+            new StatusBasedHandler<Inquiry>("inquiryAuto", "in_id", "in_checkSendStatus", "/erp/purchase/publicinquiry/checking", inquiries).run();
+        }
+    }
+
+    /**
+     * ERP针对卖家报价信息的采纳状态传回平台
+     *
+     * @author hejq
+     * @date 2018-01-10 19:34
+     */
+    @TaskMapping(title = "上传买家对报价信息是否采纳的决策到平台", fixedDelay = 60000)
+    public void uploadInquiryDecide() {
+        List<InquiryDecide> replies = jdbcTemplate.queryForBeanList("select id_id,in_code,id_detno,id_isagreed id_agreed from InquiryAutoDetail left join InquiryAuto on id_inid=in_id left join vendor on id_vendcode=ve_code where IN_SENDSTATUS='已上传' and nvl(in_class,' ')<>'主动报价' and ID_SENDSTATUS='待上传' and id_isagreed is not null and ve_uu is not null and nvl(ve_b2benable,0)=1 and rownum < 100 order by in_code,id_detno",
+                InquiryDecide.class);
+        if (!CollectionUtils.isEmpty(replies)) {
+            ContextHolder.setDataSize(replies.size());
+            post("/erp/purchase/publicinquiry/reply/decide", dataWrap(replies));
+            String idStr = CollectionUtil.getKeyString(replies);
+            logger.info("上传采纳决策到平台,ids: " + idStr);
+            jdbcTemplate.execute("update InquiryAutoDetail set id_sendstatus='已下载' where id_id in (" + idStr + ")");
+        }
+    }
+
+    /**
+     * ERP单据作废信息传回平台进行操作
+     *
+     * @author hejq
+     * @date 2018-01-10 19:34
+     */
+    @TaskMapping(title = "上传买家对报价信息作废的决策到平台", fixedDelay = 60000)
+    public void uploadInquiryInvalid() {
+        List<Inquiry> inquiries = jdbcTemplate.queryForBeanList("select * from InquiryAuto left join InquiryAutoDetail on id_inid=in_id left join vendor on id_vendcode=ve_code where in_status = '已作废' and in_sendStatus <> '作废已上传' and nvl(in_class,' ')<>'主动报价'  and ve_uu is not null and nvl(ve_b2benable,0)=1 and rownum <= 100 order by in_code",
+                Inquiry.class);
+        if (!CollectionUtils.isEmpty(inquiries)) {
+            ContextHolder.setDataSize(inquiries.size());
+            post("/erp/purchase/publicinquiry/invalid", dataWrap(inquiries));
+            String idStr = CollectionUtil.getKeyString(inquiries);
+            logger.info("公共询价单作废单据,ids: " + idStr);
+            jdbcTemplate.execute("update InquiryAuto set in_sendStatus='作废已上传' where in_id in (" + idStr + ")");
+        }
+    }
 }

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

@@ -146,9 +146,15 @@ public class PurchaseNotifyTask extends AbstractTask {
         return accepts;
     }
 
+    /**
+     * 收料通知单确认数查询条件增加状态'PART2VA'
+     *
+     * @author hejq
+     * @date 2018-01-11 13:39
+     */
     @TaskMapping(title = "上传收料通知修改的确认数", fixedDelay = 60000)
     public void uploadAcceptNotifyConfirm() {
-        List<AcceptNotifyConfirm> confirms = jdbcTemplate.queryForBeanList("select b2b_ss_id,and_id,and_detno,and_inqty from AcceptNotify left join vendor on an_vendcode=ve_code left join AcceptNotifyDetail on and_anid=an_id where b2b_ss_id is not null and an_statuscode in ('AUDITED','TURNVA') and and_sendstatus='待上传' and and_inqty<nvl(and_b2bqty,and_inqty) and ve_uu is not null and nvl(ve_b2benable,0)=1 order by b2b_ss_id,and_detno",
+        List<AcceptNotifyConfirm> confirms = jdbcTemplate.queryForBeanList("select b2b_ss_id,and_id,and_detno,and_inqty from AcceptNotify left join vendor on an_vendcode=ve_code left join AcceptNotifyDetail on and_anid=an_id where b2b_ss_id is not null and an_statuscode in ('AUDITED','TURNVA', 'PART2VA') and and_sendstatus='待上传' and and_inqty<nvl(and_b2bqty,and_inqty) and ve_uu is not null and nvl(ve_b2benable,0)=1 order by b2b_ss_id,and_detno",
                 AcceptNotifyConfirm.class);
         if (!CollectionUtils.isEmpty(confirms)) {
             ContextHolder.setDataSize(confirms.size());

+ 47 - 0
src/main/resources/database/template/pubInquiryReply.xml

@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8"?>
+<PLSQL>
+    <declare>
+        v_in_id number;
+        v_id_id number;
+        v_id_detno number;
+    </declare>
+    <body>
+        <iterator loop="inquiryDetails" var="detail">
+            <block>
+                -- 询价单
+                select max(in_id) into v_in_id from inquiryauto where in_code=${detail.in_code};
+                if v_in_id is null then
+                v_in_id := inquiryauto_seq.nextval;
+                insert into inquiryauto(in_id,in_code,in_date,in_recorddate,in_class,in_enddate,in_kind,in_recorder,in_prodtype,
+                in_pricetype,in_attach,in_cop,in_environment,in_purpose,in_source,in_sendstatus,in_status,in_statuscode)
+                select v_in_id,bi_code,bi_date,bi_recorddate,'公共询价',bi_enddate,bi_pricekind,bi_recorder,bi_kind,bi_pricetype,bi_attach,
+                bi_cop,bi_environment,bi_purpose,'公开询价单','已上传','已审核','AUDITED' from batchinquiry where bi_code=${detail.in_code};
+                end if;
+                -- 明细
+                select max(id_id) into v_id_id from inquiryautodetail where id_inid=v_in_id and id_vendyyzzh=${detail.id_vendyyzzh}
+                and id_prodcode=${detail.id_prodcode};
+                if v_id_id is null then
+                v_id_id := inquiryautodetail_seq.nextval;
+                select nvl(max(id_detno),0) + 1 into v_id_detno from inquiryautodetail where id_inid = v_in_id;
+                insert into inquiryautodetail(id_id,id_inid,id_detno,id_prodid,id_prodcode,id_vendname,id_vendyyzzh,id_currency,id_venduu,id_ptid)
+                select v_id_id,v_in_id,v_id_detno,pr_id,pr_code,${detail.id_vendname},${detail.id_vendyyzzh},${detail.id_currency},
+                ${detail.ve_uu},${detail.b2b_id_id} from product where pr_code=${detail.id_prodcode};
+                end if;
+                update inquiryautodetail set id_fromdate=nvl(${detail.id_fromdate}, id_myfromdate),
+                id_todate=nvl(${detail.id_todate}, id_mytodate),id_minbuyqty=${detail.id_minbuyqty},id_minqty=${detail.id_minqty},
+                id_brand=${detail.id_brand},id_vendorprodcode=${detail.id_vendorprodcode},id_leadtime=nvl(${detail.id_leadtime},0),
+                id_vendname=${detail.id_vendname},id_vendyyzzh=${detail.id_vendyyzzh},id_rate=nvl(${detail.id_rate},id_rate),
+                id_ptid=${detail.b2b_id_id} where id_id=v_id_id;
+                -- 分段价格
+                delete from inquiryautodetaildet where idd_idid=v_id_id;
+            </block>
+            <iterator loop="detail.dets" var="det">
+                insert into inquiryautodetaildet(idd_id,idd_idid,idd_lapqty,idd_price) values (inquiryautodetaildet_SEQ.nextval,v_id_id,
+                ${det.idd_lapqty},${det.idd_price});
+                if ${det.idd_lapqty} is null or ${det.idd_lapqty} = 0 then
+                update inquiryautodetail set id_status='已报价',id_lapqty=0,id_price=${det.idd_price} where id_id=v_id_id;
+                end if;
+            </iterator>
+        </iterator>
+    </body>
+</PLSQL>

+ 1 - 1
src/main/resources/logback.xml

@@ -38,7 +38,7 @@
         <appender-ref ref="DB" />
     </logger>
 
-    <root level="INFO">
+    <root level="DEBUG">
         <appender-ref ref="ROLLING" />
         <appender-ref ref="STDOUT" />
     </root>