Browse Source

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

hy 6 years ago
parent
commit
1be549adcd
33 changed files with 1844 additions and 47 deletions
  1. 1 0
      applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/exception/BizExceptionCode.java
  2. 10 0
      applications/money/money-dto/src/main/java/com/usoftchina/saas/money/po/ApcheckDetail.java
  3. 2 2
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/VerificationServiceImpl.java
  4. 3 2
      applications/money/money-server/src/main/resources/mapper/ApcheckMapper.xml
  5. 9 0
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/controller/PurchaseController.java
  6. 22 0
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/mapper/DataImportMapper.java
  7. 11 0
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/mapper/PurchaseMapper.java
  8. 2 0
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/service/PurchaseService.java
  9. 107 6
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/service/impl/PurchaseServiceImpl.java
  10. 110 0
      applications/purchase/purchase-server/src/main/resources/mapper/DataImportMapper.xml
  11. 85 0
      applications/purchase/purchase-server/src/main/resources/mapper/PurchaseMapper.xml
  12. 17 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/controller/SaleController.java
  13. 22 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/mapper/DataImportMapper.java
  14. 6 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/mapper/SaleMapper.java
  15. 2 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/service/SaleService.java
  16. 184 27
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/service/impl/SaleServiceImpl.java
  17. 110 0
      applications/sale/sale-server/src/main/resources/mapper/DataImportMapper.xml
  18. 64 0
      applications/sale/sale-server/src/main/resources/mapper/SaleMapper.xml
  19. 1 1
      applications/sale/sale-server/src/main/resources/mapper/SaledownMapper.xml
  20. 5 0
      applications/transfers/mall-api/pom.xml
  21. 23 3
      applications/transfers/mall-api/src/main/java/com/usoftchina/saas/inquiry/api/InquiryApi.java
  22. 249 0
      applications/transfers/mall-api/src/main/java/com/usoftchina/saas/inquiry/po/inquiry/PublicInquiryInfo.java
  23. 674 0
      applications/transfers/mall-api/src/main/java/com/usoftchina/saas/inquiry/po/inquiry/PublicInquiryItemInfo.java
  24. 52 0
      applications/transfers/mall-api/src/main/java/com/usoftchina/saas/inquiry/po/inquiry/PublicInquiryReplyInfo.java
  25. 15 0
      applications/transfers/mall-api/src/test/java/com/usoftchina/saas/inquiry/test/InquiryApiTest.java
  26. 6 1
      frontend/saas-web/app/view/core/base/ImportWindow.js
  27. 5 0
      frontend/saas-web/app/view/core/base/ImportWindow.scss
  28. 8 1
      frontend/saas-web/app/view/core/query/QueryGridPanel.js
  29. 1 0
      frontend/saas-web/app/view/core/query/QueryPanelController.js
  30. 2 1
      frontend/saas-web/app/view/core/query/QueryPanelModel.js
  31. 4 2
      frontend/saas-web/app/view/sale/sale/QueryPanel.js
  32. 27 0
      frontend/saas-web/app/view/sale/sale/QueryPanelController.js
  33. 5 1
      frontend/saas-web/app/view/sale/sale/QueryPanelModel.js

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

@@ -52,6 +52,7 @@ public enum BizExceptionCode implements BaseExceptionCode {
     BIZ_SAMEVENDAP_SAVE(79357, "已存在相同供应商和币别的期初数据,不能新增"),
     BIZ_SAMECUSTAR_SAVE(79358, "已存在相同客户和币别的期初数据,不能新增"),
     BIZ_MAINCURRENCY_DELETE(79359, "该币别为本位币,不能删除"),
+    BIZ_CUSTOMER_CODE_NOT_EXISTS(79360, "客户%s不存在或已禁用"),
 
     NO_OPRATIONDATA(79400,"无可操作单据"),
     NULL_DATA(23232,"无数据"),

+ 10 - 0
applications/money/money-dto/src/main/java/com/usoftchina/saas/money/po/ApcheckDetail.java

@@ -30,8 +30,18 @@ public class ApcheckDetail extends CommonBaseEntity{
 
     private String pr_spec;
 
+    private String pr_brand;
+
     private String pr_orispeccode;
 
+    public String getPr_brand() {
+        return pr_brand;
+    }
+
+    public void setPr_brand(String pr_brand) {
+        this.pr_brand = pr_brand;
+    }
+
     public String getPr_detail() {
         return pr_detail;
     }

+ 2 - 2
applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/VerificationServiceImpl.java

@@ -604,7 +604,7 @@ public class VerificationServiceImpl extends CommonBaseServiceImpl<VerificationM
                 for(VerificationdetDTO det : items1){
                     Double nowbalanceDet = det.getVd_nowbalance()==null?new Double(0):det.getVd_nowbalance();
                     Subledger sub = subledgerMapper.selectByPrimaryKey(Math.toIntExact(det.getVd_slid()));
-                    if (sub != null && sub.getSl_preamount() != 0 &&
+                    if (sub != null && sub.getSl_preamount() !=null && sub.getSl_preamount() != 0 &&
                             ("receivable_to_receivable".equals(verificationDTO.getVc_kind()) || "payable_to_payable".equals(verificationDTO.getVc_kind()))) {
                         nowbalanceDet=-1*nowbalanceDet;
                     }
@@ -898,7 +898,7 @@ public class VerificationServiceImpl extends CommonBaseServiceImpl<VerificationM
         for(Verificationdet det : items1){
             Double nowbalanceDet = det.getVd_nowbalance()==null?new Double(0):det.getVd_nowbalance();
             Subledger sub = subledgerMapper.selectByPrimaryKey(Math.toIntExact(det.getVd_slid()));
-            if (sub != null && sub.getSl_preamount() != 0 &&
+            if (sub != null && sub.getSl_preamount() != null && sub.getSl_preamount() != 0 &&
                     ("receivable_to_receivable".equals(verificationDTO.getVc_kind()) || "payable_to_payable".equals(verificationDTO.getVc_kind())
                     || "应收转应收".equals(verificationDTO.getVc_kind()) || "应付转应付".equals(verificationDTO.getVc_kind()))) {
                 nowbalanceDet=-1*nowbalanceDet;

+ 3 - 2
applications/money/money-server/src/main/resources/mapper/ApcheckMapper.xml

@@ -51,8 +51,9 @@
     <result column="creatorId" property="creatorId" jdbcType="INTEGER" />
     <result column="creatorName" property="creatorName" jdbcType="VARCHAR" />
     <result column="pr_detail" property="pr_detail" jdbcType="VARCHAR" />
-    <result column="creatorName" property="pr_spec" jdbcType="VARCHAR" />
-    <result column="pr_orispeccode" property="pr_orispeccode" jdbcType="VARCHAR" />
+    <result column="pr_spec" property="pr_spec" jdbcType="VARCHAR" />
+    <result column="pr_orispeccode" property="pr_orispeccode" jdbcType="VARCHAR"/>
+    <result column="pr_brand" property="pr_brand" jdbcType="VARCHAR"/>
   </resultMap>
 
   <sql id="Base_Column_List" >

+ 9 - 0
applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/controller/PurchaseController.java

@@ -245,4 +245,13 @@ public class PurchaseController {
     public Result turnPurchase(@RequestBody InquiryTurnPurchaseReqDTO inquiryTurnPurchaseReqDTO){
         return Result.success(purchaseService.turnPurchase(inquiryTurnPurchaseReqDTO));
     }
+
+    /**
+     * 模板数据转正式采购单
+     */
+    @RequestMapping("/saveToFormal")
+    public Result saveToFormal(Integer id, boolean update) {
+        purchaseService.saveToFormal(id, update);
+        return Result.success();
+    }
 }

+ 22 - 0
applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/mapper/DataImportMapper.java

@@ -0,0 +1,22 @@
+package com.usoftchina.saas.purchase.mapper;
+
+import com.usoftchina.saas.commons.po.DataImport;
+import com.usoftchina.saas.commons.po.DataImportDetail;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface DataImportMapper {
+    void deleteByCaller(@Param("caller") String caller, @Param("companyid") Long companyid);
+    int insertSelective(DataImport record);
+
+    void updateErr(@Param("err") String err, @Param("id") Integer id);
+
+    List<DataImportDetail> selectDataById(Integer id);
+
+    DataImportDetail selectMainBycode(@Param("code") String code, @Param("id") int id, @Param("companyid") Long companyId);
+
+    void updateDataImport(Integer id);
+
+    void updateDataImportError(@Param("err") String err,@Param("id") int id);
+}

+ 11 - 0
applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/mapper/PurchaseMapper.java

@@ -3,6 +3,9 @@ package com.usoftchina.saas.purchase.mapper;
 import com.usoftchina.saas.base.mapper.CommonBaseMapper;
 
 import com.usoftchina.saas.commons.dto.DocBaseDTO;
+import com.usoftchina.saas.document.dto.ProductDTO;
+import com.usoftchina.saas.document.entities.Address;
+import com.usoftchina.saas.document.entities.Vendor;
 import com.usoftchina.saas.purchase.po.Purchase;
 import org.apache.ibatis.annotations.Param;
 
@@ -44,4 +47,12 @@ public interface PurchaseMapper extends CommonBaseMapper<Purchase>{
     Integer checkClose(Long id);
 
     String validateCurrency(@Param("puId") Long piId, @Param("puCurrency") String piCurrency);
+
+    Vendor selectVendorByCode(@Param("code") String vend, @Param("companyid") Long companyId);
+
+    Integer checkCurrency(@Param("name") String currency, @Param("companyId") Long companyId);
+
+    ProductDTO selectProductByCode(@Param("code") String prodcode, @Param("companyid") Long companyId);
+
+    Address selectDefaultAddress(Long companyId);
 }

+ 2 - 0
applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/service/PurchaseService.java

@@ -180,4 +180,6 @@ public interface PurchaseService extends CommonBaseService<PurchaseMapper, Purch
      * @return
      */
     DocBaseDTO turnPurchase(InquiryTurnPurchaseReqDTO inquiryTurnPurchaseReqDTO);
+
+    void saveToFormal(Integer id, boolean update);
 }

+ 107 - 6
applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/service/impl/PurchaseServiceImpl.java

@@ -3,18 +3,15 @@ package com.usoftchina.saas.purchase.service.impl;
 import com.alibaba.fastjson.JSONObject;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
-import com.netflix.discovery.converters.Auto;
-import com.rabbitmq.tools.json.JSONUtil;
 import com.usoftchina.saas.account.dto.CompanyDTO;
 import com.usoftchina.saas.commons.cache.ConfigsCache;
+import com.usoftchina.saas.commons.po.DataImportDetail;
 import com.usoftchina.saas.document.api.AddressApi;
 import com.usoftchina.saas.document.api.CurrencyApi;
 import com.usoftchina.saas.document.api.ProductApi;
 import com.usoftchina.saas.document.api.VendorApi;
-import com.usoftchina.saas.document.dto.CurrencyDTO;
-import com.usoftchina.saas.document.dto.ProductDTO;
-import com.usoftchina.saas.document.dto.VendorDTO;
-import com.usoftchina.saas.document.dto.VendorListDTO;
+import com.usoftchina.saas.document.dto.*;
+import com.usoftchina.saas.document.entities.Address;
 import com.usoftchina.saas.document.entities.Vendor;
 import com.usoftchina.saas.document.entities.Vendorcontact;
 import com.usoftchina.saas.inquiry.api.InquiryApi;
@@ -115,6 +112,8 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
     private AddressApi addressApi;
     @Autowired
     private ProductApi productApi;
+    @Autowired
+    private DataImportMapper dataImportMapper;
 
     private static final Logger LOGGER = LoggerFactory.getLogger(PurchaseServiceImpl.class);
 
@@ -334,6 +333,108 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
         return saveFormData(purchaseFormDTO);
     }
 
+    @Override
+    public void saveToFormal(Integer id, boolean update) {
+        if (null == id || "0".equals(id)) {
+            return;
+        }
+        Long companyId = BaseContextHolder.getCompanyId();
+        StringBuilder err = new StringBuilder();
+        List<PurchaseFormDTO> list = new ArrayList<>();
+        PurchaseFormDTO purchaseFormDTO = null;
+        List<DataImportDetail> details = dataImportMapper.selectDataById(id);
+        if (!CollectionUtils.isEmpty(details)) {
+            Map<String, List<DataImportDetail>> datas = CollectionUtils.groupBy(details, DataImportDetail::getDd_codevalue);
+            Integer detno = null;
+            //取统一的交货地址
+            Address address = purchaseMapper.selectDefaultAddress(companyId);
+            String defaultAddress = null;
+            if (null != address) {
+                defaultAddress = address.getAd_address();
+            }
+            for (String code : datas.keySet()) {
+                purchaseFormDTO = new PurchaseFormDTO();
+                List<PurchaseDetailDTO> detailDTOList = new ArrayList<>();
+                List<DataImportDetail> data = datas.get(code);
+                DataImportDetail main = dataImportMapper.selectMainBycode(code, id, companyId);
+                if (StringUtils.isEmpty(main)) {
+                    throw new BizException(BizExceptionCode.BIZ_REPORT_NOTCORRECT);
+                }
+                PurchaseDTO purchaseDTO = JSONObject.parseObject(main.getDd_maindata(), PurchaseDTO.class);
+                //验证供应商编号
+                String vend = purchaseDTO.getPu_vendcode();
+                if (!StringUtils.isEmpty(vend)) {
+                   Vendor vendor = purchaseMapper.selectVendorByCode(vend, companyId);
+                   if (null == vendor) {
+                       err.append("采购订单号: " + purchaseDTO.getPu_code() + " 的供应商编号: "+ vend +" 在系统中不存在,请确认数据是否正确");
+                       break;
+                   }
+                   purchaseDTO.setPu_vendid(vendor.getId().intValue());
+                   purchaseDTO.setPu_vendname(vendor.getVe_name());
+                }
+                //币别验证
+                String currency = purchaseDTO.getPu_currency();
+                if (!StringUtils.isEmpty(currency)) {
+                    Integer count = purchaseMapper.checkCurrency(currency, BaseContextHolder.getCompanyId());
+                    if (count == 0) {
+                        err.append("采购订单号: " + purchaseDTO.getPu_code() + " 的币别: "+ currency +" 在系统中不存在,请确认数据是否正确");
+                        break;
+                    }
+                }
+                //新增
+                purchaseDTO.setId(0l);
+                purchaseDTO.setPu_status(Status.UNAUDITED.getDisplay());
+                purchaseDTO.setPu_statuscode(Status.UNAUDITED.name());
+                purchaseDTO.setPu_date(new Date());
+                purchaseDTO.setCreateTime(new Date());
+                purchaseDTO.setPu_shipaddresscode(defaultAddress);
+                if (null == purchaseDTO.getPu_delivery()) {
+                    purchaseDTO.setPu_delivery(new Date());
+                }
+                //添加从表
+                if (data.size() > 0) {
+                    detno = 1;
+                    for (DataImportDetail detail : data) {
+                        PurchaseDetailDTO purchaseDetailDTO = null;
+                        try {
+                            purchaseDetailDTO = JSONObject.parseObject(detail.getDd_detaildata(), PurchaseDetailDTO.class);
+                        } catch (Exception e) {
+                            continue;
+                        }
+                        if (null != purchaseDetailDTO) {
+                            //验证物料编号
+                            String prodcode = purchaseDetailDTO.getPd_prodcode();
+                            if (!StringUtils.isEmpty(prodcode)) {
+                                ProductDTO product = purchaseMapper.selectProductByCode(prodcode, companyId);
+                                if (null == product) {
+                                    err.append("采购订单号: " + purchaseDTO.getPu_code() + " 的明细料号: "+ prodcode +" 在系统中不存在,请确认数据是否正确");
+                                    break;
+                                }
+                                purchaseDetailDTO.setPd_prodid(product.getId());
+                                purchaseDetailDTO.setPd_detno(detno);
+                                detno++;
+                                detailDTOList.add(purchaseDetailDTO);
+                            }
+                        }
+                    }
+                }
+                //添加至List中
+                purchaseFormDTO.setMain(purchaseDTO);
+                purchaseFormDTO.setItems(detailDTOList);
+                purchaseFormDTO.setCodeModified(true);
+                list.add(purchaseFormDTO);
+            }
+            if (err.length() > 0) {
+                dataImportMapper.updateDataImportError(err.toString(), id);
+                throw new BizException(12345, err.toString());
+            }
+            for (PurchaseFormDTO  dto : list) {
+                saveFormData(dto);
+            }
+            dataImportMapper.updateDataImport(id);
+        }
+    }
+
     /**
      * 创建供应商
      * @param turnPurchaseReqDTO

+ 110 - 0
applications/purchase/purchase-server/src/main/resources/mapper/DataImportMapper.xml

@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.usoftchina.saas.purchase.mapper.DataImportMapper" >
+  <resultMap id="DetailMap" type="com.usoftchina.saas.commons.po.DataImportDetail" >
+    <id column="dd_id" property="dd_id" jdbcType="INTEGER" />
+    <result column="dd_maindata" property="dd_maindata" jdbcType="VARCHAR" />
+    <result column="dd_detno" property="dd_detno" jdbcType="INTEGER" />
+    <result column="dd_diid" property="dd_diid" jdbcType="INTEGER" />
+    <result column="dd_checked" property="dd_checked" jdbcType="INTEGER" />
+    <result column="dd_success" property="dd_success" jdbcType="INTEGER" />
+    <result column="dd_toformal" property="dd_toformal" jdbcType="INTEGER" />
+    <result column="companyid" property="companyid" jdbcType="INTEGER" />
+    <result column="dd_detaildata" property="dd_detaildata" jdbcType="VARCHAR" />
+    <result column="dd_codevalue" property="dd_codevalue" jdbcType="VARCHAR" />
+  </resultMap>
+
+  <delete id="deleteByCaller">
+  delete from data_import where di_caller=#{caller} and companyid=#{companyid} and
+  il_toformal=0 and il_result is not null
+</delete>
+
+  <insert id="insertSelective" parameterType="com.usoftchina.saas.commons.po.DataImport" >
+    <selectKey  resultType="java.lang.Integer" keyProperty="di_id">
+      SELECT LAST_INSERT_ID() AS ID
+    </selectKey>
+    insert into data_import
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="di_caller != null" >
+        di_caller,
+      </if>
+      <if test="companyid != null" >
+        companyid,
+      </if>
+      <if test="di_date != null" >
+        di_date,
+      </if>
+      <if test="di_count != null" >
+        di_count,
+      </if>
+      <if test="di_result != null" >
+        di_result,
+      </if>
+      <if test="di_success != null" >
+        di_success,
+      </if>
+      <if test="di_man != null" >
+        di_man,
+      </if>
+      <if test="di_toformal != null" >
+        di_toformal,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="di_caller != null" >
+        #{di_caller,jdbcType=VARCHAR},
+      </if>
+      <if test="companyid != null" >
+        #{companyid,jdbcType=INTEGER},
+      </if>
+      <if test="di_date != null" >
+        #{di_date,jdbcType=TIMESTAMP},
+      </if>
+      <if test="di_count != null" >
+        #{di_count,jdbcType=INTEGER},
+      </if>
+      <if test="di_result != null" >
+        #{di_result,jdbcType=VARCHAR},
+      </if>
+      <if test="di_success != null" >
+        #{di_success,jdbcType=INTEGER},
+      </if>
+      <if test="di_man != null" >
+        #{di_man,jdbcType=VARCHAR},
+      </if>
+      <if test="di_toformal != null" >
+        #{di_toformal,jdbcType=INTEGER},
+      </if>
+    </trim>
+  </insert>
+
+  <update id="updateErr" >
+  update data_import
+  set
+  di_result = #{err},
+  di_success = 0,
+  where di_id = #{id}
+</update>
+
+<select id="selectDataById" resultMap="DetailMap">
+  select * from  data_importdetail
+  where dd_diid = #{id}
+</select>
+
+  <select id="selectMainBycode" resultMap="DetailMap">
+    select * from  data_importdetail
+    where dd_codevalue = #{code} and dd_diid=#{id} and ifnull(dd_success,0)=0 and ifnull(dd_maindata,'')!='' and companyid=#{companyid}
+  </select>
+
+  <select id="selectMainOnly" resultMap="DetailMap">
+    select * from  data_importdetail
+    where dd_diid=#{id} and ifnull(dd_success,0)=0 and ifnull(dd_maindata,'')!='' and companyid=#{companyid}
+  </select>
+
+  <update id="updateDataImport" parameterType="integer">
+    update data_import set di_toformal=1,di_success=1  where di_id=#{id}
+  </update>
+  <update id="updateDataImportError">
+    update data_import set di_toformal=1,di_result=#{err} where di_id=#{id}
+  </update>
+</mapper>

+ 85 - 0
applications/purchase/purchase-server/src/main/resources/mapper/PurchaseMapper.xml

@@ -485,4 +485,89 @@
     select pu_code from purchase where ifnull(pu_sacode,'') != '' and  pu_id = #{puId} and pu_currency != #{puCurrency}
   </select>
 
+  <select id="selectVendorByCode" resultMap="vendorMap">
+    select * from vendor where ve_code = #{code} and companyid = #{companyid}
+  </select>
+
+  <select id="checkCurrency" resultType="integer">
+      SELECT COUNT(*) FROM CURRENCYS WHERE CR_NAME = #{name} AND COMPANYID = #{companyId}
+  </select>
+
+  <resultMap id="vendorMap" type="com.usoftchina.saas.document.entities.Vendor">
+    <id column="ve_id" property="id" jdbcType="INTEGER" />
+    <result column="ve_code" property="ve_code" jdbcType="VARCHAR" />
+    <result column="ve_shortname" property="ve_shortname" jdbcType="VARCHAR"/>
+    <result column="ve_uu" property="ve_uu" jdbcType="VARCHAR" />
+    <result column="ve_name" property="ve_name" jdbcType="VARCHAR" />
+    <result column="ve_type" property="ve_type" jdbcType="VARCHAR" />
+    <result column="ve_begindate" property="ve_begindate" jdbcType="TIMESTAMP" />
+    <result column="ve_beginapamount" property="ve_beginapamount" jdbcType="DOUBLE" />
+    <result column="ve_beginprepayamount" property="ve_beginprepayamount" jdbcType="DOUBLE" />
+    <result column="ve_promisedays" property="ve_promisedays" jdbcType="INTEGER" />
+    <result column="ve_taxrate" property="ve_taxrate" jdbcType="DOUBLE" />
+    <result column="ve_nsrzh" property="ve_nsrzh" jdbcType="VARCHAR" />
+    <result column="ve_bankaccount" property="ve_bankaccount" jdbcType="VARCHAR" />
+    <result column="ve_bankcode" property="ve_bankcode" jdbcType="VARCHAR" />
+    <result column="ve_status" property="ve_status" jdbcType="VARCHAR" />
+    <result column="ve_statuscode" property="ve_statuscode" jdbcType="VARCHAR" />
+    <result column="companyId" property="companyId" jdbcType="INTEGER" />
+    <result column="updaterId" property="updaterId" jdbcType="INTEGER" />
+    <result column="updateTime" property="updateTime" jdbcType="TIMESTAMP" />
+    <result column="ve_text1" property="ve_text1" jdbcType="VARCHAR" />
+    <result column="ve_text2" property="ve_text2" jdbcType="VARCHAR" />
+    <result column="ve_text3" property="ve_text3" jdbcType="VARCHAR" />
+    <result column="ve_text4" property="ve_text4" jdbcType="VARCHAR" />
+    <result column="ve_text5" property="ve_text5" jdbcType="VARCHAR" />
+    <result column="ve_payamount" property="ve_payamount" jdbcType="DOUBLE" />
+    <result column="ve_leftamount" property="ve_leftamount" jdbcType="DOUBLE" />
+    <result column="ve_beginym" property="ve_beginym" jdbcType="INTEGER" />
+    <result column="ve_preamount" property="ve_preamount" jdbcType="DOUBLE" />
+    <result column="ve_remark" property="ve_remark" jdbcType="VARCHAR" />
+    <result column="ve_address" property="ve_address" jdbcType="VARCHAR" />
+    <result column="ve_currency" property="ve_currency" jdbcType="VARCHAR" />
+  </resultMap>
+
+  <resultMap id="productMap" type="com.usoftchina.saas.document.dto.ProductDTO">
+    <id column="pr_id" property="id" jdbcType="INTEGER"/>
+    <result column="pr_code" property="pr_code" jdbcType="VARCHAR"/>
+    <result column="pr_detail" property="pr_detail" jdbcType="VARCHAR"/>
+    <result column="pr_spec" property="pr_spec" jdbcType="VARCHAR"/>
+    <result column="pr_unit" property="pr_unit" jdbcType="VARCHAR"/>
+    <result column="pr_kind" property="pr_kind" jdbcType="VARCHAR"/>
+    <result column="pr_orispeccode" property="pr_orispeccode" jdbcType="VARCHAR"/>
+    <result column="pr_whid" property="pr_whid" jdbcType="INTEGER"/>
+    <result column="pr_whcode" property="pr_whcode" jdbcType="VARCHAR"/>
+    <result column="pr_whname" property="pr_whname" jdbcType="VARCHAR"/>
+    <result column="pr_zxbzs" property="pr_zxbzs" jdbcType="INTEGER"/>
+    <result column="pr_leadtime" property="pr_leadtime" jdbcType="INTEGER"/>
+    <result column="pr_brand" property="pr_brand" jdbcType="VARCHAR"/>
+    <result column="pr_standardprice" property="pr_standardprice" jdbcType="DOUBLE"/>
+    <result column="pr_purcprice" property="pr_purcprice" jdbcType="DOUBLE"/>
+    <result column="pr_saleprice" property="pr_saleprice" jdbcType="DOUBLE"/>
+    <result column="pr_vendid" property="pr_vendid" jdbcType="INTEGER"/>
+    <result column="pr_vendcode" property="pr_vendcode" jdbcType="VARCHAR"/>
+    <result column="pr_vendname" property="pr_vendname" jdbcType="VARCHAR"/>
+  </resultMap>
+
+  <select id="selectProductByCode" resultMap="productMap">
+    select * from product where pr_code=#{code} and companyid=#{companyid}
+  </select>
+
+  <select id="selectDefaultAddress" resultMap="addressMap">
+    SELECT * FROM ADDRESS where COMPANYID=#{companyId} and ad_default=1
+  </select>
+
+  <resultMap id="addressMap" type="com.usoftchina.saas.document.entities.Address">
+    <id column="ad_id" jdbcType="INTEGER" property="id" />
+    <result column="companyId" jdbcType="INTEGER" property="companyId" />
+    <result column="updaterId" jdbcType="INTEGER" property="updaterId" />
+    <result column="updateTime" jdbcType="TIMESTAMP" property="updateTime" />
+    <result column="ad_text1" jdbcType="VARCHAR" property="ad_text1" />
+    <result column="ad_text2" jdbcType="VARCHAR" property="ad_text2" />
+    <result column="ad_text3" jdbcType="VARCHAR" property="ad_text3" />
+    <result column="ad_text4" jdbcType="VARCHAR" property="ad_text4" />
+    <result column="ad_text5" jdbcType="VARCHAR" property="ad_text5" />
+    <result column="ad_default" jdbcType="INTEGER" property="ad_default" />
+    <result column="ad_address" jdbcType="LONGVARCHAR" property="ad_address" />
+  </resultMap>
 </mapper>

+ 17 - 0
applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/controller/SaleController.java

@@ -191,12 +191,29 @@ public class SaleController {
        return Result.success();
     }
 
+    /**
+     * 转采购订单
+     * @param id
+     * @return
+     */
     @PostMapping("/saleTurnPurchase/{id}")
     public Result saleTurnPurchase(@PathVariable("id") Long id){
         DocBaseDTO baseDTO = saleService.saleTurnPurchase(id);
         return Result.success(baseDTO);
     }
 
+    /**
+     * 导入保存至列表
+     * @param id
+     * @param update
+     * @return
+     */
+    @PostMapping("/saveToFormal")
+    public Result saveToFormal(Long id, boolean update){
+        saleService.saveToFormal(id, update);
+        return Result.success();
+    }
+
     /**
      * 企业商机
      * @param remindReqDTO

+ 22 - 0
applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/mapper/DataImportMapper.java

@@ -0,0 +1,22 @@
+package com.usoftchina.saas.sale.mapper;
+
+import com.usoftchina.saas.commons.po.DataImport;
+import com.usoftchina.saas.commons.po.DataImportDetail;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface DataImportMapper {
+    void deleteByCaller(@Param("caller") String caller, @Param("companyid") Long companyid);
+    int insertSelective(DataImport record);
+
+    void updateErr(@Param("err") String err, @Param("id") Integer id);
+
+    List<DataImportDetail> selectDataById(Long id);
+
+    DataImportDetail selectMainBycode(@Param("code") String code, @Param("id") int id, @Param("companyid") Long companyId);
+
+    void updateDataImport(Integer id);
+
+    void updateDataImportError(@Param("err") String err, @Param("id") int id);
+}

+ 6 - 0
applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/mapper/SaleMapper.java

@@ -3,6 +3,8 @@ package com.usoftchina.saas.sale.mapper;
 import com.netflix.ribbon.proxy.annotation.ClientProperties;
 import com.usoftchina.saas.base.mapper.CommonBaseMapper;
 import com.usoftchina.saas.commons.dto.DocBaseDTO;
+import com.usoftchina.saas.document.dto.CustomerDTO;
+import com.usoftchina.saas.document.dto.ProductDTO;
 import com.usoftchina.saas.sale.dto.PurchaseDTO;
 import com.usoftchina.saas.sale.dto.PurchaseDetailDTO;
 import com.usoftchina.saas.sale.po.Sale;
@@ -72,4 +74,8 @@ public interface SaleMapper extends CommonBaseMapper<Sale> {
     void updateDelivery(@Param("id")Long id);
 
     void updateSaleDown(Long id);
+
+    CustomerDTO selectCustByCustCode(@Param("code") String code, @Param("companyId") Long companyId);
+
+    ProductDTO selectProductByCode(@Param("code") String code, @Param("companyId") Long companyId);
 }

+ 2 - 0
applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/service/SaleService.java

@@ -55,6 +55,8 @@ public interface SaleService {
 
     DocBaseDTO saleTurnPurchase(Long id);
 
+    void saveToFormal(Long id, boolean update);
+
     IPage<RemindRspDTO> getEnremind(RemindReqDTO remindReqDTO);
 
     IPage<RemindRspDTO> findRemindByUserInfo(RemindReqDTO remindReqDTO);

+ 184 - 27
applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/service/impl/SaleServiceImpl.java

@@ -1,7 +1,11 @@
 package com.usoftchina.saas.sale.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import com.usoftchina.saas.commons.po.*;
+import com.usoftchina.saas.document.dto.CustomerDTO;
+import com.usoftchina.saas.document.dto.ProductDTO;
 import com.usoftchina.saas.inquiry.api.InquiryApi;
 import com.usoftchina.saas.inquiry.po.inquiry.*;
 import com.usoftchina.saas.account.api.AccountApi;
@@ -14,9 +18,6 @@ import com.usoftchina.saas.commons.dto.BatchDealBaseDTO;
 import com.usoftchina.saas.commons.dto.DocBaseDTO;
 import com.usoftchina.saas.commons.dto.ListReqDTO;
 import com.usoftchina.saas.commons.exception.BizExceptionCode;
-import com.usoftchina.saas.commons.po.BillCodeSeq;
-import com.usoftchina.saas.commons.po.Operation;
-import com.usoftchina.saas.commons.po.Status;
 import com.usoftchina.saas.context.BaseContextHolder;
 import com.usoftchina.saas.exception.BizException;
 import com.usoftchina.saas.page.PageDefault;
@@ -80,6 +81,8 @@ public class SaleServiceImpl implements SaleService{
     private AccountApi accountApi;
     @Autowired
     private CompanyApi companyApi;
+    @Autowired
+    private DataImportMapper dataImportMapper;
 
     private static final Logger LOGGER = LoggerFactory.getLogger(SaleServiceImpl.class);
 
@@ -675,6 +678,74 @@ public class SaleServiceImpl implements SaleService{
         return baseDTO;
     }
 
+    @Override
+    @Transactional
+    public void saveToFormal(Long id, boolean update){
+        if (null == id || "0".equals(id)) {
+            throw new BizException(BizExceptionCode.NO_DATA);
+        }
+        String userName = BaseContextHolder.getUserName();
+        Long companyId = BaseContextHolder.getCompanyId();
+        SaleFormDTO saleFormDTO = null;
+        List<DataImportDetail> details = dataImportMapper.selectDataById(id);
+        if (!CollectionUtils.isEmpty(details)) {
+            Map<String, List<DataImportDetail>> datas = CollectionUtils.groupBy(details, DataImportDetail::getDd_codevalue);
+            int detno = 0;
+            for (String code : datas.keySet()) {
+                saleFormDTO = new SaleFormDTO();
+                List<SaleDetailDTO> saleDetailDTOList = new ArrayList<>();
+                List<DataImportDetail> data = datas.get(code);
+                //准备主表数据
+                DataImportDetail main = dataImportMapper.selectMainBycode(code, id.intValue(), companyId);
+                if (StringUtils.isEmpty(main)){
+                    throw new BizException(BizExceptionCode.BIZ_REPORT_NOTCORRECT);
+                }
+                SaleDTO saleDTO = JSONObject.parseObject(main.getDd_maindata(), SaleDTO.class);
+                CustomerDTO customerDTO = saleMapper.selectCustByCustCode(saleDTO.getSa_custcode(), companyId);
+                if (ObjectUtils.isEmpty(customerDTO)) {
+                    throw new BizException(BizExceptionCode.BIZ_CUSTOMER_CODE_NOT_EXISTS.getCode(),
+                            String.format(BizExceptionCode.BIZ_CUSTOMER_CODE_NOT_EXISTS.getMessage(), saleDTO.getSa_custname() + "(" + saleDTO.getSa_custcode() + ")"));
+                }
+                if (!customerDTO.getCu_name().equals(saleDTO.getSa_custname())) {
+                    throw new BizException(79360, "客户编号" + saleDTO.getSa_custcode() + "客户名称" + saleDTO.getSa_custname() + "匹配错误");
+                }
+                saleDTO.setSa_custid(customerDTO.getId().intValue());
+                saleDTO.setId(0L);
+                saleDTO.setCreateTime(new Date());
+                saleDTO.setCreatorName(userName);
+                saleDTO.setSa_date(new Date());
+                saleDTO.setSa_status(Status.UNAUDITED.getDisplay());
+                saleDTO.setSa_statuscode(Status.UNAUDITED.name());
+
+                saleFormDTO.setMain(saleDTO);
+                //准备从表数据
+                if (data.size() > 0) {
+                    detno = 1;
+                    for (DataImportDetail detail : data) {
+                        SaleDetailDTO saleDetailDTO = JSONObject.parseObject(detail.getDd_detaildata(), SaleDetailDTO.class);
+                        //校验明细物料
+                        ProductDTO productDTO = saleMapper.selectProductByCode(saleDetailDTO.getSd_prodcode(), companyId);
+                        if (ObjectUtils.isEmpty(productDTO)) {
+                            throw new BizException(79360, "物料" + saleDetailDTO.getSd_prodcode() + "不存在");
+                        }
+                        saleDetailDTO.setSd_prodid(productDTO.getId());
+                        saleDetailDTO.setSd_detno(detno++);
+                        saleDetailDTO.setId(0L);
+                        saleDetailDTO.setSd_price(saleDetailDTO.getSd_netprice() * (100 + saleDetailDTO.getSd_taxrate()) / 100);
+                        saleDetailDTO.setSd_nettotal(saleDetailDTO.getSd_netprice() * saleDetailDTO.getSd_qty());
+                        saleDetailDTO.setSd_total(saleDetailDTO.getSd_price() * saleDetailDTO.getSd_qty());
+
+                        saleDetailDTOList.add(saleDetailDTO);
+                    }
+                }
+                saleFormDTO.setItems(saleDetailDTOList);
+                //保存
+                saleFormDTO.setCodeModified(true);
+                saveFormData(saleFormDTO);
+            }
+        }
+    }
+
     /**
      * 获取企业商机
      * @param remindReqDTO
@@ -688,19 +759,24 @@ public class SaleServiceImpl implements SaleService{
         }
         Long enUU = companyApi.getCompanyById(BaseContextHolder.getCompanyId()).getData().getUu();
         //Long userUU = 1000002503L, enUU = 10041559L;
-        IPage<InquiryEnRemind> inquiryEnRemindIPage = inquiryApi.findEnRemind(userUU, enUU, remindReqDTO.getPageNumber(),
-                remindReqDTO.getPageSize(), remindReqDTO.getEnableOffer(), remindReqDTO.getKeyword(), remindReqDTO.getQuoted(),
-                remindReqDTO.getFromDate(), remindReqDTO.getEndDate());
-        List<InquiryEnRemind> inquiryEnRemindList = inquiryEnRemindIPage.getContent();
-        if (CollectionUtils.isEmpty(inquiryEnRemindList)){
-            return null;
+        IPage<InquiryEnRemind> inquiryEnRemindIPage = null;
+        if (remindReqDTO.getQuoted() != 1) {
+            inquiryEnRemindIPage = inquiryApi.findEnRemind(userUU, enUU, remindReqDTO.getPageNumber(),
+                    remindReqDTO.getPageSize(), remindReqDTO.getEnableOffer(), remindReqDTO.getKeyword(), remindReqDTO.getQuoted(),
+                    remindReqDTO.getFromDate(), remindReqDTO.getEndDate());
+            List<InquiryEnRemind> inquiryEnRemindList = inquiryEnRemindIPage.getContent();
+            if (CollectionUtils.isEmpty(inquiryEnRemindList)) {
+                return null;
+            }
+            List<RemindRspDTO> remindRspDTOList = convertToRemindRspDTO(JsonUtils.toJsonString(inquiryEnRemindList), "enterprise");
+            //转换成分页对象
+            IPage<RemindRspDTO> remindRspDTOIPage = new IPage<RemindRspDTO>(inquiryEnRemindIPage.getNumber(), inquiryEnRemindIPage.getSize(),
+                    inquiryEnRemindIPage.getNumberOfElements(), remindRspDTOList, inquiryEnRemindIPage.isFirst(), inquiryEnRemindIPage.isLast(),
+                    inquiryEnRemindIPage.getTotalElements());
+            return remindRspDTOIPage;
+        }else {
+            return getRemindRspDTO(enUU, userUU, remindReqDTO);
         }
-        List<RemindRspDTO> remindRspDTOList = convertToRemindRspDTO(JsonUtils.toJsonString(inquiryEnRemindList), "enterprise");
-        //转换成分页对象
-        IPage<RemindRspDTO> remindRspDTOIPage = new IPage<RemindRspDTO>(inquiryEnRemindIPage.getNumber(), inquiryEnRemindIPage.getSize(),
-                inquiryEnRemindIPage.getNumberOfElements(),remindRspDTOList, inquiryEnRemindIPage.isFirst(), inquiryEnRemindIPage.isLast(),
-                inquiryEnRemindIPage.getTotalElements());
-        return remindRspDTOIPage;
     }
 
     /**
@@ -712,19 +788,100 @@ public class SaleServiceImpl implements SaleService{
     public IPage<RemindRspDTO> findRemindByUserInfo(RemindReqDTO remindReqDTO) {
         Long userUU = accountApi.getAccountById(BaseContextHolder.getUserId()).getData().getUu();
         Long enUU = companyApi.getCompanyById(BaseContextHolder.getCompanyId()).getData().getUu();
-        IPage<InquiryRemind> inquiryRemindIpage = inquiryApi.findRemindByUserInfo(userUU, enUU, remindReqDTO.getPageNumber(), remindReqDTO.getPageSize(),
-                remindReqDTO.getEnableOffer(),remindReqDTO.getKeyword(), remindReqDTO.getQuoted(),
-                remindReqDTO.getFromDate(), remindReqDTO.getEndDate());
-        List<InquiryRemind> inquiryRemindList = inquiryRemindIpage.getContent();
-        if (CollectionUtils.isEmpty(inquiryRemindList)){
-            return null;
+        if (remindReqDTO.getQuoted() != 1) {
+            IPage<InquiryRemind> inquiryRemindIpage = inquiryApi.findRemindByUserInfo(userUU, enUU, remindReqDTO.getPageNumber(), remindReqDTO.getPageSize(),
+                    remindReqDTO.getEnableOffer(), remindReqDTO.getKeyword(), remindReqDTO.getQuoted(),
+                    remindReqDTO.getFromDate(), remindReqDTO.getEndDate());
+            List<InquiryRemind> inquiryRemindList = inquiryRemindIpage.getContent();
+            if (CollectionUtils.isEmpty(inquiryRemindList)) {
+                return null;
+            }
+            List<RemindRspDTO> remindRspDTOList = convertToRemindRspDTO(JsonUtils.toJsonString(inquiryRemindList), "personal");
+            //转换成分页对象
+            IPage<RemindRspDTO> remindRspDTOIPage = new IPage<RemindRspDTO>(inquiryRemindIpage.getNumber(), inquiryRemindIpage.getSize(),
+                    inquiryRemindIpage.getNumberOfElements(), remindRspDTOList, inquiryRemindIpage.isFirst(), inquiryRemindIpage.isLast(),
+                    inquiryRemindIpage.getTotalElements());
+            return remindRspDTOIPage;
+        }else {
+            return getRemindRspDTO(enUU, userUU, remindReqDTO);
+        }
+    }
+
+    /**
+     * 查询已报过价的商机
+     * @param enUU              企业UU
+     * @param userUU            个人UU,企业商机传入userUU=null
+     * @param remindReqDTO
+     * @return
+     */
+    private IPage<RemindRspDTO> getRemindRspDTO(Long enUU, Long userUU, RemindReqDTO remindReqDTO){
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("userUU", userUU);
+        jsonObject.put("enUU", enUU);
+        jsonObject.put("fromDate", remindReqDTO.getFromDate());
+        jsonObject.put("endDate", remindReqDTO.getEndDate());
+        jsonObject.put("fromDelivery", null);
+        jsonObject.put("endDelivery", null);
+        String filter = jsonObject.toJSONString();
+        IPage<PublicInquiryItemInfo> publicInquiryItemInfoIPage = inquiryApi.findQuotationList(remindReqDTO.getPageNumber(), remindReqDTO.getPageSize(), remindReqDTO.getKeyword(), "done", 1, filter);
+        List<PublicInquiryItemInfo> publicInquiryItemInfoList = publicInquiryItemInfoIPage.getContent();
+        List<RemindRspDTO> remindRspDTOList = new ArrayList<>();
+        RemindRspDTO remindRspDTO = null;
+
+        for (PublicInquiryItemInfo publicInquiryItemInfo : publicInquiryItemInfoList) {
+            remindRspDTO = new RemindRspDTO();
+            //询价单信息
+            PublicInquiryInfo publicInquiryInfo = publicInquiryItemInfo.getInquiry();
+            if (!ObjectUtils.isEmpty(publicInquiryInfo)) {
+                remindRspDTO.setCustName(publicInquiryInfo.getEnName());
+            }
+            Product product = publicInquiryItemInfo.getProduct();
+            if (!ObjectUtils.isEmpty(product)) {
+                remindRspDTO.setProdBrand(product.getBrand());
+                remindRspDTO.setProdName(product.getTitle());
+                remindRspDTO.setProdOrispeccode(product.getCmpCode());
+                remindRspDTO.setProdSpec(product.getSpec());
+                remindRspDTO.setProdUnit(StringUtils.isEmpty(product.getUnit()) ? "PCS" : product.getUnit());
+            }
+
+            remindRspDTO.setNeedQty(publicInquiryItemInfo.getNeedquantity());
+            remindRspDTO.setStartDate(publicInquiryItemInfo.getDate());
+            remindRspDTO.setEndDate(publicInquiryItemInfo.getEndDate());
+            remindRspDTO.setQuoted(1);
+            remindRspDTO.setUserName(publicInquiryItemInfo.getUserName());
+            remindRspDTO.setUserTel(publicInquiryItemInfo.getUserTel());
+            remindRspDTO.setUserUU(publicInquiryItemInfo.getUserUU());
+            remindRspDTO.setSourceId(publicInquiryItemInfo.getSourceId());
+            remindRspDTO.setEnUU(publicInquiryInfo.getEnUU());
+            remindRspDTO.setRecorderUU(publicInquiryItemInfo.getUserUU());
+            remindRspDTO.setInquiryCode(publicInquiryInfo.getCode());
+            remindRspDTO.setInquiryId(publicInquiryInfo.getId());
+
+            QuotationRspDTO quotationRspDTO = new QuotationRspDTO();
+            quotationRspDTO.setAgreed(publicInquiryItemInfo.getAgreed());
+            quotationRspDTO.setRefusereason(publicInquiryItemInfo.getRefusereason());
+            quotationRspDTO.setLeadTime(publicInquiryItemInfo.getLeadtime());
+            quotationRspDTO.setTaxRate(new BigDecimal(publicInquiryItemInfo.getTaxrate()).doubleValue());
+            //分段报价明细
+            List<InquiryReplayDTO> inquiryReplayDTOList = new ArrayList<InquiryReplayDTO>();
+            List<PublicInquiryReplyInfo> publicInquiryReplyList = publicInquiryItemInfo.getReplies();
+            if (!CollectionUtils.isEmpty(publicInquiryReplyList)) {
+                for (PublicInquiryReplyInfo publicInquiryReplyInfo : publicInquiryReplyList) {
+                    InquiryReplayDTO inquiryReplayDTO = new InquiryReplayDTO(publicInquiryReplyInfo.getId(), publicInquiryReplyInfo.getLapQty(), publicInquiryReplyInfo.getPrice());
+                    inquiryReplayDTOList.add(inquiryReplayDTO);
+                }
+            }
+            quotationRspDTO.setReplies(inquiryReplayDTOList);
+            remindRspDTO.setQutations(quotationRspDTO);
+
+            remindRspDTOList.add(remindRspDTO);
         }
-        List<RemindRspDTO> remindRspDTOList = convertToRemindRspDTO(JsonUtils.toJsonString(inquiryRemindList), "personal");
-        //转换成分页对象
-        IPage<RemindRspDTO> remindRspDTOIPage = new IPage<RemindRspDTO>(inquiryRemindIpage.getNumber(), inquiryRemindIpage.getSize(),
-                inquiryRemindIpage.getNumberOfElements(),remindRspDTOList, inquiryRemindIpage.isFirst(), inquiryRemindIpage.isLast(),
-                inquiryRemindIpage.getTotalElements());
-        return remindRspDTOIPage;
+        //构造回写数据
+        IPage<RemindRspDTO> Ipage = new IPage<RemindRspDTO>(publicInquiryItemInfoIPage.getNumber(), publicInquiryItemInfoIPage.getSize(),
+                publicInquiryItemInfoIPage.getNumberOfElements(), remindRspDTOList,
+                publicInquiryItemInfoIPage.isFirst(), publicInquiryItemInfoIPage.isLast(),
+                publicInquiryItemInfoIPage.getTotalElements());
+        return Ipage;
     }
 
     /**

+ 110 - 0
applications/sale/sale-server/src/main/resources/mapper/DataImportMapper.xml

@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.usoftchina.saas.sale.mapper.DataImportMapper" >
+  <resultMap id="DetailMap" type="com.usoftchina.saas.commons.po.DataImportDetail" >
+    <id column="dd_id" property="dd_id" jdbcType="INTEGER" />
+    <result column="dd_maindata" property="dd_maindata" jdbcType="VARCHAR" />
+    <result column="dd_detno" property="dd_detno" jdbcType="INTEGER" />
+    <result column="dd_diid" property="dd_diid" jdbcType="INTEGER" />
+    <result column="dd_checked" property="dd_checked" jdbcType="INTEGER" />
+    <result column="dd_success" property="dd_success" jdbcType="INTEGER" />
+    <result column="dd_toformal" property="dd_toformal" jdbcType="INTEGER" />
+    <result column="companyid" property="companyid" jdbcType="INTEGER" />
+    <result column="dd_detaildata" property="dd_detaildata" jdbcType="VARCHAR" />
+    <result column="dd_codevalue" property="dd_codevalue" jdbcType="VARCHAR" />
+  </resultMap>
+
+  <delete id="deleteByCaller">
+  delete from data_import where di_caller=#{caller} and companyid=#{companyid} and
+  il_toformal=0 and il_result is not null
+</delete>
+
+  <insert id="insertSelective" parameterType="com.usoftchina.saas.commons.po.DataImport" >
+    <selectKey  resultType="java.lang.Integer" keyProperty="di_id">
+      SELECT LAST_INSERT_ID() AS ID
+    </selectKey>
+    insert into data_import
+    <trim prefix="(" suffix=")" suffixOverrides="," >
+      <if test="di_caller != null" >
+        di_caller,
+      </if>
+      <if test="companyid != null" >
+        companyid,
+      </if>
+      <if test="di_date != null" >
+        di_date,
+      </if>
+      <if test="di_count != null" >
+        di_count,
+      </if>
+      <if test="di_result != null" >
+        di_result,
+      </if>
+      <if test="di_success != null" >
+        di_success,
+      </if>
+      <if test="di_man != null" >
+        di_man,
+      </if>
+      <if test="di_toformal != null" >
+        di_toformal,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides="," >
+      <if test="di_caller != null" >
+        #{di_caller,jdbcType=VARCHAR},
+      </if>
+      <if test="companyid != null" >
+        #{companyid,jdbcType=INTEGER},
+      </if>
+      <if test="di_date != null" >
+        #{di_date,jdbcType=TIMESTAMP},
+      </if>
+      <if test="di_count != null" >
+        #{di_count,jdbcType=INTEGER},
+      </if>
+      <if test="di_result != null" >
+        #{di_result,jdbcType=VARCHAR},
+      </if>
+      <if test="di_success != null" >
+        #{di_success,jdbcType=INTEGER},
+      </if>
+      <if test="di_man != null" >
+        #{di_man,jdbcType=VARCHAR},
+      </if>
+      <if test="di_toformal != null" >
+        #{di_toformal,jdbcType=INTEGER},
+      </if>
+    </trim>
+  </insert>
+
+  <update id="updateErr" >
+  update data_import
+  set
+  di_result = #{err},
+  di_success = 0,
+  where di_id = #{id}
+</update>
+
+<select id="selectDataById" resultMap="DetailMap">
+  select * from  data_importdetail
+  where dd_diid = #{id}
+</select>
+
+  <select id="selectMainBycode" resultMap="DetailMap">
+    select * from  data_importdetail
+    where dd_codevalue = #{code} and dd_diid=#{id} and ifnull(dd_success,0)=0 and ifnull(dd_maindata,'')!='' and companyid=#{companyid}
+  </select>
+
+  <select id="selectMainOnly" resultMap="DetailMap">
+    select * from  data_importdetail
+    where dd_diid=#{id} and ifnull(dd_success,0)=0 and ifnull(dd_maindata,'')!='' and companyid=#{companyid}
+  </select>
+
+  <update id="updateDataImport" parameterType="integer">
+    update data_import set di_toformal=1,di_success=1  where di_id=#{id}
+  </update>
+  <update id="updateDataImportError">
+    update data_import set di_toformal=1,di_result=#{err} where di_id=#{id}
+  </update>
+</mapper>

+ 64 - 0
applications/sale/sale-server/src/main/resources/mapper/SaleMapper.xml

@@ -747,4 +747,68 @@
     update saledown set sa_salecode=null ,sa_turnstatus=null,sa_turnstatuscode=null,sa_turndate=null
     where sa_saleid= #{id}
   </update>
+
+  <resultMap id="CustomerDTOMap" type="com.usoftchina.saas.document.dto.CustomerDTO">
+    <id column="cu_id" jdbcType="INTEGER" property="id" />
+    <result column="cu_code" jdbcType="VARCHAR" property="cu_code" />
+    <result column="cu_shortname" jdbcType="VARCHAR" property="cu_shortname" />
+    <result column="cu_name" jdbcType="VARCHAR" property="cu_name" />
+    <result column="cu_uu" jdbcType="VARCHAR" property="cu_uu" />
+    <result column="cu_type" jdbcType="VARCHAR" property="cu_type" />
+    <result column="cu_begindate" jdbcType="TIMESTAMP" property="cu_begindate" />
+    <result column="cu_beginaramount" jdbcType="DOUBLE" property="cu_beginaramount" />
+    <result column="cu_beginprerecamount" jdbcType="DOUBLE" property="cu_beginprerecamount" />
+    <result column="cu_promisedays" jdbcType="DOUBLE" property="cu_promisedays" />
+    <result column="cu_taxrate" jdbcType="DOUBLE" property="cu_taxrate" />
+    <result column="cu_sellerid" jdbcType="INTEGER" property="cu_sellerid" />
+    <result column="cu_sellercode" jdbcType="VARCHAR" property="cu_sellercode" />
+    <result column="cu_sellername" jdbcType="VARCHAR" property="cu_sellername" />
+    <result column="cu_credit" jdbcType="DOUBLE" property="cu_credit" />
+    <result column="cu_status" jdbcType="VARCHAR" property="cu_status" />
+    <result column="cu_statuscode" jdbcType="VARCHAR" property="cu_statuscode" />
+    <result column="updatetime" jdbcType="TIMESTAMP" property="updateTime" />
+    <result column="cu_text1" jdbcType="VARCHAR" property="cu_text1" />
+    <result column="cu_text2" jdbcType="VARCHAR" property="cu_text2" />
+    <result column="cu_text3" jdbcType="VARCHAR" property="cu_text3" />
+    <result column="cu_text4" jdbcType="VARCHAR" property="cu_text4" />
+    <result column="cu_text5" jdbcType="VARCHAR" property="cu_text5" />
+    <result column="cu_leftamount" jdbcType="DOUBLE" property="cu_leftamount" />
+    <result column="cu_recamount" jdbcType="DOUBLE" property="cu_recamount" />
+    <result column="cu_preamount" jdbcType="DOUBLE" property="cu_preamount" />
+    <result column="cu_remark" jdbcType="VARCHAR" property="cu_remark" />
+    <result column="cu_currency" jdbcType="VARCHAR" property="cu_currency" />
+    <result column="cr_rate" jdbcType="DOUBLE" property="cr_rate" />
+  </resultMap>
+
+  <select id="selectCustByCustCode" resultMap="CustomerDTOMap">
+    select * from customer where cu_code = #{code} and companyId = #{companyId} and cu_status != '已禁用'
+  </select>
+
+  <resultMap id="ProductDTOResultMapper" type="com.usoftchina.saas.document.dto.ProductDTO">
+    <id column="pr_id" property="id" jdbcType="INTEGER"/>
+    <result column="pr_code" property="pr_code" jdbcType="VARCHAR"/>
+    <result column="pr_detail" property="pr_detail" jdbcType="VARCHAR"/>
+    <result column="pr_spec" property="pr_spec" jdbcType="VARCHAR"/>
+    <result column="pr_unit" property="pr_unit" jdbcType="VARCHAR"/>
+    <result column="pr_whid" property="pr_whid" jdbcType="INTEGER"/>
+    <result column="pr_whcode" property="pr_whcode" jdbcType="VARCHAR"/>
+    <result column="pr_whname" property="pr_whname" jdbcType="VARCHAR"/>
+    <!--productonhand-->
+    <result column="po_onhand" property="po_onhand" jdbcType="DOUBLE"/>
+    <result column="po_avprice" property="po_avprice" jdbcType="DOUBLE"/>
+    <!--productonhand-->
+    <result column="pr_kind" property="pr_kind" jdbcType="VARCHAR"/>
+    <result column="pr_orispeccode" property="pr_orispeccode" jdbcType="VARCHAR"/>
+    <result column="pr_brand" property="pr_brand" jdbcType="VARCHAR"/>
+    <result column="pr_vendname" property="pr_vendname" jdbcType="VARCHAR"/>
+    <result column="pr_zxbzs" property="pr_zxbzs" jdbcType="VARCHAR"/>
+    <result column="pr_leadtime" property="pr_leadtime" jdbcType="INTEGER"/>
+    <result column="pr_status" property="pr_status" jdbcType="VARCHAR"/>
+    <result column="pr_statuscode" property="pr_statuscode" jdbcType="VARCHAR"/>
+    <result column="pr_remark" property="pr_remark" jdbcType="VARCHAR"/>
+  </resultMap>
+
+  <select id="selectProductByCode" resultMap="ProductDTOResultMapper">
+    select * from product where pr_code = #{code} and companyId = #{companyId}
+  </select>
 </mapper>

+ 1 - 1
applications/sale/sale-server/src/main/resources/mapper/SaledownMapper.xml

@@ -46,7 +46,7 @@
   </sql>
   <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="long" >
     select 
-    <include refid="Base_Column_List" />
+    *
     from saledown
     where sa_id = #{sa_id}
   </select>

+ 5 - 0
applications/transfers/mall-api/pom.xml

@@ -37,6 +37,11 @@
             <artifactId>spring-boot-starter-data-redis</artifactId>
             <scope>test</scope>
         </dependency>
+      <dependency>
+        <groupId>com.alibaba</groupId>
+        <artifactId>fastjson</artifactId>
+        <scope>test</scope>
+      </dependency>
     </dependencies>
 
 </project>

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

@@ -1,11 +1,9 @@
 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.PublicInquiryItemInfo;
 import com.usoftchina.saas.inquiry.po.inquiry.*;
 import feign.Response;
 import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.stereotype.Component;
 import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.*;
 
@@ -63,6 +61,28 @@ public interface InquiryApi {
                                               @RequestParam("quoted") Integer quoted, @RequestParam("fromDate") Long fromDate,
                                               @RequestParam("endDate") Long endDate);
 
+    /**
+     * 查看已报价列表
+     * @param pageNumber    页码
+     * @param pageSize      每页大小
+     * @param keyword       关键字
+     * @param _state        状态  已报价 为 done
+     * @param overdue       为空或不等于1时,只查看未过报价截止日期,为1时,查看所有已报价
+     * @param filter
+     *          <p> userUU          用户UU 不为空时,只查看此用户报价的单      </p>
+     *          <p> fromDate        筛选报价时间 开始                       </p>
+     *          <p> endDate         筛选报价时间 结束                       </p>
+     *          <p> fromDelivery    发布时间筛选 开始                       </p>
+     *          <p> endDelivery     发布时间筛选 结束                       </p>
+     *          <p> enUU            企业UU报价企业UU                       </p>
+     * @return
+     */
+    @GetMapping("/public/quotation/list")
+    IPage<PublicInquiryItemInfo> findQuotationList(@RequestParam("pageNumber") int pageNumber, @RequestParam("pageSize") int pageSize,
+                                                   @RequestParam("keyword") String keyword, @RequestParam("_state") String _state,
+                                                   @RequestParam("overdue") Integer overdue, @RequestParam("filter") String filter);
+
+
     /**
      * 保存报价接口
      * @param publicInquiryItem 报价单内容

+ 249 - 0
applications/transfers/mall-api/src/main/java/com/usoftchina/saas/inquiry/po/inquiry/PublicInquiryInfo.java

@@ -0,0 +1,249 @@
+package com.usoftchina.saas.inquiry.po.inquiry;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.Set;
+
+/**
+ *  公共询价单主表
+ *    <pre>
+ *        这里是公共询价转成报价后存的数据信息,与以前的采购询价分开
+ *    </pre>
+ * @Author chenwei
+ * @Date 2019-03-25
+ */
+public class PublicInquiryInfo implements Serializable {
+
+    private Long id;
+
+    /**
+     * 询价单所属企业UU
+     */
+    private Long enUU;
+
+    /**
+     * 询价企业名称(方便搜索)
+     */
+    private String enName;
+
+    /**
+     * 询价企业信息
+     */
+    private Enterprise enterprise;
+
+    /**
+     * 询价单所属用户UU
+     */
+    private Long recorderUU;
+
+    /**
+     * 流水号
+     */
+    private String code;
+
+    /**
+     * 单据归属日期
+     */
+    private Date date;
+
+    /**
+     * 录入人
+     */
+    private String recorder;
+
+    /**
+     * 报价截止日期
+     */
+    private Date endDate;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    /**
+     * 环保要求
+     */
+    private String environment;
+
+    /**
+     * 询价明细
+     */
+    private Set<PublicInquiryItemInfo> inquiryItems;
+
+    /**
+     * 来源系统单据ID
+     */
+    private Long sourceId;
+
+    /**
+     * 是否过期
+     */
+    private Short overdue;
+
+    /**
+     * 应用来源,主要是为了平台公共询价做处理
+     */
+    private String sourceApp;
+
+    /**
+     * 收货地址
+     */
+    private String ship;
+
+    /**
+     * 是否开票<br>
+     * 1. 是<br>
+     * 0. 否
+     */
+    private Short invoice;
+
+    /**
+     * 询价类型
+     */
+    private String inquirytype;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getEnUU() {
+        return enUU;
+    }
+
+    public void setEnUU(Long enUU) {
+        this.enUU = enUU;
+    }
+
+    public String getEnName() {
+        return enName;
+    }
+
+    public void setEnName(String enName) {
+        this.enName = enName;
+    }
+
+    public Enterprise getEnterprise() {
+        return enterprise;
+    }
+
+    public void setEnterprise(Enterprise enterprise) {
+        this.enterprise = enterprise;
+    }
+
+    public Long getRecorderUU() {
+        return recorderUU;
+    }
+
+    public void setRecorderUU(Long recorderUU) {
+        this.recorderUU = recorderUU;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public Date getDate() {
+        return date;
+    }
+
+    public void setDate(Date date) {
+        this.date = date;
+    }
+
+    public String getRecorder() {
+        return recorder;
+    }
+
+    public void setRecorder(String recorder) {
+        this.recorder = recorder;
+    }
+
+    public Date getEndDate() {
+        return endDate;
+    }
+
+    public void setEndDate(Date endDate) {
+        this.endDate = endDate;
+    }
+
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    public String getEnvironment() {
+        return environment;
+    }
+
+    public void setEnvironment(String environment) {
+        this.environment = environment;
+    }
+
+    public Set<PublicInquiryItemInfo> getInquiryItems() {
+        return inquiryItems;
+    }
+
+    public void setInquiryItems(Set<PublicInquiryItemInfo> inquiryItems) {
+        this.inquiryItems = inquiryItems;
+    }
+
+    public Long getSourceId() {
+        return sourceId;
+    }
+
+    public void setSourceId(Long sourceId) {
+        this.sourceId = sourceId;
+    }
+
+    public Short getOverdue() {
+        return overdue;
+    }
+
+    public void setOverdue(Short overdue) {
+        this.overdue = overdue;
+    }
+
+    public String getSourceApp() {
+        return sourceApp;
+    }
+
+    public void setSourceApp(String sourceApp) {
+        this.sourceApp = sourceApp;
+    }
+
+    public String getShip() {
+        return ship;
+    }
+
+    public void setShip(String ship) {
+        this.ship = ship;
+    }
+
+    public Short getInvoice() {
+        return invoice;
+    }
+
+    public void setInvoice(Short invoice) {
+        this.invoice = invoice;
+    }
+
+    public String getInquirytype() {
+        return inquirytype;
+    }
+
+    public void setInquirytype(String inquirytype) {
+        this.inquirytype = inquirytype;
+    }
+}

+ 674 - 0
applications/transfers/mall-api/src/main/java/com/usoftchina/saas/inquiry/po/inquiry/PublicInquiryItemInfo.java

@@ -0,0 +1,674 @@
+package com.usoftchina.saas.inquiry.po.inquiry;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Author chenwei
+ * @Date 2019-03-25
+ */
+public class PublicInquiryItemInfo implements Serializable {
+    /**
+     * id
+     */
+    private Long id;
+    /**
+     * 来源(买家ERP采购询价明细)的ID
+     */
+    private Long sourceId;
+    /**
+     * 序号
+     */
+    private Short number;
+    /**
+     * 询价单
+     */
+    private PublicInquiryInfo inquiry;
+    /**
+     * 买家采购员UU
+     */
+    private Long userUU;
+    /**
+     * 联系人姓名
+     */
+    private String userName;
+    /**
+     * 联系人电话
+     */
+    private String userTel;
+    /**
+     * 产品id
+     */
+    private Long productId;
+    /**
+     * 产品
+     */
+    private Product product;
+    /**
+     * 币种
+     */
+    private String currency;
+    /**
+     * 税率
+     */
+    private Float taxrate;
+    /**
+     * 供应商UU
+     */
+    private Long vendUU;
+    /**
+     * 供应商企业信息
+     */
+    private Enterprise enterprise;
+    /**
+     * 供应商联系人UU
+     */
+    private Long vendUserUU;
+    /**
+     * (买家预先提供的)有效期始
+     */
+    private Date fromDate;
+    /**
+     * (卖家报的)最小订购量
+     */
+    private Double minOrderQty;
+    /**
+     * (卖家报的)最小包装量
+     */
+    private Double minPackQty;
+    /**
+     * (卖家报的)供应商物料编号
+     */
+    private String vendorprodcode;
+    /**
+     * (卖家报的)交货周期(天数)
+     */
+    private Long leadtime;
+    /**
+     * {未回复、已回复}
+     */
+    private Short status;
+    /**
+     * (针对买家的)报价信息传输状态{待上传、已下载}
+     */
+    private Short sendStatus;
+    /**
+     * (针对卖家的)报价信息传输状态{待上传、已下载}
+     */
+    private Short replySendStatus;
+    /**
+     * 是否采纳
+     */
+    private Short agreed;
+    /**
+     * (针对卖家的)是否采纳信息传输状态{待上传、已下载}
+     */
+    private Short decideStatus;
+    /**
+     * (针对卖家的)作废信息传输状态{待上传、已下载}
+     */
+    private Short invalidStatus;
+    /**
+     * 录入时间
+     */
+    private Date date;
+    /**
+     *  报价是否过期
+     */
+    private Short overdue;
+    /**
+     * 应用来源ERP、B2B
+     */
+    private String source;
+    /**
+     * 报价的应用
+     */
+    private String qutoApp;
+    /**
+     * 需求数量
+     */
+    private Double needquantity;
+    /**
+     * erp传输状态
+     *
+     * <pre>erp发出数据传输请求时,赋给状态,完成后更新状态</pre>
+     *
+     * 1、 传输完成<br>
+     * 0、 正在传输
+     *
+     */
+    private Short erpstatus;
+
+	/*这下面是供应商报价时存的相关信息;
+	* 因为存在非客户报价,而且公共服务里面没有企业信息,现存入相关字段,后续处理*/
+    /**
+     * 供应商名称
+     */
+    private String vendName;
+
+    /**
+     * 供应商营业执照
+     */
+    private String businessCode;
+
+    /**
+     * 报价时间
+     */
+    private Date offerTime;
+
+    /**
+     * 分段报价明细
+     */
+    private List<PublicInquiryReplyInfo> replies;
+
+    /**
+     * 截止日期
+     */
+    private Date endDate;
+
+
+    /**
+     * ************* 上传的物料信息,物料冗余字段 *************
+     */
+    /**
+     * 物料编号
+     */
+    private String prodCode;
+
+    /**
+     * 名称
+     */
+    private String prodTitle;
+
+    /**
+     * 规格
+     */
+    private String spec;
+
+    /**
+     * 型号
+     */
+    private String cmpCode;
+
+    /**
+     * 品牌
+     */
+    private String inbrand;
+    /**
+     * ******end*******
+     */
+
+    /**
+     * 剩余时间
+     */
+    private Long remainingTime;
+
+    /**
+     * 报价附件信息
+     */
+    private String attachUrl;
+
+    /**
+     * 报价附件名称
+     */
+    private String attachName;
+
+    /**
+     * 供应商企业信息
+     */
+    private User user;
+
+    /**
+     * 买家发出公共询价单时录入的币别
+     */
+    private String custCurrency;
+
+    /**
+     * 拒绝采纳理由
+     */
+    private String refusereason;
+
+    /******** 替代物料信息  */
+
+    /**
+     * 替代型号
+     */
+    private String replaceCmpCode;
+
+    /**
+     * 替代规格
+     */
+    private String replaceSpec;
+
+    /**
+     * 替代品牌
+     */
+    private String replaceBrand;
+
+    /**
+     * 是否替代物料报价  1 是替代料报价, 0为普通报价
+     */
+    private Short isReplace = 0;
+
+    /**
+     * 总计价格(用于商城bom求购明细价格分析  dongbw  2018年9月5日 14:59:48)
+     */
+    private Double sumPrice;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getSourceId() {
+        return sourceId;
+    }
+
+    public void setSourceId(Long sourceId) {
+        this.sourceId = sourceId;
+    }
+
+    public Short getNumber() {
+        return number;
+    }
+
+    public void setNumber(Short number) {
+        this.number = number;
+    }
+
+    public PublicInquiryInfo getInquiry() {
+        return inquiry;
+    }
+
+    public void setInquiry(PublicInquiryInfo inquiry) {
+        this.inquiry = inquiry;
+    }
+
+    public Long getUserUU() {
+        return userUU;
+    }
+
+    public void setUserUU(Long userUU) {
+        this.userUU = userUU;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getUserTel() {
+        return userTel;
+    }
+
+    public void setUserTel(String userTel) {
+        this.userTel = userTel;
+    }
+
+    public Long getProductId() {
+        return productId;
+    }
+
+    public void setProductId(Long productId) {
+        this.productId = productId;
+    }
+
+    public Product getProduct() {
+        return product;
+    }
+
+    public void setProduct(Product product) {
+        this.product = product;
+    }
+
+    public String getCurrency() {
+        return currency;
+    }
+
+    public void setCurrency(String currency) {
+        this.currency = currency;
+    }
+
+    public Float getTaxrate() {
+        return taxrate;
+    }
+
+    public void setTaxrate(Float taxrate) {
+        this.taxrate = taxrate;
+    }
+
+    public Long getVendUU() {
+        return vendUU;
+    }
+
+    public void setVendUU(Long vendUU) {
+        this.vendUU = vendUU;
+    }
+
+    public Enterprise getEnterprise() {
+        return enterprise;
+    }
+
+    public void setEnterprise(Enterprise enterprise) {
+        this.enterprise = enterprise;
+    }
+
+    public Long getVendUserUU() {
+        return vendUserUU;
+    }
+
+    public void setVendUserUU(Long vendUserUU) {
+        this.vendUserUU = vendUserUU;
+    }
+
+    public Date getFromDate() {
+        return fromDate;
+    }
+
+    public void setFromDate(Date fromDate) {
+        this.fromDate = fromDate;
+    }
+
+    public Double getMinOrderQty() {
+        return minOrderQty;
+    }
+
+    public void setMinOrderQty(Double minOrderQty) {
+        this.minOrderQty = minOrderQty;
+    }
+
+    public Double getMinPackQty() {
+        return minPackQty;
+    }
+
+    public void setMinPackQty(Double minPackQty) {
+        this.minPackQty = minPackQty;
+    }
+
+    public String getVendorprodcode() {
+        return vendorprodcode;
+    }
+
+    public void setVendorprodcode(String vendorprodcode) {
+        this.vendorprodcode = vendorprodcode;
+    }
+
+    public Long getLeadtime() {
+        return leadtime;
+    }
+
+    public void setLeadtime(Long leadtime) {
+        this.leadtime = leadtime;
+    }
+
+    public Short getStatus() {
+        return status;
+    }
+
+    public void setStatus(Short status) {
+        this.status = status;
+    }
+
+    public Short getSendStatus() {
+        return sendStatus;
+    }
+
+    public void setSendStatus(Short sendStatus) {
+        this.sendStatus = sendStatus;
+    }
+
+    public Short getReplySendStatus() {
+        return replySendStatus;
+    }
+
+    public void setReplySendStatus(Short replySendStatus) {
+        this.replySendStatus = replySendStatus;
+    }
+
+    public Short getAgreed() {
+        return agreed;
+    }
+
+    public void setAgreed(Short agreed) {
+        this.agreed = agreed;
+    }
+
+    public Short getDecideStatus() {
+        return decideStatus;
+    }
+
+    public void setDecideStatus(Short decideStatus) {
+        this.decideStatus = decideStatus;
+    }
+
+    public Short getInvalidStatus() {
+        return invalidStatus;
+    }
+
+    public void setInvalidStatus(Short invalidStatus) {
+        this.invalidStatus = invalidStatus;
+    }
+
+    public Date getDate() {
+        return date;
+    }
+
+    public void setDate(Date date) {
+        this.date = date;
+    }
+
+    public Short getOverdue() {
+        return overdue;
+    }
+
+    public void setOverdue(Short overdue) {
+        this.overdue = overdue;
+    }
+
+    public String getSource() {
+        return source;
+    }
+
+    public void setSource(String source) {
+        this.source = source;
+    }
+
+    public String getQutoApp() {
+        return qutoApp;
+    }
+
+    public void setQutoApp(String qutoApp) {
+        this.qutoApp = qutoApp;
+    }
+
+    public Double getNeedquantity() {
+        return needquantity;
+    }
+
+    public void setNeedquantity(Double needquantity) {
+        this.needquantity = needquantity;
+    }
+
+    public Short getErpstatus() {
+        return erpstatus;
+    }
+
+    public void setErpstatus(Short erpstatus) {
+        this.erpstatus = erpstatus;
+    }
+
+    public String getVendName() {
+        return vendName;
+    }
+
+    public void setVendName(String vendName) {
+        this.vendName = vendName;
+    }
+
+    public String getBusinessCode() {
+        return businessCode;
+    }
+
+    public void setBusinessCode(String businessCode) {
+        this.businessCode = businessCode;
+    }
+
+    public Date getOfferTime() {
+        return offerTime;
+    }
+
+    public void setOfferTime(Date offerTime) {
+        this.offerTime = offerTime;
+    }
+
+    public List<PublicInquiryReplyInfo> getReplies() {
+        return replies;
+    }
+
+    public void setReplies(List<PublicInquiryReplyInfo> replies) {
+        this.replies = replies;
+    }
+
+    public Date getEndDate() {
+        return endDate;
+    }
+
+    public void setEndDate(Date endDate) {
+        this.endDate = endDate;
+    }
+
+    public String getProdCode() {
+        return prodCode;
+    }
+
+    public void setProdCode(String prodCode) {
+        this.prodCode = prodCode;
+    }
+
+    public String getProdTitle() {
+        return prodTitle;
+    }
+
+    public void setProdTitle(String prodTitle) {
+        this.prodTitle = prodTitle;
+    }
+
+    public String getSpec() {
+        return spec;
+    }
+
+    public void setSpec(String spec) {
+        this.spec = spec;
+    }
+
+    public String getCmpCode() {
+        return cmpCode;
+    }
+
+    public void setCmpCode(String cmpCode) {
+        this.cmpCode = cmpCode;
+    }
+
+    public String getInbrand() {
+        return inbrand;
+    }
+
+    public void setInbrand(String inbrand) {
+        this.inbrand = inbrand;
+    }
+
+    public Long getRemainingTime() {
+        return remainingTime;
+    }
+
+    public void setRemainingTime(Long remainingTime) {
+        this.remainingTime = remainingTime;
+    }
+
+    public String getAttachUrl() {
+        return attachUrl;
+    }
+
+    public void setAttachUrl(String attachUrl) {
+        this.attachUrl = attachUrl;
+    }
+
+    public String getAttachName() {
+        return attachName;
+    }
+
+    public void setAttachName(String attachName) {
+        this.attachName = attachName;
+    }
+
+    public User getUser() {
+        return user;
+    }
+
+    public void setUser(User user) {
+        this.user = user;
+    }
+
+    public String getCustCurrency() {
+        return custCurrency;
+    }
+
+    public void setCustCurrency(String custCurrency) {
+        this.custCurrency = custCurrency;
+    }
+
+    public String getRefusereason() {
+        return refusereason;
+    }
+
+    public void setRefusereason(String refusereason) {
+        this.refusereason = refusereason;
+    }
+
+    public String getReplaceCmpCode() {
+        return replaceCmpCode;
+    }
+
+    public void setReplaceCmpCode(String replaceCmpCode) {
+        this.replaceCmpCode = replaceCmpCode;
+    }
+
+    public String getReplaceSpec() {
+        return replaceSpec;
+    }
+
+    public void setReplaceSpec(String replaceSpec) {
+        this.replaceSpec = replaceSpec;
+    }
+
+    public String getReplaceBrand() {
+        return replaceBrand;
+    }
+
+    public void setReplaceBrand(String replaceBrand) {
+        this.replaceBrand = replaceBrand;
+    }
+
+    public Short getIsReplace() {
+        return isReplace;
+    }
+
+    public void setIsReplace(Short isReplace) {
+        this.isReplace = isReplace;
+    }
+
+    public Double getSumPrice() {
+        return sumPrice;
+    }
+
+    public void setSumPrice(Double sumPrice) {
+        this.sumPrice = sumPrice;
+    }
+}

+ 52 - 0
applications/transfers/mall-api/src/main/java/com/usoftchina/saas/inquiry/po/inquiry/PublicInquiryReplyInfo.java

@@ -0,0 +1,52 @@
+package com.usoftchina.saas.inquiry.po.inquiry;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 公共询价单报价明细
+ * @Author chenwei
+ * @Date 2019-03-25
+ */
+public class PublicInquiryReplyInfo implements Serializable {
+
+    /**
+     * id
+     */
+    private Long id;
+
+    /**
+     * (买家或卖家定义的)分段数量
+     */
+    private Double lapQty;
+
+    /**
+     * (卖家报的)单价
+     */
+    private Double price;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Double getLapQty() {
+        return lapQty;
+    }
+
+    public void setLapQty(Double lapQty) {
+        this.lapQty = lapQty;
+    }
+
+    public Double getPrice() {
+        return price;
+    }
+
+    public void setPrice(Double price) {
+        this.price = price;
+    }
+}

+ 15 - 0
applications/transfers/mall-api/src/test/java/com/usoftchina/saas/inquiry/test/InquiryApiTest.java

@@ -1,5 +1,6 @@
 package com.usoftchina.saas.inquiry.test;
 
+import com.alibaba.fastjson.JSONObject;
 import com.usoftchina.saas.inquiry.api.InquiryApi;
 import com.usoftchina.saas.inquiry.po.inquiry.*;
 import com.usoftchina.saas.utils.JsonUtils;
@@ -194,4 +195,18 @@ public class InquiryApiTest {
             System.out.println("result3: " + sb);
         }
     }
+
+    @Test
+    public void testI_findQuotationList(){
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("userUU", null);
+        jsonObject.put("enUU", "10050690");
+        jsonObject.put("fromDate", null);
+        jsonObject.put("endDate", null);
+        jsonObject.put("fromDelivery", null);
+        jsonObject.put("endDelivery", null);
+        String filter = jsonObject.toJSONString();
+        IPage<PublicInquiryItemInfo> publicInquiryItemInfoIPage = inquiryApi.findQuotationList(1, 10, null, "done", 1, filter);
+        System.out.println(JsonUtils.toJsonString(publicInquiryItemInfoIPage));
+    }
 }

+ 6 - 1
frontend/saas-web/app/view/core/base/ImportWindow.js

@@ -8,6 +8,8 @@ Ext.define('saas.view.core.base.ImportWindow', {
         'Ext.container.ButtonGroup'
     ],
 
+    cls: 'import-window',
+
     bbar:['->',{
         hidden:true,
         name:'prev',
@@ -79,10 +81,11 @@ Ext.define('saas.view.core.base.ImportWindow', {
         handler:function(b){
             var form = b.ownerCt.ownerCt;
             var id = form.importId;
+            var importUploadPath = form.importUploadPath;
             if(id){
                 form.setLoading(true);
                 Ext.Ajax.request({
-                    url: '/api/document/'+form.ownerCt.caller.toLocaleLowerCase()+'/saveToFormal',//这里是填写需要跨域访问的URL
+                    url: importUploadPath || '/api/document/'+form.ownerCt.caller.toLocaleLowerCase()+'/saveToFormal',//这里是填写需要跨域访问的URL
                     method: 'post',
                     headers: {
                         'Access-Control-Allow-Origin': '*',
@@ -179,6 +182,7 @@ Ext.define('saas.view.core.base.ImportWindow', {
                             //获取模版
                             var serverOptions = Ext.manifest.server;
                             window.location.href = (serverOptions.basePath.https?serverOptions.basePath.https:serverOptions.basePath) + '/api/commons/excel/import/templet?caller='+caller;
+                            // window.open('http://10.1.80.36:8560' + '/api/commons/excel/import/templet?caller='+caller);
                         }
                     }
                 },{
@@ -251,6 +255,7 @@ Ext.define('saas.view.core.base.ImportWindow', {
                             form.setLoading(true);
                             Ext.Ajax.request({
                                 url: '/api/commons/excel/import/parse',//这里是填写需要跨域访问的URL
+                                // url: 'http://10.1.80.36:8560' + '/api/commons/excel/import/parse',//这里是填写需要跨域访问的URL
                                 cors: true,
                                 useDefaultXhrHeader: false,
                                 method: 'post',

+ 5 - 0
frontend/saas-web/app/view/core/base/ImportWindow.scss

@@ -0,0 +1,5 @@
+.x-window-dbfind {
+    .x-panel-bodyWrap .x-panel-body .x-box-inner {
+        background: #ffffff !important;
+    }
+}

+ 8 - 1
frontend/saas-web/app/view/core/query/QueryGridPanel.js

@@ -214,12 +214,19 @@ Ext.define('saas.view.core.query.QueryGridPanel', {
                     bind: {
                         hidden: '{!auditEnable}'
                     }
+                },  {
+                    text: '导入',
+                    handler: 'onImport',
+                    hidden: true,
+                    bind: {
+                        hidden: '{!importEnable}'
+                    }
                 },  {
                     text: '导出',
                     handler: me.onExport,
                     hidden: true,
                     bind: {
-                        hidden: '{!importEnable}'
+                        hidden: '{!exportEnable}'
                     }
                 },{
                     text: '关闭',

+ 1 - 0
frontend/saas-web/app/view/core/query/QueryPanelController.js

@@ -45,6 +45,7 @@ Ext.define('saas.view.core.query.QueryPanelController', {
     onCloseClick:function(btn){
         this.queryWin = Ext.destroy(this.queryWin);
     },
+    onImport: Ext.emptyFn,
 
     onColSetting: function() {
         var me = this,

+ 2 - 1
frontend/saas-web/app/view/core/query/QueryPanelModel.js

@@ -7,7 +7,8 @@ Ext.define('saas.view.core.query.QueryPanelModel', {
         addEnable: true, // 显示新增按钮
         auditEnable: true, // 显示审核按钮
         printEnable: true, // 显示打印按钮
-        importEnable: true, // 显示导入按钮
+        importEnable: false, // 显示导入按钮
+        exportEnable: true, // 显示导出按钮
         closeEnable: true, // 显示关闭按钮
         deleteEnable: true, // 显示删除按钮
         deleteDisable:false, //删除按钮是否可使用

+ 4 - 2
frontend/saas-web/app/view/sale/sale/QueryPanel.js

@@ -6,6 +6,9 @@ Ext.define('saas.view.sale.sale.QueryPanel', {
     viewModel: 'sale-sale-querypanel',
 
     viewName: 'sale-sale-querypanel',
+
+    caller: 'Sale',
+    importUploadPath: '/api/sale/sale/saveToFormal',
     
     initComponent: function() {
         var me = this;
@@ -154,8 +157,7 @@ Ext.define('saas.view.sale.sale.QueryPanel', {
                     text: '备注',
                     dataIndex: 'sa_remark',
                     width: 250
-                }
-            ],
+                }],
                 relativeColumn: [ {
                     text: 'id',
                     dataIndex: 'sa_id',

+ 27 - 0
frontend/saas-web/app/view/sale/sale/QueryPanelController.js

@@ -50,5 +50,32 @@ Ext.define('saas.view.sale.sale.QueryPanelController', {
             }
         });
 
+    },
+
+    onImport: function() {
+        var me = this;
+        var view = me.getView();
+        var panelEl = view.getEl();
+        var box = panelEl.getBox();
+        var height = box.height;
+        var width = box.width;
+
+        var win = view.add(Ext.create('saas.view.core.base.ImportWindow', {  
+            cls:'x-window-dbfind', 
+            belong:view,  
+            modal:true,
+            height: height * 0.8,
+            width: width * 0.8,
+            title: '导入',
+            scrollable: true,
+            bodyPadding: 10,
+            constrain: true,
+            closable: true,
+            layout:'fit',
+            caller: view.caller,
+            importUploadPath: view.importUploadPath,
+            renderTo:view.getEl()
+        }));
+        win.show();
     }
 });

+ 5 - 1
frontend/saas-web/app/view/sale/sale/QueryPanelModel.js

@@ -1,5 +1,9 @@
 Ext.define('saas.view.sale.sale.QueryPanelModel', {
     extend: 'saas.view.core.query.QueryPanelModel',
-    alias: 'viewmodel.sale-sale-querypanel'
+    alias: 'viewmodel.sale-sale-querypanel',
+
+    data: {
+        importEnable: true, // 显示导入按钮
+    }
 
 });