Эх сурвалжийг харах

Merge branch 'dev' of ssh://10.10.100.21/source/saas-platform into dev

rainco 7 жил өмнө
parent
commit
32b08e3cb0
35 өөрчлөгдсөн 1114 нэмэгдсэн , 80 устгасан
  1. 1 1
      applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/exception/BizExceptionCode.java
  2. 4 0
      applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/po/BillCodeSeq.java
  3. 4 0
      applications/commons/commons-server/pom.xml
  4. 3 0
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/impl/ConfigsServiceImpl.java
  5. 2 0
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/impl/SystemRemindServiceImpl.java
  6. 6 4
      applications/document/document-api/src/main/java/com/usoftchina/saas/document/api/VendorApi.java
  7. 27 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/ProductServiceImpl.java
  8. 35 0
      applications/purchase/purchase-api/src/main/java/com/usoftchina/saas/purchase/api/ProdInOutApi.java
  9. 2 1
      applications/purchase/purchase-api/src/main/java/com/usoftchina/saas/purchase/api/PurchaseApi.java
  10. 13 1
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/controller/ProdInOutController.java
  11. 2 0
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/po/ProdInOut.java
  12. 7 0
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/service/ProdInOutService.java
  13. 49 0
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/service/impl/ProdInOutServiceImpl.java
  14. 3 0
      applications/purchase/purchase-server/src/main/resources/mapper/ProdInOutMapper.xml
  15. 4 1
      applications/transfers/mall-api/src/main/java/com/usoftchina/saas/inquiry/api/InquiryApi.java
  16. 72 0
      applications/transfers/mall-api/src/main/java/com/usoftchina/saas/inquiry/api/InquiryApiFallback.java
  17. 207 0
      applications/transfers/mall-api/src/main/java/com/usoftchina/saas/inquiry/po/purchase/PurchaseProdInOut.java
  18. 132 0
      applications/transfers/mall-api/src/main/java/com/usoftchina/saas/inquiry/po/purchase/PurchaseProdInOutDetail.java
  19. 1 1
      applications/transfers/transfers-api/src/main/java/com/usoftchina/saas/transfers/api/SendMessageApi.java
  20. 0 19
      applications/transfers/transfers-api/src/main/java/com/usoftchina/saas/transfers/api/SendMessageApiFallBack.java
  21. 9 3
      applications/transfers/transfers-server/src/main/java/com/usoftchina/saas/transfers/service/ReceiveService.java
  22. 6 20
      applications/transfers/transfers-server/src/main/java/com/usoftchina/saas/transfers/task/SendPurchaseEndTask.java
  23. 77 0
      applications/transfers/transfers-server/src/main/java/com/usoftchina/saas/transfers/task/SendPurchaseInResTask.java
  24. 73 4
      applications/transfers/transfers-server/src/main/java/com/usoftchina/saas/transfers/task/SendPurchaseInTask.java
  25. 76 0
      applications/transfers/transfers-server/src/main/java/com/usoftchina/saas/transfers/task/SendPurchaseOutResTask.java
  26. 67 4
      applications/transfers/transfers-server/src/main/java/com/usoftchina/saas/transfers/task/SendPurchaseOutTask.java
  27. 49 20
      applications/transfers/transfers-server/src/main/java/com/usoftchina/saas/transfers/task/SendPurchaseTask.java
  28. 35 0
      applications/transfers/transfers-server/src/main/java/com/usoftchina/saas/transfers/utils/SendUtil.java
  29. 3 0
      applications/transfers/transfers-server/src/main/resources/application.yml
  30. 94 0
      applications/transfers/transfers-server/src/test/java/com/usoftchina/saas/transfers/task/SendTaskTest.java
  31. 8 0
      base-servers/account/account-api/src/main/java/com/usoftchina/saas/account/api/AccountApi.java
  32. 11 0
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/controller/AccountController.java
  33. 1 0
      frontend/saas-web/app/view/home/HomeController.js
  34. 1 1
      frontend/saas-web/app/view/money/report/TotalRecDetail.js
  35. 30 0
      frontend/saas-web/app/view/purchase/deviceQuery/DataList.js

+ 1 - 1
applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/exception/BizExceptionCode.java

@@ -83,7 +83,7 @@ public enum BizExceptionCode implements BaseExceptionCode {
     PURCHASE_DETAIL_OVERNUM(70001, "明细行数量超过来源采购验收单明细行数量"),
     PURCHASE_ORDER_HASAUDIT(70002, "存在已审核单据,单据编号:%s"),
     PURCHASE_ORDER_HASUNAUDIT(70003, "存在未审核单据,单据编号:%s"),
-    PURCHASE_ORDER_HASUPLOAD(70004, "采购单已上传B2B,不允许反审核"),
+    PURCHASE_ORDER_HASUPLOAD(70004, "已上传优软商务平台的采购订单不允许反审核,如交易信息发生变更请关闭该订单重新新增订单"),
 
 
     //销售

+ 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");
 
 

+ 4 - 0
applications/commons/commons-server/pom.xml

@@ -35,6 +35,10 @@
           <groupId>com.usoftchina.saas</groupId>
           <artifactId>document-api</artifactId>
         </dependency>
+        <dependency>
+          <groupId>com.usoftchina.saas</groupId>
+          <artifactId>commons-api</artifactId>
+        </dependency>
         <!-- db -->
         <dependency>
             <groupId>mysql</groupId>

+ 3 - 0
applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/impl/ConfigsServiceImpl.java

@@ -2,6 +2,7 @@ package com.usoftchina.saas.commons.service.impl;
 
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import com.usoftchina.saas.commons.cache.ConfigsCache;
 import com.usoftchina.saas.commons.dto.DocBaseDTO;
 import com.usoftchina.saas.commons.dto.ListReqDTO;
 import com.usoftchina.saas.commons.mapper.ConfigsMapper;
@@ -131,5 +132,7 @@ public class ConfigsServiceImpl implements ConfigsService{
         DocBaseDTO baseDTO = new DocBaseDTO(null, "", "Configs");
         //日志记录
         messageLogService.update(baseDTO);
+        //清除configs缓存
+        ConfigsCache.current().hdel();
     }
 }

+ 2 - 0
applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/impl/SystemRemindServiceImpl.java

@@ -100,6 +100,8 @@ public class SystemRemindServiceImpl implements SystemRemindService {
                 accountApi.bindCompany(accountDTO.getId(), BaseContextHolder.getCompanyId());
                 //绑定角色
                 accountApi.bindRoles(accountDTO.getId(), addApplyDTO.getRoles());
+                //账户缓存清除
+                accountApi.clearCache(accountDTO.getId());
             }
         }
         //更新申请单状态

+ 6 - 4
applications/document/document-api/src/main/java/com/usoftchina/saas/document/api/VendorApi.java

@@ -3,9 +3,11 @@ package com.usoftchina.saas.document.api;
 import com.usoftchina.saas.auth.client.interceptor.ServiceFeignInterceptor;
 import com.usoftchina.saas.base.Result;
 import com.usoftchina.saas.document.dto.VendorDTO;
+import com.usoftchina.saas.document.dto.VendorListDTO;
 import com.usoftchina.saas.page.PageRequest;
 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.RequestParam;
 
 import java.util.List;
@@ -14,10 +16,10 @@ import java.util.List;
 public interface VendorApi {
 
     /**
-     * 查询Vendors
-     * @param condition
+     * 通过供应商ID查找  供应商主从表数据
+     * @param id
      * @return
      */
-    /*@GetMapping("/api/document/vendor/getVendorsByCondition")
-    public List<VendorDTO> getVendorsByCondition(@RequestParam(value = "page") PageRequest page, @RequestParam(value = "condition") String condition);*/
+    @GetMapping("/read/{id}")
+    Result<VendorListDTO> getDataById(@PathVariable("id") Long id);
 }

+ 27 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/ProductServiceImpl.java

@@ -161,6 +161,9 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
                 validEnableUpdateCode(product.getId());
             }
 
+            //上传至B2B
+            uploadChangeToB2B(product);
+
             //明细数据有更新/插入动作
             if (productDetailList.size() > 0){
                 //物料发生过除库存初始化外的出入库单时,不能新增,修改,删除
@@ -222,6 +225,21 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
         return docBaseDTO;
     }
 
+    /**
+     * 物料规格/型号/品牌三者任何一个发生变化时,将物料的B2B上传状态更新为 "待上传",
+     * 用户在下一次点击上传产品库时一起上传至B2B
+     * @param product
+     */
+    private void uploadChangeToB2B(Product product) {
+        if (ConfigsCache.current().enableB2B()){
+            Product oldProduct = getMapper().selectByPrimaryKey(product.getId());
+            if (!oldProduct.getPr_spec().equals(product.getPr_spec()) || !oldProduct.getPr_orispeccode().equals(product.getPr_orispeccode())
+                || !oldProduct.getPr_brand().equals(product.getPr_brand())){
+                updateB2BStatus(String.valueOf(product.getId()), "待上传");
+            }
+        }
+    }
+
     /**
      * 校验明细仓库是否重复
      * @param productDetailList
@@ -756,8 +774,17 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
     public void uploadToB2B() {
         boolean enable = ConfigsCache.current().enableB2B();
         if (enable) {
+            //生成消息
             MessageInfo messageInfo = new MessageInfo(BaseContextHolder.getUserId(), BillCodeSeq.PRODUCT.name(), "", BaseContextHolder.getCompanyId());
             sendMessageApi.sendMsg(messageInfo);
+            //更新状态为  上传中
+            List<ProductUploadDTO> productUploadDTOList = getMapper().selectUploadProdByCompanyId(BaseContextHolder.getCompanyId());
+            StringBuilder sb = new StringBuilder();
+            Iterator<ProductUploadDTO> it = productUploadDTOList.iterator();
+            while (it.hasNext()){
+                sb.append(it.next().getPr_id() + ",");
+            }
+            updateB2BStatus(sb.substring(0, sb.length() - 1), "上传中");
         }else {
             throw new BizException(BizExceptionCode.BIZ_ENABLE_B2B);
         }

+ 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);
 }

+ 13 - 1
applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/controller/ProdInOutController.java

@@ -213,6 +213,18 @@ public class ProdInOutController {
     @GetMapping("/homepageList")
     public Result homepageList(PageRequest page, ListReqDTO req){
         PageInfo pageInfo = prodInOutService.homepageList(page, req);
-         return Result.success(pageInfo);
+        return Result.success(pageInfo);
+    }
+
+    /**
+     * 更新B2B上传状态
+     * @param id
+     * @param status
+     * @return
+     */
+    @PostMapping("/b2bStatus/update")
+    public Result updateB2BStatus(@RequestParam("id") Long id, @RequestParam("status") String status){
+        prodInOutService.updateB2BStatus(id, status);
+        return Result.success();
     }
 }

+ 2 - 0
applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/po/ProdInOut.java

@@ -92,4 +92,6 @@ public class ProdInOut extends CommonBaseEntity implements Serializable {
     private String pi_seller;
 
     private Double pi_rate;
+
+    private String b2bStatus;
 }

+ 7 - 0
applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/service/ProdInOutService.java

@@ -85,4 +85,11 @@ public interface ProdInOutService extends CommonBaseService<ProdInOutMapper, Pro
     void getDefaultWarehouseByProduct(Long pi_id);
 
     PageInfo homepageList(PageRequest page, ListReqDTO req);
+
+    /**
+     * 更新B2B上传状态
+     * @param id
+     * @param status
+     */
+    void updateB2BStatus(Long id, String status);
 }

+ 49 - 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) {
@@ -76,6 +81,14 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
         return pageInfo;
     }
 
+    @Override
+    public void updateB2BStatus(Long id, String status) {
+        ProdInOut prodInOut = new ProdInOut();
+        prodInOut.setId(id);
+        prodInOut.setB2bStatus(status);
+        getMapper().updateByPrimaryKeySelective(prodInOut);
+    }
+
     @Override
     public PageInfo<ProdInOutList> getListData(PageRequest page, ListReqDTO req) {
         //设置默认分页
@@ -303,6 +316,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 +387,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);
         }
     }
 

+ 3 - 0
applications/purchase/purchase-server/src/main/resources/mapper/ProdInOutMapper.xml

@@ -461,6 +461,9 @@
       <if test="pi_rate != null">
         pi_rate = #{pi_rate,jdbcType=VARCHAR},
       </if>
+      <if test="b2bStatus != null">
+        b2bStatus = #{b2bStatus,jdbcType=VARCHAR},
+      </if>
     </set>
     where pi_id = #{id,jdbcType=INTEGER}
   </update>

+ 4 - 1
applications/transfers/mall-api/src/main/java/com/usoftchina/saas/inquiry/api/InquiryApi.java

@@ -1,11 +1,14 @@
 package com.usoftchina.saas.inquiry.api;
 
+import com.usoftchina.saas.exception.BizException;
+import com.usoftchina.saas.exception.ExceptionCode;
 import com.usoftchina.saas.inquiry.po.inquiry.*;
 import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.stereotype.Component;
 import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.*;
 
-@FeignClient(url = "${b2b.baseUrl.inquiry}", name = "inquiry-server")
+@FeignClient(url = "${b2b.baseUrl.inquiry}", name = "inquiry-server"/*, fallback = InquiryApiFallback.class*/)
 @RequestMapping("/inquiry")
 public interface InquiryApi {
 

+ 72 - 0
applications/transfers/mall-api/src/main/java/com/usoftchina/saas/inquiry/api/InquiryApiFallback.java

@@ -0,0 +1,72 @@
+/*
+package com.usoftchina.saas.inquiry.api;
+
+import com.usoftchina.saas.exception.BizException;
+import com.usoftchina.saas.exception.ExceptionCode;
+import com.usoftchina.saas.inquiry.po.inquiry.*;
+import org.springframework.stereotype.Component;
+import org.springframework.ui.ModelMap;
+
+*/
+/**
+ * @Author chenwei
+ * @Date 2019/01/16
+ *//*
+
+@Component
+public class InquiryApiFallback implements InquiryApi {
+
+    @Override
+    public IPage<PurcInquiryItemInfo> getInquiry(int pageNumber, int pageSize, String keyword, int isLogin) {
+        //throw new BizException(ExceptionCode.SYSTEM_BUSY);
+        return null;
+    }
+
+    @Override
+    public IPage<InquiryEnRemind> findEnRemind(Long useruu, Long enuu, int pageNumber, int pageSize, Integer enableOffer, String keyword, Integer quoted, Long fromDate, Long endDate) {
+        //throw new BizException(ExceptionCode.SYSTEM_BUSY);
+        return null;
+    }
+
+    @Override
+    public IPage<InquiryRemind> findRemindByUserInfo(Long useruu, Long enuu, int pageNumber, int pageSize, Integer enableOffer, String keyword, Integer quoted, Long fromDate, Long endDate) {
+        //throw new BizException(ExceptionCode.SYSTEM_BUSY);
+        return null;
+    }
+
+    @Override
+    public ModelMap saveQuote(PublicInquiryItem publicInquiryItem) {
+        //throw new BizException(ExceptionCode.SYSTEM_BUSY);
+        return null;
+    }
+
+    @Override
+    public PurcInquiry saveInquiry(PurcInquiry inquiry) {
+        //throw new BizException(ExceptionCode.SYSTEM_BUSY);
+        return null;
+    }
+
+    @Override
+    public IPage<PurcInquiryItemInfo> getInquiryList(Long enUU, Integer overdue, int pageNumber, int pageSize, String state, Long fromDate, String keyword, Long endDate) {
+        //throw new BizException(ExceptionCode.SYSTEM_BUSY);
+        return null;
+    }
+
+    @Override
+    public IPage<PurcInquiryItemInfo> findQuotationsByPage(String state, Long enUU, int pageNumber, int pageSize, Long fromDate, String keyword, Integer overdue, Long endDate) {
+        //throw new BizException(ExceptionCode.SYSTEM_BUSY);
+        return null;
+    }
+
+    @Override
+    public void adoptQuote(Long id, Short status, Long enuu, Long useruu) {
+        //throw new BizException(ExceptionCode.SYSTEM_BUSY);
+    }
+
+    @Override
+    public void refuseQuote(Long id, Short status, Long enuu, Long useruu, String refusereason) {
+        //throw new BizException(ExceptionCode.SYSTEM_BUSY);
+    }
+
+}
+*/

+ 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;
+    }
+}

+ 1 - 1
applications/transfers/transfers-api/src/main/java/com/usoftchina/saas/transfers/api/SendMessageApi.java

@@ -7,7 +7,7 @@ import org.springframework.stereotype.Component;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 
-@FeignClient(name = "transfers-server" , fallback = SendMessageApiFallBack.class)
+@FeignClient(name = "transfers-server" , fallback = SendMessageApi.SendMessageApiFallBack.class)
 public interface SendMessageApi {
 
     @PostMapping("/send/Message")

+ 0 - 19
applications/transfers/transfers-api/src/main/java/com/usoftchina/saas/transfers/api/SendMessageApiFallBack.java

@@ -1,19 +0,0 @@
-package com.usoftchina.saas.transfers.api;
-
-import com.usoftchina.saas.base.Result;
-import com.usoftchina.saas.transfers.dto.MessageInfo;
-import org.springframework.stereotype.Component;
-import org.springframework.web.bind.annotation.RequestBody;
-
-/**
- * @author: guq
- * @create: 2019-01-09 13:50
- **/
-@Component
-public class SendMessageApiFallBack implements SendMessageApi {
-
-    @Override
-    public Result sendMsg(@RequestBody MessageInfo info) {
-        return Result.error("网络异常,请稍后重试!");
-    }
-}

+ 9 - 3
applications/transfers/transfers-server/src/main/java/com/usoftchina/saas/transfers/service/ReceiveService.java

@@ -59,16 +59,22 @@ public class ReceiveService {
                case PURCHASE:       //采购单上传
                    task = new SendPurchaseTask();
                    break;
-               case PURCHASEIN:
+               case PURCHASEIN:     //采购验收单过账
                    task = new SendPurchaseInTask();
                    break;
-               case PURCHASEOUT:
+               case PURCHASEINRES:     //采购验收单反过账
+                   task = new SendPurchaseInResTask();
+                   break;
+               case PURCHASEOUT:    //采购延退单过账
                    task = new SendPurchaseOutTask();
                    break;
+               case PURCHASEOUTRES:     //采购验收单反过账
+                   task = new SendPurchaseOutResTask();
+                   break;
                case PRODUCT:        //物料库上传
                    task = new SendProductTask();
                    break;
-               case PURCHASEEND:
+               case PURCHASEEND:    //采购单结案
                    task = new SendPurchaseEndTask();
                    break;
                default:

+ 6 - 20
applications/transfers/transfers-server/src/main/java/com/usoftchina/saas/transfers/task/SendPurchaseEndTask.java

@@ -6,20 +6,19 @@ import com.usoftchina.saas.purchase.api.PurchaseApi;
 import com.usoftchina.saas.purchase.dto.PurchaseDetailDTO;
 import com.usoftchina.saas.purchase.dto.PurchaseFormDTO;
 import com.usoftchina.saas.transfers.dto.MessageInfo;
+import com.usoftchina.saas.transfers.utils.SendUtil;
 import com.usoftchina.saas.utils.CollectionUtils;
 import com.usoftchina.saas.utils.JsonUtils;
-import com.usoftchina.saas.utils.http.HttpUtil;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
-import java.util.Map;
 
 /**
+ * 采购单结案/反结案
  * @Author chenwei
  * @Date 2019/01/15
  */
@@ -55,25 +54,12 @@ public class SendPurchaseEndTask extends Executable {
                 purchaseDetailEndList.add(purchaseDetailEnd);
             }
             //发送给b2b
-            sendPurchaseEndToB2B(purchaseEndUrl, Long.parseLong(String.valueOf(messageInfo.getBizId())),
-                    JsonUtils.toJsonString(purchaseDetailEndList), accessSecretKey);
+            boolean success = SendUtil.sendToB2B(purchaseEndUrl, JsonUtils.toJsonString(purchaseDetailEndList), accessSecretKey);
+            if (success) {
+                purchaseApi.updateB2BStatus(Long.parseLong(messageInfo.getBizId()), "已上传");
+            }
         }
 
     }
 
-    /**
-     * 发送http请求,更新上传状态
-     * @param bizId
-     * @param data
-     * @param accessSecretKey
-     * @throws Exception
-     */
-    private void sendPurchaseEndToB2B(String url, Long bizId, String data, String accessSecretKey) throws Exception {
-        Map<String, String> params = new HashMap<String, String>();
-        params.put("data", JsonUtils.toJsonString(data));
-        HttpUtil.Response response = HttpUtil.sendPostRequest(url, params, true, accessSecretKey);
-        if (response.getStatusCode() == 200){
-            purchaseApi.updateB2BStatus(bizId, "已上传");
-        }
-    }
 }

+ 77 - 0
applications/transfers/transfers-server/src/main/java/com/usoftchina/saas/transfers/task/SendPurchaseInResTask.java

@@ -0,0 +1,77 @@
+package com.usoftchina.saas.transfers.task;
+
+import com.usoftchina.saas.account.api.CompanyApi;
+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.transfers.utils.SendUtil;
+import com.usoftchina.saas.utils.BeanMapper;
+import com.usoftchina.saas.utils.JsonUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 采购验收单反过账
+ * @Author chenwei
+ * @Date 2019/01/16
+ */
+public class SendPurchaseInResTask extends Executable {
+
+    @Autowired
+    private CompanyApi companyApi;
+    @Autowired
+    private ProdInOutApi prodInOutApi;
+    @Autowired
+    private B2BConfig b2bConfig;
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(SendProductTask.class);
+    private final String prodInUrl = "/erp/purchase/prodInOut/nonPosting";
+
+    @Override
+    public void execute(MessageInfo messageInfo) throws Exception {
+        CompanyDTO companyDTO = companyApi.getCompanyById(messageInfo.getCompanyId()).getData();
+
+        ProdInOutFormDTO prodInOutFormDTO = prodInOutApi.getProdFormData(Long.parseLong(messageInfo.getBizId())).getData();
+        ProdInOutDTO prodInOutDTO = prodInOutFormDTO.getMain();
+        PurchaseProdInOut b2bPurchaseProdInOut = BeanMapper.map(prodInOutDTO, PurchaseProdInOut.class);
+        convertToPronInOut(prodInOutDTO, b2bPurchaseProdInOut);
+        LOGGER.info("ProdInOutDTO={}, PurchaseProdInOut={}", JsonUtils.toJsonString(prodInOutDTO), JsonUtils.toJsonString(b2bPurchaseProdInOut));
+
+        List<PurchaseProdInOutDetail> b2bPurchaseProdInOutDetailList = BeanMapper.mapList(prodInOutFormDTO.getItems(), PurchaseProdInOutDetail.class);
+        convertToPronInOutDetail(prodInOutFormDTO.getItems(), b2bPurchaseProdInOutDetailList);
+        b2bPurchaseProdInOut.setDetails(b2bPurchaseProdInOutDetailList);
+        LOGGER.info("ProdIODetailDTOList={}, b2bPurchaseProdInOutDetailList={}", JsonUtils.toJsonString(prodInOutFormDTO.getItems()), JsonUtils.toJsonString(b2bPurchaseProdInOutDetailList));
+
+        boolean success = SendUtil.sendToB2B(b2bConfig.getCommon() + prodInUrl, JsonUtils.toJsonString(b2bPurchaseProdInOut), companyDTO.getAccessKey());
+        if (success) {
+            LOGGER.info("采购验收单(反过账)上传成功, id={}", messageInfo.getBizId());
+            prodInOutApi.updateB2BStatus(Long.parseLong(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());
+        }
+    }
+
+}

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

@@ -1,14 +1,83 @@
 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.transfers.utils.SendUtil;
+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 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();
+
+        ProdInOutFormDTO prodInOutFormDTO = prodInOutApi.getProdFormData(Long.parseLong(messageInfo.getBizId())).getData();
+        ProdInOutDTO prodInOutDTO = prodInOutFormDTO.getMain();
+        PurchaseProdInOut b2bPurchaseProdInOut = BeanMapper.map(prodInOutDTO, PurchaseProdInOut.class);
+        convertToPronInOut(prodInOutDTO, b2bPurchaseProdInOut);
+        LOGGER.info("ProdInOutDTO={}, PurchaseProdInOut={}", JsonUtils.toJsonString(prodInOutDTO), JsonUtils.toJsonString(b2bPurchaseProdInOut));
+
+        List<PurchaseProdInOutDetail> b2bPurchaseProdInOutDetailList = BeanMapper.mapList(prodInOutFormDTO.getItems(), PurchaseProdInOutDetail.class);
+        convertToPronInOutDetail(prodInOutFormDTO.getItems(), b2bPurchaseProdInOutDetailList);
+        b2bPurchaseProdInOut.setDetails(b2bPurchaseProdInOutDetailList);
+        LOGGER.info("ProdIODetailDTOList={}, b2bPurchaseProdInOutDetailList={}", JsonUtils.toJsonString(prodInOutFormDTO.getItems()), JsonUtils.toJsonString(b2bPurchaseProdInOutDetailList));
+
+        boolean success = SendUtil.sendToB2B(b2bConfig.getCommon() + prodInUrl, JsonUtils.toJsonString(b2bPurchaseProdInOut), companyDTO.getAccessKey());
+        if (success) {
+            LOGGER.info("采购验收单上传成功, id={}", messageInfo.getBizId());
+            prodInOutApi.updateB2BStatus(Long.parseLong(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());
+        }
+    }
+
 }

+ 76 - 0
applications/transfers/transfers-server/src/main/java/com/usoftchina/saas/transfers/task/SendPurchaseOutResTask.java

@@ -0,0 +1,76 @@
+package com.usoftchina.saas.transfers.task;
+
+import com.usoftchina.saas.account.api.CompanyApi;
+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.transfers.utils.SendUtil;
+import com.usoftchina.saas.utils.BeanMapper;
+import com.usoftchina.saas.utils.JsonUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * 采购延退单反过账
+ * @Author chenwei
+ * @Date 2019/01/16
+ */
+public class SendPurchaseOutResTask extends Executable {
+    @Autowired
+    private CompanyApi companyApi;
+    @Autowired
+    private ProdInOutApi prodInOutApi;
+    @Autowired
+    private B2BConfig b2bConfig;
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(SendProductTask.class);
+    private final String prodOutUrl = "/erp/purchase/prodReturn/nonPosting";
+
+
+    @Override
+    public void execute(MessageInfo messageInfo) throws Exception {
+        CompanyDTO companyDTO = companyApi.getCompanyById(messageInfo.getCompanyId()).getData();
+
+        ProdInOutFormDTO prodInOutFormDTO = prodInOutApi.getProdFormData(Long.parseLong(messageInfo.getBizId())).getData();
+        ProdInOutDTO prodInOutDTO = prodInOutFormDTO.getMain();
+        PurchaseProdInOut b2bPurchaseProdInOut = BeanMapper.map(prodInOutDTO, PurchaseProdInOut.class);
+        convertToPronInOut(prodInOutDTO, b2bPurchaseProdInOut);
+        LOGGER.info("ProdInOutDTO={}, PurchaseProdInOut={}", JsonUtils.toJsonString(prodInOutDTO), JsonUtils.toJsonString(b2bPurchaseProdInOut));
+
+        List<PurchaseProdInOutDetail> b2bPurchaseProdInOutDetailList = BeanMapper.mapList(prodInOutFormDTO.getItems(), PurchaseProdInOutDetail.class);
+        convertToPronInOutDetail(prodInOutFormDTO.getItems(), b2bPurchaseProdInOutDetailList);
+        b2bPurchaseProdInOut.setDetails(b2bPurchaseProdInOutDetailList);
+        LOGGER.info("ProdIODetailDTOList={}, b2bPurchaseProdInOutDetailList={}", JsonUtils.toJsonString(prodInOutFormDTO.getItems()), JsonUtils.toJsonString(b2bPurchaseProdInOutDetailList));
+
+        boolean success = SendUtil.sendToB2B(b2bConfig.getCommon() + prodOutUrl, JsonUtils.toJsonString(b2bPurchaseProdInOut), companyDTO.getAccessKey());
+        if (success) {
+            LOGGER.info("采购验退单(反过账)上传成功, id={}", messageInfo.getBizId());
+            prodInOutApi.updateB2BStatus(Long.parseLong(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());
+        }
+    }
+}

+ 67 - 4
applications/transfers/transfers-server/src/main/java/com/usoftchina/saas/transfers/task/SendPurchaseOutTask.java

@@ -1,14 +1,77 @@
 package com.usoftchina.saas.transfers.task;
 
+import com.usoftchina.saas.account.api.CompanyApi;
+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.transfers.utils.SendUtil;
+import com.usoftchina.saas.utils.BeanMapper;
+import com.usoftchina.saas.utils.JsonUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.math.BigDecimal;
+import java.util.List;
 
 /**
- * @author: guq
- * @create: 2019-01-08 13:53
+ * 采购延退单上传
+ * @author: chewnei
+ * @create: 2019-01-016 18:53
  **/
 public class SendPurchaseOutTask extends Executable{
+
+    @Autowired
+    private CompanyApi companyApi;
+    @Autowired
+    private ProdInOutApi prodInOutApi;
+    @Autowired
+    private B2BConfig b2bConfig;
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(SendProductTask.class);
+    private final String prodOutUrl = "/erp/purchase/prodReturn";
+
+
     @Override
-    public void execute(MessageInfo messageInfo) {
-        //TODO
+    public void execute(MessageInfo messageInfo) throws Exception {
+        CompanyDTO companyDTO = companyApi.getCompanyById(messageInfo.getCompanyId()).getData();
+
+        ProdInOutFormDTO prodInOutFormDTO = prodInOutApi.getProdFormData(Long.parseLong(messageInfo.getBizId())).getData();
+        ProdInOutDTO prodInOutDTO = prodInOutFormDTO.getMain();
+        PurchaseProdInOut b2bPurchaseProdInOut = BeanMapper.map(prodInOutDTO, PurchaseProdInOut.class);
+        convertToPronInOut(prodInOutDTO, b2bPurchaseProdInOut);
+        LOGGER.info("ProdInOutDTO={}, PurchaseProdInOut={}", JsonUtils.toJsonString(prodInOutDTO), JsonUtils.toJsonString(b2bPurchaseProdInOut));
+
+        List<PurchaseProdInOutDetail> b2bPurchaseProdInOutDetailList = BeanMapper.mapList(prodInOutFormDTO.getItems(), PurchaseProdInOutDetail.class);
+        convertToPronInOutDetail(prodInOutFormDTO.getItems(), b2bPurchaseProdInOutDetailList);
+        b2bPurchaseProdInOut.setDetails(b2bPurchaseProdInOutDetailList);
+        LOGGER.info("ProdIODetailDTOList={}, b2bPurchaseProdInOutDetailList={}", JsonUtils.toJsonString(prodInOutFormDTO.getItems()), JsonUtils.toJsonString(b2bPurchaseProdInOutDetailList));
+
+        boolean success = SendUtil.sendToB2B(b2bConfig.getCommon() + prodOutUrl, JsonUtils.toJsonString(b2bPurchaseProdInOut), companyDTO.getAccessKey());
+        if (success) {
+            LOGGER.info("采购验退单上传成功, id={}", messageInfo.getBizId());
+            prodInOutApi.updateB2BStatus(Long.parseLong(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());
+        }
     }
 }

+ 49 - 20
applications/transfers/transfers-server/src/main/java/com/usoftchina/saas/transfers/task/SendPurchaseTask.java

@@ -1,26 +1,30 @@
 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.document.api.VendorApi;
+import com.usoftchina.saas.document.dto.VendorListDTO;
 import com.usoftchina.saas.inquiry.po.purchase.Purchase;
 import com.usoftchina.saas.inquiry.po.purchase.PurchaseDetail;
 import com.usoftchina.saas.purchase.api.PurchaseApi;
 import com.usoftchina.saas.purchase.dto.PurchaseDTO;
+import com.usoftchina.saas.purchase.dto.PurchaseDetailDTO;
 import com.usoftchina.saas.purchase.dto.PurchaseFormDTO;
 import com.usoftchina.saas.transfers.config.B2BConfig;
 import com.usoftchina.saas.transfers.dto.MessageInfo;
+import com.usoftchina.saas.transfers.utils.SendUtil;
 import com.usoftchina.saas.utils.BeanMapper;
 import com.usoftchina.saas.utils.JsonUtils;
 import com.usoftchina.saas.utils.ObjectUtils;
-import com.usoftchina.saas.utils.http.HttpUtil;
-import com.usoftchina.saas.utils.http.HttpUtil.Response;
+import com.usoftchina.saas.utils.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 
-import java.util.HashMap;
+import java.math.BigDecimal;
 import java.util.List;
-import java.util.Map;
 
 /**
  * @author: guq
@@ -31,8 +35,12 @@ public class SendPurchaseTask extends Executable {
     @Autowired
     private CompanyApi companyApi;
     @Autowired
+    private AccountApi accountApi;
+    @Autowired
     private PurchaseApi purchaseApi;
     @Autowired
+    private VendorApi vendorApi;
+    @Autowired
     private B2BConfig b2bConfig;
 
     private static final Logger LOGGER = LoggerFactory.getLogger(SendProductTask.class);
@@ -41,35 +49,56 @@ public class SendPurchaseTask extends Executable {
     @Override
     public void execute(MessageInfo messageInfo) throws Exception {
         CompanyDTO companyDTO = companyApi.getCompanyById(messageInfo.getCompanyId()).getData();
+        AccountDTO accountDTO = accountApi.getAccountById(messageInfo.getUserId()).getData();
         PurchaseFormDTO purchaseFormDTO = purchaseApi.getFormData(Long.parseLong(messageInfo.getBizId())).getData();
         if (!ObjectUtils.isEmpty(purchaseFormDTO)){
             //采购单主表数据
             PurchaseDTO purchaseDTO = purchaseFormDTO.getMain();
             Purchase b2bPurchase = BeanMapper.map(purchaseDTO, Purchase.class);
-            //b2bPurchase.setVe_uu(0L);
+            convertPurchase(purchaseDTO, b2bPurchase, accountDTO, messageInfo.getCompanyId());
+            LOGGER.info("purchaseDTO={}, b2bPurchase={}", JsonUtils.toJsonString(purchaseDTO), JsonUtils.toJsonString(b2bPurchase));
             //采购单明细表数据
             List<PurchaseDetail> b2bPurchaseDetailList = BeanMapper.mapList(purchaseFormDTO.getItems(), PurchaseDetail.class);
+            convertPurchaseDetail(purchaseFormDTO.getItems(), b2bPurchaseDetailList);
+            LOGGER.info("PurchaseDetailDTO={}, b2bPurchaseDetailList={}", JsonUtils.toJsonString(purchaseFormDTO.getItems()), JsonUtils.toJsonString(b2bPurchaseDetailList));
+
             b2bPurchase.setPurchaseDetails(b2bPurchaseDetailList);
 
-            sendPurchaseToB2B(b2bConfig.getCommon() + purchaseUrl, Long.parseLong(messageInfo.getBizId()), JsonUtils.toJsonString(b2bPurchase), companyDTO.getAccessKey());
-            purchaseApi.updateB2BStatus(Long.parseLong(messageInfo.getBizId()), "已上传");
+            boolean success = SendUtil.sendToB2B(b2bConfig.getCommon() + purchaseUrl, JsonUtils.toJsonString(b2bPurchase), companyDTO.getAccessKey());
+            if (success) {
+                purchaseApi.updateB2BStatus(Long.parseLong(messageInfo.getBizId()), "已上传");
+            }
         }
 
     }
 
-    /**
-     * 发送http请求
-     * @param bizId
-     * @param data
-     * @param accessSecretKey
-     * @throws Exception
-     */
-    private void sendPurchaseToB2B(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){
-            purchaseApi.updateB2BStatus(bizId, "已上传");
+    private void convertPurchase(PurchaseDTO purchaseDTO, Purchase b2bPurchase, AccountDTO accountDTO, Long companyId) {
+        //人员信息
+        b2bPurchase.setEm_email(accountDTO.getEmail());
+        b2bPurchase.setEm_mobile(accountDTO.getMobile());
+        b2bPurchase.setEm_name(accountDTO.getRealname());
+        b2bPurchase.setEm_uu(accountDTO.getUu());
+        VendorListDTO vendorListDTO = vendorApi.getDataById(new BigDecimal(purchaseDTO.getPu_vendid()).longValue()).getData();
+        if (!ObjectUtils.isEmpty(vendorListDTO)){
+            String uu = vendorListDTO.getMain().getVe_uu();
+            if (!StringUtils.isEmpty(uu)){
+                b2bPurchase.setVe_uu(Long.parseLong(uu));
+            }
         }
+        b2bPurchase.setPu_rate(new BigDecimal(purchaseDTO.getPu_rate()).floatValue());
+        b2bPurchase.setPu_remark(purchaseDTO.getPu_remark());
+        b2bPurchase.setPu_auditman(purchaseDTO.getPu_auditman());
+        b2bPurchase.setPu_recordman(purchaseDTO.getCreatorName());
+        b2bPurchase.setPu_shipaddresscode(purchaseDTO.getPu_shipaddresscode());
+        b2bPurchase.setPu_id(purchaseDTO.getId());
     }
+
+    private void convertPurchaseDetail(List<PurchaseDetailDTO> items, List<PurchaseDetail> b2bPurchaseDetailList){
+        for (int i = 0; i < items.size(); i++) {
+            PurchaseDetailDTO purchaseDetailDTO = items.get(i);
+            PurchaseDetail b2bPurchaseDetail = b2bPurchaseDetailList.get(i);
+            b2bPurchaseDetail.setPd_detno(new BigDecimal(purchaseDetailDTO.getPd_detno()).shortValue());
+        }
+    }
+
 }

+ 35 - 0
applications/transfers/transfers-server/src/main/java/com/usoftchina/saas/transfers/utils/SendUtil.java

@@ -0,0 +1,35 @@
+package com.usoftchina.saas.transfers.utils;
+
+import com.usoftchina.saas.utils.JsonUtils;
+import com.usoftchina.saas.utils.http.HttpUtil;
+import com.usoftchina.saas.utils.http.HttpUtil.Response;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @Description 发送请求至B2B工具类
+ * @Author chenwei
+ * @Date 2019/01/16
+ */
+public class SendUtil {
+
+    /**
+     *  发送请求给B2B
+     * @param url         URL
+     * @param data        要发送的数据
+     * @param accessSecretKey       企业秘钥
+     * @return
+     * @throws Exception
+     */
+    public static boolean sendToB2B(String url, 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){
+            return true;
+        }
+        return false;
+    }
+
+}

+ 3 - 0
applications/transfers/transfers-server/src/main/resources/application.yml

@@ -41,6 +41,9 @@ spring:
     port: 6379
   profiles:
     active: dev
+  jackson:
+    date-format: yyyy-MM-dd HH:mm:ss
+    time-zone: GMT+8
 management:
   endpoints:
     web:

+ 94 - 0
applications/transfers/transfers-server/src/test/java/com/usoftchina/saas/transfers/task/SendTaskTest.java

@@ -0,0 +1,94 @@
+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.Purchase;
+import com.usoftchina.saas.inquiry.po.purchase.PurchaseDetail;
+import com.usoftchina.saas.purchase.api.PurchaseApi;
+import com.usoftchina.saas.purchase.dto.PurchaseDTO;
+import com.usoftchina.saas.purchase.dto.PurchaseDetailDTO;
+import com.usoftchina.saas.purchase.dto.PurchaseFormDTO;
+import com.usoftchina.saas.utils.BeanMapper;
+import com.usoftchina.saas.utils.JsonUtils;
+import com.usoftchina.saas.utils.ObjectUtils;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * @Author chenwei
+ * @Date 2019/01/16
+ */
+@SpringBootTest
+@RunWith(SpringJUnit4ClassRunner.class)
+@EnableAutoConfiguration
+public class SendTaskTest {
+
+    @Autowired
+    private PurchaseApi purchaseApi;
+    @Autowired
+    private AccountApi accountApi;
+    @Autowired
+    private CompanyApi companyApi;
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(SendTaskTest.class);
+
+    @Test
+    public void testA_purchaseTask(){
+
+        AccountDTO accountDTO = accountApi.getAccountById(67L).getData();
+        PurchaseFormDTO purchaseFormDTO = purchaseApi.getFormData(169L).getData();
+        if (!ObjectUtils.isEmpty(purchaseFormDTO)){
+            //采购单主表数据
+            PurchaseDTO purchaseDTO = purchaseFormDTO.getMain();
+            Purchase b2bPurchase = BeanMapper.map(purchaseDTO, Purchase.class);
+            convertPurchase(purchaseDTO, b2bPurchase, accountDTO);
+            LOGGER.info("purchaseDTO={}, b2bPurchase={}", JsonUtils.toJsonString(purchaseDTO), JsonUtils.toJsonString(b2bPurchase));
+
+            //采购单明细表数据
+            List<PurchaseDetail> b2bPurchaseDetailList = BeanMapper.mapList(purchaseFormDTO.getItems(), PurchaseDetail.class);
+            convertPurchaseDetail(purchaseFormDTO.getItems(), b2bPurchaseDetailList);
+            b2bPurchase.setPurchaseDetails(b2bPurchaseDetailList);
+
+            LOGGER.info("PurchaseDetailDTO={}, b2bPurchaseDetailList={}", JsonUtils.toJsonString(purchaseFormDTO.getItems()), JsonUtils.toJsonString(b2bPurchaseDetailList));
+
+        }
+    }
+
+    private void convertPurchase(PurchaseDTO purchaseDTO, Purchase b2bPurchase, AccountDTO accountDTO) {
+        //人员信息
+        b2bPurchase.setEm_email(accountDTO.getEmail());
+        b2bPurchase.setEm_mobile(accountDTO.getMobile());
+        b2bPurchase.setEm_name(accountDTO.getRealname());
+        b2bPurchase.setEm_uu(accountDTO.getUu());
+
+        CompanyDTO companyDTO = companyApi.getCompanyById(1L).getData();
+        b2bPurchase.setPu_cop(companyDTO.getName());
+        //b2bPurchase.setVe_uu(ObjectUtils.getLongValue(purchaseDTO.getPu_venduu()));
+        b2bPurchase.setPu_rate(new BigDecimal(purchaseDTO.getPu_rate()).floatValue());
+        b2bPurchase.setPu_remark(purchaseDTO.getPu_remark());
+        b2bPurchase.setPu_auditman(purchaseDTO.getPu_auditman());
+        b2bPurchase.setPu_recordman(purchaseDTO.getCreatorName());
+        b2bPurchase.setPu_shipaddresscode(purchaseDTO.getPu_shipaddresscode());
+        b2bPurchase.setPu_id(purchaseDTO.getId());
+    }
+
+    private void convertPurchaseDetail(List<PurchaseDetailDTO> items, List<PurchaseDetail> b2bPurchaseDetailList){
+        for (int i = 0; i < items.size(); i++) {
+            PurchaseDetailDTO purchaseDetailDTO = items.get(i);
+            PurchaseDetail b2bPurchaseDetail = b2bPurchaseDetailList.get(i);
+            b2bPurchaseDetail.setPd_detno(new BigDecimal(purchaseDetailDTO.getPd_detno()).shortValue());
+        }
+    }
+
+}

+ 8 - 0
base-servers/account/account-api/src/main/java/com/usoftchina/saas/account/api/AccountApi.java

@@ -116,4 +116,12 @@ public interface AccountApi {
     */
     @PostMapping("/account/updatePassword")
     Result updatePassword(@RequestBody CookieInfo info);
+
+    /**
+     * 账户缓存清除
+     * @param id    账户ID
+     * @return
+     */
+    @GetMapping("/account/cache/clear/{id}")
+    Result clearCache(@PathVariable("id") Long id);
 }

+ 11 - 0
base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/controller/AccountController.java

@@ -491,6 +491,17 @@ public class AccountController {
         return Result.success();
     }
 
+    /**
+     * 清除指定账户的缓存
+     * @param id
+     * @return
+     */
+    @GetMapping("/cache/clear/{id}")
+    public Result clearCache(@PathVariable("id") Long id){
+        accountService.clearCache(id);
+        return Result.success();
+    }
+
     /**
      * 分享加入
      * @param shareAddDTO

+ 1 - 0
frontend/saas-web/app/view/home/HomeController.js

@@ -73,6 +73,7 @@ Ext.define('saas.view.home.HomeController', {
                                 .then(function(localJson) {
                                     if(localJson.success){
                                         saas.util.BaseUtil.showSuccessToast('本位币设置成功');
+                                        Ext.getCmp('mainView').getViewModel().set('defaultCurrency', v);
                                         Ext.getCmp('x-defaultcurrency').close();
                                     }
                                 })

+ 1 - 1
frontend/saas-web/app/view/money/report/TotalRecDetail.js

@@ -19,7 +19,7 @@ Ext.define('saas.view.money.report.TotalRecDetail', {
 
     searchItems: [{
         xtype: 'customerDbfindTrigger',
-        name: 'cm_custcode',
+        name: 'cm_custname',
         emptyText: '请输入客户名称',
         columnWidth: 0.25
     }, {

+ 30 - 0
frontend/saas-web/app/view/purchase/deviceQuery/DataList.js

@@ -62,31 +62,61 @@ Ext.define('saas.view.purchase.deviceQuery.DataList', {
         width : 150.0, 
         dataIndex : 'pr_brand', 
         xtype : '', 
+        renderer:function(val,metaData,record,x,y,store, view){
+            metaData.tdAttr = 'qclass="x-tip" data-qtip="'
+                                + val + '"';
+            return val;
+        }
     },{
         text : '名称', 
         width : 200.0, 
         dataIndex : 'pr_detail', 
         xtype : '', 
+        renderer:function(val,metaData,record,x,y,store, view){
+            metaData.tdAttr = 'qclass="x-tip" data-qtip="'
+                                + val + '"';
+            return val;
+        }
     },{
         text : '型号', 
         width : 200.0, 
         dataIndex : 'pr_orispeccode', 
         xtype : '', 
+        renderer:function(val,metaData,record,x,y,store, view){
+            metaData.tdAttr = 'qclass="x-tip" data-qtip="'
+                                + val + '"';
+            return val;
+        }
     },{
         text : '规格', 
         width : 200, 
         dataIndex : 'pr_spec', 
         xtype : '', 
+        renderer:function(val,metaData,record,x,y,store, view){
+            metaData.tdAttr = 'qclass="x-tip" data-qtip="'
+                                + val + '"';
+            return val;
+        }
     },{
         text : '包装', 
         width : 100, 
         dataIndex : 'pr_pack', 
         xtype : '', 
+        renderer:function(val,metaData,record,x,y,store, view){
+            metaData.tdAttr = 'qclass="x-tip" data-qtip="'
+                                + val + '"';
+            return val;
+        }
     },{
         text : '供应商', 
         width : 150.0, 
         dataIndex : 'pr_vendor', 
         xtype : '', 
+        renderer:function(val,metaData,record,x,y,store, view){
+            metaData.tdAttr = 'qclass="x-tip" data-qtip="'
+                                + val + '"';
+            return val;
+        }
     },{
         text : '库存', 
         width : 100,