Ver código fonte

采购验收单上传

chenw 7 anos atrás
pai
commit
be5dcd9d7c

+ 4 - 0
applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/po/BillCodeSeq.java

@@ -64,6 +64,10 @@ public enum  BillCodeSeq {
 
     PURCHASEEND("采购单结案", "PURCHASEEND"),
 
+    PURCHASEINRES("采购验收单反过账","PURCHASEINRES"),
+
+    PURCHASEOUTRES("采购验退单反过账","PURCHASEINRES"),
+
     APCHECK("对账单", "APCHECK");
 
 

+ 35 - 0
applications/purchase/purchase-api/src/main/java/com/usoftchina/saas/purchase/api/ProdInOutApi.java

@@ -0,0 +1,35 @@
+package com.usoftchina.saas.purchase.api;
+
+import com.usoftchina.saas.auth.client.interceptor.ServiceFeignInterceptor;
+import com.usoftchina.saas.base.Result;
+import com.usoftchina.saas.purchase.dto.ProdInOutFormDTO;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+/**
+ * @Author chenwei
+ * @Date 2019/01/16
+ */
+@FeignClient(name = "purchase-server", configuration = ServiceFeignInterceptor.class)
+public interface ProdInOutApi {
+
+    /**
+     * 获取出入库单表单
+     *
+     * @return
+     */
+    @GetMapping("/prodinout/read/{id}")
+    Result<ProdInOutFormDTO> getProdFormData(@PathVariable("id") Long id);
+
+    /**
+     * 更新采购出入库单B2B上传状态
+     * @param id
+     * @param status
+     * @return
+     */
+    @PostMapping("/prodinout/b2bStatus/update")
+    Result updateB2BStatus(@RequestParam("id") Long id, @RequestParam("status") String status);
+}

+ 2 - 1
applications/purchase/purchase-api/src/main/java/com/usoftchina/saas/purchase/api/PurchaseApi.java

@@ -3,6 +3,7 @@ package com.usoftchina.saas.purchase.api;
 import com.usoftchina.saas.auth.client.interceptor.ServiceFeignInterceptor;
 import com.usoftchina.saas.base.Result;
 import com.usoftchina.saas.commons.dto.DocBaseDTO;
+import com.usoftchina.saas.purchase.dto.ProdInOutFormDTO;
 import com.usoftchina.saas.purchase.dto.PurchaseFormDTO;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.*;
@@ -26,6 +27,6 @@ public interface PurchaseApi {
      * @param status
      * @return
      */
-    @PostMapping("/b2bStatus/update")
+    @PostMapping("/purchase/b2bStatus/update")
     Result updateB2BStatus(@RequestParam("id") Long id, @RequestParam("status") String status);
 }

+ 41 - 0
applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/service/impl/ProdInOutServiceImpl.java

@@ -7,6 +7,7 @@ import com.usoftchina.saas.base.service.CommonBaseServiceImpl;
 import com.usoftchina.saas.commons.api.CommonService;
 import com.usoftchina.saas.commons.api.MaxnumberService;
 import com.usoftchina.saas.commons.api.MessageLogService;
+import com.usoftchina.saas.commons.cache.ConfigsCache;
 import com.usoftchina.saas.commons.dto.BatchDealBaseDTO;
 import com.usoftchina.saas.commons.dto.DocBaseDTO;
 import com.usoftchina.saas.commons.dto.ListReqDTO;
@@ -28,6 +29,8 @@ import com.usoftchina.saas.purchase.po.ProdIODetail;
 import com.usoftchina.saas.purchase.po.ProdInOut;
 import com.usoftchina.saas.purchase.po.ProdInOutList;
 import com.usoftchina.saas.purchase.service.ProdInOutService;
+import com.usoftchina.saas.transfers.api.SendMessageApi;
+import com.usoftchina.saas.transfers.dto.MessageInfo;
 import com.usoftchina.saas.utils.BeanMapper;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -60,6 +63,8 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
     private MaxnumberService maxnumberService;
     @Autowired
     private CommonService commonService;
+    @Autowired
+    private SendMessageApi sendMessageApi;
 
     @Override
     public PageInfo homepageList(@PageDefault(size = 10) PageRequest page, ListReqDTO req) {
@@ -303,6 +308,24 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
             DocBaseDTO docBaseDTO = getBaseDTOById(prodInOutDTO.getId(),pi_class,prodInOutDTO.getPi_inoutno());
             //日志
             messageLogService.audit(docBaseDTO);
+            //上传到B2B
+            uploadToB2B(prodInOutDTO);
+        }
+    }
+
+    /**
+     * 采购验收/验退过账后上传至B2B
+     * @param prodInOutDTO
+     */
+    private void uploadToB2B(ProdInOutDTO prodInOutDTO) {
+        if (ConfigsCache.current().enableB2B()){
+            MessageInfo messageInfo = null;
+            if ("采购验收单".equals(prodInOutDTO.getPi_class())){
+                messageInfo = new MessageInfo(BaseContextHolder.getUserId(), BillCodeSeq.PURCHASEIN.name(), String.valueOf(prodInOutDTO.getId()), BaseContextHolder.getCompanyId());
+            } else if ("采购验退单".equals(prodInOutDTO.getPi_class())){
+                messageInfo = new MessageInfo(BaseContextHolder.getUserId(), BillCodeSeq.PURCHASEOUT.name(), String.valueOf(prodInOutDTO.getId()), BaseContextHolder.getCompanyId());
+            }
+            sendMessageApi.sendMsg(messageInfo);
         }
     }
 
@@ -356,6 +379,24 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
             DocBaseDTO docBaseDTO = getBaseDTOById(prodInOutDTO.getId(),pi_class,prodInOutDTO.getPi_inoutno());
             //日志
             messageLogService.unAudit(docBaseDTO);
+            //上传至B2B
+            uploadResToB2B(prodInOutDTO);
+        }
+    }
+
+    /**
+     * 采购验收/验退反过账上传至B2B
+     * @param prodInOutDTO
+     */
+    private void uploadResToB2B(ProdInOutDTO prodInOutDTO) {
+        if (ConfigsCache.current().enableB2B()){
+            MessageInfo messageInfo = null;
+            if ("采购验收单".equals(prodInOutDTO.getPi_class())){
+                messageInfo = new MessageInfo(BaseContextHolder.getUserId(), BillCodeSeq.PURCHASEINRES.name(), String.valueOf(prodInOutDTO.getId()), BaseContextHolder.getCompanyId());
+            } else if ("采购验退单".equals(prodInOutDTO.getPi_class())){
+                messageInfo = new MessageInfo(BaseContextHolder.getUserId(), BillCodeSeq.PURCHASEOUTRES.name(), String.valueOf(prodInOutDTO.getId()), BaseContextHolder.getCompanyId());
+            }
+            sendMessageApi.sendMsg(messageInfo);
         }
     }
 

+ 207 - 0
applications/transfers/mall-api/src/main/java/com/usoftchina/saas/inquiry/po/purchase/PurchaseProdInOut.java

@@ -0,0 +1,207 @@
+package com.usoftchina.saas.inquiry.po.purchase;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Author chenwei
+ * @Date 2019/01/16
+ */
+public class PurchaseProdInOut implements Serializable {
+
+    /**
+     * erp出入库单据的id
+     */
+    private Long pi_id;
+
+    /**
+     * erp出入库单据单号
+     */
+    private String pi_inoutno;
+
+    /**
+     * 供应商UU
+     */
+    private Long pi_vendoruu;
+
+    /**
+     * 币别
+     */
+    private String pi_currency;
+
+    /**
+     * 汇率
+     */
+    private Float pi_rate;
+
+    /**
+     * 付款方式
+     */
+    private String pi_payment;
+
+    /**
+     * 运输方式
+     */
+    private String pi_transport;
+
+    /**
+     * 备注
+     */
+    private String pi_remark;
+
+    /**
+     * 过账人
+     */
+    private String pi_inoutman;
+
+    /**
+     * 过账日期
+     */
+    private Date pi_date;
+
+    /**
+     * 送货单号
+     */
+    private String pi_sendcode;
+
+    /**
+     * 应付供应商名
+     */
+    private String pi_receivename;
+
+    /**
+     * 应付供应商编号
+     */
+    private String pi_receivecode;
+
+    /**
+     * 明细
+     */
+    private List<PurchaseProdInOutDetail> details;
+
+    /**
+     * b2bId
+     */
+    private Long pi_b2b_id;
+
+    public Long getPi_id() {
+        return pi_id;
+    }
+
+    public void setPi_id(Long pi_id) {
+        this.pi_id = pi_id;
+    }
+
+    public String getPi_inoutno() {
+        return pi_inoutno;
+    }
+
+    public void setPi_inoutno(String pi_inoutno) {
+        this.pi_inoutno = pi_inoutno;
+    }
+
+    public Long getPi_vendoruu() {
+        return pi_vendoruu;
+    }
+
+    public void setPi_vendoruu(Long pi_vendoruu) {
+        this.pi_vendoruu = pi_vendoruu;
+    }
+
+    public String getPi_currency() {
+        return pi_currency;
+    }
+
+    public void setPi_currency(String pi_currency) {
+        this.pi_currency = pi_currency;
+    }
+
+    public Float getPi_rate() {
+        return pi_rate;
+    }
+
+    public void setPi_rate(Float pi_rate) {
+        this.pi_rate = pi_rate;
+    }
+
+    public String getPi_payment() {
+        return pi_payment;
+    }
+
+    public void setPi_payment(String pi_payment) {
+        this.pi_payment = pi_payment;
+    }
+
+    public String getPi_transport() {
+        return pi_transport;
+    }
+
+    public void setPi_transport(String pi_transport) {
+        this.pi_transport = pi_transport;
+    }
+
+    public String getPi_remark() {
+        return pi_remark;
+    }
+
+    public void setPi_remark(String pi_remark) {
+        this.pi_remark = pi_remark;
+    }
+
+    public String getPi_inoutman() {
+        return pi_inoutman;
+    }
+
+    public void setPi_inoutman(String pi_inoutman) {
+        this.pi_inoutman = pi_inoutman;
+    }
+
+    public Date getPi_date() {
+        return pi_date;
+    }
+
+    public void setPi_date(Date pi_date) {
+        this.pi_date = pi_date;
+    }
+
+    public String getPi_sendcode() {
+        return pi_sendcode;
+    }
+
+    public void setPi_sendcode(String pi_sendcode) {
+        this.pi_sendcode = pi_sendcode;
+    }
+
+    public String getPi_receivename() {
+        return pi_receivename;
+    }
+
+    public void setPi_receivename(String pi_receivename) {
+        this.pi_receivename = pi_receivename;
+    }
+
+    public String getPi_receivecode() {
+        return pi_receivecode;
+    }
+
+    public void setPi_receivecode(String pi_receivecode) {
+        this.pi_receivecode = pi_receivecode;
+    }
+
+    public List<PurchaseProdInOutDetail> getDetails() {
+        return details;
+    }
+
+    public void setDetails(List<PurchaseProdInOutDetail> details) {
+        this.details = details;
+    }
+
+    public Long getPi_b2b_id() {
+        return pi_b2b_id;
+    }
+
+    public void setPi_b2b_id(Long pi_b2b_id) {
+        this.pi_b2b_id = pi_b2b_id;
+    }
+}

+ 132 - 0
applications/transfers/mall-api/src/main/java/com/usoftchina/saas/inquiry/po/purchase/PurchaseProdInOutDetail.java

@@ -0,0 +1,132 @@
+package com.usoftchina.saas.inquiry.po.purchase;
+
+import java.io.Serializable;
+
+/**
+ * @Author chenwei
+ * @Date 2019/01/16
+ */
+public class PurchaseProdInOutDetail implements Serializable {
+
+    private Long pd_id;//id
+    private Short pd_detno;//明细行序号
+    private String pd_ordercode;//采购单编号
+    private Short pd_orderdetno;//采购单明细行号
+    private Double pd_inqty;//入库数量
+    private Double pd_outqty;//出库数量
+    private Double pd_orderprice;//采购成本
+    private Double pd_taxrate;//税率
+    private String pd_batchcode;//批号
+    private String pd_remark;//备注
+    private String pd_prodcode;//物料编号
+    private String pd_whname;//仓库名称
+
+    /**
+     * 平台送货单明细id
+     */
+    private Long b2b_si_id;
+
+    public Long getPd_id() {
+        return pd_id;
+    }
+
+    public void setPd_id(Long pd_id) {
+        this.pd_id = pd_id;
+    }
+
+    public Short getPd_detno() {
+        return pd_detno;
+    }
+
+    public void setPd_detno(Short pd_detno) {
+        this.pd_detno = pd_detno;
+    }
+
+    public String getPd_ordercode() {
+        return pd_ordercode;
+    }
+
+    public void setPd_ordercode(String pd_ordercode) {
+        this.pd_ordercode = pd_ordercode;
+    }
+
+    public Short getPd_orderdetno() {
+        return pd_orderdetno;
+    }
+
+    public void setPd_orderdetno(Short pd_orderdetno) {
+        this.pd_orderdetno = pd_orderdetno;
+    }
+
+    public Double getPd_inqty() {
+        return pd_inqty;
+    }
+
+    public void setPd_inqty(Double pd_inqty) {
+        this.pd_inqty = pd_inqty;
+    }
+
+    public Double getPd_outqty() {
+        return pd_outqty;
+    }
+
+    public void setPd_outqty(Double pd_outqty) {
+        this.pd_outqty = pd_outqty;
+    }
+
+    public Double getPd_orderprice() {
+        return pd_orderprice;
+    }
+
+    public void setPd_orderprice(Double pd_orderprice) {
+        this.pd_orderprice = pd_orderprice;
+    }
+
+    public Double getPd_taxrate() {
+        return pd_taxrate;
+    }
+
+    public void setPd_taxrate(Double pd_taxrate) {
+        this.pd_taxrate = pd_taxrate;
+    }
+
+    public String getPd_batchcode() {
+        return pd_batchcode;
+    }
+
+    public void setPd_batchcode(String pd_batchcode) {
+        this.pd_batchcode = pd_batchcode;
+    }
+
+    public String getPd_remark() {
+        return pd_remark;
+    }
+
+    public void setPd_remark(String pd_remark) {
+        this.pd_remark = pd_remark;
+    }
+
+    public String getPd_prodcode() {
+        return pd_prodcode;
+    }
+
+    public void setPd_prodcode(String pd_prodcode) {
+        this.pd_prodcode = pd_prodcode;
+    }
+
+    public String getPd_whname() {
+        return pd_whname;
+    }
+
+    public void setPd_whname(String pd_whname) {
+        this.pd_whname = pd_whname;
+    }
+
+    public Long getB2b_si_id() {
+        return b2b_si_id;
+    }
+
+    public void setB2b_si_id(Long b2b_si_id) {
+        this.b2b_si_id = b2b_si_id;
+    }
+}

+ 85 - 4
applications/transfers/transfers-server/src/main/java/com/usoftchina/saas/transfers/task/SendPurchaseInTask.java

@@ -1,14 +1,95 @@
 package com.usoftchina.saas.transfers.task;
 
+import com.usoftchina.saas.account.api.AccountApi;
+import com.usoftchina.saas.account.api.CompanyApi;
+import com.usoftchina.saas.account.dto.AccountDTO;
+import com.usoftchina.saas.account.dto.CompanyDTO;
+import com.usoftchina.saas.inquiry.po.purchase.PurchaseProdInOut;
+import com.usoftchina.saas.inquiry.po.purchase.PurchaseProdInOutDetail;
+import com.usoftchina.saas.purchase.api.ProdInOutApi;
+import com.usoftchina.saas.purchase.dto.ProdIODetailDTO;
+import com.usoftchina.saas.purchase.dto.ProdInOutDTO;
+import com.usoftchina.saas.purchase.dto.ProdInOutFormDTO;
+import com.usoftchina.saas.transfers.config.B2BConfig;
 import com.usoftchina.saas.transfers.dto.MessageInfo;
+import com.usoftchina.saas.utils.BeanMapper;
+import com.usoftchina.saas.utils.JsonUtils;
+import com.usoftchina.saas.utils.http.HttpUtil;
+import com.usoftchina.saas.utils.http.HttpUtil.Response;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.math.BigDecimal;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 /**
- * @author: guq
- * @create: 2019-01-08 13:53
+ * 采购验收单上传
+ * @author: chenwei
+ * @create: 2019-01-016 16:53
  **/
 public class SendPurchaseInTask extends Executable{
+
+    @Autowired
+    private CompanyApi companyApi;
+    @Autowired
+    private AccountApi accountApi;
+    @Autowired
+    private ProdInOutApi prodInOutApi;
+    @Autowired
+    private B2BConfig b2bConfig;
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(SendProductTask.class);
+    private final String prodInUrl = "/erp/purchase/prodInOut";
+
     @Override
-    public void execute(MessageInfo messageInfo) {
-        //TODO
+    public void execute(MessageInfo messageInfo) throws Exception {
+        CompanyDTO companyDTO = companyApi.getCompanyById(messageInfo.getCompanyId()).getData();
+        AccountDTO accountDTO = accountApi.getAccountById(messageInfo.getUserId()).getData();
+
+        ProdInOutFormDTO prodInOutFormDTO = prodInOutApi.getProdFormData(Long.parseLong(messageInfo.getBizId())).getData();
+        ProdInOutDTO prodInOutDTO = prodInOutFormDTO.getMain();
+        PurchaseProdInOut b2bPurchaseProdInOut = BeanMapper.map(prodInOutDTO, PurchaseProdInOut.class);
+        convertToPronInOut(prodInOutDTO, b2bPurchaseProdInOut);
+
+        List<PurchaseProdInOutDetail> b2bPurchaseProdInOutDetailList = BeanMapper.mapList(prodInOutFormDTO.getItems(), PurchaseProdInOutDetail.class);
+        convertToPronInOutDetail(prodInOutFormDTO.getItems(), b2bPurchaseProdInOutDetailList);
+        b2bPurchaseProdInOut.setDetails(b2bPurchaseProdInOutDetailList);
+
+        sendProdInToB2B(b2bConfig.getCommon() + prodInUrl, Long.parseLong(messageInfo.getBizId()), JsonUtils.toJsonString(b2bPurchaseProdInOut), companyDTO.getAccessKey());
+        prodInOutApi.updateB2BStatus(Long.valueOf(messageInfo.getBizId()), "已上传");
+    }
+
+    private void convertToPronInOut(ProdInOutDTO prodInOutDTO, PurchaseProdInOut b2bPurchaseProdInOut) {
+        b2bPurchaseProdInOut.setPi_rate(new BigDecimal(prodInOutDTO.getPi_rate()).floatValue());
+        b2bPurchaseProdInOut.setPi_inoutman(prodInOutDTO.getPi_auditman());
+        b2bPurchaseProdInOut.setPi_id(prodInOutDTO.getId());
+    }
+
+    private void convertToPronInOutDetail(List<ProdIODetailDTO> items, List<PurchaseProdInOutDetail> b2bPurchaseProdInOutDetailList){
+        for (int i = 0; i < items.size(); i++) {
+            ProdIODetailDTO prodIODetailDTO = items.get(i);
+            PurchaseProdInOutDetail b2bPurchaseProdInOutDetail = b2bPurchaseProdInOutDetailList.get(i);
+            b2bPurchaseProdInOutDetail.setPd_id(prodIODetailDTO.getId());
+            b2bPurchaseProdInOutDetail.setPd_detno(new BigDecimal(prodIODetailDTO.getPd_pdno()).shortValue());
+        }
+    }
+
+    /**
+     * 发送http请求
+     * @param bizId
+     * @param data
+     * @param accessSecretKey
+     * @throws Exception
+     */
+    private void sendProdInToB2B(String url, Long bizId, String data, String accessSecretKey) throws Exception {
+        Map<String, String> params = new HashMap<String, String>();
+        params.put("data", JsonUtils.toJsonString(data));
+        Response response = HttpUtil.sendPostRequest(url, params, true, accessSecretKey);
+        if (response.getStatusCode() == 200){
+            prodInOutApi.updateB2BStatus(bizId, "已上传");
+        }
     }
 }