Переглянути джерело

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

chenw 6 роки тому
батько
коміт
2e9542d17e
96 змінених файлів з 4677 додано та 671 видалено
  1. 3 1
      applications/commons/commons-api/src/main/java/com/usoftchina/saas/commons/api/ConfigsApi.java
  2. 8 1
      applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/exception/BizExceptionCode.java
  3. 7 1
      applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/po/BillCodeSeq.java
  4. 4 0
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/controller/ConfigsController.java
  5. 2 0
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/mapper/ConfigsMapper.java
  6. 3 0
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/mapper/EndProductMapper.java
  7. 2 0
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/ConfigsService.java
  8. 12 0
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/impl/ConfigsServiceImpl.java
  9. 12 3
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/impl/EndProductServiceImpl.java
  10. 3 0
      applications/commons/commons-server/src/main/resources/mapper/ConfigsMapper.xml
  11. 20 0
      applications/commons/commons-server/src/main/resources/mapper/EndProductMapper.xml
  12. 139 0
      applications/document/document-dto/src/main/java/com/usoftchina/saas/document/entities/CustAramount.java
  13. 69 0
      applications/document/document-dto/src/main/java/com/usoftchina/saas/document/entities/CustAramountList.java
  14. 139 0
      applications/document/document-dto/src/main/java/com/usoftchina/saas/document/entities/VendApamount.java
  15. 47 0
      applications/document/document-dto/src/main/java/com/usoftchina/saas/document/entities/VendApamountList.java
  16. 25 1
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/controller/CurrencyController.java
  17. 76 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/controller/CustAramountController.java
  18. 84 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/controller/VendApamountController.java
  19. 3 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/CurrencyMapper.java
  20. 44 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/CustAramountMapper.java
  21. 5 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/CustomerMapper.java
  22. 6 1
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/SubledgerMapper.java
  23. 42 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/VendApamountMapper.java
  24. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/VendorMapper.java
  25. 30 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/CustAramountService.java
  26. 32 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/VendApamountService.java
  27. 432 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/CustAramountServiceImpl.java
  28. 32 84
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/CustomerServiceImpl.java
  29. 429 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/VendApamountServiceImpl.java
  30. 31 78
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/VendorServiceImpl.java
  31. 12 0
      applications/document/document-server/src/main/resources/mapper/CurrencyMapper.xml
  32. 378 0
      applications/document/document-server/src/main/resources/mapper/CustAramountMapper.xml
  33. 22 0
      applications/document/document-server/src/main/resources/mapper/CustomerMapper.xml
  34. 5 0
      applications/document/document-server/src/main/resources/mapper/DataImportMapper.xml
  35. 31 1
      applications/document/document-server/src/main/resources/mapper/SubledgerMapper.xml
  36. 378 0
      applications/document/document-server/src/main/resources/mapper/VendApamountMapper.xml
  37. 10 0
      applications/document/document-server/src/main/resources/mapper/VendorMapper.xml
  38. 9 4
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/mapper/PaybalanceMapper.java
  39. 10 0
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/AcountbalanceView.java
  40. 10 0
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/Banksubledger.java
  41. 30 0
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/CustomerCheckView.java
  42. 101 0
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/VendApamount.java
  43. 30 0
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/VendorAcountView.java
  44. 59 34
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/PaybalanceServiceImpl.java
  45. 442 294
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/VerificationServiceImpl.java
  46. 1 0
      applications/money/money-server/src/main/resources/mapper/AcountbalanceViewMapper.xml
  47. 5 4
      applications/money/money-server/src/main/resources/mapper/BanksubledgerMapper.xml
  48. 3 0
      applications/money/money-server/src/main/resources/mapper/CustomerCheckViewMapper.xml
  49. 157 0
      applications/money/money-server/src/main/resources/mapper/PaybalanceMapper.xml
  50. 3 0
      applications/money/money-server/src/main/resources/mapper/VendorAcountViewMapper.xml
  51. 1 1
      applications/money/money-server/src/main/resources/mapper/VerificationdetMapper.xml
  52. 1 1
      applications/money/money-server/src/main/resources/mapper/VerificationdetailMapper.xml
  53. 1 1
      applications/purchase/purchase-server/src/main/resources/mapper/ProdInOutListMapper.xml
  54. 1 0
      frontend/saas-web/app/view/core/base/BasePanelModel.js
  55. 8 1
      frontend/saas-web/app/view/core/base/GridPanel.js
  56. 0 1
      frontend/saas-web/app/view/core/chart/ChartBase.js
  57. 1 1
      frontend/saas-web/app/view/core/dbfind/ConDbfindTrigger.js
  58. 2 0
      frontend/saas-web/app/view/core/dbfind/DbfindGridPanel.scss
  59. 20 2
      frontend/saas-web/app/view/core/dbfind/DbfindTrigger.js
  60. 1 1
      frontend/saas-web/app/view/core/form/FormPanel.js
  61. 1 0
      frontend/saas-web/app/view/core/form/FormPanelModel.js
  62. 1 0
      frontend/saas-web/app/view/core/form/field/FileField.js
  63. 0 18
      frontend/saas-web/app/view/document/currencys/DatalistController.js
  64. 113 0
      frontend/saas-web/app/view/document/custaramount/AddWindow.js
  65. 177 0
      frontend/saas-web/app/view/document/custaramount/BasePanel.js
  66. 10 0
      frontend/saas-web/app/view/document/custaramount/BasePanelController.js
  67. 9 0
      frontend/saas-web/app/view/document/custaramount/BasePanelModel.js
  68. 117 0
      frontend/saas-web/app/view/document/custaramount/Window.js
  69. 10 2
      frontend/saas-web/app/view/document/customer/BasePanel.js
  70. 17 38
      frontend/saas-web/app/view/document/customer/FormPanel.js
  71. 113 0
      frontend/saas-web/app/view/document/vendapamount/AddWindow.js
  72. 177 0
      frontend/saas-web/app/view/document/vendapamount/BasePanel.js
  73. 10 0
      frontend/saas-web/app/view/document/vendapamount/BasePanelController.js
  74. 9 0
      frontend/saas-web/app/view/document/vendapamount/BasePanelModel.js
  75. 117 0
      frontend/saas-web/app/view/document/vendapamount/Window.js
  76. 10 2
      frontend/saas-web/app/view/document/vendor/BasePanel.js
  77. 16 38
      frontend/saas-web/app/view/document/vendor/FormPanel.js
  78. 75 0
      frontend/saas-web/app/view/money/payBalance/FormPanel.js
  79. 1 5
      frontend/saas-web/app/view/money/payBalance/FormPanelController.js
  80. 75 0
      frontend/saas-web/app/view/money/recBalance/FormPanel.js
  81. 1 5
      frontend/saas-web/app/view/money/recBalance/FormPanelController.js
  82. 4 0
      frontend/saas-web/app/view/money/report/AccountBalance.js
  83. 32 2
      frontend/saas-web/app/view/money/report/CustomerCheck.js
  84. 4 0
      frontend/saas-web/app/view/money/report/OtherIODetail.js
  85. 35 5
      frontend/saas-web/app/view/money/report/VendorCheck.js
  86. 21 37
      frontend/saas-web/app/view/money/verification/FormPanel.js
  87. 1 0
      frontend/saas-web/app/view/purchase/b2b/reconciliation/FormPanelModel.js
  88. 8 0
      frontend/saas-web/app/view/purchase/purchase/FormPanel.js
  89. 1 1
      frontend/saas-web/app/view/purchase/purchase/FormPanelController.js
  90. 8 0
      frontend/saas-web/app/view/purchase/purchase/QueryPanel.js
  91. 1 1
      frontend/saas-web/app/view/sale/b2b/recformpanel/FormPanelController.js
  92. 1 0
      frontend/saas-web/app/view/sale/b2b/recformpanel/FormPanelModel.js
  93. 8 0
      frontend/saas-web/app/view/sale/sale/FormPanel.js
  94. 1 1
      frontend/saas-web/app/view/sale/sale/FormPanelController.js
  95. 8 0
      frontend/saas-web/app/view/sale/sale/QueryPanel.js
  96. 10 0
      frontend/saas-web/resources/json/navigation.json

+ 3 - 1
applications/commons/commons-api/src/main/java/com/usoftchina/saas/commons/api/ConfigsApi.java

@@ -6,6 +6,7 @@ import com.usoftchina.saas.commons.po.Configs;
 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,5 +15,6 @@ public interface ConfigsApi {
 
     @GetMapping("/configs/list/{companyId}")
     Result<List<Configs>> getConfigsByCompanyId(@PathVariable("companyId") Long companyId);
-
+    @GetMapping("/configs/getConfigDataBycode")
+    String getConfigDataBycode(@RequestParam("code") String code);
 }

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

@@ -44,7 +44,14 @@ public enum BizExceptionCode implements BaseExceptionCode {
     BIZ_IMPORT_ERROREXCEL(79318, "请导入对应的单据数据"),
     BIZ_ENABLE_B2B(79350, "未启用B2B"),
     BIZ_TURNPURCHASE_BEFORE(79351, "请先获取UU号(供应商:<u>%s</u>),再进行下单操作"),
-
+    BIZ_NOVENDOR_SAVE(79352, "选择的供应商不存在或已禁用"),
+    BIZ_NOCURRENCY_SAVE(79353, "选择的币别不存在"),
+    BIZ_NOPERIOD_UPDATE(79354, "期初日期所在期间已结账,不能修改期初金额"),
+    BIZ_NOPERIOD_DELETE(79355, "期初日期所在期间已结账,不能删除"),
+    BIZ_NOCUST_SAVE(79356, "选择的客户不存在或已禁用"),
+    BIZ_SAMEVENDAP_SAVE(79357, "已存在相同供应商和币别的期初数据,不能新增"),
+    BIZ_SAMECUSTAR_SAVE(79358, "已存在相同客户和币别的期初数据,不能新增"),
+    BIZ_MAINCURRENCY_DELETE(79359, "该币别为本位币,不能删除"),
 
     NO_OPRATIONDATA(79400,"无可操作单据"),
     NULL_DATA(23232,"无数据"),

+ 7 - 1
applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/po/BillCodeSeq.java

@@ -68,7 +68,13 @@ public enum  BillCodeSeq {
 
     PURCHASEOUTRES("采购验退单反过账","PURCHASEINRES"),
 
-    APCHECK("对账单", "APCHECK");
+    APCHECK("对账单", "APCHECK"),
+
+    PRODUCTUNIT("物料单位", "ProductUnit"),
+
+    VENDAPAMOUNT("供应商期初", "VendApamount"),
+
+    CUSTARAMOUNT("客户期初", "CustAramount");
 
 
 

+ 4 - 0
applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/controller/ConfigsController.java

@@ -51,4 +51,8 @@ public class ConfigsController {
         configsService.update(data);
         return Result.success();
     }
+    @GetMapping("/getConfigDataBycode")
+    public String getConfigDataBycode(String code){
+        return configsService.getConfigDataBycode(code);
+    }
 }

+ 2 - 0
applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/mapper/ConfigsMapper.java

@@ -25,4 +25,6 @@ public interface ConfigsMapper {
     void updateByCodeSelective(Configs con);
 
     int selectByCodeAndCompanyId(@Param("code") String code, @Param("companyId") Long companyId);
+
+    String getConfigDataBycode(@Param("code") String code, @Param("companyId") Long companyId);
 }

+ 3 - 0
applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/mapper/EndProductMapper.java

@@ -26,4 +26,7 @@ public interface EndProductMapper {
     int checkPay(Long companyId);
     int checkRec(Long companyId);
     void deleteSub(Long companyId);
+    void updateSubByPeriod(@Param("ym") String ym, @Param("companyId") Long companyId);
+    void updateCustArByPeriod(@Param("ym") String ym, @Param("companyId") Long companyId);
+    void updateVendApByPeriod(@Param("ym") String ym, @Param("companyId") Long companyId);
 }

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

@@ -18,4 +18,6 @@ public interface ConfigsService {
     void update(List<Configs> data);
 
     List<Configs> getListByConmapyId(Long companyId);
+
+    String getConfigDataBycode(String code);
 }

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

@@ -60,6 +60,18 @@ public class ConfigsServiceImpl implements ConfigsService{
         return configsMapper.selectByCondition(null, companyId);
     }
 
+    @Override
+    public String getConfigDataBycode(String code) {
+        if (StringUtils.isEmpty(code)) {
+            return null;
+        }
+        String data = configsMapper.getConfigDataBycode(code, BaseContextHolder.getCompanyId());
+        if (null != data ) {
+            return data;
+        }
+        return null;
+    }
+
     @Override
     public Configs getConfigByCode(String code) {
         if (StringUtils.isEmpty(code)) {

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

@@ -32,7 +32,6 @@ public class EndProductServiceImpl implements EndProductService {
     private MessagelogMapper messagelogMapper;
     @Autowired
     private EndProductMapper endProductMapper;
-
     @Override
     public Map<String, Object> getPeriodData(PageRequest page, ListReqDTO listReqDTO) {
         //设置分页
@@ -76,20 +75,30 @@ public class EndProductServiceImpl implements EndProductService {
     @Transactional
     @Override
     public void unEndAccount() {
-        int payc = endProductMapper.checkPay(BaseContextHolder.getCompanyId());
+        //期初被使用可以反结账不做限制
+        /*
+         int payc = endProductMapper.checkPay(BaseContextHolder.getCompanyId());
         int recc = endProductMapper.checkRec(BaseContextHolder.getCompanyId());
         if(payc !=0 || recc != 0){
             throw new BizException(500, BizExceptionCode.EARLY_USERING.getMessage());
         }
         endProductMapper.deleteSub(BaseContextHolder.getCompanyId());
-
+        */
         String period = endProductMapper.selectUnPeriod(BaseContextHolder.getCompanyId());
         if (StringUtils.isEmpty(period)){
             throw new BizException(BizExceptionCode.BIZ_UNENDPRODUCT);
         }else{
+            //将sl_ym=当前期间的期初信息更新到上一期间
+            endProductMapper.updateSubByPeriod(period,BaseContextHolder.getCompanyId());
+            //将客户、供应商期初未当前期间的更新到上一期间
+            endProductMapper.updateCustArByPeriod(period,BaseContextHolder.getCompanyId());
+            endProductMapper.updateVendApByPeriod(period,BaseContextHolder.getCompanyId());
+            //更新明细账结账状态
             endProductMapper.updateRe(period, BaseContextHolder.getCompanyId());
             endProductMapper.updatePa(period, BaseContextHolder.getCompanyId());
+            //更新期间表状态
             endProductMapper.updatePeriodStatus(0L, period, BaseContextHolder.getCompanyId());
+            //记录日志
             messageLogService.customizeLog(new DocBaseDTO(Long.valueOf(period), period, "UNENDPRODUCT"), Operation.UNENDPRODUCT);
         }
     }

+ 3 - 0
applications/commons/commons-server/src/main/resources/mapper/ConfigsMapper.xml

@@ -184,4 +184,7 @@
     SELECT COUNT(*) FROM CONFIGS WHERE CODE = #{code} AND COMPANYID = #{companyId}
   </select>
 
+  <select id="getConfigDataBycode" resultType="String">
+    SELECT data FROM CONFIGS WHERE CODE = #{code} AND COMPANYID = #{companyId}
+  </select>
 </mapper>

+ 20 - 0
applications/commons/commons-server/src/main/resources/mapper/EndProductMapper.xml

@@ -130,4 +130,24 @@
     DELETE from subledger where sl_ym =
     (select min(pd_detno) from periodsdetail where pd_status=0 and companyid=#{companyId}) and companyid = #{companyId}
   </delete>
+    <update  id="updateSubByPeriod">
+        update subledger
+        set sl_ym=#{ym},
+        sl_date=str_to_date(CONCAT(#{ym},'01'), '%Y%m%d')
+        where companyid = #{companyId} and
+        sl_ym >=  (select min(pd_detno) from periodsdetail where pd_status=0 and companyid=#{companyId})
+        and sl_kind='期初余额'
+    </update>
+    <update  id="updateCustArByPeriod">
+        update custAramount
+        set ca_begindate=str_to_date(CONCAT(#{ym},'01'), '%Y%m%d')
+        where companyid = #{companyId} and ca_begindate is not null and
+        date_format(ca_begindate, '%Y%m' ) = (select min(pd_detno) from periodsdetail where pd_status=0 and companyid=#{companyId})
+    </update>
+    <update  id="updateVendApByPeriod">
+        update Vendapamount
+        set va_begindate=str_to_date(CONCAT(#{ym},'01'), '%Y%m%d')
+        where companyid = #{companyId} and va_begindate is not null and
+        date_format(va_begindate, '%Y%m' ) >= (select min(pd_detno) from periodsdetail where pd_status=0 and companyid=#{companyId})
+    </update>
 </mapper>

+ 139 - 0
applications/document/document-dto/src/main/java/com/usoftchina/saas/document/entities/CustAramount.java

@@ -0,0 +1,139 @@
+package com.usoftchina.saas.document.entities;
+
+import com.usoftchina.saas.base.entity.CommonBaseEntity;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 客户币别期初及余额表
+ * @author hey
+ * @Date 2019/03/11
+ */
+
+@Data
+public class CustAramount extends CommonBaseEntity implements Serializable{
+
+    /**
+     * 客户id
+     */
+    private long ca_custid;
+
+    /**
+     * 客户编号
+     */
+    private String ca_custcode;
+    /**
+     * 客户名称
+     */
+    private String ca_custname;
+    /**
+     * 币别
+     */
+    private String ca_currency;
+    /**
+     * 期初日期
+     */
+    private Date ca_begindate;
+    /**
+     * 期初应收
+     */
+    private Double ca_beginaramount;
+    /**
+     * 期初预收
+     */
+    private Double ca_beginprerecamount;
+    /**
+     * 应收金额
+     */
+    private Double ca_recamount;
+    /**
+     * 预收金额
+     */
+    private Double ca_preamount;
+    /**
+     * 应付余额
+     */
+    private Double ca_leftamount;
+
+    public long getCa_custid() {
+        return ca_custid;
+    }
+
+    public void setCa_custid(long ca_custid) {
+        this.ca_custid = ca_custid;
+    }
+
+    public String getCa_custcode() {
+        return ca_custcode;
+    }
+
+    public void setCa_custcode(String ca_custcode) {
+        this.ca_custcode = ca_custcode;
+    }
+
+    public String getCa_custname() {
+        return ca_custname;
+    }
+
+    public void setCa_custname(String ca_custname) {
+        this.ca_custname = ca_custname;
+    }
+
+    public String getCa_currency() {
+        return ca_currency;
+    }
+
+    public void setCa_currency(String ca_currency) {
+        this.ca_currency = ca_currency;
+    }
+
+    public Date getCa_begindate() {
+        return ca_begindate;
+    }
+
+    public void setCa_begindate(Date ca_begindate) {
+        this.ca_begindate = ca_begindate;
+    }
+
+    public Double getCa_beginaramount() {
+        return ca_beginaramount;
+    }
+
+    public void setCa_beginaramount(Double ca_beginaramount) {
+        this.ca_beginaramount = ca_beginaramount;
+    }
+
+    public Double getCa_beginprerecamount() {
+        return ca_beginprerecamount;
+    }
+
+    public void setCa_beginprerecamount(Double ca_beginprerecamount) {
+        this.ca_beginprerecamount = ca_beginprerecamount;
+    }
+
+    public Double getCa_recamount() {
+        return ca_recamount;
+    }
+
+    public void setCa_recamount(Double ca_recamount) {
+        this.ca_recamount = ca_recamount;
+    }
+
+    public Double getCa_preamount() {
+        return ca_preamount;
+    }
+
+    public void setCa_preamount(Double ca_preamount) {
+        this.ca_preamount = ca_preamount;
+    }
+
+    public Double getCa_leftamount() {
+        return ca_leftamount;
+    }
+
+    public void setCa_leftamount(Double ca_leftamount) {
+        this.ca_leftamount = ca_leftamount;
+    }
+}

+ 69 - 0
applications/document/document-dto/src/main/java/com/usoftchina/saas/document/entities/CustAramountList.java

@@ -0,0 +1,69 @@
+package com.usoftchina.saas.document.entities;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class CustAramountList implements Serializable {
+
+    /* 主表字段 */
+    private Long id;
+
+    /**
+     * 客户id
+     */
+    private long ca_custid;
+
+    /**
+     * 客户编号
+     */
+    private String ca_custcode;
+    /**
+     * 客户名称
+     */
+    private String ca_custname;
+    /**
+     * 币别
+     */
+    private String ca_currency;
+    /**
+     * 期初日期
+     */
+    private Date ca_begindate;
+    /**
+     * 期初应收
+     */
+    private Double ca_beginaramount;
+    /**
+     * 期初预收
+     */
+    private Double ca_beginprerecamount;
+    /**
+     * 应收金额
+     */
+    private Double ca_recamount;
+    /**
+     * 预收金额
+     */
+    private Double ca_preamount;
+    /**
+     * 应付余额
+     */
+    private Double ca_leftamount;
+
+    private Integer companyId;
+
+    private Integer updaterId;
+
+    private Date updateTime;
+
+    private String creatorName;
+
+    private Integer creatorId;
+
+    private Date createTime;
+
+    private String updaterName;
+}

+ 139 - 0
applications/document/document-dto/src/main/java/com/usoftchina/saas/document/entities/VendApamount.java

@@ -0,0 +1,139 @@
+package com.usoftchina.saas.document.entities;
+
+import com.usoftchina.saas.base.entity.CommonBaseEntity;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 供应商币别期初及余额表
+ * @author hey
+ * @Date 2019/03/11
+ */
+
+@Data
+public class VendApamount extends CommonBaseEntity implements Serializable{
+
+    /**
+     * 供应商id
+     */
+    private long va_vendid;
+
+    /**
+     * 供应商编号
+     */
+    private String va_vendcode;
+    /**
+     * 供应商名称
+     */
+    private String va_vendname;
+    /**
+     * 币别
+     */
+    private String va_currency;
+    /**
+     * 期初日期
+     */
+    private Date va_begindate;
+    /**
+     * 期初应付
+     */
+    private Double va_beginapamount;
+    /**
+     * 期初预付
+     */
+    private Double va_beginprepayamount;
+    /**
+     * 应付金额
+     */
+    private Double va_payamount;
+    /**
+     * 预付金额
+     */
+    private Double va_preamount;
+    /**
+     * 应付余额
+     */
+    private Double va_leftamount;
+
+    public long getVa_vendid() {
+        return va_vendid;
+    }
+
+    public void setVa_vendid(long va_vendid) {
+        this.va_vendid = va_vendid;
+    }
+
+    public String getVa_vendcode() {
+        return va_vendcode;
+    }
+
+    public void setVa_vendcode(String va_vendcode) {
+        this.va_vendcode = va_vendcode;
+    }
+
+    public String getVa_vendname() {
+        return va_vendname;
+    }
+
+    public void setVa_vendname(String va_vendname) {
+        this.va_vendname = va_vendname;
+    }
+
+    public String getVa_currency() {
+        return va_currency;
+    }
+
+    public void setVa_currency(String va_currency) {
+        this.va_currency = va_currency;
+    }
+
+    public Date getVa_begindate() {
+        return va_begindate;
+    }
+
+    public void setVa_begindate(Date va_begindate) {
+        this.va_begindate = va_begindate;
+    }
+
+    public Double getVa_beginapamount() {
+        return va_beginapamount;
+    }
+
+    public void setVa_beginapamount(Double va_beginapamount) {
+        this.va_beginapamount = va_beginapamount;
+    }
+
+    public Double getVa_beginprepayamount() {
+        return va_beginprepayamount;
+    }
+
+    public void setVa_beginprepayamount(Double va_beginprepayamount) {
+        this.va_beginprepayamount = va_beginprepayamount;
+    }
+
+    public Double getVa_payamount() {
+        return va_payamount;
+    }
+
+    public void setVa_payamount(Double va_payamount) {
+        this.va_payamount = va_payamount;
+    }
+
+    public Double getVa_preamount() {
+        return va_preamount;
+    }
+
+    public void setVa_preamount(Double va_preamount) {
+        this.va_preamount = va_preamount;
+    }
+
+    public Double getVa_leftamount() {
+        return va_leftamount;
+    }
+
+    public void setVa_leftamount(Double va_leftamount) {
+        this.va_leftamount = va_leftamount;
+    }
+}

+ 47 - 0
applications/document/document-dto/src/main/java/com/usoftchina/saas/document/entities/VendApamountList.java

@@ -0,0 +1,47 @@
+package com.usoftchina.saas.document.entities;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class VendApamountList implements Serializable {
+
+    /* 主表字段 */
+    private Long id;
+
+    private Integer va_vendid;
+
+    private String va_vendcode;
+
+    private String va_vendname;
+
+    private String va_currency;
+
+    private Date va_begindate;
+
+    private Double va_beginapamount;
+
+    private Double va_beginprepayamount;
+
+    private Double va_payamount;
+
+    private Double va_preamount;
+
+    private Double va_leftamount;
+
+    private Integer companyId;
+
+    private Integer updaterId;
+
+    private Date updateTime;
+
+    private String creatorName;
+
+    private Integer creatorId;
+
+    private Date createTime;
+
+    private String updaterName;
+}

+ 25 - 1
applications/document/document-server/src/main/java/com/usoftchina/saas/document/controller/CurrencyController.java

@@ -4,16 +4,22 @@ import com.github.pagehelper.PageInfo;
 import com.usoftchina.saas.base.Result;
 import com.usoftchina.saas.commons.dto.DocReqDTO;
 import com.usoftchina.saas.commons.dto.ListReqDTO;
+import com.usoftchina.saas.commons.exception.BizExceptionCode;
 import com.usoftchina.saas.context.BaseContextHolder;
 import com.usoftchina.saas.document.dto.CurrencyDTO;
 import com.usoftchina.saas.document.entities.Currency;
+import com.usoftchina.saas.document.mapper.CurrencyMapper;
 import com.usoftchina.saas.document.service.CurrencyService;
+import com.usoftchina.saas.exception.BizException;
 import com.usoftchina.saas.page.PageDefault;
 import com.usoftchina.saas.page.PageRequest;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 
 /**
@@ -26,6 +32,8 @@ public class CurrencyController {
 
     @Autowired
     private CurrencyService currencyService;
+    @Autowired
+    private CurrencyMapper currencyMapper;
 
     @GetMapping("/list")
     public Result getAll(@PageDefault(number = 1, size = 10) PageRequest pageRequest, ListReqDTO listReqDTO){
@@ -52,8 +60,24 @@ public class CurrencyController {
 
     @PostMapping("/delete/{id}")
     public Result delete(@PathVariable("id") Long id){
+        Currency currency = currencyService.findByPrimaryKey(id);
+        if(currency.getCr_standard()==1){
+            //本位币无法删除
+            throw new BizException(BizExceptionCode.BIZ_MAINCURRENCY_DELETE);
+        }
+        //校验是否可以删除币别
+        Map<String, Object> map = new HashMap<String, Object>();
+        map.put("v_type","currency");
+        map.put("v_id",0);
+        map.put("v_code",currency.getCr_name());
+        map.put("v_companyid",BaseContextHolder.getCompanyId());
+        map.put("v_res","");
+        currencyMapper.check(map);
+        Object result =  map.get("v_res");
+        if(!StringUtils.isEmpty(result)){
+            throw new BizException(-999999,result.toString());
+        }
         currencyService.removeByPrimaryKey(id);
         return Result.success();
     }
-
 }

+ 76 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/controller/CustAramountController.java

@@ -0,0 +1,76 @@
+package com.usoftchina.saas.document.controller;
+
+import com.github.pagehelper.PageInfo;
+import com.usoftchina.saas.base.Result;
+import com.usoftchina.saas.commons.dto.BatchDealBaseDTO;
+import com.usoftchina.saas.commons.dto.ListReqDTO;
+import com.usoftchina.saas.document.entities.CustAramount;
+import com.usoftchina.saas.document.entities.CustAramountList;
+import com.usoftchina.saas.document.service.CustAramountService;
+import com.usoftchina.saas.page.PageRequest;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("/custaramount")
+public class CustAramountController {
+
+    @Autowired
+    private CustAramountService custAramountService;
+
+    /**
+     * 获取 客户期初列表数据,包含客户期初表数据
+     * @param listReqDTO
+     * @return
+     */
+    @GetMapping("/list")
+    public Result<PageInfo<CustAramountList>> getListDataByCondition(PageRequest page, ListReqDTO listReqDTO){
+        return Result.success(custAramountService.getListDataByCondition(page, listReqDTO));
+    }
+
+    /**
+     * 保存
+     * @param custAramount
+     * @return
+     */
+    @PostMapping("/save")
+    public Result save(@RequestBody CustAramount custAramount){
+        return Result.success(custAramountService.saveData(custAramount));
+    }
+
+    /**
+     * 删除
+     * @param id
+     * @return
+     */
+    @PostMapping("/delete/{id}")
+    public Result delete(@PathVariable("id") Long id){
+        custAramountService.deleteById(id);
+        return Result.success();
+    }
+
+    /**
+     * 批量删除
+     * @param baseDTOs
+     * @return
+     */
+    @PostMapping("/batchDelete")
+    public Result batchDelete(@RequestBody BatchDealBaseDTO baseDTOs){
+        custAramountService.batchDelete(baseDTOs);
+        return Result.success();
+    }
+
+    //导入保存至列表
+    @RequestMapping("/saveToFormal")
+    public Result saveToFormal(Integer id, boolean update) {
+        custAramountService.saveToFormal(id, update);
+        return Result.success();
+    }
+
+    //根据客户编号+币别查询 客户期初数据
+    @RequestMapping("/getCustArByCustCodeAndCurrency")
+    public Result getCustArByCustCodeAndCurrency(String custCode, String currency) {
+        return Result.success(custAramountService.getCustArByCustCodeAndCurrency(custCode, currency));
+    }
+
+}

+ 84 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/controller/VendApamountController.java

@@ -0,0 +1,84 @@
+package com.usoftchina.saas.document.controller;
+
+import com.github.pagehelper.PageInfo;
+import com.usoftchina.saas.base.Result;
+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.document.dto.VendorDTO;
+import com.usoftchina.saas.document.dto.VendorListDTO;
+import com.usoftchina.saas.document.entities.VendApamount;
+import com.usoftchina.saas.document.entities.VendApamountList;
+import com.usoftchina.saas.document.entities.VendorList;
+import com.usoftchina.saas.document.service.VendApamountService;
+import com.usoftchina.saas.document.service.VendorService;
+import com.usoftchina.saas.inquiry.api.SearchUUApi;
+import com.usoftchina.saas.page.PageRequest;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/vendapamount")
+public class VendApamountController {
+
+    @Autowired
+    private VendApamountService vendApamountService;
+
+    /**
+     * 获取 供应商期初列表数据,包含应商期初表数据
+     * @param listReqDTO
+     * @return
+     */
+    @GetMapping("/list")
+    public Result<PageInfo<VendApamountList>> getListDataByCondition(PageRequest page, ListReqDTO listReqDTO){
+        return Result.success(vendApamountService.getListDataByCondition(page, listReqDTO));
+    }
+
+    /**
+     * 保存
+     * @param vendApamount
+     * @return
+     */
+    @PostMapping("/save")
+    public Result save(@RequestBody VendApamount vendApamount){
+        return Result.success(vendApamountService.saveData(vendApamount));
+    }
+
+    /**
+     * 删除
+     * @param id
+     * @return
+     */
+    @PostMapping("/delete/{id}")
+    public Result delete(@PathVariable("id") Long id){
+        vendApamountService.deleteById(id);
+        return Result.success();
+    }
+
+    /**
+     * 批量删除
+     * @param baseDTOs
+     * @return
+     */
+    @PostMapping("/batchDelete")
+    public Result batchDelete(@RequestBody BatchDealBaseDTO baseDTOs){
+        vendApamountService.batchDelete(baseDTOs);
+        return Result.success();
+    }
+
+    //导入保存至列表
+    @RequestMapping("/saveToFormal")
+    public Result saveToFormal(Integer id, boolean update) {
+        vendApamountService.saveToFormal(id, update);
+        return Result.success();
+    }
+
+    //根据客户编号+币别查询 客户期初数据
+    @RequestMapping("/getVendApByVendCodeAndCurrency")
+    public Result getVendApByVendCodeAndCurrency(String vendCode, String currency) {
+        return Result.success(vendApamountService.getVendApByVendCodeAndCurrency(vendCode, currency));
+    }
+
+}

+ 3 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/CurrencyMapper.java

@@ -6,6 +6,7 @@ import com.usoftchina.saas.document.entities.Currency;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 public interface CurrencyMapper extends CommonBaseMapper<Currency> {
 
@@ -17,5 +18,7 @@ public interface CurrencyMapper extends CommonBaseMapper<Currency> {
 
     int selectCountByName(@Param("name") String name, @Param("companyId") Long companyId);
 
+    void check(Map<String, Object> map);
+
     CurrencyDTO getStandard(@Param("companyId") Long companyId);
 }

+ 44 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/CustAramountMapper.java

@@ -0,0 +1,44 @@
+package com.usoftchina.saas.document.mapper;
+
+import com.usoftchina.saas.base.mapper.CommonBaseMapper;
+import com.usoftchina.saas.document.entities.CustAramount;
+import com.usoftchina.saas.document.entities.CustAramountList;
+import com.usoftchina.saas.document.entities.VendApamount;
+import com.usoftchina.saas.document.entities.VendApamountList;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+public interface CustAramountMapper extends CommonBaseMapper<CustAramount> {
+
+    List<CustAramountList> getListDataByCondition(@Param("condition") String condition, @Param("companyId") Long companyId);
+
+    int hasCustCode(@Param("name") String name, @Param("companyId") Long companyId);
+
+    int hasCurrency(@Param("name") String name, @Param("companyId") Long companyId);
+
+    CustAramount getCustAramountByCustCodeAndCurrency(@Param("custCode") String custCode, @Param("companyId") Long companyId, @Param("currency") String currency, @Param("id") Long id);
+
+    void check(Map<String, Object> map);
+
+    void checkForImport(Map<String, Object> map);
+
+    String selectPeriod(@Param("companyId") Long companyId);
+
+    int checkBeginData(@Param("pd_detno") String pd_detno, @Param("companyId") Long companyId);
+
+    CustAramount getCustAramount(@Param("id") Long id, @Param("companyId") Long companyId);
+
+    int hasCustNameByCode(@Param("custCode") String custCode, @Param("companyId") Long companyId, @Param("custName") String custName);
+
+    void batchInsert(List<CustAramount> custAramounts);
+
+    void batchUpdate(List<CustAramount> custAramounts);
+
+    void updateCodeAndNameByCustid(@Param("cu_id") Long cu_id);
+
+    void deleteByCustid(@Param("cu_id") Long cu_id);
+
+    int checkVerification(@Param("cu_id") Long cu_id,@Param("currency") String currency);
+}

+ 5 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/CustomerMapper.java

@@ -2,6 +2,7 @@ package com.usoftchina.saas.document.mapper;
 
 import com.usoftchina.saas.base.mapper.CommonBaseMapper;
 import com.usoftchina.saas.commons.dto.ComboDTO;
+import com.usoftchina.saas.document.dto.CustomerDTO;
 import com.usoftchina.saas.document.entities.Customer;
 import org.apache.ibatis.annotations.Param;
 
@@ -37,4 +38,8 @@ public interface CustomerMapper extends CommonBaseMapper<Customer> {
     List<ComboDTO> getCombo(@Param("id") Long id,@Param("companyId") Long companyId);
 
     Long selectIdByCode(@Param("code") String code, @Param("companyId") Long companyId);
+
+    int updateCustleftamountByPrimaryKey(Long cu_id);
+
+    List<Customer> getCustomersByCondition(@Param("condition") String condition, @Param("companyId") Long companyId);
 }

+ 6 - 1
applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/SubledgerMapper.java

@@ -24,7 +24,6 @@ public interface SubledgerMapper {
     int updateByPrimaryKey(Subledger record);
 
     List<Subledger> selectSubledgerBycondition(@Param("con") String con, @Param("companyId") Long companyId);
-
     Long selectByKindCodeCustid(@Param("sl_code") String sl_code, @Param("sl_kind") String sl_kind,
                                      @Param("sl_custid") Integer sl_custid ,@Param("companyid") Long companyid,@Param("sl_ym") String sl_ym);
 
@@ -38,4 +37,10 @@ public interface SubledgerMapper {
                         @Param("sl_vendid") Integer sl_vendid);
 
     String selectUnPeriod(@Param("companyId") Long companyId);
+    //获取当前期间
+    String selectThisPeriod(@Param("companyId") Long companyId);
+
+    Long selectIdBycondition(@Param("con") String con, @Param("companyId") Long companyId);
+
+    void deleteBycondition(@Param("con") String con, @Param("companyId") Long companyId);
 }

+ 42 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/VendApamountMapper.java

@@ -0,0 +1,42 @@
+package com.usoftchina.saas.document.mapper;
+
+import com.usoftchina.saas.base.mapper.CommonBaseMapper;
+import com.usoftchina.saas.document.entities.VendApamount;
+import com.usoftchina.saas.document.entities.VendApamountList;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+public interface VendApamountMapper extends CommonBaseMapper<VendApamount> {
+
+    List<VendApamountList> getListDataByCondition(@Param("condition") String condition, @Param("companyId") Long companyId);
+
+    int hasVendCode(@Param("name") String name, @Param("companyId") Long companyId);
+
+    int hasCurrency(@Param("name") String name, @Param("companyId") Long companyId);
+
+    VendApamount getVendApamountByVendCodeAndCurrency(@Param("vendcode") String vendcode, @Param("companyId") Long companyId,@Param("currency") String currency,@Param("id") Long id);
+
+    void check(Map<String, Object> map);
+
+    void checkForImport(Map<String, Object> map);
+
+    String selectPeriod(@Param("companyId") Long companyId);
+
+    int checkBeginData(@Param("pd_detno") String pd_detno,@Param("companyId") Long companyId);
+
+    VendApamount getVendApamount(@Param("id") Long id, @Param("companyId") Long companyId);
+
+    int hasVendNameByCode(@Param("vendCode") String vendCode,@Param("companyId") Long companyId,@Param("vendName") String vendName);
+
+    void updateCodeAndNameByVendid(@Param("ve_id") Long ve_id);
+
+    void deleteByVendid(@Param("ve_id") Long ve_id);
+
+    void batchInsert(List<VendApamount> vendApamounts);
+
+    void batchUpdate(List<VendApamount> vendApamounts);
+
+    int checkVerification(@Param("ve_id") Long ve_id,@Param("currency") String currency);
+}

+ 2 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/VendorMapper.java

@@ -37,4 +37,6 @@ public interface VendorMapper extends CommonBaseMapper<Vendor> {
     VendorDTO selectByUU(@Param("uu") Long uu, @Param("companyId") Long companyId);
 
     VendorDTO selectByName(@Param("name") String name, @Param("companyId") Long companyId);
+
+    int updateVendleftamountByPrimaryKey(Long ve_id);
 }

+ 30 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/CustAramountService.java

@@ -0,0 +1,30 @@
+package com.usoftchina.saas.document.service;
+
+import com.github.pagehelper.PageInfo;
+import com.usoftchina.saas.base.service.CommonBaseService;
+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.document.entities.CustAramount;
+import com.usoftchina.saas.document.entities.CustAramountList;
+import com.usoftchina.saas.document.entities.VendApamount;
+import com.usoftchina.saas.document.entities.VendApamountList;
+import com.usoftchina.saas.document.mapper.CustAramountMapper;
+import com.usoftchina.saas.document.mapper.VendApamountMapper;
+import com.usoftchina.saas.page.PageRequest;
+
+
+public interface CustAramountService extends CommonBaseService<CustAramountMapper, CustAramount>{
+
+    PageInfo<CustAramountList> getListDataByCondition(PageRequest page, ListReqDTO listReqDTO);
+
+    DocBaseDTO saveData(CustAramount custAramount);
+
+    boolean batchDelete(BatchDealBaseDTO baseDTOs);
+
+    void deleteById(Long id);
+
+    void saveToFormal(Integer id, boolean update);
+
+    CustAramount getCustArByCustCodeAndCurrency(String custCode, String currency);
+}

+ 32 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/VendApamountService.java

@@ -0,0 +1,32 @@
+package com.usoftchina.saas.document.service;
+
+import com.github.pagehelper.PageInfo;
+import com.usoftchina.saas.base.service.CommonBaseService;
+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.document.dto.VendorDTO;
+import com.usoftchina.saas.document.dto.VendorListDTO;
+import com.usoftchina.saas.document.entities.VendApamount;
+import com.usoftchina.saas.document.entities.VendApamountList;
+import com.usoftchina.saas.document.entities.Vendor;
+import com.usoftchina.saas.document.entities.VendorList;
+import com.usoftchina.saas.document.mapper.VendApamountMapper;
+import com.usoftchina.saas.document.mapper.VendorMapper;
+import com.usoftchina.saas.page.PageRequest;
+
+
+public interface VendApamountService extends CommonBaseService<VendApamountMapper, VendApamount>{
+
+    PageInfo<VendApamountList> getListDataByCondition(PageRequest page, ListReqDTO listReqDTO);
+
+    DocBaseDTO saveData(VendApamount vendApamount);
+
+    boolean batchDelete(BatchDealBaseDTO baseDTOs);
+
+    void deleteById(Long id);
+
+    void saveToFormal(Integer id, boolean update);
+
+    VendApamount getVendApByVendCodeAndCurrency(String vendCode, String currency);
+}

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

@@ -0,0 +1,432 @@
+package com.usoftchina.saas.document.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.usoftchina.saas.account.api.CompanyApi;
+import com.usoftchina.saas.base.service.CommonBaseServiceImpl;
+import com.usoftchina.saas.commons.api.MessageLogService;
+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.DataImportDetail;
+import com.usoftchina.saas.context.BaseContextHolder;
+import com.usoftchina.saas.document.entities.*;
+import com.usoftchina.saas.document.entities.CustAramount;
+import com.usoftchina.saas.document.entities.CustAramountList;
+import com.usoftchina.saas.document.mapper.*;
+import com.usoftchina.saas.document.service.CustAramountService;
+import com.usoftchina.saas.document.service.CustAramountService;
+import com.usoftchina.saas.exception.BizException;
+import com.usoftchina.saas.page.PageRequest;
+import com.usoftchina.saas.utils.CollectionUtils;
+import com.usoftchina.saas.utils.DateUtils;
+import com.usoftchina.saas.utils.ObjectUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * @author hey
+ * @Date 2019/03/11
+ */
+@Service
+public class CustAramountServiceImpl extends CommonBaseServiceImpl<CustAramountMapper, CustAramount> implements CustAramountService {
+
+    @Autowired
+    private MessageLogService messageLogService;
+    @Autowired
+    private CustomerMapper customerMapper;
+    @Autowired
+    private DataImportMapper dataImportMapper;
+    @Autowired
+    private CompanyApi companyApi;
+    @Autowired
+    private SubledgerMapper subledgerMapper;
+    private static final Logger LOGGER = LoggerFactory.getLogger(CustAramountServiceImpl.class);
+
+    public PageInfo<CustAramountList> getListDataByCondition(PageRequest page, ListReqDTO listReqDTO){
+        //设置分页
+        if (null == page || page.getSize() == 0 || page.getNumber() == 0) {
+            page = new PageRequest();
+            page.setNumber(1);
+            page.setSize(10);
+        }
+        PageHelper.startPage(page.getNumber(), page.getSize());
+        //取分页信息
+        String condition = listReqDTO.getFinalCondition();
+        List<CustAramountList> list = getMapper().getListDataByCondition(condition, BaseContextHolder.getCompanyId());
+        PageInfo<CustAramountList> pageInfo = new PageInfo<CustAramountList>(list);
+        return pageInfo;
+    }
+
+    @Override
+    public boolean batchDelete(BatchDealBaseDTO baseDTOs) {
+        if (null == baseDTOs || null == baseDTOs.getBaseDTOs() ||
+                baseDTOs.getBaseDTOs().size() == 0) {
+            return false;
+        }
+        for (DocBaseDTO base : baseDTOs.getBaseDTOs()) {
+            deleteById(base.getId());
+        }
+        return true;
+    }
+
+    public void deleteById(Long id) {
+        if(id != null && id > 0){
+            CustAramount custAramount = getMapper().getCustAramount(id,BaseContextHolder.getCompanyId());
+            validMoney(custAramount);
+            SimpleDateFormat sdf = new SimpleDateFormat ("yyyyMM");
+            String ca_begindate = sdf.format(custAramount.getCa_begindate());
+            //判断本次期间是否已结账,结账了就不能删除
+            int checkBeginData = getMapper().checkBeginData(ca_begindate,BaseContextHolder.getCompanyId());
+            if(checkBeginData > 0){
+                throw new BizException(BizExceptionCode.BIZ_NOPERIOD_DELETE);
+            }
+            //已被核销,不能删除
+            int hasVerify=getMapper().checkVerification(custAramount.getCa_custid(),custAramount.getCa_currency());
+            if(hasVerify>0){
+                throw new BizException(BizExceptionCode.BIZ_RELDELETE);
+            }
+            //删除中间表subledger数据
+            String delcond="sl_kind='期初余额' and sl_currency='"+custAramount.getCa_currency()+"' and sl_custid='"+custAramount.getCa_custid()+"'"+
+                    " and sl_ym="+ca_begindate;
+            subledgerMapper.deleteBycondition(delcond,BaseContextHolder.getCompanyId());
+            getMapper().deleteByPrimaryKey(id);
+            //更新供应商资料本位币余额
+            customerMapper.updateCustleftamountByPrimaryKey(custAramount.getCa_custid());
+            //记录LOG
+            messageLogService.delete(generateMsgObj(id));
+        }
+    }
+
+    public void validMoney(CustAramount custAramount){
+        //校验是否可以修改或新增客户期初
+        Map<String, Object> map = new HashMap<String, Object>();
+        map.put("v_id",custAramount.getCa_custid());//客户ID
+        map.put("v_code", custAramount.getCa_custcode());//客户编号
+        map.put("v_type","custCurrency");
+        map.put("v_currency",custAramount.getCa_currency());
+        map.put("v_companyid",BaseContextHolder.getCompanyId());
+        map.put("v_res","");
+        getMapper().check(map);
+        Object result =  map.get("v_res");
+        if(!StringUtils.isEmpty(result)){
+            throw new BizException(-999999,result.toString());
+        }
+    }
+
+    public CustAramount getCustArByCustCodeAndCurrency(String custCode,String currency){
+        CustAramount custAramount = getMapper().getCustAramountByCustCodeAndCurrency(custCode,BaseContextHolder.getCompanyId(),currency,0L);
+        return custAramount;
+    }
+
+    public DocBaseDTO saveData(CustAramount custAramount){
+        DocBaseDTO docBaseDTO = null;
+        if(custAramount.getId()==null){custAramount.setId(0L);}
+        if(custAramount.getCa_recamount()==null){custAramount.setCa_recamount(0.00);}
+        if(custAramount.getCa_beginaramount()==null){custAramount.setCa_beginaramount(0.00);}
+        if(custAramount.getCa_beginprerecamount()==null){custAramount.setCa_beginprerecamount(0.00);}
+        if(custAramount.getCa_preamount()==null){custAramount.setCa_preamount(0.00);}
+        //判断是否已存在数据
+        boolean hasData = hasData(custAramount.getCa_custcode(),custAramount.getCa_currency(),custAramount.getId());
+        if(hasData&&custAramount.getId() == 0){
+            throw new BizException(BizExceptionCode.BIZ_SAMECUSTAR_SAVE);
+        }
+        validMoney(custAramount);
+        SimpleDateFormat sdf = new SimpleDateFormat ("yyyyMM");
+        //更新余额
+        custAramount.setCa_leftamount(custAramount.getCa_beginaramount()-custAramount.getCa_beginprerecamount()+custAramount.getCa_recamount()-custAramount.getCa_preamount());
+
+        if(custAramount.getId() == 0){
+            CustAramount oldCustAramount = getMapper().getCustAramountByCustCodeAndCurrency(custAramount.getCa_custcode(), BaseContextHolder.getCompanyId(), custAramount.getCa_currency(),0L);
+            if(!ObjectUtils.isEmpty(oldCustAramount)){
+                custAramount.setId(oldCustAramount.getId());
+            }
+            //新增
+            custAramount.setCompanyId(BaseContextHolder.getCompanyId());
+            custAramount.setCreatorId(BaseContextHolder.getUserId());
+            custAramount.setCreateTime(new Date());
+            custAramount.setCreatorName(BaseContextHolder.getUserName());
+
+            //获取当前期间
+            String now = getMapper().selectPeriod(BaseContextHolder.getCompanyId());
+            Date date = null;
+            try {
+                date = sdf.parse(now);
+            } catch (ParseException e) {
+                e.printStackTrace();
+            }
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime(date);
+            calendar.set(Calendar.DAY_OF_MONTH,1);//设置为1号,当前日期既为本月第一天
+            custAramount.setCa_begindate(calendar.getTime());
+            if(!ObjectUtils.isEmpty(oldCustAramount)){
+                getMapper().updateByPrimaryKeySelective(custAramount);
+            }else{
+                getMapper().insertSelective(custAramount);
+            }
+            //记录LOG
+            docBaseDTO = generateMsgObj(custAramount.getId());
+            messageLogService.save(docBaseDTO);
+        }else{
+            //修改
+            custAramount.setUpdaterId(BaseContextHolder.getUserId());
+            custAramount.setUpdateTime(new Date());
+            //期初日期是否已结账
+            int checkBeginData = getMapper().checkBeginData(sdf.format(custAramount.getCa_begindate()),BaseContextHolder.getCompanyId());
+            if(checkBeginData > 0){
+                throw new BizException(BizExceptionCode.BIZ_NOPERIOD_UPDATE);
+            }
+            getMapper().updateByPrimaryKeySelective(custAramount);
+            //记录LOG
+            docBaseDTO = generateMsgObj(custAramount.getId());
+            messageLogService.update(docBaseDTO);
+        }
+        //调用更新
+        customerMapper.updateCustleftamountByPrimaryKey(custAramount.getCa_custid());
+        updateSubledger(custAramount);
+        return docBaseDTO;
+    }
+
+    private  void updateSubledger(CustAramount custAramount){
+        //中间表subledger处理
+        Subledger subledger = new Subledger();
+        subledger.setSl_code("期初余额");
+        subledger.setSl_kind("期初余额");
+        subledger.setSl_vendid(0);
+        subledger.setSl_custid(Math.toIntExact(custAramount.getCa_custid()));
+        subledger.setCompanyId(BaseContextHolder.getCompanyId());
+        subledger.setSl_date(custAramount.getCa_begindate());
+        subledger.setSl_ym(DateUtils.getYm(custAramount.getCa_begindate()));
+        subledger.setSl_currency(custAramount.getCa_currency());
+        if(custAramount.getCa_beginaramount()>custAramount.getCa_beginprerecamount()){
+            subledger.setSl_preamount(new Double(0));
+            subledger.setSl_amount(Math.abs(custAramount.getCa_beginaramount()-custAramount.getCa_beginprerecamount()));
+        }else{
+            subledger.setSl_amount(new Double(0));
+            subledger.setSl_preamount(Math.abs(custAramount.getCa_beginaramount()-custAramount.getCa_beginprerecamount()));
+        }
+        subledger.setSl_orderamount(Math.abs(custAramount.getCa_beginaramount()-custAramount.getCa_beginprerecamount()));
+        subledger.setSl_namount(Math.abs(custAramount.getCa_beginaramount()-custAramount.getCa_beginprerecamount()));
+        subledger.setCreateTime(new Date());
+        subledger.setCreatorId(BaseContextHolder.getUserId());
+        subledger.setCreatorName(BaseContextHolder.getUserName());
+        //获取当前期间
+        SimpleDateFormat sdf = new SimpleDateFormat ("yyyyMM");
+        String sl_ym = sdf.format(custAramount.getCa_begindate());
+        String con="sl_kind='期初余额' and sl_custid="+Math.toIntExact(custAramount.getCa_custid())+" and sl_currency='"+custAramount.getCa_currency()+"'"+
+                " and sl_ym="+sl_ym;
+        Long sl_id = subledgerMapper.selectIdBycondition(con,BaseContextHolder.getCompanyId());
+        subledger.setId(sl_id);
+        if ( sl_id!=null && sl_id > 0 ) {
+            subledgerMapper.updateByPrimaryKeySelective(subledger);
+        }else {
+            subledgerMapper.insertSelective(subledger);
+        }
+    };
+
+
+    private boolean hasData(String custCode, String currency,Long id){
+        int hasCustCode = getMapper().hasCustCode(custCode, BaseContextHolder.getCompanyId());
+        if (hasCustCode == 0){
+            throw new BizException(BizExceptionCode.BIZ_NOCUST_SAVE);
+        }
+        int hasCurrency = getMapper().hasCurrency(currency, BaseContextHolder.getCompanyId());
+        if (hasCurrency == 0){
+            throw new BizException(BizExceptionCode.BIZ_NOCURRENCY_SAVE);
+        }
+        CustAramount custAramount = getMapper().getCustAramountByCustCodeAndCurrency(custCode, BaseContextHolder.getCompanyId(), currency,id);
+        if (!ObjectUtils.isEmpty(custAramount) && !ObjectUtils.isEmpty( custAramount.getCa_begindate())){
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * 构造 记录日志对象
+     * @param id
+     * @return
+     */
+    private DocBaseDTO generateMsgObj(Long id){
+        return new DocBaseDTO(id, "", "CustAramount");
+    }
+
+    /**
+     * String转Date类型
+     *
+     * @param dateStr
+     *            时间字符串
+     * @return Date类型时间
+     * @throws Exception
+     *             异常
+     */
+    public static Date string2Date(String dateStr, String format) throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat(format);
+        if (dateStr != null) {
+            return sdf.parse(dateStr);
+        }
+        return null;
+    }
+
+    /**
+     * Date转String
+     *
+     * @param date
+     *            Date类型时间
+     * @return 时间字符串
+     */
+    public static String date2String(Date date, String format) {
+        SimpleDateFormat sdf = new SimpleDateFormat(format);
+        if (date != null) {
+            return sdf.format(date);
+        }
+        return null;
+    }
+
+    @Override
+    public void saveToFormal(Integer id, boolean update) {
+        if (null == id || "0".equals(id)) {
+            return;
+        }
+        Long companyId = BaseContextHolder.getCompanyId();
+        StringBuilder err = new StringBuilder();
+        List<CustAramount> addList = new ArrayList<>();//新增
+        List<CustAramount> updateList = new ArrayList<>();//更新
+        List<DataImportDetail> details = dataImportMapper.selectDataById(id);
+        if (!CollectionUtils.isEmpty(details)) {
+            int i = 0;
+            for (DataImportDetail detail : details) {
+                //数据验证
+                if (StringUtils.isEmpty(detail)) {
+                    throw new BizException(BizExceptionCode.BIZ_REPORT_NOTCORRECT);
+                }
+                CustAramount custAramount = JSONObject.parseObject(detail.getDd_maindata(), CustAramount.class);
+                custAramount.setCompanyId(companyId);
+                if(custAramount.getId()==null){custAramount.setId(0L);}
+                if(custAramount.getCa_recamount()==null){custAramount.setCa_recamount(0.00);}
+                if(custAramount.getCa_beginaramount()==null){custAramount.setCa_beginaramount(0.00);}
+                if(custAramount.getCa_beginprerecamount()==null){custAramount.setCa_beginprerecamount(0.00);}
+                if(custAramount.getCa_preamount()==null){custAramount.setCa_preamount(0.00);}
+                //判断是否已存在数据
+                List<Customer> customers = customerMapper.getCustomersByCondition("cu_statuscode = 'ENABLE' AND cu_code = '"+custAramount.getCa_custcode()+"'",BaseContextHolder.getCompanyId());
+                if (customers.size() == 0){
+                    err.append("第" + (i + 3) + "行 : 客户编号不存在或该客户已禁用!<br/> ");
+                }else{
+                    int hasCustNameByCode = getMapper().hasCustNameByCode(custAramount.getCa_custcode(),BaseContextHolder.getCompanyId(),custAramount.getCa_custname());
+                    if(hasCustNameByCode==0){
+                        err.append("第" + (i + 3) + "行 : 客户名称与编号不匹配!<br/> ");
+                    }
+                    custAramount.setCa_custid(customers.get(0).getId());
+                }
+                int hasCurrency = getMapper().hasCurrency(custAramount.getCa_currency(), BaseContextHolder.getCompanyId());
+                if (hasCurrency == 0){
+                    err.append("第" + (i + 3) + "行 : 币别不存在!<br/> ");
+                }
+                SimpleDateFormat sdf = new SimpleDateFormat ("yyyyMM");
+                CustAramount oldCustAramount = getMapper().getCustAramountByCustCodeAndCurrency(custAramount.getCa_custcode(), BaseContextHolder.getCompanyId(), custAramount.getCa_currency(),0L);
+                if (!ObjectUtils.isEmpty(oldCustAramount)){
+                    //更新
+                    //校验是否修改客户期初
+                    Map<String, Object> map = new HashMap<String, Object>();
+                    map.put("v_id",custAramount.getCa_custid());//客户ID
+                    map.put("v_code", custAramount.getCa_custcode());//客户编号
+                    map.put("v_type","custCurrency");
+                    map.put("v_currency",custAramount.getCa_currency());
+                    map.put("v_companyid",BaseContextHolder.getCompanyId());
+                    map.put("v_res","");
+                    getMapper().check(map);
+                    Object result =  map.get("v_res");
+                    if(!StringUtils.isEmpty(result)){
+                        err.append("第" + (i + 3) + "行 : "+result.toString()+"<br/> ");
+                    }else{
+                        //加载已存在的数据
+                        custAramount.setId(oldCustAramount.getId());
+                        custAramount.setCa_recamount(oldCustAramount.getCa_recamount());
+                        custAramount.setCa_preamount(oldCustAramount.getCa_preamount());
+                        custAramount.setCa_begindate(oldCustAramount.getCa_begindate());
+                        custAramount.setUpdaterId(companyId);
+                        custAramount.setUpdateTime(new Date());
+                        //期初日期是否已结账
+                        int checkBeginData = getMapper().checkBeginData(sdf.format(custAramount.getCa_begindate()),companyId);
+                        if(checkBeginData > 0){
+                            err.append("第" + (i + 3) + "行 : "+BizExceptionCode.BIZ_NOPERIOD_UPDATE.getMessage()+"!<br/> ");
+                        }
+                        //更新余额
+                        custAramount.setCa_leftamount(custAramount.getCa_beginaramount()-custAramount.getCa_beginprerecamount()+custAramount.getCa_recamount()-custAramount.getCa_preamount());
+                        updateList.add(custAramount);
+                    }
+                }else{
+                    //新增
+                    custAramount.setCreatorId(companyId);
+                    custAramount.setCreateTime(new Date());
+                    custAramount.setCreatorName(BaseContextHolder.getUserName());
+                    //获取当前期间
+                    String now = getMapper().selectPeriod(companyId);
+                    Date date = null;
+                    try {
+                        date = sdf.parse(now);
+                    } catch (ParseException e) {
+                        e.printStackTrace();
+                    }
+                    Calendar calendar = Calendar.getInstance();
+                    calendar.setTime(date);
+                    calendar.set(Calendar.DAY_OF_MONTH,1);//设置为1号,当前日期既为本月第一天
+                    custAramount.setCa_begindate(calendar.getTime());
+                    //更新余额
+                    custAramount.setCa_leftamount(custAramount.getCa_beginaramount()-custAramount.getCa_beginprerecamount()+custAramount.getCa_recamount()-custAramount.getCa_preamount());
+                    addList.add(custAramount);
+                }
+                i++;
+            }
+            if (err.length() > 0) {
+                dataImportMapper.updateDataImportError(err.toString(), id);
+                throw new BizException(12345, err.toString());
+            }
+            //新增和更新 批量执行到数据库
+            if(addList.size()>0){
+                //校验是否有重复的数据
+                HashSet<Map<String,String>> hs = new HashSet<Map<String,String>>();
+                for(CustAramount list : addList){
+                    Map<String,String> m = new HashMap<String,String>();
+                    m.put("custCode",list.getCa_custcode());
+                    m.put("currency",list.getCa_currency());
+                    hs.add(m);
+                }
+                if(addList.size()==hs.size()){
+                    getMapper().batchInsert(addList);
+                }else{
+                    throw new BizException(12345, "检测到有客户编号和币别相同的数据,无法导入");
+                }
+            }
+            if(updateList.size()>0){
+                //校验是否有重复的数据
+                HashSet<Map<String,String>> hs = new HashSet<Map<String,String>>();
+                for(CustAramount list : updateList){
+                    Map<String,String> m = new HashMap<String,String>();
+                    m.put("custCode",list.getCa_custcode());
+                    m.put("currency",list.getCa_currency());
+                    hs.add(m);
+                }
+                if(updateList.size()==hs.size()){
+                    getMapper().batchUpdate(updateList);
+                }else{
+                    throw new BizException(12345, "检测到有客户编号和币别相同的数据,无法导入");
+                }
+            }
+            //校验是否可以修改供应商期初
+            Map<String, Object> map = new HashMap<String, Object>();
+            map.put("v_type","custCurrency");
+            map.put("v_companyid",companyId);
+            getMapper().checkForImport(map);
+            dataImportMapper.updateDataImport(id);
+        }
+    }
+}

+ 32 - 84
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/CustomerServiceImpl.java

@@ -5,6 +5,7 @@ import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.usoftchina.saas.base.Result;
 import com.usoftchina.saas.base.service.CommonBaseServiceImpl;
+import com.usoftchina.saas.commons.api.ConfigsApi;
 import com.usoftchina.saas.commons.api.MaxnumberService;
 import com.usoftchina.saas.commons.api.MessageLogService;
 import com.usoftchina.saas.commons.dto.BatchDealBaseDTO;
@@ -12,14 +13,12 @@ import com.usoftchina.saas.commons.dto.ComboDTO;
 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.DataImportDetail;
-import com.usoftchina.saas.commons.po.Operation;
-import com.usoftchina.saas.commons.po.Status;
+import com.usoftchina.saas.commons.po.*;
 import com.usoftchina.saas.context.BaseContextHolder;
 import com.usoftchina.saas.document.dto.*;
 import com.usoftchina.saas.document.entities.*;
 import com.usoftchina.saas.document.mapper.*;
+import com.usoftchina.saas.document.service.CustAramountService;
 import com.usoftchina.saas.document.service.CustomerService;
 import com.usoftchina.saas.exception.BizException;
 import com.usoftchina.saas.page.PageRequest;
@@ -31,7 +30,6 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
-import sun.reflect.generics.tree.LongSignature;
 
 import java.text.SimpleDateFormat;
 import java.util.*;
@@ -63,7 +61,12 @@ public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, C
     private CustomerMapper customerMapper;
     @Autowired
     private DataImportMapper dataImportMapper;
-
+    @Autowired
+    private ConfigsApi configsApi;
+    @Autowired
+    private CustAramountService custAramountService;
+    @Autowired
+    private CustAramountMapper custAramountMapper;
 
     @Override
     public PageInfo<CustomerList> getListData(PageRequest page, ListReqDTO req) {
@@ -135,28 +138,6 @@ public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, C
         customer.setCreatorId(userId);
         customer.setCreateTime(new Date());
         customer.setCreatorName(userName);
-        //应付款余额
-        Double beginapamount = main.getCu_beginaramount()==null?new Double(0):main.getCu_beginaramount();
-        Double beginprepayamount = main.getCu_beginprerecamount()==null?new Double(0):main.getCu_beginprerecamount();
-        Double recamount = main.getCu_recamount()==null? new Double(0):main.getCu_recamount();
-        Double preamount = main.getCu_preamount()==null? new Double(0):main.getCu_preamount();
-        customer.setCu_leftamount(beginapamount-beginprepayamount+recamount-preamount);
-
-        //获取已结账的期间
-        String YM = subledgerMapper.selectUnPeriod(companyId);
-        if(YM==null || YM.equals("")){
-            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMM");
-            YM = simpleDateFormat.format(main.getCu_begindate());
-        }else{
-            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMM");
-            String beginDate = simpleDateFormat.format(main.getCu_begindate());
-            if(Integer.valueOf(YM)>Integer.valueOf(beginDate)){
-                int code = BizExceptionCode.LIMIT_PERIOD_CUSTOMER.getCode();
-                String mes = String.format(BizExceptionCode.LIMIT_PERIOD_CUSTOMER.getMessage(),YM);
-                throw new BizException(code , mes);
-            }
-            YM = beginDate;
-        }
         //编号校验
         cu_code = RegexpUtils.replaceSpecCharacter(cu_code);
         //检测单号是否修改
@@ -184,11 +165,10 @@ public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, C
                 detail1.setCreatorName(userName);
                 insertDetail1.add(detail1);
             }
-            //插入从表
+            //插入从表1
             if (insertDetail1.size()>0) {
                 customercontactMapper.batchInsert(insertDetail1);
             }
-
             for (CustomeraddressDTO item : items2) {
                 Customeraddress detail2 = BeanMapper.map(item,Customeraddress.class);
                 detail2.setCa_cuid(cu_id);
@@ -198,10 +178,25 @@ public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, C
                 detail2.setCreatorName(userName);
                 insertDetail2.add(detail2);
             }
-            //插入从表
+            //插入从表2
             if (insertDetail2.size()>0) {
                 customeraddressMapper.batchInsert(insertDetail2);
             }
+            //单一币别设置期初
+            if(1==2 ){
+                Double beginAramount=main.getCu_beginaramount()==null ? new Double(0):main.getCu_beginaramount();
+                Double beginPreRecamount=main.getCu_beginprerecamount()==null ? new Double(0):main.getCu_beginaramount();
+                if(beginAramount>0 || beginPreRecamount>0){
+                    CustAramount custAramount=new CustAramount();
+                    custAramount.setId(new Long(0));
+                    custAramount.setCa_beginaramount(beginAramount);
+                    custAramount.setCa_beginprerecamount(beginPreRecamount);
+                    custAramount.setCa_currency(configsApi.getConfigDataBycode("defaultCurrency"));
+                    custAramount.setCa_custid(main.getId());
+                    custAramount.setCa_custcode(main.getCu_code());
+                    custAramountService.saveData(custAramount);
+                }
+            }
             baseDTO = getBaseDTOById(cu_id);
             //日志记录
             messageLogService.save(baseDTO);
@@ -212,7 +207,6 @@ public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, C
             if (count > 0) {
                 throw new BizException(BizExceptionCode.REPEAT_CUSTOMERCODE);
             }
-
             //有关联时不可修改名称编号
             Map<String, Object> map = new HashMap<String, Object>();
             map.put("v_id",cu_id);
@@ -227,7 +221,6 @@ public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, C
                 if (count > 0) {
                     throw new BizException(BizExceptionCode.BIZ_RELUPDATE_CODEANDNAME);
                 }
-
                 //限制关联单据不可修改金额
                 Customer customer1 = getMapper().selectByPrimaryKey(customer.getId());
                 if (customer.getCu_beginaramount()!=null&&(customer.getCu_beginaramount().doubleValue() != customer1.getCu_beginaramount().doubleValue() ||
@@ -237,8 +230,6 @@ public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, C
                 }
             }
 
-
-
             //检查期初日期是否已结转
             count = getMapper().validFinish(cu_id, companyId);
             if (count > 0) {
@@ -248,7 +239,6 @@ public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, C
                 //期初预收
                 customer.setCu_beginprerecamount(cutpl.getCu_beginprerecamount());
             }
-
             //更新操作
             getMapper().updateByPrimaryKeySelective(customer);
             //添加从表传输对象
@@ -284,7 +274,6 @@ public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, C
                 } else {
                     updateDetail2.add(detail2);
                 }
-
             }
             //插入从表
             if (insertDetail2.size() > 0) {
@@ -294,55 +283,14 @@ public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, C
             if (updateDetail2.size() > 0) {
                 customeraddressMapper.batchUpdate(updateDetail2);
             }
+            if(1==2){//单一币别
+            }
             baseDTO = getBaseDTOById(cu_id);
             //日志记录
             messageLogService.update(baseDTO);
         }
-
-        //更新应收余额
-        Customer customer1 = getMapper().selectByPrimaryKey(cu_id);
-        Double cu_leftamount = (customer1.getCu_beginaramount() == null ? new Double(0) :  customer1.getCu_beginaramount())-
-                (customer1.getCu_beginprerecamount() == null ? new Double(0) : customer1.getCu_beginprerecamount()) +
-                (customer1.getCu_recamount() == null ? new Double(0) : customer1.getCu_recamount()) -
-                (customer1.getCu_preamount() == null ? new Double(0) : customer1.getCu_preamount());
-        customer.setCu_leftamount(cu_leftamount);
-        getMapper().updateByPrimaryKeySelective(customer);
-
-        //插入中间表
-        Double amount = (main.getCu_beginaramount() == null ? new Double(0) : main.getCu_beginaramount())
-                - (main.getCu_beginprerecamount() == null ? new Double(0) : main.getCu_beginprerecamount());
-        Subledger subledger = new Subledger();
-        subledger.setSl_code("期初余额");
-        subledger.setSl_kind("期初余额");
-        subledger.setSl_vendid(0);
-        subledger.setSl_custid(Math.toIntExact(customer.getId()));
-        subledger.setCompanyId(BaseContextHolder.getCompanyId());
-        subledger.setSl_date(DateUtils.getFirstDay(customer.getCu_begindate()));
-        subledger.setSl_ym(DateUtils.getYm(customer.getCu_begindate()));
-        subledger.setCreateTime(new Date());
-        subledger.setCreatorId(BaseContextHolder.getUserId());
-        subledger.setCreatorName(BaseContextHolder.getUserName());
-        subledger.setSl_currency(customer.getCu_currency());
-        if (amount > new Double(0)){
-            subledger.setSl_amount(amount);
-            subledger.setSl_preamount(new Double(0));
-        }else {
-            subledger.setSl_amount(new Double(0));
-            subledger.setSl_preamount(Math.abs(amount));
-        }
-        subledger.setSl_orderamount(Math.abs(amount));
-        subledger.setSl_namount((subledger.getSl_orderamount() == null ? new Double(0) : subledger.getSl_orderamount()) +
-                (subledger.getSl_discount() == null ? new Double(0) : subledger.getSl_discount()) -
-                (subledger.getSl_yamount() == null ? new Double(0) : subledger.getSl_yamount()));
-
-        Long sl_id  = subledgerMapper.selectByKindCodeCustid("期初余额","期初余额",
-                Math.toIntExact(customer.getId()),BaseContextHolder.getCompanyId(),YM);
-        subledger.setId(sl_id);
-        if ( sl_id!=null && sl_id > 0 ) {
-            subledgerMapper.updateByPrimaryKeySelective(subledger);
-        }else {
-            subledgerMapper.insertSelective(subledger);
-        }
+        //更新供应商应付余额表供应商编号,名称.
+        custAramountMapper.updateCodeAndNameByCustid(main.getId());
         return baseDTO;
     }
 
@@ -372,10 +320,10 @@ public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, C
                 //从表删除
                 customercontactMapper.deleteByFK(id);
                 customeraddressMapper.deleteByFK(id);
-
+                //删除客户期初设置
+                custAramountMapper.deleteByCustid(id);
                 //删除中间表
                 subledgerMapper.deleteCustomer("期初余额", "期初余额", Math.toIntExact(id));
-
                 //日志
                 messageLogService.delete(docBaseDTO);
             }

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

@@ -0,0 +1,429 @@
+package com.usoftchina.saas.document.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.usoftchina.saas.account.api.CompanyApi;
+import com.usoftchina.saas.document.dto.VendorDTO;
+import com.usoftchina.saas.utils.CollectionUtils;
+import com.usoftchina.saas.base.service.CommonBaseServiceImpl;
+import com.usoftchina.saas.commons.api.MessageLogService;
+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.DataImportDetail;
+import com.usoftchina.saas.context.BaseContextHolder;
+import com.usoftchina.saas.document.entities.*;
+import com.usoftchina.saas.document.mapper.*;
+import com.usoftchina.saas.document.service.VendApamountService;
+import com.usoftchina.saas.exception.BizException;
+import com.usoftchina.saas.page.PageRequest;
+import com.usoftchina.saas.utils.DateUtils;
+import com.usoftchina.saas.utils.ObjectUtils;
+import io.netty.util.internal.ObjectUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * @author hey
+ * @Date 2019/03/11
+ */
+@Service
+public class VendApamountServiceImpl extends CommonBaseServiceImpl<VendApamountMapper, VendApamount> implements VendApamountService {
+
+    @Autowired
+    private MessageLogService messageLogService;
+    @Autowired
+    private VendorMapper vendorMapper;
+    @Autowired
+    private DataImportMapper dataImportMapper;
+    @Autowired
+    private CompanyApi companyApi;
+    @Autowired
+    private SubledgerMapper subledgerMapper;
+    private static final Logger LOGGER = LoggerFactory.getLogger(VendApamountServiceImpl.class);
+
+    public PageInfo<VendApamountList> getListDataByCondition(PageRequest page, ListReqDTO listReqDTO){
+        //设置分页
+        if (null == page || page.getSize() == 0 || page.getNumber() == 0) {
+            page = new PageRequest();
+            page.setNumber(1);
+            page.setSize(10);
+        }
+        PageHelper.startPage(page.getNumber(), page.getSize());
+        //取分页信息
+        String condition = listReqDTO.getFinalCondition();
+        List<VendApamountList> list = getMapper().getListDataByCondition(condition, BaseContextHolder.getCompanyId());
+        PageInfo<VendApamountList> pageInfo = new PageInfo<VendApamountList>(list);
+        return pageInfo;
+    }
+
+    @Override
+    public boolean batchDelete(BatchDealBaseDTO baseDTOs) {
+        if (null == baseDTOs || null == baseDTOs.getBaseDTOs() ||
+                baseDTOs.getBaseDTOs().size() == 0) {
+            return false;
+        }
+        for (DocBaseDTO base : baseDTOs.getBaseDTOs()) {
+            deleteById(base.getId());
+        }
+        return true;
+    }
+
+    public void deleteById(Long id) {
+        if(id != null && id > 0){
+            VendApamount vendApamount = getMapper().getVendApamount(id,BaseContextHolder.getCompanyId());
+            validMoney(vendApamount);
+            SimpleDateFormat sdf = new SimpleDateFormat ("yyyyMM");
+            String va_begindate = sdf.format(vendApamount.getVa_begindate());
+            //判断本次期间是否已结账,结账了就不能删除
+            int checkBeginData = getMapper().checkBeginData(va_begindate,BaseContextHolder.getCompanyId());
+            if(checkBeginData > 0){
+                throw new BizException(BizExceptionCode.BIZ_NOPERIOD_DELETE);
+            }
+            //已被核销,不能删除
+            int hasVerify=getMapper().checkVerification(vendApamount.getVa_vendid(),vendApamount.getVa_currency());
+            if(hasVerify>0){
+                throw new BizException(BizExceptionCode.BIZ_RELDELETE);
+            }
+            //删除中间表subledger数据
+            String delcond="sl_kind='期初余额' and sl_currency='"+vendApamount.getVa_currency()+"' and sl_vendid='"+vendApamount.getVa_vendid()+"'"+
+                    " and sl_ym="+va_begindate;
+            subledgerMapper.deleteBycondition(delcond,BaseContextHolder.getCompanyId());
+            getMapper().deleteByPrimaryKey(id);
+            //更新供应商资料本位币余额
+            vendorMapper.updateVendleftamountByPrimaryKey(vendApamount.getVa_vendid());
+            //记录LOG
+            messageLogService.delete(generateMsgObj(id));
+        }
+    }
+
+    public void validMoney(VendApamount vendApamount){
+        //校验是否可以修改或新增供应商期初
+        Map<String, Object> map = new HashMap<String, Object>();
+        map.put("v_id",vendApamount.getVa_vendid());//供应商ID
+        map.put("v_code", vendApamount.getVa_vendcode());//供应商编号
+        map.put("v_type","vendCurrency");
+        map.put("v_currency",vendApamount.getVa_currency());
+        map.put("v_companyid",BaseContextHolder.getCompanyId());
+        map.put("v_res","");
+        getMapper().check(map);
+        Object result =  map.get("v_res");
+        if(!StringUtils.isEmpty(result)){
+            throw new BizException(-999999,result.toString());
+        }
+    }
+
+    public VendApamount getVendApByVendCodeAndCurrency(String vendCode, String currency){
+        VendApamount vendApamount = getMapper().getVendApamountByVendCodeAndCurrency(vendCode,BaseContextHolder.getCompanyId(),currency,0L);
+        return vendApamount;
+    }
+
+    public DocBaseDTO saveData(VendApamount vendApamount){
+        DocBaseDTO docBaseDTO = null;
+        if(vendApamount.getId()==null){vendApamount.setId(0L);}
+        if(vendApamount.getVa_payamount()==null){vendApamount.setVa_payamount(0.00);}
+        if(vendApamount.getVa_beginapamount()==null){vendApamount.setVa_beginapamount(0.00);}
+        if(vendApamount.getVa_beginprepayamount()==null){vendApamount.setVa_beginprepayamount(0.00);}
+        if(vendApamount.getVa_preamount()==null){vendApamount.setVa_preamount(0.00);}
+        //判断是否已存在数据
+        boolean hasData = hasData(vendApamount.getVa_vendcode(),vendApamount.getVa_currency(),vendApamount.getId());
+        if(hasData&&vendApamount.getId() == 0){
+            throw new BizException(BizExceptionCode.BIZ_SAMEVENDAP_SAVE);
+        }
+        validMoney(vendApamount);
+        SimpleDateFormat sdf = new SimpleDateFormat ("yyyyMM");
+        //更新余额
+        vendApamount.setVa_leftamount(vendApamount.getVa_beginapamount()-vendApamount.getVa_beginprepayamount()+vendApamount.getVa_payamount()-vendApamount.getVa_preamount());
+
+        if(vendApamount.getId() == 0){
+            VendApamount oldVendApamount = getMapper().getVendApamountByVendCodeAndCurrency(vendApamount.getVa_vendcode(), BaseContextHolder.getCompanyId(), vendApamount.getVa_currency(),0L);
+            if(!ObjectUtils.isEmpty(oldVendApamount)){
+                vendApamount.setId(oldVendApamount.getId());
+            }
+            //新增
+            vendApamount.setCompanyId(BaseContextHolder.getCompanyId());
+            vendApamount.setCreatorId(BaseContextHolder.getUserId());
+            vendApamount.setCreateTime(new Date());
+            vendApamount.setCreatorName(BaseContextHolder.getUserName());
+
+            //获取当前期间
+            String now = getMapper().selectPeriod(BaseContextHolder.getCompanyId());
+            Date date = null;
+            try {
+                date = sdf.parse(now);
+            } catch (ParseException e) {
+                e.printStackTrace();
+            }
+            Calendar calendar = Calendar.getInstance();
+            calendar.setTime(date);
+            calendar.set(Calendar.DAY_OF_MONTH,1);//设置为1号,当前日期既为本月第一天
+            vendApamount.setVa_begindate(calendar.getTime());
+            if(!ObjectUtils.isEmpty(oldVendApamount)){
+                getMapper().updateByPrimaryKeySelective(vendApamount);
+            }else{
+                getMapper().insertSelective(vendApamount);
+            }
+            //记录LOG
+            docBaseDTO = generateMsgObj(vendApamount.getId());
+            messageLogService.save(docBaseDTO);
+        }else{
+            //修改
+            vendApamount.setUpdaterId(BaseContextHolder.getUserId());
+            vendApamount.setUpdateTime(new Date());
+            //期初日期是否已结账
+            int checkBeginData = getMapper().checkBeginData(sdf.format(vendApamount.getVa_begindate()),BaseContextHolder.getCompanyId());
+            if(checkBeginData > 0){
+                throw new BizException(BizExceptionCode.BIZ_NOPERIOD_UPDATE);
+            }
+            getMapper().updateByPrimaryKeySelective(vendApamount);
+            //记录LOG
+            docBaseDTO = generateMsgObj(vendApamount.getId());
+            messageLogService.update(docBaseDTO);
+        }
+        //调用更新
+        vendorMapper.updateVendleftamountByPrimaryKey(vendApamount.getVa_vendid());
+        updateSubledger(vendApamount);
+        return docBaseDTO;
+    }
+
+    private  void updateSubledger(VendApamount vendApamount){
+        //中间表subledger处理
+        Subledger subledger = new Subledger();
+        subledger.setSl_code("期初余额");
+        subledger.setSl_kind("期初余额");
+        subledger.setSl_vendid(Math.toIntExact(vendApamount.getVa_vendid()));
+        subledger.setSl_custid(0);
+        subledger.setCompanyId(BaseContextHolder.getCompanyId());
+        subledger.setSl_date(vendApamount.getVa_begindate());
+        subledger.setSl_ym(DateUtils.getYm(vendApamount.getVa_begindate()));
+        subledger.setSl_currency(vendApamount.getVa_currency());
+        if(vendApamount.getVa_beginapamount()>vendApamount.getVa_beginprepayamount()){
+            subledger.setSl_preamount(new Double(0));
+            subledger.setSl_amount(Math.abs(vendApamount.getVa_beginapamount()-vendApamount.getVa_beginprepayamount()));
+        }else{
+            subledger.setSl_amount(new Double(0));
+            subledger.setSl_preamount(Math.abs(vendApamount.getVa_beginapamount()-vendApamount.getVa_beginprepayamount()));
+        }
+        subledger.setSl_orderamount(Math.abs(vendApamount.getVa_beginapamount()-vendApamount.getVa_beginprepayamount()));
+        subledger.setSl_namount(Math.abs(vendApamount.getVa_beginapamount()-vendApamount.getVa_beginprepayamount()));
+        subledger.setCreateTime(new Date());
+        subledger.setCreatorId(BaseContextHolder.getUserId());
+        subledger.setCreatorName(BaseContextHolder.getUserName());
+        //获取当前期间
+        SimpleDateFormat sdf = new SimpleDateFormat ("yyyyMM");
+        String sl_ym = sdf.format(vendApamount.getVa_begindate());
+        String con="sl_kind='期初余额' and sl_vendid="+Math.toIntExact(vendApamount.getVa_vendid())+" and sl_currency='"+vendApamount.getVa_currency()+"'"+
+                " and sl_ym="+sl_ym;
+        Long sl_id = subledgerMapper.selectIdBycondition(con,BaseContextHolder.getCompanyId());
+        subledger.setId(sl_id);
+        if ( sl_id!=null && sl_id > 0 ) {
+            subledgerMapper.updateByPrimaryKeySelective(subledger);
+        }else {
+            subledgerMapper.insertSelective(subledger);
+        }
+    };
+    private boolean hasData(String vendCode, String currency,Long id){
+        int hasVendCode = getMapper().hasVendCode(vendCode, BaseContextHolder.getCompanyId());
+        if (hasVendCode == 0){
+            throw new BizException(BizExceptionCode.BIZ_NOVENDOR_SAVE);
+        }
+        int hasCurrency = getMapper().hasCurrency(currency, BaseContextHolder.getCompanyId());
+        if (hasCurrency == 0){
+            throw new BizException(BizExceptionCode.BIZ_NOCURRENCY_SAVE);
+        }
+        VendApamount oldVendApamount = getMapper().getVendApamountByVendCodeAndCurrency(vendCode, BaseContextHolder.getCompanyId(), currency,id);
+        if (!ObjectUtils.isEmpty(oldVendApamount)&& !ObjectUtils.isEmpty(oldVendApamount.getVa_begindate())){
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * 构造 记录日志对象
+     * @param id
+     * @return
+     */
+    private DocBaseDTO generateMsgObj(Long id){
+        return new DocBaseDTO(id, "", "VendApamount");
+    }
+
+    /**
+     * String转Date类型
+     *
+     * @param dateStr
+     *            时间字符串
+     * @return Date类型时间
+     * @throws Exception
+     *             异常
+     */
+    public static Date string2Date(String dateStr, String format) throws Exception {
+        SimpleDateFormat sdf = new SimpleDateFormat(format);
+        if (dateStr != null) {
+            return sdf.parse(dateStr);
+        }
+        return null;
+    }
+
+    /**
+     * Date转String
+     *
+     * @param date
+     *            Date类型时间
+     * @return 时间字符串
+     */
+    public static String date2String(Date date, String format) {
+        SimpleDateFormat sdf = new SimpleDateFormat(format);
+        if (date != null) {
+            return sdf.format(date);
+        }
+        return null;
+    }
+
+    @Override
+    public void saveToFormal(Integer id, boolean update) {
+        if (null == id || "0".equals(id)) {
+            return;
+        }
+        Long companyId = BaseContextHolder.getCompanyId();
+        StringBuilder err = new StringBuilder();
+        List<VendApamount> addList = new ArrayList<>();//新增
+        List<VendApamount> updateList = new ArrayList<>();//更新
+        List<DataImportDetail> details = dataImportMapper.selectDataById(id);
+        if (!CollectionUtils.isEmpty(details)) {
+            int i = 0;
+            for (DataImportDetail detail : details) {
+                //数据验证
+                if (StringUtils.isEmpty(detail)) {
+                    throw new BizException(BizExceptionCode.BIZ_REPORT_NOTCORRECT);
+                }
+                VendApamount vendApamount = JSONObject.parseObject(detail.getDd_maindata(), VendApamount.class);
+                vendApamount.setCompanyId(companyId);
+                if(vendApamount.getId()==null){vendApamount.setId(0L);}
+                if(vendApamount.getVa_payamount()==null){vendApamount.setVa_payamount(0.00);}
+                if(vendApamount.getVa_beginapamount()==null){vendApamount.setVa_beginapamount(0.00);}
+                if(vendApamount.getVa_beginprepayamount()==null){vendApamount.setVa_beginprepayamount(0.00);}
+                if(vendApamount.getVa_preamount()==null){vendApamount.setVa_preamount(0.00);}
+                //判断是否已存在数据
+                List<VendorDTO> vendors = vendorMapper.getVendorsByCondition("ve_statuscode = 'ENABLE' AND ve_code = '"+vendApamount.getVa_vendcode()+"'",BaseContextHolder.getCompanyId());
+                if (vendors.size() == 0){
+                    err.append("第" + (i + 3) + "行 : 供应商编号不存在或该供应商已禁用!<br/> ");
+                }else{
+                    int hasVendNameByCode = getMapper().hasVendNameByCode(vendApamount.getVa_vendcode(),companyId,vendApamount.getVa_vendname());
+                    if(hasVendNameByCode==0){
+                        err.append("第" + (i + 3) + "行 : 供应商名称与编号不匹配!<br/> ");
+                    }
+                    vendApamount.setVa_vendid(vendors.get(0).getId());
+                }
+                int hasCurrency = getMapper().hasCurrency(vendApamount.getVa_currency(), companyId);
+                if (hasCurrency == 0){
+                    err.append("第" + (i + 3) + "行 : 币别不存在!<br/> ");
+                }
+                SimpleDateFormat sdf = new SimpleDateFormat ("yyyyMM");
+                VendApamount oldVendApamount = getMapper().getVendApamountByVendCodeAndCurrency(vendApamount.getVa_vendcode(), companyId, vendApamount.getVa_currency(),0L);
+                if (!ObjectUtils.isEmpty(oldVendApamount)){
+                    //更新
+                    //校验是否可以修改供应商期初
+                    Map<String, Object> map = new HashMap<String, Object>();
+                    map.put("v_id",vendApamount.getVa_vendid());//供应商ID
+                    map.put("v_code", vendApamount.getVa_vendcode());//供应商编号
+                    map.put("v_type","vendCurrency");
+                    map.put("v_currency",vendApamount.getVa_currency());
+                    map.put("v_companyid",companyId);
+                    map.put("v_res","");
+                    getMapper().check(map);
+                    Object result =  map.get("v_res");
+                    if(!StringUtils.isEmpty(result)){
+                        err.append("第" + (i + 3) + "行 : "+result.toString()+"<br/> ");
+                    }else{
+                        //加载已存在的数据
+                        vendApamount.setId(oldVendApamount.getId());
+                        vendApamount.setVa_payamount(oldVendApamount.getVa_payamount());
+                        vendApamount.setVa_preamount(oldVendApamount.getVa_preamount());
+                        vendApamount.setVa_begindate(oldVendApamount.getVa_begindate());
+                        vendApamount.setUpdaterId(companyId);
+                        vendApamount.setUpdateTime(new Date());
+                        //期初日期是否已结账
+                        int checkBeginData = getMapper().checkBeginData(sdf.format(vendApamount.getVa_begindate()),companyId);
+                        if(checkBeginData > 0){
+                            err.append("第" + (i + 3) + "行 : "+BizExceptionCode.BIZ_NOPERIOD_UPDATE.getMessage()+"!<br/> ");
+                        }
+                        //更新余额
+                        vendApamount.setVa_leftamount(vendApamount.getVa_beginapamount()-vendApamount.getVa_beginprepayamount()+vendApamount.getVa_payamount()-vendApamount.getVa_preamount());
+                        updateList.add(vendApamount);
+                    }
+                }else{
+                    //新增
+                    vendApamount.setCreatorId(companyId);
+                    vendApamount.setCreateTime(new Date());
+                    vendApamount.setCreatorName(BaseContextHolder.getUserName());
+                    //获取当前期间
+                    String now = getMapper().selectPeriod(companyId);
+                    Date date = null;
+                    try {
+                        date = sdf.parse(now);
+                    } catch (ParseException e) {
+                        e.printStackTrace();
+                    }
+                    Calendar calendar = Calendar.getInstance();
+                    calendar.setTime(date);
+                    calendar.set(Calendar.DAY_OF_MONTH,1);//设置为1号,当前日期既为本月第一天
+                    vendApamount.setVa_begindate(calendar.getTime());
+                    //更新余额
+                    vendApamount.setVa_leftamount(vendApamount.getVa_beginapamount()-vendApamount.getVa_beginprepayamount()+vendApamount.getVa_payamount()-vendApamount.getVa_preamount());
+                    addList.add(vendApamount);
+                }
+                i++;
+            }
+            if (err.length() > 0) {
+                dataImportMapper.updateDataImportError(err.toString(), id);
+                throw new BizException(12345, err.toString());
+            }
+            //新增和更新 批量执行到数据库
+            if(addList.size()>0){
+                //校验是否有重复的数据
+                HashSet<Map<String,String>> hs = new HashSet<Map<String,String>>();
+                for(VendApamount list : addList){
+                    Map<String,String> m = new HashMap<String,String>();
+                    m.put("vendCode",list.getVa_vendcode());
+                    m.put("currency",list.getVa_currency());
+                    hs.add(m);
+                }
+                if(addList.size()==hs.size()){
+                    getMapper().batchInsert(addList);
+                }else{
+                    throw new BizException(12345, "检测到有供应商编号和币别相同的数据,无法导入");
+                }
+            }
+            if(updateList.size()>0){
+                //校验是否有重复的数据
+                HashSet<Map<String,String>> hs = new HashSet<Map<String,String>>();
+                for(VendApamount list : updateList){
+                    Map<String,String> m = new HashMap<String,String>();
+                    m.put("vendCode",list.getVa_vendcode());
+                    m.put("currency",list.getVa_currency());
+                    hs.add(m);
+                }
+                if(updateList.size()==hs.size()){
+                    getMapper().batchUpdate(updateList);
+                }else{
+                    throw new BizException(12345, "检测到有供应商编号和币别相同的数据,无法导入");
+                }
+            }
+            //校验是否可以修改供应商期初
+            Map<String, Object> map = new HashMap<String, Object>();
+            map.put("v_type","vendCurrency");
+            map.put("v_companyid",companyId);
+            getMapper().checkForImport(map);
+            dataImportMapper.updateDataImport(id);
+        }
+    }
+}

+ 31 - 78
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/VendorServiceImpl.java

@@ -7,8 +7,10 @@ import com.usoftchina.saas.account.api.CompanyApi;
 import com.usoftchina.saas.account.dto.CompanyDTO;
 import com.usoftchina.saas.base.Result;
 import com.usoftchina.saas.base.service.CommonBaseServiceImpl;
+import com.usoftchina.saas.commons.api.ConfigsApi;
 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;
@@ -21,10 +23,8 @@ import com.usoftchina.saas.context.BaseContextHolder;
 import com.usoftchina.saas.document.dto.VendorDTO;
 import com.usoftchina.saas.document.dto.VendorListDTO;
 import com.usoftchina.saas.document.entities.*;
-import com.usoftchina.saas.document.mapper.DataImportMapper;
-import com.usoftchina.saas.document.mapper.SubledgerMapper;
-import com.usoftchina.saas.document.mapper.VendorMapper;
-import com.usoftchina.saas.document.mapper.VendorcontactMapper;
+import com.usoftchina.saas.document.mapper.*;
+import com.usoftchina.saas.document.service.VendApamountService;
 import com.usoftchina.saas.document.service.VendorService;
 import com.usoftchina.saas.document.service.VendorkindService;
 import com.usoftchina.saas.exception.BizException;
@@ -69,6 +69,12 @@ public class VendorServiceImpl extends CommonBaseServiceImpl<VendorMapper, Vendo
     private VendorkindService vendorkindService;
     @Autowired
     private CompanyApi companyApi;
+    @Autowired
+    private ConfigsApi configsApi;
+    @Autowired
+    private  VendApamountService vendApamountService;
+    @Autowired
+    private VendApamountMapper vendApamountMapper;
     @Value("${b2b.baseUrl.common}")
     private String b2bUrl;
 
@@ -153,28 +159,11 @@ public class VendorServiceImpl extends CommonBaseServiceImpl<VendorMapper, Vendo
         main.setCompanyId(BaseContextHolder.getCompanyId());
         List<Vendorcontact> items = vendorListDTO.getItems();
         String ve_code = main.getVe_code().trim().toUpperCase();
-
-        //获取已结账的期间
-        String YM = subledgerMapper.selectUnPeriod(companyId);
-        if(YM==null || YM.equals("")){
-            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMM");
-            YM = simpleDateFormat.format(main.getVe_begindate());
-        }else{
-            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMM");
-            String beginDate = simpleDateFormat.format(main.getVe_begindate());
-            if(Integer.valueOf(YM)>Integer.valueOf(beginDate)){
-                int code = BizExceptionCode.LIMIT_PERIOD_VENDOR.getCode();
-                String mes = String.format(BizExceptionCode.LIMIT_PERIOD_VENDOR.getMessage(),YM);
-                throw new BizException(code , mes);
-            }
-            YM = beginDate;
-        }
         ve_code = RegexpUtils.replaceSpecCharacter(ve_code);
         if (vendorListDTO.isCodeModified()) {
             ve_code = pushMaxnubmer(ve_code, main.getId());
         }
-        //String code = pushMaxnubmer(ve_code, main.getId());
-        if(main.getId() == 0){
+        if(main.getId() == 0){//保存
             int count = getMapper().getCountByCode(ve_code, companyId);
             if(count > 0){
                 throw new BizException(BizExceptionCode.REPEAT_CODE);
@@ -185,12 +174,6 @@ public class VendorServiceImpl extends CommonBaseServiceImpl<VendorMapper, Vendo
             }
             //保存主表信息
             main.setVe_code(ve_code);
-            //更新应付款余额
-            Double beginapamount = main.getVe_beginapamount()==null ? new Double(0):main.getVe_beginapamount();
-            Double beginprepayamount = main.getVe_beginprepayamount()==null ? new Double(0):main.getVe_beginprepayamount();
-            Double payamount = main.getVe_payamount()==null? new Double(0):main.getVe_payamount();
-            Double preamount = main.getVe_preamount()==null? new Double(0):main.getVe_preamount();
-            main.setVe_leftamount(beginapamount-beginprepayamount+payamount-preamount);
             //更新录入人录入时间ID
             main.setCreatorId(BaseContextHolder.getUserId());
             getMapper().insertSelective(main);
@@ -201,12 +184,25 @@ public class VendorServiceImpl extends CommonBaseServiceImpl<VendorMapper, Vendo
                 item.setCompanyId(BaseContextHolder.getCompanyId());
                 item.setCreatorId(BaseContextHolder.getUserId());
                 item.setCreateTime(new Date());
-
             }
             //保存明细表信息
             if (items.size() > 0){
                 vendorcontactMapper.batchInsert(items);
             }
+            if( 1==2 ){//单一币别更新应付款余额
+                Double beginapamount = main.getVe_beginapamount()==null ? new Double(0):main.getVe_beginapamount();
+                Double beginprepayamount = main.getVe_beginprepayamount()==null ? new Double(0):main.getVe_beginprepayamount();
+                if(beginapamount>0 || beginprepayamount>0){
+                    VendApamount vendApamount=new VendApamount();
+                    vendApamount.setId(new Long(0));
+                    vendApamount.setVa_beginapamount(beginapamount);
+                    vendApamount.setVa_beginprepayamount(beginprepayamount);
+                    vendApamount.setVa_currency(configsApi.getConfigDataBycode("defaultCurrency"));
+                    vendApamount.setVa_vendid(main.getId());
+                    vendApamount.setVa_vendcode(main.getVe_code());
+                    vendApamountService.saveData(vendApamount);
+                }
+            }
             //记录LOG
             messageLogService.save(generateMsgObj(mainId, ve_code));
         }else{
@@ -226,7 +222,6 @@ public class VendorServiceImpl extends CommonBaseServiceImpl<VendorMapper, Vendo
                     throw new BizException(BizExceptionCode.REPEAT_NAME);
                 }
             }
-
             //有关联时不可修改名称编号
             Map<String, Object> map = new HashMap<String, Object>();
             map.put("v_id",main.getId());
@@ -245,7 +240,6 @@ public class VendorServiceImpl extends CommonBaseServiceImpl<VendorMapper, Vendo
                     throw new BizException(BizExceptionCode.BIZ_RELUPDATE_AMOUNT);
                 }
             }
-
             //检查期初日期是否已结转
             count = getMapper().validFinish(mainId,companyId);
             if (count>0) {
@@ -255,7 +249,8 @@ public class VendorServiceImpl extends CommonBaseServiceImpl<VendorMapper, Vendo
                 //期初预收
                 main.setVe_beginprepayamount(vendortpl.getVe_beginprepayamount());
             }
-
+            if( 1==2 ){//单一币别更新应付款余额
+            }
             //启用B2B对账
             if (StringUtils.isEmpty(oldVendor.getVe_uu()) && !StringUtils.isEmpty(main.getVe_uu())){
                 try {
@@ -264,7 +259,6 @@ public class VendorServiceImpl extends CommonBaseServiceImpl<VendorMapper, Vendo
                     LOGGER.info("请求B2B对账启用接口失败!, time={}", DateUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
                 }
             }
-
             getMapper().updateByPrimaryKeySelective(main);
             if (items.size() > 0) {
                 List<Vendorcontact> updateItems = new ArrayList<Vendorcontact>();
@@ -293,51 +287,8 @@ public class VendorServiceImpl extends CommonBaseServiceImpl<VendorMapper, Vendo
             //记录LOG
             messageLogService.update(generateMsgObj(main.getId(), ve_code));
         }
-
-        //更新应收款余额
-        Double ve_leftamount = (main.getVe_beginapamount() == null ? new Double(0) : main.getVe_beginapamount())
-                - (main.getVe_beginprepayamount() == null ? new Double(0) : main.getVe_beginprepayamount())
-                + (main.getVe_payamount() == null ? new Double(0) : main.getVe_payamount())
-                - (main.getVe_preamount() == null ? new Double(0) : main.getVe_preamount());
-        main.setVe_leftamount(ve_leftamount);
-        getMapper().updateByPrimaryKeySelective(main);
-
-        //插入中间表
-        Double amount = (main.getVe_beginapamount() == null ? new Double(0) : main.getVe_beginapamount())
-                - (main.getVe_beginprepayamount() == null ? new Double(0) : main.getVe_beginprepayamount());
-        Subledger subledger = new Subledger();
-        subledger.setSl_code("期初余额");
-        subledger.setSl_kind("期初余额");
-        subledger.setSl_vendid(Math.toIntExact(main.getId()));
-        subledger.setSl_custid(0);
-        subledger.setCompanyId(BaseContextHolder.getCompanyId());
-        subledger.setSl_date(DateUtils.getFirstDay(main.getVe_begindate()));
-        subledger.setSl_ym(DateUtils.getYm(main.getVe_begindate()));
-        subledger.setSl_currency(main.getVe_currency());
-        if (amount > new Double(0)){
-            subledger.setSl_preamount(new Double(0));
-            subledger.setSl_amount(Math.abs(amount));
-        }else {
-            subledger.setSl_amount(new Double(0));
-            subledger.setSl_preamount(Math.abs(amount));
-        }
-        subledger.setSl_orderamount(Math.abs(amount));
-        subledger.setSl_namount((subledger.getSl_orderamount() == null ? new Double(0) : subledger.getSl_orderamount()) +
-                (subledger.getSl_discount() == null ? new Double(0) : subledger.getSl_discount()) -
-                (subledger.getSl_yamount() == null ? new Double(0) : subledger.getSl_yamount()));
-        subledger.setCreateTime(new Date());
-        subledger.setCreatorId(BaseContextHolder.getUserId());
-        subledger.setCreatorName(BaseContextHolder.getUserName());
-        Long sl_id = subledgerMapper.selectByKindCodeVendid("期初余额","期初余额",
-                Math.toIntExact(main.getId()),BaseContextHolder.getCompanyId(),YM);
-
-        subledger.setId(sl_id);
-        if ( sl_id!=null && sl_id > 0 ) {
-            subledgerMapper.updateByPrimaryKeySelective(subledger);
-        }else {
-            subledgerMapper.insertSelective(subledger);
-        }
-
+        //更新供应商应付余额表供应商编号,名称.
+        vendApamountMapper.updateCodeAndNameByVendid(main.getId());
         return generateMsgObj(main.getId(), ve_code);
     }
 
@@ -386,6 +337,8 @@ public class VendorServiceImpl extends CommonBaseServiceImpl<VendorMapper, Vendo
             }else{
                 vendorcontactMapper.deleteByFK(id);
                 getMapper().deleteByPrimaryKey(id);
+                //删除期初设置
+                vendApamountMapper.deleteByVendid(id);
                 //删除中间表
                 subledgerMapper.deleteVendor("期初余额", "期初余额", Math.toIntExact(id));
                 //记录LOG

+ 12 - 0
applications/document/document-server/src/main/resources/mapper/CurrencyMapper.xml

@@ -142,4 +142,16 @@
     <select id="getStandard" resultType="com.usoftchina.saas.document.dto.CurrencyDTO">
       select * from CURRENCYS where cr_standard = '1' and companyId = #{companyId}
     </select>
+
+    <select id="check" parameterMap="checkParamMap" statementType="CALLABLE">
+        CALL SP_LIMITBASE(?, ?, ?, ?,?)
+    </select>
+    <parameterMap id="checkParamMap" type="java.util.Map">
+        <parameter property="v_type" jdbcType="VARCHAR" mode="IN" />
+        <parameter property="v_id" jdbcType="INTEGER" mode="IN" />
+        <parameter property="v_code" jdbcType="VARCHAR" mode="IN" />
+        <parameter property="v_companyid" jdbcType="INTEGER" mode="IN" />
+        <parameter property="v_res" jdbcType="VARCHAR" mode="OUT" />
+    </parameterMap>
+
 </mapper>

+ 378 - 0
applications/document/document-server/src/main/resources/mapper/CustAramountMapper.xml

@@ -0,0 +1,378 @@
+<?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.document.mapper.CustAramountMapper">
+
+    <resultMap id="CustAramountResultMapper" type="com.usoftchina.saas.document.entities.CustAramount">
+        <id column="ca_id" jdbcType="INTEGER" property="id" />
+        <result column="ca_custid" jdbcType="INTEGER" property="ca_custid" />
+        <result column="ca_custcode" jdbcType="VARCHAR" property="ca_custcode" />
+        <result column="ca_custname" jdbcType="VARCHAR" property="ca_custname" />
+        <result column="ca_currency" jdbcType="VARCHAR" property="ca_currency" />
+        <result column="ca_begindate" jdbcType="TIMESTAMP" property="ca_begindate" />
+        <result column="ca_beginaramount" jdbcType="DOUBLE" property="ca_beginaramount" />
+        <result column="ca_beginprerecamount" jdbcType="DOUBLE" property="ca_beginprerecamount" />
+        <result column="ca_recamount" jdbcType="DOUBLE" property="ca_recamount" />
+        <result column="ca_preamount" jdbcType="DOUBLE" property="ca_preamount" />
+        <result column="ca_leftamount" jdbcType="DOUBLE" property="ca_leftamount" />
+        <result column="companyId" jdbcType="INTEGER" property="companyId" />
+        <result column="updaterId" jdbcType="INTEGER" property="updaterId" />
+        <result column="updateTime" jdbcType="TIMESTAMP" property="updateTime" />
+        <result column="creatorName" jdbcType="VARCHAR" property="creatorName" />
+        <result column="creatorId" jdbcType="INTEGER" property="creatorId" />
+        <result column="createTime" jdbcType="TIMESTAMP" property="createTime" />
+        <result column="updaterName" jdbcType="VARCHAR" property="updaterName" />
+    </resultMap>
+
+    <resultMap id="CustAramountListResultMapper" type="com.usoftchina.saas.document.entities.CustAramountList">
+        <id column="ca_id" jdbcType="INTEGER" property="id" />
+        <result column="ca_custid" jdbcType="INTEGER" property="ca_custid" />
+        <result column="ca_custcode" jdbcType="VARCHAR" property="ca_custcode" />
+        <result column="ca_custname" jdbcType="VARCHAR" property="ca_custname" />
+        <result column="ca_currency" jdbcType="VARCHAR" property="ca_currency" />
+        <result column="ca_begindate" jdbcType="TIMESTAMP" property="ca_begindate" />
+        <result column="ca_beginaramount" jdbcType="DOUBLE" property="ca_beginaramount" />
+        <result column="ca_beginprerecamount" jdbcType="DOUBLE" property="ca_beginprerecamount" />
+        <result column="ca_recamount" jdbcType="DOUBLE" property="ca_recamount" />
+        <result column="ca_preamount" jdbcType="DOUBLE" property="ca_preamount" />
+        <result column="ca_leftamount" jdbcType="DOUBLE" property="ca_leftamount" />
+    </resultMap>
+
+    <select id="getListDataByCondition" resultMap="CustAramountListResultMapper">
+        SELECT * FROM CustAramount
+        <where>
+            <if test="condition!=null">
+                ${condition}
+            </if>
+            AND CustAramount.COMPANYID = #{companyId}
+            AND CustAramount.ca_BEGINDATE IS NOT NULL
+        </where>
+        order by ca_ID DESC
+    </select>
+
+    <sql id="Base_Column_List">
+        ca_id, ca_custid, ca_custcode, ca_custname, ca_currency, ca_begindate, ca_beginaramount,
+        ca_beginprerecamount, ca_recamount, ca_preamount, ca_leftamount, companyId, updaterId,
+        updateTime, creatorName, creatorId, createTime, updaterName
+    </sql>
+
+    <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="CustAramountResultMapper">
+        select
+        <include refid="Base_Column_List" />
+        from CustAramount
+        where ca_id = #{id}
+    </select>
+
+    <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
+        delete from CustAramount
+        where ca_id = #{id}
+    </delete>
+
+    <select id="selectPeriod" resultType="string">
+        select PD_DETNO from periodsdetail where companyid=#{companyId} and pd_detno is not null and pd_status=0 order by PD_DETNO LIMIT 1;
+    </select>
+
+    <select id="check" parameterMap="checkParamMap" statementType="CALLABLE">
+        CALL SP_BEGINLIMIT(?, ?, ?, ?, ?,?)
+    </select>
+    <parameterMap id="checkParamMap" type="java.util.Map">
+        <parameter property="v_type" jdbcType="VARCHAR" mode="IN" />
+        <parameter property="v_id" jdbcType="INTEGER" mode="IN" />
+        <parameter property="v_code" jdbcType="VARCHAR" mode="IN" />
+        <parameter property="v_currency" jdbcType="VARCHAR" mode="IN" />
+        <parameter property="v_companyid" jdbcType="INTEGER" mode="IN" />
+        <parameter property="v_res" jdbcType="VARCHAR" mode="OUT" />
+    </parameterMap>
+
+    <select id="checkForImport" parameterMap="checkForImportParamMap" statementType="CALLABLE">
+        CALL SP_CUSTARORVENDAPAFTER(?, ?)
+    </select>
+    <parameterMap id="checkForImportParamMap" type="java.util.Map">
+        <parameter property="v_type" jdbcType="VARCHAR" mode="IN" />
+        <parameter property="v_companyid" jdbcType="INTEGER" mode="IN" />
+    </parameterMap>
+
+    <insert id="insertSelective" parameterType="com.usoftchina.saas.document.entities.CustAramount">
+        <selectKey resultType="java.lang.Long" keyProperty="id">
+            SELECT LAST_INSERT_ID() AS ID
+        </selectKey>
+        insert into CustAramount
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="ca_custid != null">
+                ca_custid,
+            </if>
+            <if test="ca_custcode != null">
+                ca_custcode,
+            </if>
+            <if test="ca_custname != null">
+                ca_custname,
+            </if>
+            <if test="ca_currency != null">
+                ca_currency,
+            </if>
+            <if test="ca_begindate != null">
+                ca_begindate,
+            </if>
+            <if test="ca_beginaramount != null">
+                ca_beginaramount,
+            </if>
+            <if test="ca_beginprerecamount != null">
+                ca_beginprerecamount,
+            </if>
+            <if test="ca_recamount != null">
+                ca_recamount,
+            </if>
+            <if test="ca_preamount != null">
+                ca_preamount,
+            </if>
+            <if test="ca_leftamount != null">
+                ca_leftamount,
+            </if>
+            <if test="companyId != null">
+                companyId,
+            </if>
+            <if test="updaterId != null">
+                updaterId,
+            </if>
+            <if test="updateTime != null">
+                updateTime,
+            </if>
+            <if test="creatorName != null">
+                creatorName,
+            </if>
+            <if test="creatorId != null">
+                creatorId,
+            </if>
+            <if test="createTime != null">
+                createTime,
+            </if>
+            <if test="updaterName != null">
+                updaterName,
+            </if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="ca_custid != null">
+                #{ca_custid,jdbcType=INTEGER},
+            </if>
+            <if test="ca_custcode != null">
+                #{ca_custcode,jdbcType=VARCHAR},
+            </if>
+            <if test="ca_custname != null">
+                #{ca_custname,jdbcType=VARCHAR},
+            </if>
+            <if test="ca_currency != null">
+                #{ca_currency,jdbcType=VARCHAR},
+            </if>
+            <if test="ca_begindate != null">
+                #{ca_begindate,jdbcType=TIMESTAMP},
+            </if>
+            <if test="ca_beginaramount != null">
+                #{ca_beginaramount,jdbcType=DOUBLE},
+            </if>
+            <if test="ca_beginprerecamount != null">
+                #{ca_beginprerecamount,jdbcType=DOUBLE},
+            </if>
+            <if test="ca_recamount != null">
+                #{ca_recamount,jdbcType=DOUBLE},
+            </if>
+            <if test="ca_preamount != null">
+                #{ca_preamount,jdbcType=DOUBLE},
+            </if>
+            <if test="ca_leftamount != null">
+                #{ca_leftamount,jdbcType=DOUBLE},
+            </if>
+            <if test="companyId != null">
+                #{companyId,jdbcType=INTEGER},
+            </if>
+            <if test="updaterId != null">
+                #{updaterId,jdbcType=INTEGER},
+            </if>
+            <if test="updateTime != null">
+                #{updateTime,jdbcType=TIMESTAMP},
+            </if>
+            <if test="creatorName != null">
+                #{creatorName,jdbcType=VARCHAR},
+            </if>
+            <if test="creatorId != null">
+                #{creatorId,jdbcType=INTEGER},
+            </if>
+            <if test="createTime != null">
+                #{createTime,jdbcType=TIMESTAMP},
+            </if>
+            <if test="updaterName != null">
+                #{updaterName,jdbcType=VARCHAR},
+            </if>
+        </trim>
+    </insert>
+    <update id="updateByPrimaryKeySelective" parameterType="com.usoftchina.saas.document.entities.CustAramount">
+        update CustAramount
+        <set>
+            <if test="ca_begindate != null">
+                ca_begindate = #{ca_begindate,jdbcType=TIMESTAMP},
+            </if>
+            <if test="ca_beginaramount != null">
+                ca_beginaramount = #{ca_beginaramount,jdbcType=DOUBLE},
+            </if>
+            <if test="ca_beginprerecamount != null">
+                ca_beginprerecamount = #{ca_beginprerecamount,jdbcType=DOUBLE},
+            </if>
+            <if test="ca_leftamount != null">
+                ca_leftamount = #{ca_leftamount,jdbcType=DOUBLE},
+            </if>
+            <if test="updaterId != null">
+                updaterId = #{updaterId,jdbcType=INTEGER},
+            </if>
+            <if test="updateTime != null">
+                updateTime = #{updateTime,jdbcType=TIMESTAMP},
+            </if>
+            <if test="updaterName != null">
+                updaterName = #{updaterName,jdbcType=VARCHAR},
+            </if>
+        </set>
+        where ca_id = #{id}
+    </update>
+
+    <select id="checkBeginData" resultType="int">
+        SELECT COUNT(*) FROM periodsdetail
+        <where>
+            pd_status = 99
+            <if test="pd_detno!=null">
+                and pd_detno=#{pd_detno}
+            </if>
+            <if test="companyId!=0 and companyId!=null">
+                and COMPANYID=#{companyId}
+            </if>
+        </where>
+    </select>
+
+    <select id="hasCustNameByCode" resultType="int">
+        SELECT COUNT(*) FROM customer
+        <where>
+            cu_statuscode = 'ENABLE'
+            <if test="custCode!=null">
+                and cu_code=#{custCode}
+            </if>
+            <if test="custName!=null">
+                and cu_Name=#{custName}
+            </if>
+            <if test="companyId!=0 and companyId!=null">
+                and COMPANYID=#{companyId}
+            </if>
+        </where>
+    </select>
+
+    <select id="getCustAramount" resultMap="CustAramountResultMapper">
+        SELECT * FROM CustAramount
+        <where>
+            <if test="id!=null">
+                and ca_id=#{id}
+            </if>
+            <if test="companyId!=0 and companyId!=null">
+                and COMPANYID=#{companyId}
+            </if>
+        </where>
+    </select>
+
+    <select id="hasCustCode" resultType="int">
+        SELECT COUNT(*) FROM Customer
+        <where>
+            cu_statuscode = 'ENABLE'
+            <if test="name!=null">
+                and cu_CODE=#{name}
+            </if>
+            <if test="companyId!=0 and companyId!=null">
+                and COMPANYID=#{companyId}
+            </if>
+        </where>
+    </select>
+
+    <select id="hasCurrency" resultType="int">
+        SELECT COUNT(*) FROM currencys
+        <where>
+            <if test="name!=null">
+                and cr_name=#{name}
+            </if>
+            <if test="companyId!=0 and companyId!=null">
+                and COMPANYID=#{companyId}
+            </if>
+        </where>
+    </select>
+
+    <select id="getCustAramountByCustCodeAndCurrency" resultMap="CustAramountResultMapper">
+        SELECT * FROM CustAramount
+        <where>
+            <if test="custCode!=null">
+                and ca_custcode=#{custCode}
+            </if>
+            <if test="currency!=null">
+                and ca_currency=#{currency}
+            </if>
+            <if test="id!=0">
+                and ca_id!=#{id}
+            </if>
+            <if test="companyId!=0 and companyId!=null">
+                and COMPANYID=#{companyId}
+            </if>
+        </where>
+    </select>
+
+    <insert id="batchInsert" parameterType="java.util.List">
+        INSERT INTO custaramount (ca_custid, ca_custcode, ca_custname, ca_currency, ca_begindate, ca_beginaramount,
+        ca_beginprerecamount, ca_recamount, ca_preamount, ca_leftamount, companyId, creatorName, creatorId, createTime)
+        VALUES
+        <foreach collection="list" item="item" index="index" open="" close="" separator=",">
+            (
+            #{item.ca_custid,jdbcType=INTEGER},
+            #{item.ca_custcode,jdbcType=VARCHAR}, #{item.ca_custname,jdbcType=VARCHAR}, #{item.ca_currency,jdbcType=VARCHAR},
+            #{item.ca_begindate,jdbcType=TIMESTAMP}, #{item.ca_beginaramount,jdbcType=DOUBLE}, #{item.ca_beginprerecamount,jdbcType=DOUBLE},
+            #{item.ca_recamount,jdbcType=DOUBLE},#{item.ca_preamount,jdbcType=DOUBLE}, #{item.ca_leftamount,jdbcType=DOUBLE},
+            #{item.companyId,jdbcType=INTEGER},#{item.creatorName,jdbcType=VARCHAR}, #{item.creatorId,jdbcType=INTEGER},
+            #{item.createTime,jdbcType=TIMESTAMP}
+            )
+        </foreach>
+    </insert>
+
+    <update id="batchUpdate" parameterType="com.usoftchina.saas.document.entities.CustAramount">
+        <foreach collection="list" item="item" index="index" separator=";">
+            update custaramount
+            <set>
+                <if test="item.ca_beginaramount != null">
+                    ca_beginaramount = #{item.ca_beginaramount,jdbcType=DOUBLE},
+                </if>
+                <if test="item.ca_beginprerecamount != null">
+                    ca_beginprerecamount = #{item.ca_beginprerecamount,jdbcType=DOUBLE},
+                </if>
+                <if test="item.ca_leftamount != null">
+                    ca_leftamount = #{item.ca_leftamount,jdbcType=DOUBLE},
+                </if>
+                <if test="item.updaterId != null">
+                    updaterId = #{item.updaterId,jdbcType=INTEGER},
+                </if>
+                <if test="item.updateTime != null">
+                    updateTime = #{item.updateTime,jdbcType=TIMESTAMP},
+                </if>
+                <if test="item.updaterName != null">
+                    updaterName = #{item.updaterName,jdbcType=VARCHAR},
+                </if>
+            </set>
+            where ca_id = #{item.id}
+        </foreach>
+    </update>
+
+    <update id="updateCodeAndNameByCustid">
+         update custaramount inner join customer  on cu_id=ca_custid and customer.companyid=custaramount.companyid
+         set ca_custcode=cu_code ,
+             ca_custname=cu_name
+        where  ca_custid=#{cu_id}
+    </update>
+    <delete id="deleteByCustid" parameterType="java.lang.Long">
+        delete from custaramount
+        where ca_custid = #{cu_id}
+    </delete>
+    <select id="checkVerification" resultType="java.lang.Integer">
+        select count(1) from subledger
+        where sl_kind='期初余额' and sl_custid=#{cu_id} and sl_currency=#{currency}
+        and (ifnull(sl_yamount,0)!=0
+             or exists(select 1 from verificationdet where vd_slid=sl_id)
+             or exists(select 1 from verificationdetail where vcd_slid=sl_id))
+    </select>
+</mapper>

+ 22 - 0
applications/document/document-server/src/main/resources/mapper/CustomerMapper.xml

@@ -402,4 +402,26 @@
     select ve_id from VENDOR where ve_code=#{code} and companyId=#{companyId}
   </select>
 
+    <update id="updateCustleftamountByPrimaryKey" parameterType="java.lang.Integer">
+        update customer
+        <set>
+            cu_leftamount=ifnull((select sum(ca_leftamount*(case when ifnull(cr_rate,0)=0 then 1 else ifnull(cr_rate,0) end ))
+            from custaramount left join currencys on cr_name=ca_currency and custaramount.companyid=currencys.companyid
+            where custaramount.companyid=customer.companyid and ca_custid=#{cu_id,jdbcType=INTEGER}),0)
+        </set>
+        where cu_id = #{cu_id,jdbcType=INTEGER}
+    </update>
+
+  <select id="getCustomersByCondition" resultMap="BaseResultMap">
+    SELECT * FROM CUSTOMER
+    <where>
+      <if test="condition!=null">
+        ${condition}
+      </if>
+      <if test="companyId!=null">
+        AND companyId = #{companyId}
+      </if>
+    </where>
+    ORDER BY CU_ID DESC
+  </select>
 </mapper>

+ 5 - 0
applications/document/document-server/src/main/resources/mapper/DataImportMapper.xml

@@ -96,6 +96,11 @@
     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>

+ 31 - 1
applications/document/document-server/src/main/resources/mapper/SubledgerMapper.xml

@@ -309,5 +309,35 @@
 
   <select id="selectUnPeriod" resultType="string">
         select PD_DETNO from periodsdetail where companyid=#{companyId} and pd_status=99 order by PD_DETNO desc LIMIT 1;
-    </select>
+  </select>
+
+  <select id="selectThisPeriod" resultType="string">
+      select PD_DETNO from periodsdetail where companyid=#{companyId} and pd_status=0 order by PD_DETNO  LIMIT 1;
+  </select>
+
+  <select id="selectIdBycondition" resultType="java.lang.Long">
+  select
+  ifnull(sl_id,0)
+  from subledger
+  <where>
+      <if test="con != null">
+        ${con}
+      </if>
+      <if test="companyId != null">
+        and   subledger.companyId = #{companyId}
+      </if>
+    </where>
+  </select>
+
+  <delete id="deleteBycondition">
+    delete from subledger
+    <where>
+      <if test="con != null">
+        ${con}
+      </if>
+      <if test="companyId != null">
+        and   subledger.companyId = #{companyId}
+      </if>
+    </where>
+  </delete>
 </mapper>

+ 378 - 0
applications/document/document-server/src/main/resources/mapper/VendApamountMapper.xml

@@ -0,0 +1,378 @@
+<?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.document.mapper.VendApamountMapper">
+
+    <resultMap id="VendApamountResultMapper" type="com.usoftchina.saas.document.entities.VendApamount">
+        <id column="va_id" jdbcType="INTEGER" property="id" />
+        <result column="va_vendid" jdbcType="INTEGER" property="va_vendid" />
+        <result column="va_vendcode" jdbcType="VARCHAR" property="va_vendcode" />
+        <result column="va_vendname" jdbcType="VARCHAR" property="va_vendname" />
+        <result column="va_currency" jdbcType="VARCHAR" property="va_currency" />
+        <result column="va_begindate" jdbcType="TIMESTAMP" property="va_begindate" />
+        <result column="va_beginapamount" jdbcType="DOUBLE" property="va_beginapamount" />
+        <result column="va_beginprepayamount" jdbcType="DOUBLE" property="va_beginprepayamount" />
+        <result column="va_payamount" jdbcType="DOUBLE" property="va_payamount" />
+        <result column="va_preamount" jdbcType="DOUBLE" property="va_preamount" />
+        <result column="va_leftamount" jdbcType="DOUBLE" property="va_leftamount" />
+        <result column="companyId" jdbcType="INTEGER" property="companyId" />
+        <result column="updaterId" jdbcType="INTEGER" property="updaterId" />
+        <result column="updateTime" jdbcType="TIMESTAMP" property="updateTime" />
+        <result column="creatorName" jdbcType="VARCHAR" property="creatorName" />
+        <result column="creatorId" jdbcType="INTEGER" property="creatorId" />
+        <result column="createTime" jdbcType="TIMESTAMP" property="createTime" />
+        <result column="updaterName" jdbcType="VARCHAR" property="updaterName" />
+    </resultMap>
+
+    <resultMap id="VendApamountListResultMapper" type="com.usoftchina.saas.document.entities.VendApamountList">
+        <id column="va_id" jdbcType="INTEGER" property="id" />
+        <result column="va_vendid" jdbcType="INTEGER" property="va_vendid" />
+        <result column="va_vendcode" jdbcType="VARCHAR" property="va_vendcode" />
+        <result column="va_vendname" jdbcType="VARCHAR" property="va_vendname" />
+        <result column="va_currency" jdbcType="VARCHAR" property="va_currency" />
+        <result column="va_begindate" jdbcType="TIMESTAMP" property="va_begindate" />
+        <result column="va_beginapamount" jdbcType="DOUBLE" property="va_beginapamount" />
+        <result column="va_beginprepayamount" jdbcType="DOUBLE" property="va_beginprepayamount" />
+        <result column="va_payamount" jdbcType="DOUBLE" property="va_payamount" />
+        <result column="va_preamount" jdbcType="DOUBLE" property="va_preamount" />
+        <result column="va_leftamount" jdbcType="DOUBLE" property="va_leftamount" />
+    </resultMap>
+
+    <select id="getListDataByCondition" resultMap="VendApamountListResultMapper">
+        SELECT * FROM VendApamount
+        <where>
+            <if test="condition!=null">
+                ${condition}
+            </if>
+            AND VENDAPAMOUNT.COMPANYID = #{companyId}
+            AND VENDAPAMOUNT.VA_BEGINDATE IS NOT NULL
+        </where>
+        order by VA_ID DESC
+    </select>
+
+    <sql id="Base_Column_List">
+        va_id, va_vendid, va_vendcode, va_vendname, va_currency, va_begindate, va_beginapamount,
+        va_beginprepayamount, va_payamount, va_preamount, va_leftamount, companyId, updaterId,
+        updateTime, creatorName, creatorId, createTime, updaterName
+    </sql>
+
+    <select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="VendApamountResultMapper">
+        select
+        <include refid="Base_Column_List" />
+        from vendapamount
+        where va_id = #{id}
+    </select>
+
+    <delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
+        delete from vendapamount
+        where va_id = #{id}
+    </delete>
+
+    <select id="selectPeriod" resultType="string">
+        select PD_DETNO from periodsdetail where companyid=#{companyId} and pd_detno is not null and pd_status=0 order by PD_DETNO LIMIT 1;
+    </select>
+
+    <select id="check" parameterMap="checkParamMap" statementType="CALLABLE">
+        CALL SP_BEGINLIMIT(?, ?, ?, ?, ?,?)
+    </select>
+    <parameterMap id="checkParamMap" type="java.util.Map">
+        <parameter property="v_type" jdbcType="VARCHAR" mode="IN" />
+        <parameter property="v_id" jdbcType="INTEGER" mode="IN" />
+        <parameter property="v_code" jdbcType="VARCHAR" mode="IN" />
+        <parameter property="v_currency" jdbcType="VARCHAR" mode="IN" />
+        <parameter property="v_companyid" jdbcType="INTEGER" mode="IN" />
+        <parameter property="v_res" jdbcType="VARCHAR" mode="OUT" />
+    </parameterMap>
+
+    <select id="checkForImport" parameterMap="checkForImportParamMap" statementType="CALLABLE">
+        CALL SP_CUSTARORVENDAPAFTER(?, ?)
+    </select>
+    <parameterMap id="checkForImportParamMap" type="java.util.Map">
+        <parameter property="v_type" jdbcType="VARCHAR" mode="IN" />
+        <parameter property="v_companyid" jdbcType="INTEGER" mode="IN" />
+    </parameterMap>
+
+    <insert id="insertSelective" parameterType="com.usoftchina.saas.document.entities.VendApamount">
+        <selectKey resultType="java.lang.Long" keyProperty="id">
+            SELECT LAST_INSERT_ID() AS ID
+        </selectKey>
+        insert into vendapamount
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="va_vendid != null">
+                va_vendid,
+            </if>
+            <if test="va_vendcode != null">
+                va_vendcode,
+            </if>
+            <if test="va_vendname != null">
+                va_vendname,
+            </if>
+            <if test="va_currency != null">
+                va_currency,
+            </if>
+            <if test="va_begindate != null">
+                va_begindate,
+            </if>
+            <if test="va_beginapamount != null">
+                va_beginapamount,
+            </if>
+            <if test="va_beginprepayamount != null">
+                va_beginprepayamount,
+            </if>
+            <if test="va_payamount != null">
+                va_payamount,
+            </if>
+            <if test="va_preamount != null">
+                va_preamount,
+            </if>
+            <if test="va_leftamount != null">
+                va_leftamount,
+            </if>
+            <if test="companyId != null">
+                companyId,
+            </if>
+            <if test="updaterId != null">
+                updaterId,
+            </if>
+            <if test="updateTime != null">
+                updateTime,
+            </if>
+            <if test="creatorName != null">
+                creatorName,
+            </if>
+            <if test="creatorId != null">
+                creatorId,
+            </if>
+            <if test="createTime != null">
+                createTime,
+            </if>
+            <if test="updaterName != null">
+                updaterName,
+            </if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="va_vendid != null">
+                #{va_vendid,jdbcType=INTEGER},
+            </if>
+            <if test="va_vendcode != null">
+                #{va_vendcode,jdbcType=VARCHAR},
+            </if>
+            <if test="va_vendname != null">
+                #{va_vendname,jdbcType=VARCHAR},
+            </if>
+            <if test="va_currency != null">
+                #{va_currency,jdbcType=VARCHAR},
+            </if>
+            <if test="va_begindate != null">
+                #{va_begindate,jdbcType=TIMESTAMP},
+            </if>
+            <if test="va_beginapamount != null">
+                #{va_beginapamount,jdbcType=DOUBLE},
+            </if>
+            <if test="va_beginprepayamount != null">
+                #{va_beginprepayamount,jdbcType=DOUBLE},
+            </if>
+            <if test="va_payamount != null">
+                #{va_payamount,jdbcType=DOUBLE},
+            </if>
+            <if test="va_preamount != null">
+                #{va_preamount,jdbcType=DOUBLE},
+            </if>
+            <if test="va_leftamount != null">
+                #{va_leftamount,jdbcType=DOUBLE},
+            </if>
+            <if test="companyId != null">
+                #{companyId,jdbcType=INTEGER},
+            </if>
+            <if test="updaterId != null">
+                #{updaterId,jdbcType=INTEGER},
+            </if>
+            <if test="updateTime != null">
+                #{updateTime,jdbcType=TIMESTAMP},
+            </if>
+            <if test="creatorName != null">
+                #{creatorName,jdbcType=VARCHAR},
+            </if>
+            <if test="creatorId != null">
+                #{creatorId,jdbcType=INTEGER},
+            </if>
+            <if test="createTime != null">
+                #{createTime,jdbcType=TIMESTAMP},
+            </if>
+            <if test="updaterName != null">
+                #{updaterName,jdbcType=VARCHAR},
+            </if>
+        </trim>
+    </insert>
+    <update id="updateByPrimaryKeySelective" parameterType="com.usoftchina.saas.document.entities.VendApamount">
+        update vendapamount
+        <set>
+            <if test="va_begindate != null">
+                va_begindate = #{va_begindate,jdbcType=TIMESTAMP},
+            </if>
+            <if test="va_beginapamount != null">
+                va_beginapamount = #{va_beginapamount,jdbcType=DOUBLE},
+            </if>
+            <if test="va_beginprepayamount != null">
+                va_beginprepayamount = #{va_beginprepayamount,jdbcType=DOUBLE},
+            </if>
+            <if test="va_leftamount != null">
+                va_leftamount = #{va_leftamount,jdbcType=DOUBLE},
+            </if>
+            <if test="updaterId != null">
+                updaterId = #{updaterId,jdbcType=INTEGER},
+            </if>
+            <if test="updateTime != null">
+                updateTime = #{updateTime,jdbcType=TIMESTAMP},
+            </if>
+            <if test="updaterName != null">
+                updaterName = #{updaterName,jdbcType=VARCHAR},
+            </if>
+        </set>
+        where va_id = #{id}
+    </update>
+
+    <select id="checkBeginData" resultType="int">
+        SELECT COUNT(*) FROM periodsdetail
+        <where>
+            pd_status = 99
+            <if test="pd_detno!=null">
+                and pd_detno=#{pd_detno}
+            </if>
+            <if test="companyId!=0 and companyId!=null">
+                and COMPANYID=#{companyId}
+            </if>
+        </where>
+    </select>
+
+    <select id="hasVendNameByCode" resultType="int">
+        SELECT COUNT(*) FROM vendor
+        <where>
+            ve_statuscode = 'ENABLE'
+            <if test="vendCode!=null">
+                and ve_code=#{vendCode}
+            </if>
+            <if test="vendName!=null">
+                and ve_Name=#{vendName}
+            </if>
+            <if test="companyId!=0 and companyId!=null">
+                and COMPANYID=#{companyId}
+            </if>
+        </where>
+    </select>
+
+    <select id="getVendApamount" resultMap="VendApamountResultMapper">
+        SELECT * FROM vendapamount
+        <where>
+            <if test="id!=null">
+                and va_id=#{id}
+            </if>
+            <if test="companyId!=0 and companyId!=null">
+                and COMPANYID=#{companyId}
+            </if>
+        </where>
+    </select>
+
+    <select id="hasVendCode" resultType="int">
+        SELECT COUNT(*) FROM vendor
+        <where>
+            ve_statuscode = 'ENABLE'
+            <if test="name!=null">
+                and VE_CODE=#{name}
+            </if>
+            <if test="companyId!=0 and companyId!=null">
+                and COMPANYID=#{companyId}
+            </if>
+        </where>
+    </select>
+
+    <select id="hasCurrency" resultType="int">
+        SELECT COUNT(*) FROM currencys
+        <where>
+            <if test="name!=null">
+                and cr_name=#{name}
+            </if>
+            <if test="companyId!=0 and companyId!=null">
+                and COMPANYID=#{companyId}
+            </if>
+        </where>
+    </select>
+
+    <select id="getVendApamountByVendCodeAndCurrency" resultMap="VendApamountResultMapper">
+        SELECT * FROM vendapamount
+        <where>
+            <if test="vendcode!=null">
+                and va_vendcode=#{vendcode}
+            </if>
+            <if test="currency!=null">
+                and va_currency=#{currency}
+            </if>
+            <if test="id!=0">
+                and va_id!=#{id}
+            </if>
+            <if test="companyId!=0 and companyId!=null">
+                and COMPANYID=#{companyId}
+            </if>
+        </where>
+    </select>
+    <update id="updateCodeAndNameByVendid">
+         update vendapamount inner join vendor  on ve_id=va_vendid and vendor.companyid=vendapamount.companyid
+         set va_vendcode=ve_Code ,
+             va_vendname=ve_name
+        where  va_vendid=#{ve_id}
+    </update>
+
+    <delete id="deleteByVendid" parameterType="java.lang.Long">
+        delete from vendapamount
+        where va_vendid = #{ve_id}
+    </delete>
+
+    <insert id="batchInsert" parameterType="java.util.List">
+        INSERT INTO vendapamount (va_vendid, va_vendcode, va_vendname, va_currency, va_begindate, va_beginapamount,
+        va_beginprepayamount, va_payamount, va_preamount, va_leftamount, companyId, creatorName, creatorId, createTime)
+        VALUES
+        <foreach collection="list" item="item" index="index" open="" close="" separator=",">
+            (
+            #{item.va_vendid,jdbcType=INTEGER},
+            #{item.va_vendcode,jdbcType=VARCHAR}, #{item.va_vendname,jdbcType=VARCHAR}, #{item.va_currency,jdbcType=VARCHAR},
+            #{item.va_begindate,jdbcType=TIMESTAMP}, #{item.va_beginapamount,jdbcType=DOUBLE}, #{item.va_beginprepayamount,jdbcType=DOUBLE},
+            #{item.va_payamount,jdbcType=DOUBLE},#{item.va_preamount,jdbcType=DOUBLE}, #{item.va_leftamount,jdbcType=DOUBLE},
+            #{item.companyId,jdbcType=INTEGER},#{item.creatorName,jdbcType=VARCHAR}, #{item.creatorId,jdbcType=INTEGER},
+            #{item.createTime,jdbcType=TIMESTAMP}
+            )
+        </foreach>
+    </insert>
+
+    <update id="batchUpdate" parameterType="com.usoftchina.saas.document.entities.VendApamount">
+        <foreach collection="list" item="item" index="index" separator=";">
+            update vendapamount
+            <set>
+                <if test="item.va_beginapamount != null">
+                    va_beginapamount = #{item.va_beginapamount,jdbcType=DOUBLE},
+                </if>
+                <if test="item.va_beginprepayamount != null">
+                    va_beginprepayamount = #{item.va_beginprepayamount,jdbcType=DOUBLE},
+                </if>
+                <if test="item.va_leftamount != null">
+                    va_leftamount = #{item.va_leftamount,jdbcType=DOUBLE},
+                </if>
+                <if test="item.updaterId != null">
+                    updaterId = #{item.updaterId,jdbcType=INTEGER},
+                </if>
+                <if test="item.updateTime != null">
+                    updateTime = #{item.updateTime,jdbcType=TIMESTAMP},
+                </if>
+                <if test="item.updaterName != null">
+                    updaterName = #{item.updaterName,jdbcType=VARCHAR},
+                </if>
+            </set>
+            where va_id = #{item.id}
+        </foreach>
+    </update>
+    <select id="checkVerification" resultType="java.lang.Integer">
+        select count(1) from subledger
+        where sl_kind='期初余额' and sl_vendid=#{ve_id} and sl_currency=#{currency}
+        and (ifnull(sl_yamount,0)!=0
+             or exists(select 1 from verificationdet where vd_slid=sl_id)
+             or exists(select 1 from verificationdetail where vcd_slid=sl_id))
+    </select>
+</mapper>

+ 10 - 0
applications/document/document-server/src/main/resources/mapper/VendorMapper.xml

@@ -505,5 +505,15 @@
     <select id="selectByName" resultMap="VendorDTOResultMapper">
       select * from vendor where ve_name = #{name} and companyId = #{companyId}
     </select>
+
+    <update id="updateVendleftamountByPrimaryKey" parameterType="java.lang.Long">
+        update vendor
+        <set>
+            ve_leftamount=ifnull((select sum(va_leftamount*(case when ifnull(cr_rate,0)=0 then 1 else ifnull(cr_rate,0) end ))
+            from VendApamount left join currencys on cr_name=va_currency and VendApamount.companyid=currencys.companyid
+            where VendApamount.companyid=vendor.companyid and va_vendid=#{ve_id,jdbcType=INTEGER}),0)
+        </set>
+        where ve_id = #{ve_id}
+    </update>
 </mapper>
 

+ 9 - 4
applications/money/money-server/src/main/java/com/usoftchina/saas/money/mapper/PaybalanceMapper.java

@@ -2,10 +2,7 @@ package com.usoftchina.saas.money.mapper;
 
 import com.usoftchina.saas.base.mapper.CommonBaseMapper;
 import com.usoftchina.saas.commons.dto.DocBaseDTO;
-import com.usoftchina.saas.money.po.Bankinformation;
-import com.usoftchina.saas.money.po.Paybalance;
-import com.usoftchina.saas.money.po.Recbalance;
-import com.usoftchina.saas.money.po.Vendor;
+import com.usoftchina.saas.money.po.*;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -51,4 +48,12 @@ public interface PaybalanceMapper extends CommonBaseMapper<Paybalance> {
 
     String validateAudit(List<DocBaseDTO> baseDTOs);
     void updateByAmount(@Param("id") Long id, @Param("companyId") Long companyId);
+
+    VendApamount selectVendApByCondition(@Param("con") String con, @Param("companyId") Long companyId);
+
+    int updateVendApamountByPrimaryKeySelective(VendApamount record);
+
+    int updateVendleftamountByPrimaryKey(Integer ve_id);
+
+    int insertVendApamount(VendApamount record);
 }

+ 10 - 0
applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/AcountbalanceView.java

@@ -28,6 +28,16 @@ public class AcountbalanceView {
     private String remark;
     private Integer companyId;
 
+    private String currency;
+
+    public String getCurrency() {
+        return currency;
+    }
+
+    public void setCurrency(String currency) {
+        this.currency = currency;
+    }
+
     public Integer getCompanyId() {
         return companyId;
     }

+ 10 - 0
applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/Banksubledger.java

@@ -48,6 +48,16 @@ public class Banksubledger extends CommonBaseEntity implements Serializable {
 
     private String bl_item;
 
+    private String bk_currency;
+
+    public String getBk_currency() {
+        return bk_currency;
+    }
+
+    public void setBk_currency(String bk_currency) {
+        this.bk_currency = bk_currency;
+    }
+
     public Double getBl_orderamount() {
         return bl_orderamount;
     }

+ 30 - 0
applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/CustomerCheckView.java

@@ -11,6 +11,12 @@ public class CustomerCheckView {
 
     private String pi_custname;
 
+    private  String pi_currency;
+
+    private Double pi_rate;
+
+    private Double pi_mytotal;
+
     private Date pi_date;
 
     private Integer pd_pdno;
@@ -43,6 +49,22 @@ public class CustomerCheckView {
 
     private Double pd_ordertotal;
 
+    public Double getPi_mytotal() {
+        return pi_mytotal;
+    }
+
+    public void setPi_mytotal(Double pi_mytotal) {
+        this.pi_mytotal = pi_mytotal;
+    }
+
+    public Double getPi_rate() {
+        return pi_rate;
+    }
+
+    public void setPi_rate(Double pi_rate) {
+        this.pi_rate = pi_rate;
+    }
+
     public Double getPd_ordertotal(){
         return pd_ordertotal;
     }
@@ -200,4 +222,12 @@ public class CustomerCheckView {
     public void setPd_nettotal(Double pd_nettotal) {
         this.pd_nettotal = pd_nettotal;
     }
+
+    public String getPi_currency() {
+        return pi_currency;
+    }
+
+    public void setPi_currency(String pi_currency) {
+        this.pi_currency = pi_currency;
+    }
 }

+ 101 - 0
applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/VendApamount.java

@@ -0,0 +1,101 @@
+package com.usoftchina.saas.money.po;
+
+import com.usoftchina.saas.base.entity.CommonBaseEntity;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+public class VendApamount extends CommonBaseEntity implements Serializable {
+    private  Integer va_vendid;
+    private  String va_vendcode;
+    private  String va_vendname;
+    private  String va_currency;
+    private  Date va_begindate;
+    private  Double va_beginapamount;
+    private  Double va_beginprepayamount;
+    private  Double va_preamount;
+    private  Double va_payamount;
+    private  Double va_leftamount;
+
+    public Integer getVa_vendid() {
+        return va_vendid;
+    }
+
+    public void setVa_vendid(Integer va_vendid) {
+        this.va_vendid = va_vendid;
+    }
+
+    public String getVa_vendcode() {
+        return va_vendcode;
+    }
+
+    public void setVa_vendcode(String va_vendcode) {
+        this.va_vendcode = va_vendcode;
+    }
+
+    public String getVa_vendname() {
+        return va_vendname;
+    }
+
+    public void setVa_vendname(String va_vendname) {
+        this.va_vendname = va_vendname;
+    }
+
+    public String getVa_currency() {
+        return va_currency;
+    }
+
+    public void setVa_currency(String va_currency) {
+        this.va_currency = va_currency;
+    }
+
+    public Date getVa_begindate() {
+        return va_begindate;
+    }
+
+    public void setVa_begindate(Date va_begindate) {
+        this.va_begindate = va_begindate;
+    }
+
+    public Double getVa_beginapamount() {
+        return va_beginapamount;
+    }
+
+    public void setVa_beginapamount(Double va_beginapamount) {
+        this.va_beginapamount = va_beginapamount;
+    }
+
+    public Double getVa_beginprepayamount() {
+        return va_beginprepayamount;
+    }
+
+    public void setVa_beginprepayamount(Double va_beginprepayamount) {
+        this.va_beginprepayamount = va_beginprepayamount;
+    }
+
+    public Double getVa_preamount() {
+        return va_preamount;
+    }
+
+    public void setVa_preamount(Double va_preamount) {
+        this.va_preamount = va_preamount;
+    }
+
+    public Double getVa_payamount() {
+        return va_payamount;
+    }
+
+    public void setVa_payamount(Double va_payamount) {
+        this.va_payamount = va_payamount;
+    }
+
+    public Double getVa_leftamount() {
+        return va_leftamount;
+    }
+
+    public void setVa_leftamount(Double va_leftamount) {
+        this.va_leftamount = va_leftamount;
+    }
+}

+ 30 - 0
applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/VendorAcountView.java

@@ -11,6 +11,12 @@ public class VendorAcountView {
 
     private String pi_vendname;
 
+    private String pi_currency;
+
+    private Double pi_rate;
+
+    private Double pi_mytotal;
+
     private Date pi_date;
 
     private Integer pd_pdno;
@@ -42,6 +48,22 @@ public class VendorAcountView {
     private int ym;
     private Double pd_ordertotal;
 
+    public Double getPi_rate() {
+        return pi_rate;
+    }
+
+    public void setPi_rate(Double pi_rate) {
+        this.pi_rate = pi_rate;
+    }
+
+    public Double getPi_mytotal() {
+        return pi_mytotal;
+    }
+
+    public void setPi_mytotal(Double pi_mytotal) {
+        this.pi_mytotal = pi_mytotal;
+    }
+
     public Double getPd_ordertotal(){
         return pd_ordertotal;
     }
@@ -215,4 +237,12 @@ public class VendorAcountView {
     public void setPd_nettotal(Double pd_nettotal) {
         this.pd_nettotal = pd_nettotal;
     }
+
+    public String getPi_currency() {
+        return pi_currency;
+    }
+
+    public void setPi_currency(String pi_currency) {
+        this.pi_currency = pi_currency;
+    }
 }

+ 59 - 34
applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/PaybalanceServiceImpl.java

@@ -228,25 +228,36 @@ public class PaybalanceServiceImpl extends CommonBaseServiceImpl<PaybalanceMappe
         updatePay.setPb_auditdate(new Date());
         updatePay.setPb_auditman(BaseContextHolder.getUserName());
         paybalanceMapper.updateByPrimaryKeySelective(updatePay);
-        //updateByPrimaryKeySelective
         /**
-         * ve_preamount=nvl(ve_preamount,0)+pb_preamount,
-         * ve_payamount=nvl(ve_payamount,0)-pb_pbdamount,
-         * ve_leftamount=ve_beginapamount-ve_beginprepayamount+ve_payamount-ve_preamount;
+         * 更新供应商应付
          */
-        Vendor vendorData = paybalanceMapper.selectVendorByPrimaryKey(paybalance.getPb_vendid());
-        Double preamount = vendorData.getVe_preamount()==null?new Double(0):vendorData.getVe_preamount();
-        Double beginapamount = vendorData.getVe_beginapamount()==null?new Double(0):vendorData.getVe_beginapamount();
-        Double beginprepayamount= vendorData.getVe_beginprepayamount()==null?new Double(0):vendorData.getVe_beginprepayamount();
-        Double payamount = vendorData.getVe_payamount()==null?new Double(0):vendorData.getVe_payamount();
-
-        Vendor vendor = new Vendor();
-        Double recbalancePreamount = paybalance.getPb_preamount();
-        vendor.setId(Long.valueOf(String.valueOf(paybalance.getPb_vendid())));
-        vendor.setVe_preamount(preamount+recbalancePreamount);
-        vendor.setVe_payamount(payamount-amountTotal2);
-        vendor.setVe_leftamount(beginapamount-beginprepayamount+payamount-amountTotal2-preamount-recbalancePreamount);
-        paybalanceMapper.updateVendorByPrimaryKeySelective(vendor);
+        String con="va_vendid="+paybalance.getPb_vendid()+" and va_currency='"+paybalance.getPb_currency()+"'";
+        VendApamount vendap=paybalanceMapper.selectVendApByCondition(con,companyId);
+        Double paybalancePreamount = paybalance.getPb_preamount();
+        if(vendap == null){
+            vendap=new VendApamount();
+            vendap.setVa_vendid(paybalance.getPb_vendid());
+            vendap.setVa_vendcode(paybalance.getPb_vendcode());
+            vendap.setVa_vendname(paybalance.getPb_vendname());
+            vendap.setVa_currency(paybalance.getPb_currency());
+            vendap.setVa_begindate(null);
+            vendap.setVa_beginprepayamount(new Double(0));
+            vendap.setVa_beginapamount(new Double(0));
+            vendap.setVa_preamount(paybalancePreamount);
+            vendap.setVa_payamount(new Double(0));
+            vendap.setVa_leftamount(new Double(0)-paybalancePreamount);
+            vendap.setCompanyId(companyId);
+            paybalanceMapper.insertVendApamount(vendap);
+        }else{
+            Double vapreamount = vendap.getVa_preamount()==null?new Double(0):vendap.getVa_preamount();
+            Double vapayamount = vendap.getVa_payamount()==null?new Double(0):vendap.getVa_payamount();
+            Double valeftamount = vendap.getVa_leftamount()==null?new Double(0):vendap.getVa_leftamount();
+            vendap.setVa_preamount(vapreamount + paybalancePreamount);
+            vendap.setVa_payamount(vapayamount - amountTotal2);
+            vendap.setVa_leftamount(valeftamount-paybalancePreamount-amountTotal2);
+            paybalanceMapper.updateVendApamountByPrimaryKeySelective(vendap);
+        }
+        paybalanceMapper.updateVendleftamountByPrimaryKey(paybalance.getPb_vendid());
 
         for (Paybalancedetail detail: paybalancedetail) {
             Subledger subledger1 = new Subledger();
@@ -325,26 +336,40 @@ public class PaybalanceServiceImpl extends CommonBaseServiceImpl<PaybalanceMappe
 
     @Override
     public void unAudit(int id) {
-        //更新供应商资料
-        /**
-         * ve_preamount=nvl(ve_preamount,0)-pb_preamount,
-         * ve_payamount=nvl(ve_payamount,0)+pb_pbdamount,
-         * ve_leftamount=ve_beginapamount-ve_beginprepayamount+ve_payamount-ve_preamount;
-         */
+        Long companyId = BaseContextHolder.getCompanyId();
         Paybalance pay = paybalanceMapper.selectByPrimaryKey(Long.valueOf(id));
         Double pay_preamount = pay.getPb_preamount() == null ? new Double(0): pay.getPb_preamount();
         Double pay_pbdamount = pay.getPb_pbdamount() == null ? new Double(0): pay.getPb_pbdamount();
-        Vendor vendorData = paybalanceMapper.selectVendorByPrimaryKey(pay.getPb_vendid());
-        Double preamount = vendorData.getVe_preamount() == null ? new Double(0) : vendorData.getVe_preamount();
-        Double beginapamount = vendorData.getVe_beginapamount() == null ? new Double(0) : vendorData.getVe_beginapamount();
-        Double beginprepayamount= vendorData.getVe_beginprepayamount() == null ? new Double(0) : vendorData.getVe_beginprepayamount();
-        Double payamount = vendorData.getVe_payamount() == null ? new Double(0) : vendorData.getVe_payamount() ;
-        Vendor vendor = new Vendor();
-        vendor.setId(Long.valueOf(String.valueOf(pay.getPb_vendid())));
-        vendor.setVe_preamount(preamount - pay_preamount);
-        vendor.setVe_payamount(payamount + pay_pbdamount);
-        vendor.setVe_leftamount(beginapamount - beginprepayamount + payamount + pay_pbdamount - preamount + pay_preamount);
-        paybalanceMapper.updateVendorByPrimaryKeySelective(vendor);
+        /**
+         * 更新供应商应付
+         */
+        String con="va_vendid="+pay.getPb_vendid()+" and va_currency='"+pay.getPb_currency()+"'";
+        VendApamount vendap=paybalanceMapper.selectVendApByCondition(con,companyId);
+        Double paybalancePreamount = pay.getPb_preamount();
+        if(vendap == null){
+            vendap=new VendApamount();
+            vendap.setVa_vendid(pay.getPb_vendid());
+            vendap.setVa_vendcode(pay.getPb_vendcode());
+            vendap.setVa_vendname(pay.getPb_vendname());
+            vendap.setVa_currency(pay.getPb_currency());
+            vendap.setVa_begindate(null);
+            vendap.setVa_beginprepayamount(new Double(0));
+            vendap.setVa_beginapamount(new Double(0));
+            vendap.setVa_preamount(new Double(0)-paybalancePreamount);
+            vendap.setVa_payamount(new Double(0)+pay_pbdamount);
+            vendap.setVa_leftamount(new Double(0)+paybalancePreamount+pay_pbdamount);
+            vendap.setCompanyId(companyId);
+            paybalanceMapper.insertVendApamount(vendap);
+        }else{
+            Double vapreamount = vendap.getVa_preamount()==null?new Double(0):vendap.getVa_preamount();
+            Double vapayamount = vendap.getVa_payamount()==null?new Double(0):vendap.getVa_payamount();
+            Double valeftamount = vendap.getVa_leftamount()==null?new Double(0):vendap.getVa_leftamount();
+            vendap.setVa_preamount(vapreamount - paybalancePreamount);
+            vendap.setVa_payamount(vapayamount + pay_pbdamount);
+            vendap.setVa_leftamount(valeftamount+paybalancePreamount+pay_pbdamount);
+            paybalanceMapper.updateVendApamountByPrimaryKeySelective(vendap);
+        }
+        paybalanceMapper.updateVendleftamountByPrimaryKey(pay.getPb_vendid());
 
         //更新账户资料金额
         List<Paybalancedet> paybalancedet = paybalancedetMapper.selectByPrimaryKey(id);

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

@@ -535,7 +535,7 @@ public class VerificationServiceImpl extends CommonBaseServiceImpl<VerificationM
             baseDTO.setId(id);
             baseDTO.setCode(verification.getVc_code());
             baseDTO.setName(BillCodeSeq.VERIFICATION.getName());
-            verificationdetMapper.deleteByParentPrimaryKey(Long.valueOf(String.valueOf(id)));
+            verificationdetMapper.deleteByPrimaryKey(Integer.valueOf(String.valueOf(id)));
             //日志
             messageLogService.deleteDetail(baseDTO);
         }
@@ -546,7 +546,7 @@ public class VerificationServiceImpl extends CommonBaseServiceImpl<VerificationM
         if (null != id) {
             Verificationdetail verificationdetail = verificationdetailMapper.selectByPrimaryKey(Integer.valueOf(String.valueOf(id)));
             Verification verification = verificationMapper.selectByPrimaryKey(verificationdetail.getVcd_vcid().intValue());
-            verificationdetailMapper.deleteByParentPrimaryKey(id);
+            verificationdetailMapper.deleteByPrimaryKey(Integer.valueOf(String.valueOf(id)));
             DocBaseDTO baseDTO = new DocBaseDTO();
             baseDTO.setId(id);
             baseDTO.setCode(verification.getVc_code());
@@ -567,17 +567,15 @@ public class VerificationServiceImpl extends CommonBaseServiceImpl<VerificationM
         baseDTO = this.saveFormData(formData);
         Long id = baseDTO.getId();
 
-            VerificationDTO verificationDTO = formData.getMain();
-
-            Subledger subledger = changSubledgerUntil(verificationDTO, 1);
-            subledgerMapper.insertSelective(subledger);
+        VerificationDTO verificationDTO = formData.getMain();
 
+        Subledger subledger = changSubledgerUntil(verificationDTO, 1);
+        subledgerMapper.insertSelective(subledger);
         if ("receivable_to_receivable".equals(verificationDTO.getVc_kind()) ||
                 "receivable_offset_payable".equals(verificationDTO.getVc_kind())
                 || "payable_to_payable".equals(verificationDTO.getVc_kind())){
             Subledger subledger1 = changSubledgerUntil(verificationDTO,2);
             subledgerMapper.insertSelective(subledger1);
-
         }
 
             //更新客户或者供应商的金额
@@ -620,81 +618,118 @@ public class VerificationServiceImpl extends CommonBaseServiceImpl<VerificationM
      */
     private void updateAuditCustomer(VerificationDTO verificationDTO){
         String kind = verificationDTO.getVc_kind();
-        if(kind.equals("receipts_offset_receivable")){
-            Customer customerData = recbalanceMapper.selectCustomerByPrimaryKey(verificationDTO.getVc_custid());
-            Double preamount = customerData.getCu_preamount()==null?new Double(0):customerData.getCu_preamount();
-            Double beginapamount = customerData.getCu_beginaramount()==null?new Double(0):customerData.getCu_beginaramount();
-            Double beginprepayamount= customerData.getCu_beginprerecamount()==null?new Double(0):customerData.getCu_beginprerecamount();
-            Double recamount = customerData.getCu_recamount()==null?new Double(0):customerData.getCu_recamount();
-
-            Customer customer = new Customer();
-            Double amount1 = verificationDTO.getVc_amount1()==null?new Double(0):verificationDTO.getVc_amount1();
-            Double amount2 = verificationDTO.getVc_amount2()==null?new Double(0):verificationDTO.getVc_amount2();
-            customer.setId(Long.valueOf(String.valueOf(verificationDTO.getVc_custid())));
-            customer.setCompanyId(BaseContextHolder.getCompanyId());
-            customer.setUpdaterId(BaseContextHolder.getUserId());
-            customer.setUpdaterName(BaseContextHolder.getUserName());
-            customer.setUpdateTime(new Date());
-            customer.setCu_preamount(preamount-amount1);
-            customer.setCu_recamount(recamount-amount2);
-            customer.setCu_leftamount(beginapamount-beginprepayamount+recamount-amount2-(preamount-amount1));
-            recbalanceMapper.updateCustomerByPrimaryKeySelective(customer);
-        }else if(kind.equals("receivable_offset_payable")){
-            Customer customerData = recbalanceMapper.selectCustomerByPrimaryKey(verificationDTO.getVc_custid());
-            Double preamount = customerData.getCu_preamount()==null?new Double(0):customerData.getCu_preamount();
-            Double beginapamount = customerData.getCu_beginaramount()==null?new Double(0):customerData.getCu_beginaramount();
-            Double beginprepayamount= customerData.getCu_beginprerecamount()==null?new Double(0):customerData.getCu_beginprerecamount();
-            Double recamount = customerData.getCu_recamount()==null?new Double(0):customerData.getCu_recamount();
-
-            Customer customer = new Customer();
-            Double amount1 = verificationDTO.getVc_amount1()==null?new Double(0):verificationDTO.getVc_amount1();
-            Double amount2 = verificationDTO.getVc_amount2()==null?new Double(0):verificationDTO.getVc_amount2();
-            customer.setId(Long.valueOf(String.valueOf(verificationDTO.getVc_custid())));
-            customer.setCompanyId(BaseContextHolder.getCompanyId());
-            customer.setUpdaterId(BaseContextHolder.getUserId());
-            customer.setUpdaterName(BaseContextHolder.getUserName());
-            customer.setUpdateTime(new Date());
-            customer.setCu_recamount(recamount-amount1);
-            customer.setCu_leftamount(beginapamount-beginprepayamount+recamount-amount1-preamount);
-            recbalanceMapper.updateCustomerByPrimaryKeySelective(customer);
-        }else if(kind.equals("receivable_to_receivable")){
+        Long companyId = BaseContextHolder.getCompanyId();
+        Double amount1 = verificationDTO.getVc_amount1()==null?new Double(0):verificationDTO.getVc_amount1();
+        Double amount2 = verificationDTO.getVc_amount2()==null?new Double(0):verificationDTO.getVc_amount2();
+        if(kind.equals("receipts_offset_receivable")){//预收冲应收
+            String con="ca_custid="+verificationDTO.getVc_custid()+" and ca_currency='"+verificationDTO.getVc_currency()+"'";
+            CustAramount custar=recbalanceMapper.selectCustArByCondition(con,companyId);
+            if (custar == null){
+                custar=new CustAramount();
+                custar.setCa_custid(verificationDTO.getVc_custid());
+                custar.setCa_custcode(verificationDTO.getVc_custcode());
+                custar.setCa_custname(verificationDTO.getVc_custname());
+                custar.setCa_currency(verificationDTO.getVc_currency());
+                custar.setCa_begindate(null);
+                custar.setCa_beginprerecamount(new Double(0));
+                custar.setCa_beginaramount(new Double(0));
+                custar.setCa_preamount(new Double(0)-amount1);
+                custar.setCa_recamount(new Double(0)-amount2);
+                custar.setCa_leftamount(new Double(0)-amount2+amount1);
+                custar.setCompanyId(companyId);
+                recbalanceMapper.insertCustAramount(custar);
+            }else {
+                Double capreamount = custar.getCa_preamount()==null?new Double(0):custar.getCa_preamount();
+                Double carecamount = custar.getCa_recamount()==null?new Double(0):custar.getCa_recamount();
+                Double caleftamount = custar.getCa_leftamount()==null?new Double(0):custar.getCa_leftamount();
+                custar.setCa_preamount(capreamount-amount1);
+                custar.setCa_recamount(carecamount-amount2);
+                custar.setCa_leftamount(caleftamount-amount2+amount1);
+                recbalanceMapper.updateCustAramountByPrimaryKeySelective(custar);
+            }
+            recbalanceMapper.updateCustleftamountByPrimaryKey(verificationDTO.getVc_custid());
+        }else if(kind.equals("receivable_offset_payable")){//应收冲应付
+            String con="ca_custid="+verificationDTO.getVc_custid()+" and ca_currency='"+verificationDTO.getVc_currency()+"'";
+            CustAramount custar=recbalanceMapper.selectCustArByCondition(con,companyId);
+            if (custar == null){
+                custar=new CustAramount();
+                custar.setCa_custid(verificationDTO.getVc_custid());
+                custar.setCa_custcode(verificationDTO.getVc_custcode());
+                custar.setCa_custname(verificationDTO.getVc_custname());
+                custar.setCa_currency(verificationDTO.getVc_currency());
+                custar.setCa_begindate(null);
+                custar.setCa_beginprerecamount(new Double(0));
+                custar.setCa_beginaramount(new Double(0));
+                custar.setCa_preamount(new Double(0));
+                custar.setCa_recamount(new Double(0)-amount1);
+                custar.setCa_leftamount(new Double(0)-amount1);
+                custar.setCompanyId(companyId);
+                recbalanceMapper.insertCustAramount(custar);
+            }else {
+                Double capreamount = custar.getCa_preamount()==null?new Double(0):custar.getCa_preamount();
+                Double carecamount = custar.getCa_recamount()==null?new Double(0):custar.getCa_recamount();
+                Double caleftamount = custar.getCa_leftamount()==null?new Double(0):custar.getCa_leftamount();
+                custar.setCa_preamount(capreamount);
+                custar.setCa_recamount(carecamount-amount1);
+                custar.setCa_leftamount(caleftamount-amount1);
+                recbalanceMapper.updateCustAramountByPrimaryKeySelective(custar);
+            }
+            recbalanceMapper.updateCustleftamountByPrimaryKey(verificationDTO.getVc_custid());
+        }else if(kind.equals("receivable_to_receivable")){//应收转应收
             //转入客户
-            Customer customerIn = recbalanceMapper.selectCustomerByPrimaryKey(verificationDTO.getVc_turncustid());
+            String inCon="ca_custid="+verificationDTO.getVc_turncustid()+" and ca_currency='"+verificationDTO.getVc_currency()+"'";
+            CustAramount inCustar=recbalanceMapper.selectCustArByCondition(inCon,companyId);
+            if (inCustar == null){
+                inCustar=new CustAramount();
+                inCustar.setCa_custid(verificationDTO.getVc_turncustid());
+                inCustar.setCa_custcode(verificationDTO.getVc_turncustcode());
+                inCustar.setCa_custname(verificationDTO.getVc_turncustname());
+                inCustar.setCa_currency(verificationDTO.getVc_currency());
+                inCustar.setCa_begindate(null);
+                inCustar.setCa_beginprerecamount(new Double(0));
+                inCustar.setCa_beginaramount(new Double(0));
+                inCustar.setCa_preamount(new Double(0));
+                inCustar.setCa_recamount(new Double(0)+amount1);
+                inCustar.setCa_leftamount(new Double(0)+amount1);
+                inCustar.setCompanyId(companyId);
+                recbalanceMapper.insertCustAramount(inCustar);
+            }else {
+                Double capreamount = inCustar.getCa_preamount()==null?new Double(0):inCustar.getCa_preamount();
+                Double carecamount = inCustar.getCa_recamount()==null?new Double(0):inCustar.getCa_recamount();
+                Double caleftamount = inCustar.getCa_leftamount()==null?new Double(0):inCustar.getCa_leftamount();
+                inCustar.setCa_preamount(capreamount);
+                inCustar.setCa_recamount(carecamount+amount1);
+                inCustar.setCa_leftamount(caleftamount+amount1);
+                recbalanceMapper.updateCustAramountByPrimaryKeySelective(inCustar);
+            }
+            recbalanceMapper.updateCustleftamountByPrimaryKey(verificationDTO.getVc_turncustid());
             //转出客户
-            Customer customerOut = recbalanceMapper.selectCustomerByPrimaryKey(verificationDTO.getVc_custid());
-
-            Double preamountIn = customerIn.getCu_preamount()==null?new Double(0):customerIn.getCu_preamount();
-            Double beginapamountIn = customerIn.getCu_beginaramount()==null?new Double(0):customerIn.getCu_beginaramount();
-            Double beginprepayamountIn = customerIn.getCu_beginprerecamount()==null?new Double(0):customerIn.getCu_beginprerecamount();
-            Double recamountIn = customerIn.getCu_recamount()==null?new Double(0):customerIn.getCu_recamount();
-
-            Double preamountOut = customerOut.getCu_preamount()==null?new Double(0):customerOut.getCu_preamount();
-            Double beginapamountOut = customerOut.getCu_beginaramount()==null?new Double(0):customerOut.getCu_beginaramount();
-            Double beginprepayamountOut = customerOut.getCu_beginprerecamount()==null?new Double(0):customerOut.getCu_beginprerecamount();
-            Double recamountOut = customerOut.getCu_recamount()==null?new Double(0):customerOut.getCu_recamount();
-
-
-            Double amount1 = verificationDTO.getVc_amount1()==null?new Double(0):verificationDTO.getVc_amount1();
-            Double amount2 = verificationDTO.getVc_amount2()==null?new Double(0):verificationDTO.getVc_amount2();
-            Customer newCustomerIn = new Customer();
-            newCustomerIn.setId(Long.valueOf(String.valueOf(verificationDTO.getVc_turncustid())));
-            newCustomerIn.setCompanyId(BaseContextHolder.getCompanyId());
-            newCustomerIn.setUpdaterId(BaseContextHolder.getUserId());
-            newCustomerIn.setUpdaterName(BaseContextHolder.getUserName());
-            newCustomerIn.setUpdateTime(new Date());
-            newCustomerIn.setCu_recamount(recamountIn+amount1);
-            newCustomerIn.setCu_leftamount(beginapamountIn-beginprepayamountIn+recamountIn+amount1-preamountIn);
-            recbalanceMapper.updateCustomerByPrimaryKeySelective(newCustomerIn);
-
-            Customer newCustomerOut = new Customer();
-            newCustomerOut.setId(Long.valueOf(String.valueOf(verificationDTO.getVc_custid())));
-            newCustomerOut.setCompanyId(BaseContextHolder.getCompanyId());
-            newCustomerOut.setUpdaterId(BaseContextHolder.getUserId());
-            newCustomerOut.setUpdaterName(BaseContextHolder.getUserName());
-            newCustomerOut.setUpdateTime(new Date());
-            newCustomerOut.setCu_recamount(recamountOut-amount1);
-            newCustomerOut.setCu_leftamount(beginapamountOut-beginprepayamountOut+recamountOut-amount1-preamountOut);
-            recbalanceMapper.updateCustomerByPrimaryKeySelective(newCustomerOut);
+            String outCon="ca_custid="+verificationDTO.getVc_custid()+" and ca_currency='"+verificationDTO.getVc_currency()+"'";
+            CustAramount outCustar=recbalanceMapper.selectCustArByCondition(outCon,companyId);
+            if (outCustar == null){
+                outCustar=new CustAramount();
+                outCustar.setCa_custid(verificationDTO.getVc_custid());
+                outCustar.setCa_custcode(verificationDTO.getVc_custcode());
+                outCustar.setCa_custname(verificationDTO.getVc_custname());
+                outCustar.setCa_currency(verificationDTO.getVc_currency());
+                outCustar.setCa_begindate(null);
+                outCustar.setCa_beginprerecamount(new Double(0));
+                outCustar.setCa_beginaramount(new Double(0));
+                outCustar.setCa_preamount(new Double(0));
+                outCustar.setCa_recamount(new Double(0)-amount1);
+                outCustar.setCa_leftamount(new Double(0)-amount1);
+                outCustar.setCompanyId(companyId);
+                recbalanceMapper.insertCustAramount(outCustar);
+            }else {
+                Double capreamount = outCustar.getCa_preamount()==null?new Double(0):outCustar.getCa_preamount();
+                Double carecamount = outCustar.getCa_recamount()==null?new Double(0):outCustar.getCa_recamount();
+                Double caleftamount = outCustar.getCa_leftamount()==null?new Double(0):outCustar.getCa_leftamount();
+                outCustar.setCa_preamount(capreamount);
+                outCustar.setCa_recamount(carecamount-amount1);
+                outCustar.setCa_leftamount(caleftamount-amount1);
+                recbalanceMapper.updateCustAramountByPrimaryKeySelective(outCustar);
+            }
+            recbalanceMapper.updateCustleftamountByPrimaryKey(verificationDTO.getVc_custid());
         }
     }
 
@@ -704,81 +739,119 @@ public class VerificationServiceImpl extends CommonBaseServiceImpl<VerificationM
      * @return
      */
     private void updateAuditVendor(VerificationDTO verificationDTO){
+        Long companyId = BaseContextHolder.getCompanyId();
         String kind = verificationDTO.getVc_kind();
-        if(kind.equals("prepaid_offset_payable")){
-            Vendor vendorData = paybalanceMapper.selectVendorByPrimaryKey(verificationDTO.getVc_vendid());
-            Double preamount = vendorData.getVe_preamount()==null?new Double(0):vendorData.getVe_preamount();
-            Double beginapamount = vendorData.getVe_beginapamount()==null?new Double(0):vendorData.getVe_beginapamount();
-            Double beginprepayamount= vendorData.getVe_beginprepayamount()==null?new Double(0):vendorData.getVe_beginprepayamount();
-            Double payamount = vendorData.getVe_payamount()==null?new Double(0):vendorData.getVe_payamount();
-
-            Vendor vendor = new Vendor();
-            Double amount1 = verificationDTO.getVc_amount1()==null?new Double(0):verificationDTO.getVc_amount1();
-            Double amount2 = verificationDTO.getVc_amount2()==null?new Double(0):verificationDTO.getVc_amount2();
-            vendor.setId(Long.valueOf(String.valueOf(verificationDTO.getVc_vendid())));
-            vendor.setCompanyId(BaseContextHolder.getCompanyId());
-            vendor.setUpdaterId(BaseContextHolder.getUserId());
-            vendor.setUpdaterName(BaseContextHolder.getUserName());
-            vendor.setUpdateTime(new Date());
-            vendor.setVe_preamount(preamount-amount1);
-            vendor.setVe_payamount(payamount-amount2);
-            vendor.setVe_leftamount(beginapamount-beginprepayamount+payamount-amount2-(preamount-amount1));
-            paybalanceMapper.updateVendorByPrimaryKeySelective(vendor);
-        }else if(kind.equals("receivable_offset_payable")){
-            Vendor vendorData = paybalanceMapper.selectVendorByPrimaryKey(verificationDTO.getVc_vendid());
-            Double preamount = vendorData.getVe_preamount()==null?new Double(0):vendorData.getVe_preamount();
-            Double beginapamount = vendorData.getVe_beginapamount()==null?new Double(0):vendorData.getVe_beginapamount();
-            Double beginprepayamount= vendorData.getVe_beginprepayamount()==null?new Double(0):vendorData.getVe_beginprepayamount();
-            Double payamount = vendorData.getVe_payamount()==null?new Double(0):vendorData.getVe_payamount();
-
-            Vendor vendor = new Vendor();
-            Double amount1 = verificationDTO.getVc_amount1()==null?new Double(0):verificationDTO.getVc_amount1();
-            Double amount2 = verificationDTO.getVc_amount2()==null?new Double(0):verificationDTO.getVc_amount2();
-            vendor.setId(Long.valueOf(String.valueOf(verificationDTO.getVc_vendid())));
-            vendor.setVe_payamount(payamount-amount2);
-            vendor.setUpdaterId(BaseContextHolder.getUserId());
-            vendor.setUpdaterName(BaseContextHolder.getUserName());
-            vendor.setUpdateTime(new Date());
-            vendor.setVe_leftamount(beginapamount-beginprepayamount+payamount-amount2-preamount);
-            paybalanceMapper.updateVendorByPrimaryKeySelective(vendor);
-        }else if(kind.equals("payable_to_payable")){
+        Double amount1 = verificationDTO.getVc_amount1()==null?new Double(0):verificationDTO.getVc_amount1();
+        Double amount2 = verificationDTO.getVc_amount2()==null?new Double(0):verificationDTO.getVc_amount2();
+        if(kind.equals("prepaid_offset_payable")){//预付冲应付
+            String con="va_vendid="+verificationDTO.getVc_vendid()+" and va_currency='"+verificationDTO.getVc_currency()+"'";
+            VendApamount vendap=paybalanceMapper.selectVendApByCondition(con,companyId);
+            if(vendap == null){
+                vendap=new VendApamount();
+                vendap.setVa_vendid(verificationDTO.getVc_vendid());
+                vendap.setVa_vendcode(verificationDTO.getVc_vendcode());
+                vendap.setVa_vendname(verificationDTO.getVc_vendname());
+                vendap.setVa_currency(verificationDTO.getVc_currency());
+                vendap.setVa_begindate(null);
+                vendap.setVa_beginprepayamount(new Double(0));
+                vendap.setVa_beginapamount(new Double(0));
+                vendap.setVa_preamount(new Double(0)-amount1);
+                vendap.setVa_payamount(new Double(0)-amount2);
+                vendap.setVa_leftamount(new Double(0)+amount1-amount2);
+                vendap.setCompanyId(companyId);
+                paybalanceMapper.insertVendApamount(vendap);
+            }else{
+                Double vapreamount = vendap.getVa_preamount()==null?new Double(0):vendap.getVa_preamount();
+                Double vapayamount = vendap.getVa_payamount()==null?new Double(0):vendap.getVa_payamount();
+                Double valeftamount = vendap.getVa_leftamount()==null?new Double(0):vendap.getVa_leftamount();
+                vendap.setVa_preamount(vapreamount-amount1);
+                vendap.setVa_payamount(vapayamount -amount2);
+                vendap.setVa_leftamount(valeftamount+amount1-amount2);
+                paybalanceMapper.updateVendApamountByPrimaryKeySelective(vendap);
+            }
+            paybalanceMapper.updateVendleftamountByPrimaryKey(verificationDTO.getVc_vendid());
+        }else if(kind.equals("receivable_offset_payable")){//应收冲应付
+            String con="va_vendid="+verificationDTO.getVc_vendid()+" and va_currency='"+verificationDTO.getVc_currency()+"'";
+            VendApamount vendap=paybalanceMapper.selectVendApByCondition(con,companyId);
+            if(vendap == null){
+                vendap=new VendApamount();
+                vendap.setVa_vendid(verificationDTO.getVc_vendid());
+                vendap.setVa_vendcode(verificationDTO.getVc_vendcode());
+                vendap.setVa_vendname(verificationDTO.getVc_vendname());
+                vendap.setVa_currency(verificationDTO.getVc_currency());
+                vendap.setVa_begindate(null);
+                vendap.setVa_beginprepayamount(new Double(0));
+                vendap.setVa_beginapamount(new Double(0));
+                vendap.setVa_preamount(new Double(0));
+                vendap.setVa_payamount(new Double(0)-amount2);
+                vendap.setVa_leftamount(new Double(0)-amount2);
+                vendap.setCompanyId(companyId);
+                paybalanceMapper.insertVendApamount(vendap);
+            }else{
+                Double vapreamount = vendap.getVa_preamount()==null?new Double(0):vendap.getVa_preamount();
+                Double vapayamount = vendap.getVa_payamount()==null?new Double(0):vendap.getVa_payamount();
+                Double valeftamount = vendap.getVa_leftamount()==null?new Double(0):vendap.getVa_leftamount();
+                vendap.setVa_preamount(vapreamount);
+                vendap.setVa_payamount(vapayamount -amount2);
+                vendap.setVa_leftamount(valeftamount-amount2);
+                paybalanceMapper.updateVendApamountByPrimaryKeySelective(vendap);
+            }
+            paybalanceMapper.updateVendleftamountByPrimaryKey(verificationDTO.getVc_vendid());
+        }else if(kind.equals("payable_to_payable")){//应付转应付
             //转入供应商
-            Vendor vendorIn = paybalanceMapper.selectVendorByPrimaryKey(verificationDTO.getVc_turnvendid());
+            String inCon="va_vendid="+verificationDTO.getVc_turnvendid()+" and va_currency='"+verificationDTO.getVc_currency()+"'";
+            VendApamount inVendap=paybalanceMapper.selectVendApByCondition(inCon,companyId);
+            if(inVendap == null){
+                inVendap=new VendApamount();
+                inVendap.setVa_vendid(verificationDTO.getVc_turnvendid());
+                inVendap.setVa_vendcode(verificationDTO.getVc_turnvendcode());
+                inVendap.setVa_vendname(verificationDTO.getVc_turnvendname());
+                inVendap.setVa_currency(verificationDTO.getVc_currency());
+                inVendap.setVa_begindate(null);
+                inVendap.setVa_beginprepayamount(new Double(0));
+                inVendap.setVa_beginapamount(new Double(0));
+                inVendap.setVa_preamount(new Double(0));
+                inVendap.setVa_payamount(new Double(0)+amount1);
+                inVendap.setVa_leftamount(new Double(0)+amount1);
+                inVendap.setCompanyId(companyId);
+                paybalanceMapper.insertVendApamount(inVendap);
+            }else{
+                Double vapreamount = inVendap.getVa_preamount()==null?new Double(0):inVendap.getVa_preamount();
+                Double vapayamount = inVendap.getVa_payamount()==null?new Double(0):inVendap.getVa_payamount();
+                Double valeftamount = inVendap.getVa_leftamount()==null?new Double(0):inVendap.getVa_leftamount();
+                inVendap.setVa_preamount(vapreamount);
+                inVendap.setVa_payamount(vapayamount +amount1);
+                inVendap.setVa_leftamount(valeftamount+amount1);
+                paybalanceMapper.updateVendApamountByPrimaryKeySelective(inVendap);
+            }
+            paybalanceMapper.updateVendleftamountByPrimaryKey(verificationDTO.getVc_turnvendid());
             //转出供应商
-            Vendor vendorOut = paybalanceMapper.selectVendorByPrimaryKey(verificationDTO.getVc_vendid());
-
-            Double preamountIn = vendorIn.getVe_preamount()==null?new Double(0):vendorIn.getVe_preamount();
-            Double beginapamountIn = vendorIn.getVe_beginapamount()==null?new Double(0):vendorIn.getVe_beginapamount();
-            Double beginprepayamountIn = vendorIn.getVe_beginprepayamount()==null?new Double(0):vendorIn.getVe_beginprepayamount();
-            Double payamountIn = vendorIn.getVe_payamount()==null?new Double(0):vendorIn.getVe_payamount();
-
-            Double preamountOut = vendorOut.getVe_preamount()==null?new Double(0):vendorOut.getVe_preamount();
-            Double beginapamountOut = vendorOut.getVe_beginapamount()==null?new Double(0):vendorOut.getVe_beginapamount();
-            Double beginprepayamountOut = vendorOut.getVe_beginprepayamount()==null?new Double(0):vendorOut.getVe_beginprepayamount();
-            Double payamountOut = vendorOut.getVe_payamount()==null?new Double(0):vendorOut.getVe_payamount();
-
-
-
-            Double amount1 = verificationDTO.getVc_amount1()==null?new Double(0):verificationDTO.getVc_amount1();
-            Double amount2 = verificationDTO.getVc_amount2()==null?new Double(0):verificationDTO.getVc_amount2();
-            Vendor newVendorIn = new Vendor();
-            newVendorIn.setId(Long.valueOf(String.valueOf(verificationDTO.getVc_turnvendid())));
-            newVendorIn.setUpdaterId(BaseContextHolder.getUserId());
-            newVendorIn.setUpdaterName(BaseContextHolder.getUserName());
-            newVendorIn.setUpdateTime(new Date());
-            newVendorIn.setVe_payamount(payamountIn+amount1);
-            newVendorIn.setVe_leftamount(beginapamountIn-beginprepayamountIn+payamountIn+amount1-preamountIn);
-            paybalanceMapper.updateVendorByPrimaryKeySelective(newVendorIn);
-
-            Vendor newVendorOut = new Vendor();
-            newVendorOut.setId(Long.valueOf(String.valueOf(verificationDTO.getVc_vendid())));
-            newVendorOut.setUpdaterId(BaseContextHolder.getUserId());
-            newVendorOut.setUpdaterName(BaseContextHolder.getUserName());
-            newVendorOut.setUpdateTime(new Date());
-            newVendorOut.setVe_payamount(payamountOut-amount1);
-            newVendorOut.setVe_leftamount(beginapamountOut-beginprepayamountOut+payamountOut-amount1-preamountOut);
-            paybalanceMapper.updateVendorByPrimaryKeySelective(newVendorOut);
-
+            String outCon="va_vendid="+verificationDTO.getVc_vendid()+" and va_currency='"+verificationDTO.getVc_currency()+"'";
+            VendApamount outVendap=paybalanceMapper.selectVendApByCondition(outCon,companyId);
+            if(outVendap == null){
+                outVendap=new VendApamount();
+                outVendap.setVa_vendid(verificationDTO.getVc_vendid());
+                outVendap.setVa_vendcode(verificationDTO.getVc_vendcode());
+                outVendap.setVa_vendname(verificationDTO.getVc_vendname());
+                outVendap.setVa_currency(verificationDTO.getVc_currency());
+                outVendap.setVa_begindate(null);
+                outVendap.setVa_beginprepayamount(new Double(0));
+                outVendap.setVa_beginapamount(new Double(0));
+                outVendap.setVa_preamount(new Double(0));
+                outVendap.setVa_payamount(new Double(0)-amount1);
+                outVendap.setVa_leftamount(new Double(0)-amount1);
+                outVendap.setCompanyId(companyId);
+                paybalanceMapper.insertVendApamount(outVendap);
+            }else{
+                Double vapreamount = outVendap.getVa_preamount()==null?new Double(0):outVendap.getVa_preamount();
+                Double vapayamount = outVendap.getVa_payamount()==null?new Double(0):outVendap.getVa_payamount();
+                Double valeftamount = outVendap.getVa_leftamount()==null?new Double(0):outVendap.getVa_leftamount();
+                outVendap.setVa_preamount(vapreamount);
+                outVendap.setVa_payamount(vapayamount -amount1);
+                outVendap.setVa_leftamount(valeftamount-amount1);
+                paybalanceMapper.updateVendApamountByPrimaryKeySelective(outVendap);
+            }
+            paybalanceMapper.updateVendleftamountByPrimaryKey(verificationDTO.getVc_vendid());
         }
     }
     @Override
@@ -844,83 +917,120 @@ public class VerificationServiceImpl extends CommonBaseServiceImpl<VerificationM
      * @return
      */
     private void updateResAuditCustomer(VerificationDTO verificationDTO){
+        Long companyId = BaseContextHolder.getCompanyId();
         String kind = verificationDTO.getVc_kind();
         kind = transferKind(kind);
-        if(kind.equals("receipts_offset_receivable")){
-            Customer customerData = recbalanceMapper.selectCustomerByPrimaryKey(verificationDTO.getVc_custid());
-            Double preamount = customerData.getCu_preamount()==null?new Double(0):customerData.getCu_preamount();
-            Double beginapamount = customerData.getCu_beginaramount()==null?new Double(0):customerData.getCu_beginaramount();
-            Double beginprepayamount= customerData.getCu_beginprerecamount()==null?new Double(0):customerData.getCu_beginprerecamount();
-            Double recamount = customerData.getCu_recamount()==null?new Double(0):customerData.getCu_recamount();
-
-            Customer customer = new Customer();
-            Double amount1 = verificationDTO.getVc_amount1()==null?new Double(0):verificationDTO.getVc_amount1();
-            Double amount2 = verificationDTO.getVc_amount2()==null?new Double(0):verificationDTO.getVc_amount2();
-            customer.setId(Long.valueOf(String.valueOf(verificationDTO.getVc_custid())));
-            customer.setCompanyId(BaseContextHolder.getCompanyId());
-            customer.setUpdaterId(BaseContextHolder.getUserId());
-            customer.setUpdaterName(BaseContextHolder.getUserName());
-            customer.setUpdateTime(new Date());
-            customer.setCu_preamount(preamount+amount1);
-            customer.setCu_recamount(recamount+amount2);
-            customer.setCu_leftamount(beginapamount-beginprepayamount+recamount+amount2-preamount-amount1);
-            recbalanceMapper.updateCustomerByPrimaryKeySelective(customer);
+        Double amount1 = verificationDTO.getVc_amount1()==null?new Double(0):verificationDTO.getVc_amount1();
+        Double amount2 = verificationDTO.getVc_amount2()==null?new Double(0):verificationDTO.getVc_amount2();
+        if(kind.equals("receipts_offset_receivable")){//预收冲应收
+            String con="ca_custid="+verificationDTO.getVc_custid()+" and ca_currency='"+verificationDTO.getVc_currency()+"'";
+            CustAramount custar=recbalanceMapper.selectCustArByCondition(con,companyId);
+            if (custar == null){
+                custar=new CustAramount();
+                custar.setCa_custid(verificationDTO.getVc_custid());
+                custar.setCa_custcode(verificationDTO.getVc_custcode());
+                custar.setCa_custname(verificationDTO.getVc_custname());
+                custar.setCa_currency(verificationDTO.getVc_currency());
+                custar.setCa_begindate(null);
+                custar.setCa_beginprerecamount(new Double(0));
+                custar.setCa_beginaramount(new Double(0));
+                custar.setCa_preamount(new Double(0)+amount1);
+                custar.setCa_recamount(new Double(0)+amount2);
+                custar.setCa_leftamount(new Double(0)+amount2-amount1);
+                custar.setCompanyId(companyId);
+                recbalanceMapper.insertCustAramount(custar);
+            }else {
+                Double capreamount = custar.getCa_preamount()==null?new Double(0):custar.getCa_preamount();
+                Double carecamount = custar.getCa_recamount()==null?new Double(0):custar.getCa_recamount();
+                Double caleftamount = custar.getCa_leftamount()==null?new Double(0):custar.getCa_leftamount();
+                custar.setCa_preamount(capreamount+amount1);
+                custar.setCa_recamount(carecamount+amount2);
+                custar.setCa_leftamount(caleftamount-amount1+amount2);
+                recbalanceMapper.updateCustAramountByPrimaryKeySelective(custar);
+            }
+            recbalanceMapper.updateCustleftamountByPrimaryKey(verificationDTO.getVc_custid());
         }else if(kind.equals("receivable_offset_payable")){
-            Customer customerData = recbalanceMapper.selectCustomerByPrimaryKey(verificationDTO.getVc_custid());
-            Double preamount = customerData.getCu_preamount()==null?new Double(0):customerData.getCu_preamount();
-            Double beginapamount = customerData.getCu_beginaramount()==null?new Double(0):customerData.getCu_beginaramount();
-            Double beginprepayamount= customerData.getCu_beginprerecamount()==null?new Double(0):customerData.getCu_beginprerecamount();
-            Double recamount = customerData.getCu_recamount()==null?new Double(0):customerData.getCu_recamount();
-
-            Customer customer = new Customer();
-            Double amount1 = verificationDTO.getVc_amount1()==null?new Double(0):verificationDTO.getVc_amount1();
-            Double amount2 = verificationDTO.getVc_amount2()==null?new Double(0):verificationDTO.getVc_amount2();
-            customer.setId(Long.valueOf(String.valueOf(verificationDTO.getVc_custid())));
-            customer.setCompanyId(BaseContextHolder.getCompanyId());
-            customer.setUpdaterId(BaseContextHolder.getUserId());
-            customer.setUpdaterName(BaseContextHolder.getUserName());
-            customer.setUpdateTime(new Date());
-            customer.setCu_recamount(recamount+amount1);
-            customer.setCu_leftamount(beginapamount-beginprepayamount+recamount+amount1-preamount);
-            recbalanceMapper.updateCustomerByPrimaryKeySelective(customer);
+            String con="ca_custid="+verificationDTO.getVc_custid()+" and ca_currency='"+verificationDTO.getVc_currency()+"'";
+            CustAramount custar=recbalanceMapper.selectCustArByCondition(con,companyId);
+            if (custar == null){
+                custar=new CustAramount();
+                custar.setCa_custid(verificationDTO.getVc_custid());
+                custar.setCa_custcode(verificationDTO.getVc_custcode());
+                custar.setCa_custname(verificationDTO.getVc_custname());
+                custar.setCa_currency(verificationDTO.getVc_currency());
+                custar.setCa_begindate(null);
+                custar.setCa_beginprerecamount(new Double(0));
+                custar.setCa_beginaramount(new Double(0));
+                custar.setCa_preamount(new Double(0));
+                custar.setCa_recamount(new Double(0)+amount1);
+                custar.setCa_leftamount(new Double(0)+amount1);
+                custar.setCompanyId(companyId);
+                recbalanceMapper.insertCustAramount(custar);
+            }else {
+                Double capreamount = custar.getCa_preamount()==null?new Double(0):custar.getCa_preamount();
+                Double carecamount = custar.getCa_recamount()==null?new Double(0):custar.getCa_recamount();
+                Double caleftamount = custar.getCa_leftamount()==null?new Double(0):custar.getCa_leftamount();
+                custar.setCa_preamount(capreamount);
+                custar.setCa_recamount(carecamount+amount1);
+                custar.setCa_leftamount(caleftamount+amount1);
+                recbalanceMapper.updateCustAramountByPrimaryKeySelective(custar);
+            }
+            recbalanceMapper.updateCustleftamountByPrimaryKey(verificationDTO.getVc_custid());
         }else if(kind.equals("receivable_to_receivable")){
             //转入客户
-            Customer customerIn = recbalanceMapper.selectCustomerByPrimaryKey(verificationDTO.getVc_turncustid());
+            String inCon="ca_custid="+verificationDTO.getVc_turncustid()+" and ca_currency='"+verificationDTO.getVc_currency()+"'";
+            CustAramount inCustar=recbalanceMapper.selectCustArByCondition(inCon,companyId);
+            if (inCustar == null){
+                inCustar=new CustAramount();
+                inCustar.setCa_custid(verificationDTO.getVc_turncustid());
+                inCustar.setCa_custcode(verificationDTO.getVc_turncustcode());
+                inCustar.setCa_custname(verificationDTO.getVc_turncustname());
+                inCustar.setCa_currency(verificationDTO.getVc_currency());
+                inCustar.setCa_begindate(null);
+                inCustar.setCa_beginprerecamount(new Double(0));
+                inCustar.setCa_beginaramount(new Double(0));
+                inCustar.setCa_preamount(new Double(0));
+                inCustar.setCa_recamount(new Double(0)-amount1);
+                inCustar.setCa_leftamount(new Double(0)-amount1);
+                inCustar.setCompanyId(companyId);
+                recbalanceMapper.insertCustAramount(inCustar);
+            }else {
+                Double capreamount = inCustar.getCa_preamount()==null?new Double(0):inCustar.getCa_preamount();
+                Double carecamount = inCustar.getCa_recamount()==null?new Double(0):inCustar.getCa_recamount();
+                Double caleftamount = inCustar.getCa_leftamount()==null?new Double(0):inCustar.getCa_leftamount();
+                inCustar.setCa_preamount(capreamount);
+                inCustar.setCa_recamount(carecamount-amount1);
+                inCustar.setCa_leftamount(caleftamount-amount1);
+                recbalanceMapper.updateCustAramountByPrimaryKeySelective(inCustar);
+            }
+            recbalanceMapper.updateCustleftamountByPrimaryKey(verificationDTO.getVc_turncustid());
             //转出客户
-            Customer customerOut = recbalanceMapper.selectCustomerByPrimaryKey(verificationDTO.getVc_custid());
-
-            Double preamountIn = customerIn.getCu_preamount()==null?new Double(0):customerIn.getCu_preamount();
-            Double beginapamountIn = customerIn.getCu_beginaramount()==null?new Double(0):customerIn.getCu_beginaramount();
-            Double beginprepayamountIn = customerIn.getCu_beginprerecamount()==null?new Double(0):customerIn.getCu_beginprerecamount();
-            Double recamountIn = customerIn.getCu_recamount()==null?new Double(0):customerIn.getCu_recamount();
-
-            Double preamountOut = customerOut.getCu_preamount()==null?new Double(0):customerOut.getCu_preamount();
-            Double beginapamountOut = customerOut.getCu_beginaramount()==null?new Double(0):customerOut.getCu_beginaramount();
-            Double beginprepayamountOut = customerOut.getCu_beginprerecamount()==null?new Double(0):customerOut.getCu_beginprerecamount();
-            Double recamountOut = customerOut.getCu_recamount()==null?new Double(0):customerOut.getCu_recamount();
-
-
-            Double amount1 = verificationDTO.getVc_amount1()==null?new Double(0):verificationDTO.getVc_amount1();
-            Double amount2 = verificationDTO.getVc_amount2()==null?new Double(0):verificationDTO.getVc_amount2();
-            Customer newCustomerIn = new Customer();
-            newCustomerIn.setId(Long.valueOf(String.valueOf(verificationDTO.getVc_turncustid())));
-            newCustomerIn.setCompanyId(BaseContextHolder.getCompanyId());
-            newCustomerIn.setUpdaterId(BaseContextHolder.getUserId());
-            newCustomerIn.setUpdaterName(BaseContextHolder.getUserName());
-            newCustomerIn.setUpdateTime(new Date());
-            newCustomerIn.setCu_recamount(recamountIn-amount1);
-            newCustomerIn.setCu_leftamount(beginapamountIn-beginprepayamountIn+recamountIn+amount1-preamountIn);
-            recbalanceMapper.updateCustomerByPrimaryKeySelective(newCustomerIn);
-
-            Customer newCustomerOut = new Customer();
-            newCustomerOut.setId(Long.valueOf(String.valueOf(verificationDTO.getVc_custid())));
-            newCustomerOut.setCompanyId(BaseContextHolder.getCompanyId());
-            newCustomerOut.setUpdaterId(BaseContextHolder.getUserId());
-            newCustomerOut.setUpdaterName(BaseContextHolder.getUserName());
-            newCustomerOut.setUpdateTime(new Date());
-            newCustomerOut.setCu_recamount(recamountOut+amount1);
-            newCustomerOut.setCu_leftamount(beginapamountOut-beginprepayamountOut+recamountOut+amount1-preamountOut);
-            recbalanceMapper.updateCustomerByPrimaryKeySelective(newCustomerOut);
+            String outCon="ca_custid="+verificationDTO.getVc_custid()+" and ca_currency='"+verificationDTO.getVc_currency()+"'";
+            CustAramount outCustar=recbalanceMapper.selectCustArByCondition(outCon,companyId);
+            if (outCustar == null){
+                outCustar=new CustAramount();
+                outCustar.setCa_custid(verificationDTO.getVc_custid());
+                outCustar.setCa_custcode(verificationDTO.getVc_custcode());
+                outCustar.setCa_custname(verificationDTO.getVc_custname());
+                outCustar.setCa_currency(verificationDTO.getVc_currency());
+                outCustar.setCa_begindate(null);
+                outCustar.setCa_beginprerecamount(new Double(0));
+                outCustar.setCa_beginaramount(new Double(0));
+                outCustar.setCa_preamount(new Double(0));
+                outCustar.setCa_recamount(new Double(0)+amount1);
+                outCustar.setCa_leftamount(new Double(0)+amount1);
+                outCustar.setCompanyId(companyId);
+                recbalanceMapper.insertCustAramount(outCustar);
+            }else {
+                Double capreamount = outCustar.getCa_preamount()==null?new Double(0):outCustar.getCa_preamount();
+                Double carecamount = outCustar.getCa_recamount()==null?new Double(0):outCustar.getCa_recamount();
+                Double caleftamount = outCustar.getCa_leftamount()==null?new Double(0):outCustar.getCa_leftamount();
+                outCustar.setCa_preamount(capreamount);
+                outCustar.setCa_recamount(carecamount+amount1);
+                outCustar.setCa_leftamount(caleftamount+amount1);
+                recbalanceMapper.updateCustAramountByPrimaryKeySelective(outCustar);
+            }
+            recbalanceMapper.updateCustleftamountByPrimaryKey(verificationDTO.getVc_custid());
         }
     }
 
@@ -930,82 +1040,120 @@ public class VerificationServiceImpl extends CommonBaseServiceImpl<VerificationM
      * @return
      */
     private void updateResAuditVendor(VerificationDTO verificationDTO){
+        Long companyId = BaseContextHolder.getCompanyId();
         String kind = verificationDTO.getVc_kind();
         kind = transferKind(kind);
-        if(kind.equals("prepaid_offset_payable")){
-            Vendor vendorData = paybalanceMapper.selectVendorByPrimaryKey(verificationDTO.getVc_vendid());
-            Double preamount = vendorData.getVe_preamount()==null?new Double(0):vendorData.getVe_preamount();
-            Double beginapamount = vendorData.getVe_beginapamount()==null?new Double(0):vendorData.getVe_beginapamount();
-            Double beginprepayamount= vendorData.getVe_beginprepayamount()==null?new Double(0):vendorData.getVe_beginprepayamount();
-            Double payamount = vendorData.getVe_payamount()==null?new Double(0):vendorData.getVe_payamount();
-
-            Vendor vendor = new Vendor();
-            Double amount1 = verificationDTO.getVc_amount1()==null?new Double(0):verificationDTO.getVc_amount1();
-            Double amount2 = verificationDTO.getVc_amount2()==null?new Double(0):verificationDTO.getVc_amount2();
-            vendor.setId(Long.valueOf(String.valueOf(verificationDTO.getVc_vendid())));
-            vendor.setCompanyId(BaseContextHolder.getCompanyId());
-            vendor.setUpdaterId(BaseContextHolder.getUserId());
-            vendor.setUpdaterName(BaseContextHolder.getUserName());
-            vendor.setUpdateTime(new Date());
-            vendor.setVe_preamount(preamount+amount1);
-            vendor.setVe_payamount(payamount+amount2);
-            vendor.setVe_leftamount(beginapamount-beginprepayamount+payamount+amount2-preamount-amount1);
-            paybalanceMapper.updateVendorByPrimaryKeySelective(vendor);
+        Double amount1 = verificationDTO.getVc_amount1()==null?new Double(0):verificationDTO.getVc_amount1();
+        Double amount2 = verificationDTO.getVc_amount2()==null?new Double(0):verificationDTO.getVc_amount2();
+        if(kind.equals("prepaid_offset_payable")) {
+            String con = "va_vendid=" + verificationDTO.getVc_vendid() + " and va_currency='" + verificationDTO.getVc_currency() + "'";
+            VendApamount vendap = paybalanceMapper.selectVendApByCondition(con, companyId);
+            if (vendap == null) {
+                vendap = new VendApamount();
+                vendap.setVa_vendid(verificationDTO.getVc_vendid());
+                vendap.setVa_vendcode(verificationDTO.getVc_vendcode());
+                vendap.setVa_vendname(verificationDTO.getVc_vendname());
+                vendap.setVa_currency(verificationDTO.getVc_currency());
+                vendap.setVa_begindate(null);
+                vendap.setVa_beginprepayamount(new Double(0));
+                vendap.setVa_beginapamount(new Double(0));
+                vendap.setVa_preamount(new Double(0) + amount1);
+                vendap.setVa_payamount(new Double(0) + amount2);
+                vendap.setVa_leftamount(new Double(0) - amount1 + amount2);
+                vendap.setCompanyId(companyId);
+                paybalanceMapper.insertVendApamount(vendap);
+            } else {
+                Double vapreamount = vendap.getVa_preamount() == null ? new Double(0) : vendap.getVa_preamount();
+                Double vapayamount = vendap.getVa_payamount() == null ? new Double(0) : vendap.getVa_payamount();
+                Double valeftamount = vendap.getVa_leftamount() == null ? new Double(0) : vendap.getVa_leftamount();
+                vendap.setVa_preamount(vapreamount + amount1);
+                vendap.setVa_payamount(vapayamount + amount2);
+                vendap.setVa_leftamount(valeftamount - amount1 + amount2);
+                paybalanceMapper.updateVendApamountByPrimaryKeySelective(vendap);
+            }
+            paybalanceMapper.updateVendleftamountByPrimaryKey(verificationDTO.getVc_vendid());
         }else if(kind.equals("receivable_offset_payable")){
-            Vendor vendorData = paybalanceMapper.selectVendorByPrimaryKey(verificationDTO.getVc_vendid());
-            Double preamount = vendorData.getVe_preamount()==null?new Double(0):vendorData.getVe_preamount();
-            Double beginapamount = vendorData.getVe_beginapamount()==null?new Double(0):vendorData.getVe_beginapamount();
-            Double beginprepayamount= vendorData.getVe_beginprepayamount()==null?new Double(0):vendorData.getVe_beginprepayamount();
-            Double payamount = vendorData.getVe_payamount()==null?new Double(0):vendorData.getVe_payamount();
-
-            Vendor vendor = new Vendor();
-            Double amount1 = verificationDTO.getVc_amount1()==null?new Double(0):verificationDTO.getVc_amount1();
-            Double amount2 = verificationDTO.getVc_amount2()==null?new Double(0):verificationDTO.getVc_amount2();
-            vendor.setId(Long.valueOf(String.valueOf(verificationDTO.getVc_vendid())));
-            vendor.setVe_payamount(payamount+amount2);
-            vendor.setUpdaterId(BaseContextHolder.getUserId());
-            vendor.setUpdaterName(BaseContextHolder.getUserName());
-            vendor.setUpdateTime(new Date());
-            vendor.setVe_leftamount(beginapamount-beginprepayamount+payamount+amount2-preamount);
-            paybalanceMapper.updateVendorByPrimaryKeySelective(vendor);
-        }else if(kind.equals("payable_to_payable")){
+            String con="va_vendid="+verificationDTO.getVc_vendid()+" and va_currency='"+verificationDTO.getVc_currency()+"'";
+            VendApamount vendap=paybalanceMapper.selectVendApByCondition(con,companyId);
+            if(vendap == null){
+                vendap=new VendApamount();
+                vendap.setVa_vendid(verificationDTO.getVc_vendid());
+                vendap.setVa_vendcode(verificationDTO.getVc_vendcode());
+                vendap.setVa_vendname(verificationDTO.getVc_vendname());
+                vendap.setVa_currency(verificationDTO.getVc_currency());
+                vendap.setVa_begindate(null);
+                vendap.setVa_beginprepayamount(new Double(0));
+                vendap.setVa_beginapamount(new Double(0));
+                vendap.setVa_preamount(new Double(0));
+                vendap.setVa_payamount(new Double(0)+amount2);
+                vendap.setVa_leftamount(new Double(0)+amount2);
+                vendap.setCompanyId(companyId);
+                paybalanceMapper.insertVendApamount(vendap);
+            }else{
+                Double vapreamount = vendap.getVa_preamount()==null?new Double(0):vendap.getVa_preamount();
+                Double vapayamount = vendap.getVa_payamount()==null?new Double(0):vendap.getVa_payamount();
+                Double valeftamount = vendap.getVa_leftamount()==null?new Double(0):vendap.getVa_leftamount();
+                vendap.setVa_preamount(vapreamount);
+                vendap.setVa_payamount(vapayamount +amount2);
+                vendap.setVa_leftamount(valeftamount+amount2);
+                paybalanceMapper.updateVendApamountByPrimaryKeySelective(vendap);
+            }
+            paybalanceMapper.updateVendleftamountByPrimaryKey(verificationDTO.getVc_vendid());
+        }else if(kind.equals("payable_to_payable")){//应付转应付
             //转入供应商
-            Vendor vendorIn = paybalanceMapper.selectVendorByPrimaryKey(verificationDTO.getVc_turnvendid());
+            String inCon="va_vendid="+verificationDTO.getVc_turnvendid()+" and va_currency='"+verificationDTO.getVc_currency()+"'";
+            VendApamount inVendap=paybalanceMapper.selectVendApByCondition(inCon,companyId);
+            if(inVendap == null){
+                inVendap=new VendApamount();
+                inVendap.setVa_vendid(verificationDTO.getVc_turnvendid());
+                inVendap.setVa_vendcode(verificationDTO.getVc_turnvendcode());
+                inVendap.setVa_vendname(verificationDTO.getVc_turnvendname());
+                inVendap.setVa_currency(verificationDTO.getVc_currency());
+                inVendap.setVa_begindate(null);
+                inVendap.setVa_beginprepayamount(new Double(0));
+                inVendap.setVa_beginapamount(new Double(0));
+                inVendap.setVa_preamount(new Double(0));
+                inVendap.setVa_payamount(new Double(0)-amount1);
+                inVendap.setVa_leftamount(new Double(0)-amount1);
+                inVendap.setCompanyId(companyId);
+                paybalanceMapper.insertVendApamount(inVendap);
+            }else{
+                Double vapreamount = inVendap.getVa_preamount()==null?new Double(0):inVendap.getVa_preamount();
+                Double vapayamount = inVendap.getVa_payamount()==null?new Double(0):inVendap.getVa_payamount();
+                Double valeftamount = inVendap.getVa_leftamount()==null?new Double(0):inVendap.getVa_leftamount();
+                inVendap.setVa_preamount(vapreamount);
+                inVendap.setVa_payamount(vapayamount -amount1);
+                inVendap.setVa_leftamount(valeftamount-amount1);
+                paybalanceMapper.updateVendApamountByPrimaryKeySelective(inVendap);
+            }
+            paybalanceMapper.updateVendleftamountByPrimaryKey(verificationDTO.getVc_turnvendid());
             //转出供应商
-            Vendor vendorOut = paybalanceMapper.selectVendorByPrimaryKey(verificationDTO.getVc_vendid());
-
-            Double preamountIn = vendorIn.getVe_preamount()==null?new Double(0):vendorIn.getVe_preamount();
-            Double beginapamountIn = vendorIn.getVe_beginapamount()==null?new Double(0):vendorIn.getVe_beginapamount();
-            Double beginprepayamountIn = vendorIn.getVe_beginprepayamount()==null?new Double(0):vendorIn.getVe_beginprepayamount();
-            Double payamountIn = vendorIn.getVe_payamount()==null?new Double(0):vendorIn.getVe_payamount();
-
-            Double preamountOut = vendorOut.getVe_preamount()==null?new Double(0):vendorOut.getVe_preamount();
-            Double beginapamountOut = vendorOut.getVe_beginapamount()==null?new Double(0):vendorOut.getVe_beginapamount();
-            Double beginprepayamountOut = vendorOut.getVe_beginprepayamount()==null?new Double(0):vendorOut.getVe_beginprepayamount();
-            Double payamountOut = vendorOut.getVe_payamount()==null?new Double(0):vendorOut.getVe_payamount();
-
-
-
-            Double amount1 = verificationDTO.getVc_amount1()==null?new Double(0):verificationDTO.getVc_amount1();
-            Double amount2 = verificationDTO.getVc_amount2()==null?new Double(0):verificationDTO.getVc_amount2();
-            Vendor newVendorIn = new Vendor();
-            newVendorIn.setId(Long.valueOf(String.valueOf(verificationDTO.getVc_turnvendid())));
-            newVendorIn.setUpdaterId(BaseContextHolder.getUserId());
-            newVendorIn.setUpdaterName(BaseContextHolder.getUserName());
-            newVendorIn.setUpdateTime(new Date());
-            newVendorIn.setVe_payamount(payamountIn-amount1);
-            newVendorIn.setVe_leftamount(beginapamountIn-beginprepayamountIn+payamountIn-amount1-preamountIn);
-            paybalanceMapper.updateVendorByPrimaryKeySelective(newVendorIn);
-
-            Vendor newVendorOut = new Vendor();
-            newVendorOut.setId(Long.valueOf(String.valueOf(verificationDTO.getVc_vendid())));
-            newVendorOut.setUpdaterId(BaseContextHolder.getUserId());
-            newVendorOut.setUpdaterName(BaseContextHolder.getUserName());
-            newVendorOut.setUpdateTime(new Date());
-            newVendorOut.setVe_payamount(payamountOut+amount1);
-            newVendorOut.setVe_leftamount(beginapamountOut-beginprepayamountOut+payamountOut+amount1-preamountOut);
-            paybalanceMapper.updateVendorByPrimaryKeySelective(newVendorOut);
-
+            String outCon="va_vendid="+verificationDTO.getVc_vendid()+" and va_currency='"+verificationDTO.getVc_currency()+"'";
+            VendApamount outVendap=paybalanceMapper.selectVendApByCondition(outCon,companyId);
+            if(outVendap == null){
+                outVendap=new VendApamount();
+                outVendap.setVa_vendid(verificationDTO.getVc_vendid());
+                outVendap.setVa_vendcode(verificationDTO.getVc_vendcode());
+                outVendap.setVa_vendname(verificationDTO.getVc_vendname());
+                outVendap.setVa_currency(verificationDTO.getVc_currency());
+                outVendap.setVa_begindate(null);
+                outVendap.setVa_beginprepayamount(new Double(0));
+                outVendap.setVa_beginapamount(new Double(0));
+                outVendap.setVa_preamount(new Double(0));
+                outVendap.setVa_payamount(new Double(0)+amount1);
+                outVendap.setVa_leftamount(new Double(0)+amount1);
+                outVendap.setCompanyId(companyId);
+                paybalanceMapper.insertVendApamount(outVendap);
+            }else{
+                Double vapreamount = outVendap.getVa_preamount()==null?new Double(0):outVendap.getVa_preamount();
+                Double vapayamount = outVendap.getVa_payamount()==null?new Double(0):outVendap.getVa_payamount();
+                Double valeftamount = outVendap.getVa_leftamount()==null?new Double(0):outVendap.getVa_leftamount();
+                outVendap.setVa_preamount(vapreamount);
+                outVendap.setVa_payamount(vapayamount +amount1);
+                outVendap.setVa_leftamount(valeftamount+amount1);
+                paybalanceMapper.updateVendApamountByPrimaryKeySelective(outVendap);
+            }
+            paybalanceMapper.updateVendleftamountByPrimaryKey(verificationDTO.getVc_vendid());
         }
     }
     @Override

+ 1 - 0
applications/money/money-server/src/main/resources/mapper/AcountbalanceViewMapper.xml

@@ -4,6 +4,7 @@
   <resultMap id="BaseResultMap" type="com.usoftchina.saas.money.po.AcountbalanceView" >
     <result column="bankcode" property="bankcode" jdbcType="VARCHAR" />
     <result column="bankname" property="bankname" jdbcType="VARCHAR" />
+    <result column="currency" property="currency" jdbcType="VARCHAR" />
     <result column="bankid" property="bankid" jdbcType="INTEGER" />
     <result column="date" property="date" jdbcType="TIMESTAMP" />
     <result column="kind" property="kind" jdbcType="VARCHAR" />

+ 5 - 4
applications/money/money-server/src/main/resources/mapper/BanksubledgerMapper.xml

@@ -7,6 +7,7 @@
         <result column="bl_bankid" jdbcType="INTEGER" property="bl_bankid" />
         <result column="bl_bankcode" jdbcType="VARCHAR" property="bl_bankcode" />
         <result column="bl_bankname" jdbcType="VARCHAR" property="bl_bankname" />
+        <result column="bk_currency" jdbcType="VARCHAR" property="bk_currency" />
         <result column="bl_code" jdbcType="VARCHAR" property="bl_code" />
         <result column="bl_kind" jdbcType="VARCHAR" property="bl_kind" />
         <result column="bl_date" jdbcType="TIMESTAMP" property="bl_date" />
@@ -457,14 +458,14 @@
     <select id="selectByCondition" resultMap="BaseResultMap">
         select *
         from
-        (select  bl_date, bl_code, bl_kind,bl_bankcode,bl_bankid, bl_bankname, bl_income, bl_spending, bl_assname, bl_remark, companyid
-        from banksubledger where bl_kind in ('其他收入单', '其他支出单'))a
+        (select  bk_currency,bl_date, bl_code, bl_kind,bl_bankcode,bl_bankid, bl_bankname, bl_income, bl_spending, bl_assname, bl_remark, banksubledger.companyid
+        from banksubledger left join bankinformation on bk_id = bl_bankid where bl_kind in ('其他收入单', '其他支出单'))a
         <where>
             <if test="con != null">
-            ${con}
+                ${con}
             </if>
             <if test="companyId != null">
-            and  companyId = #{companyId}
+                and  companyId = #{companyId}
             </if>
         </where>
         order by bl_bankname asc, bl_date desc,bl_bankcode desc

+ 3 - 0
applications/money/money-server/src/main/resources/mapper/CustomerCheckViewMapper.xml

@@ -6,6 +6,9 @@
         <result column="pi_class" property="pi_class" jdbcType="VARCHAR" />
         <result column="pi_custcode" property="pi_custcode" jdbcType="VARCHAR" />
         <result column="pi_custname" property="pi_custname" jdbcType="VARCHAR" />
+        <result column="pi_currency" property="pi_currency" jdbcType="VARCHAR" />
+        <result column="pi_rate" property="pi_rate" jdbcType="DOUBLE" />
+        <result column="pi_mytotal" property="pi_mytotal" jdbcType="DOUBLE" />
         <result column="pi_date" property="pi_date" jdbcType="TIMESTAMP" />
         <result column="pd_pdno" property="pd_pdno" jdbcType="INTEGER" />
         <result column="pr_code" property="pr_code" jdbcType="VARCHAR" />

+ 157 - 0
applications/money/money-server/src/main/resources/mapper/PaybalanceMapper.xml

@@ -760,4 +760,161 @@
   <select id="checkStatus" resultType="int">
     select count(1) from paybalance where ifnull(pb_statuscode,'')='AUDITED' and pb_id= #{id,jdbcType=INTEGER}
   </select>
+
+  <!--供应商应付-->
+  <resultMap id="VendApResultMap" type="com.usoftchina.saas.money.po.VendApamount">
+    <id column="va_id" jdbcType="INTEGER" property="id" />
+    <result column="va_vendid" jdbcType="INTEGER" property="va_vendid" />
+    <result column="va_vendcode" jdbcType="VARCHAR" property="va_vendcode" />
+    <result column="va_vendname" jdbcType="VARCHAR" property="va_vendname" />
+    <result column="va_currency" jdbcType="VARCHAR" property="va_currency" />
+    <result column="va_begindate" jdbcType="TIMESTAMP" property="va_begindate" />
+    <result column="va_beginapamount" jdbcType="DOUBLE" property="va_beginapamount" />
+    <result column="va_beginprepayamount" jdbcType="DOUBLE" property="va_beginprepayamount" />
+    <result column="va_preamount" jdbcType="DOUBLE" property="va_preamount" />
+    <result column="va_payamount" jdbcType="DOUBLE" property="va_payamount" />
+    <result column="va_leftamount" jdbcType="DOUBLE" property="va_leftamount" />
+    <result column="companyid" jdbcType="INTEGER" property="companyId" />
+  </resultMap>
+  <sql id="VendApamount_Column_List">
+    va_id,va_vendid,va_vendcode,va_vendname,va_currency,va_begindate,va_beginapamount,va_beginprepayamount,va_preamount,va_payamount,va_leftamount,companyid
+  </sql>
+  <select id="selectVendApByCondition" resultMap="VendApResultMap">
+    select
+    <include refid="VendApamount_Column_List" />
+    from VendApamount
+    <where>
+      <if test="con != null">
+        ${con}
+      </if>
+      <if test="companyId != null">
+        and   VendApamount.companyId = #{companyId}
+      </if>
+    </where>
+  </select>
+  <!--供应商+币别应付余额更新-->
+  <update id="updateVendApamountByPrimaryKeySelective" parameterType="com.usoftchina.saas.money.po.VendApamount">
+    update VendApamount
+    <set>
+      <if test="va_vendid != null">
+        va_vendid = #{va_vendid,jdbcType=INTEGER},
+      </if>
+      <if test="va_vendcode != null">
+        va_vendcode = #{va_vendcode,jdbcType=VARCHAR},
+      </if>
+      <if test="va_vendname != null">
+        va_vendname = #{va_vendname,jdbcType=VARCHAR},
+      </if>
+      <if test="va_currency != null">
+        va_currency = #{va_currency,jdbcType=VARCHAR},
+      </if>
+      <if test="va_begindate != null">
+        va_begindate = #{va_begindate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="va_beginapamount != null">
+        va_beginapamount = #{va_beginapamount,jdbcType=DOUBLE},
+      </if>
+      <if test="va_beginprepayamount != null">
+        va_beginprepayamount = #{va_beginprepayamount,jdbcType=DOUBLE},
+      </if>
+      <if test="va_payamount != null">
+        va_payamount = #{va_payamount,jdbcType=DOUBLE},
+      </if>
+      <if test="va_preamount != null">
+        va_preamount = #{va_preamount,jdbcType=DOUBLE},
+      </if>
+      <if test="va_leftamount != null">
+        va_leftamount = #{va_leftamount,jdbcType=DOUBLE},
+      </if>
+      <if test="companyId != null">
+        companyid = #{companyId,jdbcType=INTEGER},
+      </if>
+    </set>
+    where va_id = #{id}
+  </update>
+  <update id="updateVendleftamountByPrimaryKey" parameterType="java.lang.Integer">
+    update vendor
+    <set>
+      ve_leftamount=ifnull((select sum(va_leftamount*(case when ifnull(cr_rate,0)=0 then 1 else ifnull(cr_rate,0) end ))
+      from VendApamount left join currencys on cr_name=va_currency and VendApamount.companyid=currencys.companyid
+      where VendApamount.companyid=vendor.companyid and va_vendid=#{ve_id,jdbcType=INTEGER}),0)
+    </set>
+    where ve_id = #{ve_id,jdbcType=INTEGER}
+  </update>
+  <insert id="insertVendApamount" parameterType="com.usoftchina.saas.money.po.VendApamount">
+    <selectKey resultType="java.lang.Long" keyProperty="id">
+      SELECT LAST_INSERT_ID() AS ID
+    </selectKey>
+    insert into VendApamount
+    <trim prefix="(" suffix=")" suffixOverrides=",">
+      <if test="companyId != null">
+        companyId,
+      </if>
+      <if test="va_vendid != null">
+        va_vendid,
+      </if>
+      <if test="va_vendcode != null">
+        va_vendcode,
+      </if>
+      <if test="va_vendname != null">
+        va_vendname,
+      </if>
+      <if test="va_currency != null">
+        va_currency,
+      </if>
+      <if test="va_begindate != null">
+        va_begindate,
+      </if>
+      <if test="va_beginapamount != null">
+        va_beginapamount,
+      </if>
+      <if test="va_beginprepayamount != null">
+        va_beginprepayamount,
+      </if>
+      <if test="va_payamount != null">
+        va_payamount,
+      </if>
+      <if test="va_preamount != null" >
+        va_preamount,
+      </if>
+      <if test="va_leftamount != null" >
+        va_leftamount,
+      </if>
+    </trim>
+    <trim prefix="values (" suffix=")" suffixOverrides=",">
+      <if test="companyId != null">
+        #{companyId,jdbcType=INTEGER},
+      </if>
+      <if test="va_vendid != null">
+        #{va_vendid,jdbcType=INTEGER},
+      </if>
+      <if test="va_vendcode != null">
+        #{va_vendcode,jdbcType=VARCHAR},
+      </if>
+      <if test="va_vendname != null">
+        #{va_vendname,jdbcType=VARCHAR},
+      </if>
+      <if test="va_currency != null">
+        #{va_currency,jdbcType=VARCHAR},
+      </if>
+      <if test="va_begindate != null">
+        #{va_begindate,jdbcType=TIMESTAMP},
+      </if>
+      <if test="va_beginapamount != null">
+        #{va_beginapamount,jdbcType=DOUBLE},
+      </if>
+      <if test="va_beginprepayamount != null">
+        #{va_beginprepayamount,jdbcType=DOUBLE},
+      </if>
+      <if test="va_payamount != null">
+        #{va_payamount,jdbcType=DOUBLE},
+      </if>
+      <if test="va_preamount != null" >
+        #{va_preamount,jdbcType=DOUBLE},
+      </if>
+      <if test="va_leftamount != null" >
+        #{va_leftamount,jdbcType=DOUBLE},
+      </if>
+    </trim>
+  </insert>
 </mapper>

+ 3 - 0
applications/money/money-server/src/main/resources/mapper/VendorAcountViewMapper.xml

@@ -6,6 +6,9 @@
     <result column="pi_class" property="pi_class" jdbcType="VARCHAR" />
     <result column="pi_vendcode" property="pi_vendcode" jdbcType="VARCHAR" />
     <result column="pi_vendname" property="pi_vendname" jdbcType="VARCHAR" />
+    <result column="pi_currency" property="pi_currency" jdbcType="VARCHAR" />
+    <result column="pi_rate" property="pi_rate" jdbcType="DOUBLE" />
+    <result column="pi_mytotal" property="pi_mytotal" jdbcType="DOUBLE" />
     <result column="pi_date" property="pi_date" jdbcType="TIMESTAMP" />
     <result column="pd_pdno" property="pd_pdno" jdbcType="INTEGER" />
     <result column="pr_code" property="pr_code" jdbcType="VARCHAR" />

+ 1 - 1
applications/money/money-server/src/main/resources/mapper/VerificationdetMapper.xml

@@ -473,7 +473,7 @@
   </update>
   <delete id="deleteByParentPrimaryKey" parameterType="java.lang.Long" >
     delete from verificationdet
-    where vd_id = #{vd_vcid,jdbcType=INTEGER}
+    where vd_vcid = #{vd_vcid,jdbcType=INTEGER}
   </delete>
   <sql id="subledger_Column_List" >
     sl_yamount,sl_namount

+ 1 - 1
applications/money/money-server/src/main/resources/mapper/VerificationdetailMapper.xml

@@ -472,7 +472,7 @@
   </update>
   <delete id="deleteByParentPrimaryKey" parameterType="java.lang.Long" >
     delete from verificationdetail
-    where vcd_id = #{vcd_vcid,jdbcType=INTEGER}
+    where vcd_vcid = #{vcd_vcid,jdbcType=INTEGER}
   </delete>
   <sql id="subledger_Column_List" >
     sl_yamount,sl_namount

+ 1 - 1
applications/purchase/purchase-server/src/main/resources/mapper/ProdInOutListMapper.xml

@@ -206,7 +206,7 @@
 
   <sql id="Prodinout_Column_List" >
     prodinout.pi_id pi_id,prodinout.pi_inoutno pi_inoutno,prodinout.pi_class pi_class,prodinout.pi_date pi_date,prodinout.pi_vendid pi_vendid,prodinout.pi_vendcode pi_vendcode,prodinout.pi_vendname pi_vendname,prodinout.pi_custid pi_custid,prodinout.pi_custcode pi_custcode,prodinout.pi_custname pi_custname,prodinout.pi_puid pi_puid,prodinout.pi_pucode pi_pucode,prodinout.pi_said pi_said,prodinout.pi_sacode pi_sacode,prodinout.pi_total pi_total,prodinout.pi_address pi_address,prodinout.pi_ioid pi_ioid,prodinout.pi_status pi_status,prodinout.pi_statuscode pi_statuscode,prodinout.pi_printstatus pi_printstatus,prodinout.pi_printstatuscode pi_printstatuscode,prodinout.companyid companyid,prodinout.updaterId updaterId,prodinout.updatetime updatetime,prodinout.pi_text1 pi_text1,prodinout.pi_text2 pi_text2,prodinout.pi_text3 pi_text3,prodinout.pi_text4 pi_text4,prodinout.pi_text5 pi_text5,prodinout.pi_nettotal pi_nettotal,prodinout.pi_auditdate pi_auditdate,prodinout.pi_auditman pi_auditman,prodinout.pi_remark pi_remark,
-prodinout.creatorName creatorName,prodinout.creatorId creatorId,prodinout.createTime createTime,prodinout.updaterName updaterName,prodinout.pi_macode pi_macode,prodinout.pi_maid pi_maid,prodinout.pi_prstatuscode pi_prstatuscode,prodinout.pi_prstatus pi_prstatus,prodinout.pi_iocode pi_iocode,prodinout.pi_currency pi_currency,pi_rate,b2bStatus
+prodinout.creatorName creatorName,prodinout.creatorId creatorId,prodinout.createTime createTime,prodinout.updaterName updaterName,prodinout.pi_macode pi_macode,prodinout.pi_maid pi_maid,prodinout.pi_prstatuscode pi_prstatuscode,prodinout.pi_prstatus pi_prstatus,prodinout.pi_iocode pi_iocode,prodinout.pi_currency pi_currency,pi_rate,prodinout.b2bStatus,
   </sql>
   <sql id="Prodiodetail_Column_List" >
     prodiodetail.pd_id pd_id,prodiodetail.pd_piid pd_piid,prodiodetail.pd_inoutno pd_inoutno,prodiodetail.pd_piclass pd_piclass,prodiodetail.pd_pdno pd_pdno,prodiodetail.pd_ordercode pd_ordercode,prodiodetail.pd_orderdetno pd_orderdetno,prodiodetail.pd_prodid pd_prodid,prodiodetail.pd_prodcode pd_prodcode,prodiodetail.pd_unit pd_unit,prodiodetail.pd_inqty pd_inqty,prodiodetail.pd_outqty pd_outqty,prodiodetail.pd_orderprice pd_orderprice,prodiodetail.pd_sendprice pd_sendprice,prodiodetail.pd_price pd_price,prodiodetail.pd_total pd_total,prodiodetail.pd_taxrate pd_taxrate,prodiodetail.pd_netprice pd_netprice,prodiodetail.pd_nettotal pd_nettotal,prodiodetail.pd_whid pd_whid,prodiodetail.pd_whcode pd_whcode,prodiodetail.pd_whname pd_whname,prodiodetail.pd_inwhid pd_inwhid,prodiodetail.pd_inwhcode pd_inwhcode,prodiodetail.pd_inwhname pd_inwhname,prodiodetail.pd_orderid pd_orderid,prodiodetail.pd_sdid pd_sdid,prodiodetail.pd_status pd_status,prodiodetail.pd_remark pd_remark,prodiodetail.pd_text1 pd_text1,prodiodetail.pd_text2 pd_text2,prodiodetail.pd_text3 pd_text3,

+ 1 - 0
frontend/saas-web/app/view/core/base/BasePanelModel.js

@@ -3,6 +3,7 @@ Ext.define('saas.view.core.base.BasePanelModel', {
     alias: 'viewmodel.core-base-basepanel',
 
     data: {
+        enableClose: true,
         configurable: true
     }
 });

+ 8 - 1
frontend/saas-web/app/view/core/base/GridPanel.js

@@ -135,7 +135,7 @@ Ext.define('saas.view.core.base.GridPanel', {
                         text:'新增',
                         handler:function(b){
                             var form = b.ownerCt.ownerCt.ownerCt;
-                            saas.util.BaseUtil.openTab(form._formXtype, '新增' + form._title, form._formXtype+'_add'); 
+                            me.turnAdd(form)
                         }
                     }, {
                         text: '导入',
@@ -144,6 +144,9 @@ Ext.define('saas.view.core.base.GridPanel', {
                         text:'导出',
                         handler:me.onExport
                     },{
+                        bind:{
+                            hidden:'{!enableClose}'
+                        },
                         text: '禁用',
                         handler: function(){
                             var form = this.ownerCt.ownerCt.ownerCt;
@@ -275,6 +278,10 @@ Ext.define('saas.view.core.base.GridPanel', {
         }
     },
 
+    turnAdd:function(form){
+        saas.util.BaseUtil.openTab(form._formXtype, '新增' + form._title, form._formXtype+'_add'); 
+    },
+
     onLoad:function(){
         this.ownerCt.ownerCt.store.load();
     },

+ 0 - 1
frontend/saas-web/app/view/core/chart/ChartBase.js

@@ -27,7 +27,6 @@ Ext.define('saas.view.core.chart.ChartBase', {
                 width: '100%',
                 // listeners: {
                 //     boxready: function() {
-                //         debugger
                 //     }
                 // }
             }),

+ 1 - 1
frontend/saas-web/app/view/core/dbfind/ConDbfindTrigger.js

@@ -75,13 +75,13 @@ Ext.define('saas.view.core.form.field.ConDbfindTrigger', {
                     let value = f.dbValues[f.dbfinds[1].from];
                     field1.setValue(value);
                     field1.publishState('value', value);
+                    me.fireEvent('change');
                 }else {
                     f.ownerCt.dbValues = {};
                 }
             });
             field1.on('blur', function(f) {
                 f.ownerCt.dbValues = f.dbValues;
-                me.fireEvent('change', this)
             });
 
             field2.on('validChange', function() {

+ 2 - 0
frontend/saas-web/app/view/core/dbfind/DbfindGridPanel.scss

@@ -1,4 +1,5 @@
 .x-window-dbfind{
+    padding: 0px 0px 0px 0px !important;
     border:none;
     .x-window-header{
         border: none;
@@ -13,6 +14,7 @@
         height: 16px !important;
         min-height: 16px;
         padding: 0px;
+        text-align: center;
     }
     .x-tbar-page-number{
         width: 40px !important;

+ 20 - 2
frontend/saas-web/app/view/core/dbfind/DbfindTrigger.js

@@ -129,7 +129,7 @@ Ext.define('saas.view.core.dbfind.DbfindTrigger', {
         if (!this.fireEvent('beforetriggerclick', this)) {
             return;
         };
-        f.blur(f);
+        f.blur(f,null,null,true);
         //判断dbfindtrigger归属
         f.judge(f); //form
         var panel = f.up('core-tab-panel') || Ext.getCmp('mainView'),
@@ -192,7 +192,7 @@ Ext.define('saas.view.core.dbfind.DbfindTrigger', {
     },
 
     listeners: {
-        blur: function (f, e) {
+        blur: function (f, e, op, isTrigger) {
             var me = f;
             var dbfinds = me.dbfinds,
                 data;
@@ -270,6 +270,15 @@ Ext.define('saas.view.core.dbfind.DbfindTrigger', {
                         me.setValue(null);
                     }
                 }
+                if(!isTrigger){
+                    let rec = {
+                        data:{},
+                        get:function(name){
+                            return this.data[name]
+                        }
+                    }
+                    f.aftertrigger(f,rec);
+                }
             } else if (data.length == 1) {
                 me.dbValues = data[0];
                 var dbfinds = me.dbfinds;
@@ -302,6 +311,15 @@ Ext.define('saas.view.core.dbfind.DbfindTrigger', {
                         }
                     }
                 }
+                if(!isTrigger){
+                    let rec = {
+                        data:data[0],
+                        get:function(name){
+                            return this.data[name]
+                        }
+                    }
+                    f.aftertrigger(f,rec);
+                }
             }
         },
         select: function (combo, record, eOpts) {

+ 1 - 1
frontend/saas-web/app/view/core/form/FormPanel.js

@@ -116,7 +116,7 @@ Ext.define('saas.view.core.form.FormPanel', {
             text:'操作日志',
             hidden: true,
             bind: {
-                hidden: '{!id}'
+                hidden: '{!showLogBtn || !id}'
             },
             handler:"showMessageLog"
         }, {

+ 1 - 0
frontend/saas-web/app/view/core/form/FormPanelModel.js

@@ -17,6 +17,7 @@ Ext.define('saas.view.core.form.FormPanelModel', {
         showCopyBtn: true, // 显示复制按钮
         showAuditBtn: true, // 显示审核、反审核按钮
         showPrintBtn: false, // 显示打印按钮
+        showLogBtn: true, // 显示操作日志按钮
         configurable: true, // 显示界面设置按钮
 
         detailBindeFields: [], // 从表绑定列

+ 1 - 0
frontend/saas-web/app/view/core/form/field/FileField.js

@@ -8,6 +8,7 @@ Ext.define('saas.view.core.form.field.FileField', {
 	collapsible: true,
 	multi: true,
 	allowBlank:true,
+	isFormField:true,
 	initComponent: function() {
 		this.columnWidth = 1;//强制占一行
 		this.cls = '';

+ 0 - 18
frontend/saas-web/app/view/document/currencys/DatalistController.js

@@ -4,24 +4,6 @@
 Ext.define('saas.view.document.currencys.DatalistController', {
     extend: 'saas.view.document.kind.KindController',
     alias: 'controller.document-currencys-datalist',
-    
-    insertActionColumn:function(columns){
-        var me=this;
-        if(columns.length>0 && columns[0].xtype!='actioncolumn'){
-            return Ext.Array.insert(columns,0,[{
-                xtype:'actioncolumn',
-                text:'操作',
-                align: 'center',
-                items: [{
-                    tooltip: '编辑',
-                    iconCls: 'x-fa fa-pencil fa-fw',
-                    handler: me.onEdit,
-                    scope:this
-                }]
-            }]);
-        }
-        return columns;
-    },
     onEdit:function(grid,row,col){
         var dk = grid.ownerCt.ownerCt;
         var dataKind=dk.getViewModel().getData()['dataKind'].value,

+ 113 - 0
frontend/saas-web/app/view/document/custaramount/AddWindow.js

@@ -0,0 +1,113 @@
+/**
+ * Created by zhouy on 2018/10/18.
+ */
+Ext.define('saas.view.document.custaramount.AddWindow', {
+    extend: 'saas.view.document.kind.ChildForm',
+    xtype: 'document-custaramount-addwindow',
+    dataKind:'custaramountadd',//类型标识
+    belong:{
+        columns: [{
+            dataIndex: 'ca_custid'
+        },{
+            dataIndex: 'ca_custcode'
+        },{
+            dataIndex: 'ca_custname'
+        },{
+            dataIndex: 'ca_currency'
+        },{
+            dataIndex: 'ca_beginaramount'
+        },{
+            dataIndex: 'ca_beginprerecamount'
+        },{
+            dataIndex: 'ca_begindate'
+        },{
+            dataIndex: 'ca_recamount'
+        },{
+            dataIndex: 'ca_preamount'
+        },{
+            dataIndex: 'ca_leftamount'
+        }],
+        keyField:'id',
+        reqUrl:'/api/document/custaramount/save'
+    },
+    etc:{
+        custaramountadd:{
+            items:[{
+                xtype:'hidden',
+                name:'id'
+            },{
+                xtype:'hidden',
+                name:'ca_custid'
+            },{
+                xtype:'hidden',
+                name:'ca_begindate'
+            },{
+                defaultValue:0,
+                xtype:'hidden',
+                name:'ca_recamount'
+            },{
+                defaultValue:0,
+                xtype:'hidden',
+                name:'ca_preamount'
+            },{
+                defaultValue:0,
+                xtype:'hidden',
+                name:'ca_leftamount'
+            },{
+                xtype:'customerDbfindTrigger',
+                name:'ca_custcode',
+                allowBlank:false,
+                fieldLabel:'客户编号',
+                maxLength: 20,
+                dbfinds:[{
+                    from:'id',to:'ca_custid',ignore:true
+                },{
+                    from:'cu_name',to:'ca_custname'
+                },{
+                    from:'cu_code',to:'ca_custcode'
+                }]
+            },{
+                xtype:'textfield',
+                readOnly:true,
+                editable:false,
+                name:'ca_custname',
+                allowBlank:false,
+                fieldLabel:'客户名称',
+                maxLength: 20
+            },{
+                xtype:'currencyDbfindTrigger',
+                name:'ca_currency',
+                allowBlank:false,
+                fieldLabel:'币别',
+                maxLength: 20,
+                dbfinds:[{
+                    from:'cr_name',to:'ca_currency'
+                }]
+            },{
+                xtype:'numberfield',
+                hideTrigger:true,
+                name:'ca_beginaramount',
+                allowBlank:true,
+                fieldLabel:'期初应收(元)',
+                maxLength: 20,
+                minValue:0,
+                maxValue:999999999999999999999,
+                defaultValue: 0,
+                decimalPrecision: 2,
+                beforeLabelTextTpl:""
+            },{
+                beforeLabelTextTpl:"",
+                xtype:'numberfield',
+                hideTrigger:true,
+                name:'ca_beginprerecamount',
+                allowBlank:true,
+                fieldLabel:'期初预收(元)',
+                maxLength: 20,
+                minValue:0,
+                maxValue:999999999999999999999,
+                defaultValue: 0,
+                decimalPrecision: 2,
+            }]
+        }
+    }
+});

+ 177 - 0
frontend/saas-web/app/view/document/custaramount/BasePanel.js

@@ -0,0 +1,177 @@
+Ext.define('saas.view.document.custaramount.BasePanel', {
+    extend: 'saas.view.core.base.BasePanel',
+    xtype: 'document-custaramount-basepanel',
+    controller: 'document-custaramount-basepanel',
+    viewModel: 'document-custaramount-basepanel',
+
+    viewName: 'document-custaramount-basepanel',
+
+    deleteMoreMsg: '删除的客户期初将不能恢复,请确认是否删除?',
+    deleteOneMsg: '删除的客户期初将不能恢复,请确认是否删除?',
+
+    initComponent: function () {
+        Ext.apply(this, {
+            searchField: [{
+                xtype: "textfield",
+                name: "ca_custcode",
+                columnWidth: 0.2,
+                emptyText: '请输入客户编号或名称',
+                getCondition: function (v) {
+                    return "(upper(CONCAT(ca_custcode,'#',ca_custname)) like '%" + v.toUpperCase() + "%' )";
+                }
+            },{
+                margin:'0 15 0 10',
+                xtype: "textfield",
+                name: "ca_currency",
+                columnWidth: 0.15,
+                emptyText: '请输入币别名称'
+            }],
+
+            //字段属性
+            caller: 'CustAramount',
+            _formXtype: 'document-custaramount-formpanel',
+            _title: '客户期初',
+            _deleteUrl: '/api/document/custaramount/delete',
+            _batchDeleteUrl: '/api/document/custaramount/batchDelete',
+
+            gridConfig: {
+                idField: 'id',
+                codeField: 've_code',
+                statusCodeField: 've_statuscode',
+                dataUrl: '/api/document/custaramount/list',
+                caller: 'custaramount',
+                turnAdd:function(form){
+                    this.dialog = form.ownerCt.add({
+                        xtype: 'document-custaramount-addwindow',
+                        bind: {
+                            title: '新增客户期初'
+                        },
+                        _parent:form.items.items[0],
+                        record:null,
+                        session: true
+                    });
+                    this.dialog.show();
+                },
+                onItemClick: function(form, grid, record,a,index,c) {
+                    var classList = c.target.classList;
+                    if(classList.contains('fa-pencil')){
+                        var config = {};
+                        config.initId = record.get('id');
+                        this.dialog = form.ownerCt.add({
+                            xtype: 'document-custaramount-window',
+                            bind: {
+                                title: '修改客户期初'
+                            },
+                            _parent:form.items.items[0],
+                            record:record,
+                            session: true
+                        });
+                        this.dialog.show();
+                    }else if(classList.contains('fa-trash-o')){
+                        //删除
+                        var id = record.get('id');
+                        if(id){
+                            saas.util.BaseUtil.showConfirm('警告', form.deleteOneMsg)
+                            .then(function(yes) {
+                                if(yes == 'yes') {
+                                    saas.util.BaseUtil.request({
+                                        url: form._deleteUrl+'/'+id,
+                                        method: 'POST',
+                                    })
+                                    .then(function(localJson) {
+                                        if(localJson.success){
+                                            //解析参数
+                                            saas.util.BaseUtil.showSuccessToast('删除成功');
+                                            grid.store.load();
+                                        }
+                                    })
+                                    .catch(function(e) {
+                                        saas.util.BaseUtil.showErrorToast('删除失败: ' + e.message);
+                                    });
+                                }
+                            });
+                        }
+                    }
+                },
+                columns: [{
+                    text: "id",
+                    hidden: true,
+                    dataIndex: "id",
+                    xtype: "numbercolumn",
+                },{
+                    text: "客户id",
+                    hidden: true,
+                    dataIndex: "ca_custid",
+                    xtype: "numbercolumn",
+                }, {
+                    text: "客户编号",
+                    width: 150.0,
+                    dataIndex: "ca_custcode"
+                },  {
+                    text: "客户名称",
+                    width: 150.0,
+                    dataIndex: "ca_custname"
+                }, {
+                    text: '币别',
+                    dataIndex: 'ca_currency',
+                    align: 'center',
+                    width: 65
+                }, {
+                    xtype:'datecolumn',
+                    text: '期初日期',
+                    format:'Y-m-d',
+                    dataIndex: 'ca_begindate',
+                    width: 110
+                },{
+                    text: "期初应收",
+                    xtype: 'numbercolumn',
+                    dataIndex: "ca_beginaramount",
+                    width: 110.0,
+                    renderer: function(v, m, r) {
+                        return saas.util.BaseUtil.numberFormat(v, 2, false);
+                    }
+                },{
+                    text: "期初预收",
+                    xtype: 'numbercolumn',
+                    dataIndex: "ca_beginprerecamount",
+                    width: 110.0,
+                    renderer: function(v, m, r) {
+                        return saas.util.BaseUtil.numberFormat(v, 2, false);
+                    }
+                },{
+                    hidden:true,
+                    text: "应收金额",
+                    xtype: 'numbercolumn',
+                    dataIndex: "ca_recamount",
+                    width: 110.0,
+                    renderer: function(v, m, r) {
+                        return saas.util.BaseUtil.numberFormat(v, 2, false);
+                    }
+                },{
+                    hidden:true,
+                    text: "预收金额",
+                    xtype: 'numbercolumn',
+                    dataIndex: "ca_preamount",
+                    width: 110.0,
+                    renderer: function(v, m, r) {
+                        return saas.util.BaseUtil.numberFormat(v, 2, false);
+                    }
+                },{
+                    hidden:true,
+                    text: "应收余额",
+                    xtype: 'numbercolumn',
+                    dataIndex: "ca_leftamount",
+                    width: 110.0,
+                    renderer: function(v, m, r) {
+                        return saas.util.BaseUtil.numberFormat(v, 2, false);
+                    }
+                }]
+            },
+        });
+        this.callParent(arguments);
+    },
+
+    refresh: function () {
+        this.items.items[0].store.load()
+    }
+});

+ 10 - 0
frontend/saas-web/app/view/document/custaramount/BasePanelController.js

@@ -0,0 +1,10 @@
+Ext.define('saas.view.document.custaramount.BasePanelController', {
+    extend: 'saas.view.core.base.BasePanelController',
+    alias: 'controller.document-custaramount-basepanel',
+
+    init: function (form) {
+        var me = this;
+        this.control({
+        });
+    }
+});

+ 9 - 0
frontend/saas-web/app/view/document/custaramount/BasePanelModel.js

@@ -0,0 +1,9 @@
+Ext.define('saas.view.document.custaramount.BasePanelModel', {
+    extend: 'saas.view.core.base.BasePanelModel',
+    alias: 'viewmodel.document-custaramount-basepanel',
+
+    data: {
+        enableClose: false,
+        configurable: true
+    }
+});

+ 117 - 0
frontend/saas-web/app/view/document/custaramount/Window.js

@@ -0,0 +1,117 @@
+/**
+ * Created by zhouy on 2018/10/18.
+ */
+Ext.define('saas.view.document.custaramount.Window', {
+    extend: 'saas.view.document.kind.ChildForm',
+    xtype: 'document-custaramount-window',
+    dataKind:'custaramount',//类型标识
+    belong:{
+        columns: [{
+            dataIndex: 'ca_custid'
+        },{
+            dataIndex: 'ca_custcode'
+        },{
+            dataIndex: 'ca_custname'
+        },{
+            dataIndex: 'ca_currency'
+        },{
+            dataIndex: 'ca_beginaramount'
+        },{
+            dataIndex: 'ca_beginprerecamount'
+        },{
+            dataIndex: 'ca_begindate'
+        },{
+            dataIndex: 'ca_recamount'
+        },{
+            dataIndex: 'ca_preamount'
+        },{
+            dataIndex: 'ca_leftamount'
+        }],
+        keyField:'id',
+        reqUrl:'/api/document/custaramount/save'
+    },
+    etc:{
+        custaramount:{
+            items:[{
+                xtype:'hidden',
+                name:'id'
+            },{
+                xtype:'hidden',
+                name:'ca_custid'
+            },{
+                xtype:'hidden',
+                name:'ca_begindate'
+            },{
+                defaultValue:0,
+                xtype:'hidden',
+                name:'ca_payamount'
+            },{
+                defaultValue:0,
+                xtype:'hidden',
+                name:'ca_preamount'
+            },{
+                defaultValue:0,
+                xtype:'hidden',
+                name:'ca_leftamount'
+            },{
+                xtype:'customerDbfindTrigger',
+                name:'ca_custcode',
+                allowBlank:false,
+                readOnly:true,
+                editable:false,
+                fieldLabel:'客户编号',
+                maxLength: 20,
+                dbfinds:[{
+                    from:'id',to:'ca_custid',ignore:true
+                },{
+                    from:'ve_name',to:'ca_custname'
+                },{
+                    from:'ve_code',to:'ca_custcode'
+                }]
+            },{
+                xtype:'textfield',
+                readOnly:true,
+                editable:false,
+                name:'ca_custname',
+                allowBlank:false,
+                fieldLabel:'客户名称',
+                maxLength: 20
+            },{
+                readOnly:true,
+                editable:false,
+                xtype:'currencyDbfindTrigger',
+                name:'ca_currency',
+                allowBlank:false,
+                fieldLabel:'币别',
+                maxLength: 20,
+                dbfinds:[{
+                    from:'cr_name',to:'ca_currency'
+                }]
+            },,{
+                xtype:'numberfield',
+                hideTrigger:true,
+                name:'ca_beginaramount',
+                allowBlank:true,
+                fieldLabel:'期初应收(元)',
+                maxLength: 20,
+                minValue:0,
+                maxValue:999999999999999999999,
+                defaultValue: 0,
+                decimalPrecision: 2,
+                beforeLabelTextTpl:""
+            },{
+                beforeLabelTextTpl:"",
+                xtype:'numberfield',
+                hideTrigger:true,
+                name:'ca_beginprerecamount',
+                allowBlank:true,
+                fieldLabel:'期初预收(元)',
+                maxLength: 20,
+                minValue:0,
+                maxValue:999999999999999999999,
+                defaultValue: 0,
+                decimalPrecision: 2,
+            }]
+        }
+    }
+});

+ 10 - 2
frontend/saas-web/app/view/document/customer/BasePanel.js

@@ -105,10 +105,10 @@ Ext.define('saas.view.document.customer.BasePanel', {
                     dataIndex : "cu_type", 
                     width : 100.0
                 }, {
-                    text: '币别',
+                    text: '默认币别',
                     dataIndex: 'cu_currency',
                     align: 'center',
-                    width: 65
+                    width: 90
                 }, {
                     text : "税率(%)", 
                     dataIndex : "cu_taxrate", 
@@ -117,6 +117,14 @@ Ext.define('saas.view.document.customer.BasePanel', {
                     renderer : function(v, m, r) {
                         return saas.util.BaseUtil.numberFormat(v, 2, false);
                     }
+                },{
+                    text : "应收余额(元)", 
+                    dataIndex : "cu_leftamount", 
+                    xtype: 'numbercolumn', 
+                    width : 110.0, 
+                    renderer : function(v, m, r) {
+                        return saas.util.BaseUtil.numberFormat(v, 3, false);
+                    }
                 }, {
                     text : "结算天数", 
                     xtype: 'numbercolumn',

+ 17 - 38
frontend/saas-web/app/view/document/customer/FormPanel.js

@@ -123,18 +123,10 @@ Ext.define('saas.view.document.customer.FormPanel', {
                 fieldLabel: '状态码',
                 allowBlank: true,
                 columnWidth: 0.25
-            }, {
-                xtype: "datefield",
-                name: "cu_begindate",
-                format: 'Y-m-d',
-                fieldLabel: "期初日期",
-                allowBlank: true,
-                columnWidth: 0.25,
-                group: '交易信息',
             }, {
                 xtype: 'currencyDbfindTrigger',
                 name: "cu_currency",
-                fieldLabel: '币别',
+                fieldLabel: '默认币别',
                 allowBlank: false,
                 columnWidth: 0.25,
                 defaultValue:  this.getViewModel().get('defaultCurrency') ,
@@ -148,34 +140,6 @@ Ext.define('saas.view.document.customer.FormPanel', {
                 minValue: 0,
                 maxValue: 100,
                 group: '交易信息',
-            }, {
-                xtype: "numberfield",
-                hideTrigger: true,
-                name: "cu_beginaramount",
-                fieldLabel: "期初应收(元)",
-                allowBlank: true,
-                columnWidth: 0.25,
-                decimalPrecision: 2,
-                thousandSeparator: ',',
-                minValue: 0,
-                group: '交易信息',
-                renderer: function(v, m, r) {
-                    return saas.util.BaseUtil.numberFormat(v, 2, true);
-                },
-            }, {
-                xtype: "numberfield",
-                hideTrigger: true,
-                name: "cu_beginprerecamount",
-                fieldLabel: "期初预收(元)",
-                allowBlank: true,
-                columnWidth: 0.25,
-                decimalPrecision: 2,
-                thousandSeparator: ',',
-                minValue: 0,
-                group: '交易信息',
-                renderer: function(v, m, r) {
-                    return saas.util.BaseUtil.numberFormat(v, 2, true);
-                },
             }, {
                 xtype: "numberfield",
                 hideTrigger: true,
@@ -204,6 +168,21 @@ Ext.define('saas.view.document.customer.FormPanel', {
                 columnWidth: 0.25,
                 defaultValue: saas.util.BaseUtil.getCurrentUser().realname,
                 group: '交易信息',
+            },{
+                xtype: "numberfield",
+                hideTrigger: true,
+                name: "cu_leftamount",
+                fieldLabel: "应收余额(元)",
+                readOnly:true,
+                editable:false,
+                allowBlank: true,
+                columnWidth: 0.25,
+                decimalPrecision: 3,
+                thousandSeparator: ',',
+                group: '交易信息',
+                renderer: function(v, m, r) {
+                    return saas.util.BaseUtil.numberFormat(v, 3, true);
+                },
             }, {
                 xtype: "hidden",
                 hideTrigger: true,
@@ -261,7 +240,7 @@ Ext.define('saas.view.document.customer.FormPanel', {
                 fieldLabel: "备注",
                 xtype: 'textfield',
                 name: "cu_remark",
-                columnWidth: 1
+                columnWidth: 0.75
             }, {
                 xtype: "detailGridField",
                 name: 'detail1',

+ 113 - 0
frontend/saas-web/app/view/document/vendapamount/AddWindow.js

@@ -0,0 +1,113 @@
+/**
+ * Created by zhouy on 2018/10/18.
+ */
+Ext.define('saas.view.document.vendapamount.AddWindow', {
+    extend: 'saas.view.document.kind.ChildForm',
+    xtype: 'document-vendapamount-addwindow',
+    dataKind:'vendapamountadd',//类型标识
+    belong:{
+        columns: [{
+            dataIndex: 'va_vendid'
+        },{
+            dataIndex: 'va_vendcode'
+        },{
+            dataIndex: 'va_vendname'
+        },{
+            dataIndex: 'va_currency'
+        },{
+            dataIndex: 'va_beginapamount'
+        },{
+            dataIndex: 'va_beginprepayamount'
+        },{
+            dataIndex: 'va_begindate'
+        },{
+            dataIndex: 'va_payamount'
+        },{
+            dataIndex: 'va_preamount'
+        },{
+            dataIndex: 'va_leftamount'
+        }],
+        keyField:'id',
+        reqUrl:'/api/document/vendapamount/save'
+    },
+    etc:{
+        vendapamountadd:{
+            items:[{
+                xtype:'hidden',
+                name:'id'
+            },{
+                xtype:'hidden',
+                name:'va_vendid'
+            },{
+                xtype:'hidden',
+                name:'va_begindate'
+            },{
+                defaultValue:0,
+                xtype:'hidden',
+                name:'va_payamount'
+            },{
+                defaultValue:0,
+                xtype:'hidden',
+                name:'va_preamount'
+            },{
+                defaultValue:0,
+                xtype:'hidden',
+                name:'va_leftamount'
+            },{
+                xtype:'vendorDbfindTrigger',
+                name:'va_vendcode',
+                allowBlank:false,
+                fieldLabel:'供应商编号',
+                maxLength: 20,
+                dbfinds:[{
+                    from:'id',to:'va_vendid',ignore:true
+                },{
+                    from:'ve_name',to:'va_vendname'
+                },{
+                    from:'ve_code',to:'va_vendcode'
+                }]
+            },{
+                xtype:'textfield',
+                readOnly:true,
+                editable:false,
+                name:'va_vendname',
+                allowBlank:false,
+                fieldLabel:'供应商名称',
+                maxLength: 20
+            },{
+                xtype:'currencyDbfindTrigger',
+                name:'va_currency',
+                allowBlank:false,
+                fieldLabel:'币别',
+                maxLength: 20,
+                dbfinds:[{
+                    from:'cr_name',to:'va_currency'
+                }]
+            },{
+                xtype:'numberfield',
+                hideTrigger:true,
+                name:'va_beginapamount',
+                allowBlank:true,
+                fieldLabel:'期初应付(元)',
+                maxLength: 20,
+                minValue:0,
+                maxValue:999999999999999999999,
+                defaultValue: 0,
+                decimalPrecision: 2,
+                beforeLabelTextTpl:""
+            },{
+                beforeLabelTextTpl:"",
+                xtype:'numberfield',
+                hideTrigger:true,
+                name:'va_beginprepayamount',
+                allowBlank:true,
+                fieldLabel:'期初预付(元)',
+                maxLength: 20,
+                minValue:0,
+                maxValue:999999999999999999999,
+                defaultValue: 0,
+                decimalPrecision: 2,
+            }]
+        }
+    }
+});

+ 177 - 0
frontend/saas-web/app/view/document/vendapamount/BasePanel.js

@@ -0,0 +1,177 @@
+Ext.define('saas.view.document.vendapamount.BasePanel', {
+    extend: 'saas.view.core.base.BasePanel',
+    xtype: 'document-vendapamount-basepanel',
+    controller: 'document-vendapamount-basepanel',
+    viewModel: 'document-vendapamount-basepanel',
+
+    viewName: 'document-vendapamount-basepanel',
+
+    deleteMoreMsg: '删除的供应商期初将不能恢复,请确认是否删除?',
+    deleteOneMsg: '删除的供应商期初将不能恢复,请确认是否删除?',
+
+    initComponent: function () {
+        Ext.apply(this, {
+            searchField: [{
+                xtype: "textfield",
+                name: "va_vendcode",
+                columnWidth: 0.2,
+                emptyText: '请输入供应商编号或名称',
+                getCondition: function (v) {
+                    return "(upper(CONCAT(va_vendcode,'#',va_vendname)) like '%" + v.toUpperCase() + "%' )";
+                }
+            },{
+                margin:'0 15 0 10',
+                xtype: "textfield",
+                name: "va_currency",
+                columnWidth: 0.15,
+                emptyText: '请输入币别名称'
+            }],
+
+            //字段属性
+            caller: 'VendApamount',
+            _formXtype: 'document-vendapamount-formpanel',
+            _title: '供应商期初',
+            _deleteUrl: '/api/document/vendapamount/delete',
+            _batchDeleteUrl: '/api/document/vendapamount/batchDelete',
+
+            gridConfig: {
+                idField: 'id',
+                codeField: 've_code',
+                statusCodeField: 've_statuscode',
+                dataUrl: '/api/document/vendapamount/list',
+                caller: 'VendApamount',
+                turnAdd:function(form){
+                    this.dialog = form.ownerCt.add({
+                        xtype: 'document-vendapamount-addwindow',
+                        bind: {
+                            title: '新增供应商期初'
+                        },
+                        _parent:form.items.items[0],
+                        record:null,
+                        session: true
+                    });
+                    this.dialog.show();
+                },
+                onItemClick: function(form, grid, record,a,index,c) {
+                    var classList = c.target.classList;
+                    if(classList.contains('fa-pencil')){
+                        var config = {};
+                        config.initId = record.get('id');
+                        this.dialog = form.ownerCt.add({
+                            xtype: 'document-vendapamount-window',
+                            bind: {
+                                title: '修改供应商期初'
+                            },
+                            _parent:form.items.items[0],
+                            record:record,
+                            session: true
+                        });
+                        this.dialog.show();
+                    }else if(classList.contains('fa-trash-o')){
+                        //删除
+                        var id = record.get('id');
+                        if(id){
+                            saas.util.BaseUtil.showConfirm('警告', form.deleteOneMsg)
+                            .then(function(yes) {
+                                if(yes == 'yes') {
+                                    saas.util.BaseUtil.request({
+                                        url: form._deleteUrl+'/'+id,
+                                        method: 'POST',
+                                    })
+                                    .then(function(localJson) {
+                                        if(localJson.success){
+                                            //解析参数
+                                            saas.util.BaseUtil.showSuccessToast('删除成功');
+                                            grid.store.load();
+                                        }
+                                    })
+                                    .catch(function(e) {
+                                        saas.util.BaseUtil.showErrorToast('删除失败: ' + e.message);
+                                    });
+                                }
+                            });
+                        }
+                    }
+                },
+                columns: [{
+                    text: "id",
+                    hidden: true,
+                    dataIndex: "id",
+                    xtype: "numbercolumn",
+                },{
+                    text: "供应商id",
+                    hidden: true,
+                    dataIndex: "va_vendid",
+                    xtype: "numbercolumn",
+                }, {
+                    text: "供应商编号",
+                    width: 150.0,
+                    dataIndex: "va_vendcode"
+                },  {
+                    text: "供应商名称",
+                    width: 150.0,
+                    dataIndex: "va_vendname"
+                }, {
+                    text: '币别',
+                    dataIndex: 'va_currency',
+                    align: 'center',
+                    width: 65
+                }, {
+                    xtype:'datecolumn',
+                    text: '期初日期',
+                    format:'Y-m-d',
+                    dataIndex: 'va_begindate',
+                    width: 110
+                },{
+                    text: "期初应付",
+                    xtype: 'numbercolumn',
+                    dataIndex: "va_beginapamount",
+                    width: 110.0,
+                    renderer: function(v, m, r) {
+                        return saas.util.BaseUtil.numberFormat(v, 2, false);
+                    }
+                },{
+                    text: "期初预付",
+                    xtype: 'numbercolumn',
+                    dataIndex: "va_beginprepayamount",
+                    width: 110.0,
+                    renderer: function(v, m, r) {
+                        return saas.util.BaseUtil.numberFormat(v, 2, false);
+                    }
+                },{
+                    hidden:true,
+                    text: "应付金额",
+                    xtype: 'numbercolumn',
+                    dataIndex: "va_payamount",
+                    width: 110.0,
+                    renderer: function(v, m, r) {
+                        return saas.util.BaseUtil.numberFormat(v, 2, false);
+                    }
+                },{
+                    hidden:true,
+                    text: "预付金额",
+                    xtype: 'numbercolumn',
+                    dataIndex: "va_preamount",
+                    width: 110.0,
+                    renderer: function(v, m, r) {
+                        return saas.util.BaseUtil.numberFormat(v, 2, false);
+                    }
+                },{
+                    hidden:true,
+                    text: "应付余额",
+                    xtype: 'numbercolumn',
+                    dataIndex: "va_leftamount",
+                    width: 110.0,
+                    renderer: function(v, m, r) {
+                        return saas.util.BaseUtil.numberFormat(v, 2, false);
+                    }
+                }]
+            },
+        });
+        this.callParent(arguments);
+    },
+
+    refresh: function () {
+        this.items.items[0].store.load()
+    }
+});

+ 10 - 0
frontend/saas-web/app/view/document/vendapamount/BasePanelController.js

@@ -0,0 +1,10 @@
+Ext.define('saas.view.document.vendapamount.BasePanelController', {
+    extend: 'saas.view.core.base.BasePanelController',
+    alias: 'controller.document-vendapamount-basepanel',
+
+    init: function (form) {
+        var me = this;
+        this.control({
+        });
+    }
+});

+ 9 - 0
frontend/saas-web/app/view/document/vendapamount/BasePanelModel.js

@@ -0,0 +1,9 @@
+Ext.define('saas.view.document.vendapamount.BasePanelModel', {
+    extend: 'saas.view.core.base.BasePanelModel',
+    alias: 'viewmodel.document-vendapamount-basepanel',
+
+    data: {
+        enableClose: false,
+        configurable: true
+    }
+});

+ 117 - 0
frontend/saas-web/app/view/document/vendapamount/Window.js

@@ -0,0 +1,117 @@
+/**
+ * Created by zhouy on 2018/10/18.
+ */
+Ext.define('saas.view.document.vendapamount.Window', {
+    extend: 'saas.view.document.kind.ChildForm',
+    xtype: 'document-vendapamount-window',
+    dataKind:'vendapamount',//类型标识
+    belong:{
+        columns: [{
+            dataIndex: 'va_vendid'
+        },{
+            dataIndex: 'va_vendcode'
+        },{
+            dataIndex: 'va_vendname'
+        },{
+            dataIndex: 'va_currency'
+        },{
+            dataIndex: 'va_beginapamount'
+        },{
+            dataIndex: 'va_beginprepayamount'
+        },{
+            dataIndex: 'va_begindate'
+        },{
+            dataIndex: 'va_payamount'
+        },{
+            dataIndex: 'va_preamount'
+        },{
+            dataIndex: 'va_leftamount'
+        }],
+        keyField:'id',
+        reqUrl:'/api/document/vendapamount/save'
+    },
+    etc:{
+        vendapamount:{
+            items:[{
+                xtype:'hidden',
+                name:'id'
+            },{
+                xtype:'hidden',
+                name:'va_vendid'
+            },{
+                xtype:'hidden',
+                name:'va_begindate'
+            },{
+                defaultValue:0,
+                xtype:'hidden',
+                name:'va_payamount'
+            },{
+                defaultValue:0,
+                xtype:'hidden',
+                name:'va_preamount'
+            },{
+                defaultValue:0,
+                xtype:'hidden',
+                name:'va_leftamount'
+            },{
+                xtype:'vendorDbfindTrigger',
+                name:'va_vendcode',
+                allowBlank:false,
+                readOnly:true,
+                editable:false,
+                fieldLabel:'供应商编号',
+                maxLength: 20,
+                dbfinds:[{
+                    from:'id',to:'va_vendid',ignore:true
+                },{
+                    from:'ve_name',to:'va_vendname'
+                },{
+                    from:'ve_code',to:'va_vendcode'
+                }]
+            },{
+                xtype:'textfield',
+                readOnly:true,
+                editable:false,
+                name:'va_vendname',
+                allowBlank:false,
+                fieldLabel:'供应商名称',
+                maxLength: 20
+            },{
+                readOnly:true,
+                editable:false,
+                xtype:'currencyDbfindTrigger',
+                name:'va_currency',
+                allowBlank:false,
+                fieldLabel:'币别',
+                maxLength: 20,
+                dbfinds:[{
+                    from:'cr_name',to:'va_currency'
+                }]
+            },{
+                xtype:'numberfield',
+                hideTrigger:true,
+                name:'va_beginapamount',
+                allowBlank:true,
+                fieldLabel:'期初应付(元)',
+                maxLength: 20,
+                minValue:0,
+                maxValue:999999999999999999999,
+                defaultValue: 0,
+                decimalPrecision: 2,
+                beforeLabelTextTpl:""
+            },{
+                beforeLabelTextTpl:"",
+                xtype:'numberfield',
+                hideTrigger:true,
+                name:'va_beginprepayamount',
+                allowBlank:true,
+                fieldLabel:'期初预付(元)',
+                maxLength: 20,
+                minValue:0,
+                maxValue:999999999999999999999,
+                defaultValue: 0,
+                decimalPrecision: 2,
+            }]
+        }
+    }
+});

+ 10 - 2
frontend/saas-web/app/view/document/vendor/BasePanel.js

@@ -95,10 +95,10 @@ Ext.define('saas.view.document.vendor.BasePanel', {
                     dataIndex: "ve_type",
                     width: 100.0
                 }, {
-                    text: '币别',
+                    text: '默认币别',
                     dataIndex: 've_currency',
                     align: 'center',
-                    width: 65
+                    width: 90
                 }, {
                     text: "税率(%)",
                     xtype: 'numbercolumn',
@@ -107,6 +107,14 @@ Ext.define('saas.view.document.vendor.BasePanel', {
                     renderer: function(v, m, r) {
                         return saas.util.BaseUtil.numberFormat(v, 2, false);
                     }
+                },{
+                    text: "应付余额(元)",
+                    xtype: 'numbercolumn',
+                    dataIndex: "ve_leftamount",
+                    width: 110.0,
+                    renderer: function(v, m, r) {
+                        return saas.util.BaseUtil.numberFormat(v, 3, false);
+                    }
                 }, {
                     text: "结算天数",
                     xtype: 'numbercolumn',

+ 16 - 38
frontend/saas-web/app/view/document/vendor/FormPanel.js

@@ -129,18 +129,10 @@ Ext.define('saas.view.document.vendor.FormPanel', {
                 allowBlank: true,
                 hidden: true,
                 columnWidth: 0
-            }, {
-                xtype: "datefield",
-                name: "ve_begindate",
-                format: 'Y-m-d',
-                fieldLabel: "期初日期",
-                allowBlank: true,
-                columnWidth: 0.25,
-                group: '交易信息',
             }, {
                 xtype: 'currencyDbfindTrigger',
                 name: "ve_currency",
-                fieldLabel: '币别',
+                fieldLabel: '默认币别',
                 allowBlank: false,
                 columnWidth: 0.25,
                 defaultValue:  this.getViewModel().get('defaultCurrency') ,
@@ -155,34 +147,6 @@ Ext.define('saas.view.document.vendor.FormPanel', {
                 minValue: 0,
                 maxValue: 100,
                 group: '交易信息',
-            }, {
-                xtype: "numberfield",
-                hideTrigger: true,
-                name: "ve_beginapamount",
-                fieldLabel: "期初应付(元)",
-                allowBlank: true,
-                columnWidth: 0.25,
-                decimalPrecision: 2,
-                thousandSeparator: ',',
-                minValue: 0,
-                group: '交易信息',
-                renderer: function(v, m, r) {
-                    return saas.util.BaseUtil.numberFormat(v, 2, true);
-                },
-            }, {
-                xtype: "numberfield",
-                hideTrigger: true,
-                name: "ve_beginprepayamount",
-                fieldLabel: "期初预付(元)",
-                allowBlank: true,
-                columnWidth: 0.25,
-                decimalPrecision: 2,
-                thousandSeparator: ',',
-                minValue: 0,
-                group: '交易信息',
-                renderer: function(v, m, r) {
-                    return saas.util.BaseUtil.numberFormat(v, 2, true);
-                },
             }, {
                 xtype: "numberfield",
                 hideTrigger: true,
@@ -244,6 +208,20 @@ Ext.define('saas.view.document.vendor.FormPanel', {
                 name: "ve_buyerid",
                 fieldLabel: "采购员ID",
                 defaultValue: saas.util.BaseUtil.getCurrentUser().id
+            },{
+                xtype: "numberfield",
+                hideTrigger: true,
+                name: "ve_leftamount",
+                fieldLabel: "应付余额(元)",
+                readOnly:true,
+                editable:false,
+                allowBlank: true,
+                columnWidth: 0.25,
+                decimalPrecision: 3,
+                thousandSeparator: ',',
+                renderer: function(v, m, r) {
+                    return saas.util.BaseUtil.numberFormat(v, 3, true);
+                },
             }, {
                 xtype: "textfield",
                 name: "ve_address",
@@ -254,7 +232,7 @@ Ext.define('saas.view.document.vendor.FormPanel', {
                 fieldLabel: "备注",
                 xtype: 'textfield',
                 name: "ve_remark",
-                columnWidth: 1
+                columnWidth: 0.5
             }, {
                 xtype: "detailGridField",
                 name: 'detailGridField',

+ 75 - 0
frontend/saas-web/app/view/money/payBalance/FormPanel.js

@@ -53,6 +53,43 @@ Ext.define('saas.view.money.payBalance.FormPanel', {
                 columnWidth: 0.5,
                 listeners: {
                     change: 'clearDetails'
+                },
+                aftertrigger:function(f,record){
+                    let form = f.ownerCt
+                    let vendName = f.value
+                    let currency = form.down('[xtype=condbfindtrigger]').items.items[0].value
+                    if(vendName&&vendName!=''&&currency&&currency!=''&&record.get('ve_code')&&record.get('ve_code')!=''){
+                        Ext.Ajax.request({
+                            url: '/api/document/vendapamount/getVendApByVendCodeAndCurrency',
+                            params:{
+                                vendCode:record.get('ve_code'),
+                                currency:currency
+                            },
+                            method: 'post',
+                            headers: {
+                                'Access-Control-Allow-Origin': '*',
+                                'Authorization':  saas.util.State.get('session').token,
+                                "Content-Type": 'application/x-www-form-urlencoded;charset=UTF-8'
+                            },
+                            success: function (response, opts) {
+                                var res = Ext.decode(response.responseText);
+                                if(res.success&&res.data){
+                                    let va_leftamount = res.data.va_leftamount
+                                    form.down('[name=ve_leftamount]').setValue(va_leftamount)
+                                }else{
+                                    //清除总欠款
+                                    form.down('[name=ve_leftamount]').setValue(0)
+                                }
+                            },
+                            failure: function (response, opts) {
+                                var res = Ext.decode(response.responseText);
+                                saas.util.BaseUtil.showErrorToast('查询总欠款失败: ' + res.message);
+                            }
+                        });
+                    }else{
+                        //清除总欠款
+                        form.down('[name=ve_leftamount]').setValue(0)
+                    }
                 }
             }, {
                 xtype: 'condbfindtrigger',
@@ -67,6 +104,44 @@ Ext.define('saas.view.money.payBalance.FormPanel', {
                 listeners: {
                     change: 'clearDetails'
                 },
+                mainFieldConfig:{
+                    aftertrigger:function(f,record){
+                        let form = f.ownerCt.ownerCt
+                        let currency = f.value
+                        let vendCode = form.down('[name=pb_vendcode]').value
+                        if(vendCode&&vendCode!=''&&currency&&currency!=''){
+                            Ext.Ajax.request({
+                                url: '/api/document/vendapamount/getVendApByVendCodeAndCurrency',
+                                params:{
+                                    vendCode:vendCode,
+                                    currency:currency
+                                },
+                                method: 'post',
+                                headers: {
+                                    'Access-Control-Allow-Origin': '*',
+                                    'Authorization':  saas.util.State.get('session').token,
+                                    "Content-Type": 'application/x-www-form-urlencoded;charset=UTF-8'
+                                },
+                                success: function (response, opts) {
+                                    var res = Ext.decode(response.responseText);
+                                    if(res.success&&res.data){
+                                        let va_leftamount = res.data.va_leftamount
+                                        form.down('[name=ve_leftamount]').setValue(va_leftamount)
+                                    }else{
+                                        form.down('[name=ve_leftamount]').setValue(0)
+                                    }
+                                },
+                                failure: function (response, opts) {
+                                    var res = Ext.decode(response.responseText);
+                                    saas.util.BaseUtil.showErrorToast('查询总欠款失败: ' + res.message);
+                                }
+                            });
+                        }else{
+                            //清除总欠款
+                            form.down('[name=ve_leftamount]').setValue(0)
+                        }
+                    }
+                },
                 supFieldConfig: {
                     xtype: 'numberfield',
                     readOnly: false,

+ 1 - 5
frontend/saas-web/app/view/money/payBalance/FormPanelController.js

@@ -15,9 +15,6 @@ Ext.define('saas.view.money.payBalance.FormPanelController', {
                         }, {
                             from: 've_name',
                             to: 'pb_vendname'
-                        },{
-                            from: 've_leftamount',
-                            to: 've_leftamount'
                         },{
                             from: 'id',
                             to: 'pb_vendid',
@@ -99,8 +96,7 @@ Ext.define('saas.view.money.payBalance.FormPanelController', {
                         return false;
                     }
                     Ext.apply(f, {
-                        defaultCondition: "sl_vendid = "+pb_vendid+" and sl_currency ='"+pb_currency+"' AND sl_custid = 0 AND (  sl_kind IN ( '采购验收单','采购验退单' ) OR ( sl_kind = '期初余额' AND sl_ym = (select min(pd_detno) from periodsdetail  where pd_status=0 and periodsdetail.companyid=subledger.companyid) ) "+
-                        ") and sl_namount<>0 "
+                        defaultCondition: "sl_vendid = "+pb_vendid+" and sl_currency ='"+pb_currency+"' AND sl_custid = 0 AND sl_kind IN ( '采购验收单','采购验退单', '期初余额' ) and ifnull(sl_preamount,0)=0 and sl_namount<>0 "
                     });
                 }
             },

+ 75 - 0
frontend/saas-web/app/view/money/recBalance/FormPanel.js

@@ -52,6 +52,43 @@ Ext.define('saas.view.money.recBalance.FormPanel', {
                 columnWidth: 0.5,
                 listeners: {
                     change: 'clearDetails'
+                },
+                aftertrigger:function(f,record){
+                    let form = f.ownerCt
+                    let custName = f.value
+                    let currency = form.down('[xtype=condbfindtrigger]').items.items[0].value
+                    if(custName&&custName!=''&&currency&&currency!=''&&record.get('cu_code')&&record.get('cu_code')!=''){
+                        Ext.Ajax.request({
+                            url: '/api/document/custaramount/getCustArByCustCodeAndCurrency',
+                            params:{
+                                custCode:record.get('cu_code'),
+                                currency:currency
+                            },
+                            method: 'post',
+                            headers: {
+                                'Access-Control-Allow-Origin': '*',
+                                'Authorization':  saas.util.State.get('session').token,
+                                "Content-Type": 'application/x-www-form-urlencoded;charset=UTF-8'
+                            },
+                            success: function (response, opts) {
+                                var res = Ext.decode(response.responseText);
+                                if(res.success&&res.data){
+                                    let ca_leftamount = res.data.ca_leftamount
+                                    form.down('[name=cu_leftamount]').setValue(ca_leftamount)
+                                }else{
+                                    //清除总欠款
+                                    form.down('[name=cu_leftamount]').setValue(0)
+                                }
+                            },
+                            failure: function (response, opts) {
+                                var res = Ext.decode(response.responseText);
+                                saas.util.BaseUtil.showErrorToast('查询总欠款失败: ' + res.message);
+                            }
+                        });
+                    }else{
+                        //清除总欠款
+                        form.down('[name=cu_leftamount]').setValue(0)
+                    }
                 }
             }, {
                 xtype: 'condbfindtrigger',
@@ -66,6 +103,44 @@ Ext.define('saas.view.money.recBalance.FormPanel', {
                 listeners: {
                     change: 'clearDetails'
                 },
+                mainFieldConfig:{
+                    aftertrigger:function(f,record){
+                        let form = f.ownerCt.ownerCt
+                        let currency = f.value
+                        let custCode = form.down('[name=rb_custcode]').value
+                        if(custCode&&custCode!=''&&currency&&currency!=''){
+                            Ext.Ajax.request({
+                                url: '/api/document/custaramount/getCustArByCustCodeAndCurrency',
+                                params:{
+                                    custCode:custCode,
+                                    currency:currency
+                                },
+                                method: 'post',
+                                headers: {
+                                    'Access-Control-Allow-Origin': '*',
+                                    'Authorization':  saas.util.State.get('session').token,
+                                    "Content-Type": 'application/x-www-form-urlencoded;charset=UTF-8'
+                                },
+                                success: function (response, opts) {
+                                    var res = Ext.decode(response.responseText);
+                                    if(res.success&&res.data){
+                                        let ca_leftamount = res.data.ca_leftamount
+                                        form.down('[name=cu_leftamount]').setValue(ca_leftamount)
+                                    }else{
+                                        form.down('[name=cu_leftamount]').setValue(0)
+                                    }
+                                },
+                                failure: function (response, opts) {
+                                    var res = Ext.decode(response.responseText);
+                                    saas.util.BaseUtil.showErrorToast('查询总欠款失败: ' + res.message);
+                                }
+                            });
+                        }else{
+                            //清除总欠款
+                            form.down('[name=cu_leftamount]').setValue(0)
+                        }
+                    }
+                },
                 supFieldConfig: {
                     xtype: 'numberfield',
                     readOnly: false,

+ 1 - 5
frontend/saas-web/app/view/money/recBalance/FormPanelController.js

@@ -16,8 +16,6 @@ Ext.define('saas.view.money.recBalance.FormPanelController', {
                             from:'cu_code', to:'rb_custcode'
                         },{
                             from:'cu_name', to:'rb_custname'
-                        },{
-                            from:'cu_leftamount', to:'cu_leftamount'
                         },{
                             from:'cu_currency',to:'rb_currency'
                         },{
@@ -26,7 +24,6 @@ Ext.define('saas.view.money.recBalance.FormPanelController', {
                     }) ;   
                 }
             },
-
             // 资金账户
             'dbfindtrigger[name=rd_bankname]':{
                 beforerender:function(f){
@@ -143,8 +140,7 @@ Ext.define('saas.view.money.recBalance.FormPanelController', {
                         return false;
                     }
                     Ext.apply(f, {
-                        defaultCondition: "sl_custid = "+rb_custid+" and sl_currency ='"+rb_currency+"' AND sl_custid <> 0 AND (  sl_kind IN ( '出货单', '销售退货单' ) OR ( sl_kind = '期初余额' AND sl_ym = (select min(pd_detno) from periodsdetail  where pd_status=0 and periodsdetail.companyid=subledger.companyid) ) "+
-                        ") and sl_namount<>0 "
+                        defaultCondition: "sl_custid = "+rb_custid+" and sl_currency ='"+rb_currency+"' AND sl_custid <> 0 AND  sl_kind IN ( '出货单', '销售退货单', '期初余额'  ) and ifnull(sl_preamount,0)=0 and sl_namount<>0 "
                     });
                 }
             },

+ 4 - 0
frontend/saas-web/app/view/money/report/AccountBalance.js

@@ -43,6 +43,10 @@ Ext.define('saas.view.money.report.AccountBalance', {
         text: '业务类型',
         dataIndex: 'kind',
         width: 100
+    },{
+        text: '币别',
+        dataIndex: 'currency',
+        width: 80,
     }, {
         text: '收入(元)',
         dataIndex: 'inamount',

+ 32 - 2
frontend/saas-web/app/view/money/report/CustomerCheck.js

@@ -155,9 +155,39 @@ Ext.define('saas.view.money.report.CustomerCheckCheck', {
             var format = '0,000.' + xr.join('');
             return Ext.util.Format.number(v, format);
         },
+        // summaryType: 'sum',
+        // summaryLabel: '价税合计(本位币)',
+        // summaryRenderer: function(v) {
+        //     return saas.util.BaseUtil.numberFormat(v, 2, true);
+        // }
+    },{
+        text: '币别',
+        dataIndex: 'pi_currency',
+        width: 80
+    },{
+        text: '汇率',
+        dataIndex: 'pi_rate',
+        exportFormat: 'Integer',
+        xtype: 'numbercolumn',
+        width: 100,
+        renderer: function(v) {
+            return saas.util.BaseUtil.numberFormat(v, 4, false);
+        }
+    },{
+        text: '价税合计(本位币)',
+        width: 140,
+        xtype: 'numbercolumn',
+        exportFormat: 'Amount',
+        dataIndex: 'pi_mytotal',
+        renderer : function(v, m, r) {
+            var arr = (v + '.').split('.');
+            var xr = (new Array(arr[1].length > 2 ? 2 : arr[1].length)).fill('0');
+            var format = '0,000.' + xr.join('');
+            return Ext.util.Format.number(v, format);
+        },
         summaryType: 'sum',
-        summaryLabel: '价税合计',
-        summaryRenderer: function(v) {
+        summaryLabel: '价税合计(本位币)',
+        summaryRenderer: function(v,m,r) {
             return saas.util.BaseUtil.numberFormat(v, 2, true);
         }
     }],

+ 4 - 0
frontend/saas-web/app/view/money/report/OtherIODetail.js

@@ -80,6 +80,10 @@ Ext.define('saas.view.money.report.OtherIODetail', {
         text: '资金账户',
         dataIndex: 'bl_bankname',
         width: 150
+    },{
+        text: '币别',
+        dataIndex: 'bk_currency',
+        width: 80,
     }, {
         text: '收入(元)',
         dataIndex: 'bl_income',

+ 35 - 5
frontend/saas-web/app/view/money/report/VendorCheck.js

@@ -153,14 +153,44 @@ Ext.define('saas.view.money.report.VendorCheck', {
         exportFormat: 'Amount',
         dataIndex: 'pd_ordertotal',
         width: 120,
-        summaryType: 'sum',
-        summaryLabel: '价税合计',
         renderer: function(v) {
-            return saas.util.BaseUtil.numberFormat(v, 2, true);
+            var arr = (v + '.').split('.');
+            var xr = (new Array(arr[1].length > 2 ? 2 : arr[1].length)).fill('0');
+            var format = '0,000.' + xr.join('');
+            return Ext.util.Format.number(v, format);
         },
-        summaryRenderer: function(v) {
-            return saas.util.BaseUtil.numberFormat(v, 2, true);
+        // summaryType: 'sum',
+        // summaryLabel: '价税合计(本位币)',
+        // summaryRenderer: function(v) {
+        //     return saas.util.BaseUtil.numberFormat(v, 2, true);
+        // }
+    },{
+        text: '币别',
+        dataIndex: 'pi_currency',
+        width: 80
+    },{
+        text: '汇率',
+        dataIndex: 'pi_rate',
+        exportFormat: 'Integer',
+        xtype: 'numbercolumn',
+        width: 100,
+        renderer: function(v) {
+            return saas.util.BaseUtil.numberFormat(v, 4, false);
         }
+    },{
+        text: '价税合计(本位币)',
+        width: 140,
+        xtype: 'numbercolumn',
+        exportFormat: 'Amount',
+        dataIndex: 'pi_mytotal',
+        renderer : function(v, m, r) {
+            var arr = (v + '.').split('.');
+            var xr = (new Array(arr[1].length > 2 ? 2 : arr[1].length)).fill('0');
+            var format = '0,000.' + xr.join('');
+            return Ext.util.Format.number(v, format);
+        },
+        summaryType: 'sum',
+        summaryLabel: '价税合计(本位币)'
     }],
 
     listeners: {

+ 21 - 37
frontend/saas-web/app/view/money/verification/FormPanel.js

@@ -556,9 +556,9 @@ Ext.define('saas.view.money.verification.FormPanel', {
                             from: 'cr_rate',
                             to: 'vc_rate'
                         }],
-                        // listeners: {
-                        //     change: 'clearDetails'
-                        // },
+                        listeners: {
+                            change: 'clearDetails'
+                        },
                         supFieldConfig: {
                             xtype: 'numberfield',
                             readOnly: false,
@@ -624,9 +624,9 @@ Ext.define('saas.view.money.verification.FormPanel', {
                             from: 'cr_rate',
                             to: 'vc_rate'
                         }],
-                        // listeners: {
-                        //     change: 'clearDetails'
-                        // },
+                        listeners: {
+                            change: 'clearDetails'
+                        },
                         supFieldConfig: {
                             xtype: 'numberfield',
                             readOnly: false,
@@ -720,9 +720,9 @@ Ext.define('saas.view.money.verification.FormPanel', {
                             from: 'cr_rate',
                             to: 'vc_rate'
                         }],
-                        // listeners: {
-                        //     change: 'clearDetails'
-                        // },
+                        listeners: {
+                            change: 'clearDetails'
+                        },
                         supFieldConfig: {
                             xtype: 'numberfield',
                             readOnly: false,
@@ -804,9 +804,9 @@ Ext.define('saas.view.money.verification.FormPanel', {
                             from: 'cr_rate',
                             to: 'vc_rate'
                         }],
-                        // listeners: {
-                        //     change: 'clearDetails'
-                        // },
+                        listeners: {
+                            change: 'clearDetails'
+                        },
                         supFieldConfig: {
                             xtype: 'numberfield',
                             readOnly: false,
@@ -928,52 +928,36 @@ Ext.define('saas.view.money.verification.FormPanel', {
                 defaultConditions: {
                     receipts_offset_receivable: ['ifnull(sl_currency,\'RMB\') = \'{vc_currency}\' and ifnull(sl_custid,0)={vc_custid} and ifnull(sl_preamount,0)<>0 and ifnull(sl_namount,0)<>0 ' +
                         'and sl_ym<=DATE_FORMAT(str_to_date(\'{vc_date}\', \'%Y-%m-%d\'),\'%Y%m\')' +
-                        ' and ((sl_kind=\'收款单\') or ' +
-                              '( sl_id =(select sl_id from subledger where ifnull(sl_custid,0)={vc_custid} and sl_kind=\'期初余额\' ' +
-                                            'and sl_ym>=(select min(pd_detno) from periodsdetail  where pd_status=0 and periodsdetail.companyid=subledger.companyid) order by sl_ym limit 1)))',
+                        ' and sl_kind in (\'收款单\',\'期初余额\')',
 
                         'ifnull(sl_currency,\'RMB\') = \'{vc_currency}\' and ifnull(sl_custid,0)={vc_custid} and ifnull(sl_preamount,0)=0 and ifnull(sl_namount,0)<>0 ' +
                         'and sl_ym<=DATE_FORMAT(str_to_date(\'{vc_date}\', \'%Y-%m-%d\'),\'%Y%m\')' +
-                        ' and (sl_kind in (\'出货单\',\'销售退货单\') or '+
-                        '( sl_id =(select sl_id from subledger where ifnull(sl_custid,0)={vc_custid} and sl_kind=\'期初余额\' ' +
-                        'and sl_ym>=(select min(pd_detno) from periodsdetail  where pd_status=0 and periodsdetail.companyid=subledger.companyid) order by sl_ym limit 1)))'
+                        ' and sl_kind in (\'出货单\',\'销售退货单\',\'期初余额\')'
                     ],
                     prepaid_offset_payable: ['ifnull(sl_currency,\'RMB\') = \'{vc_currency}\' and ifnull(sl_vendid,0)={vc_vendid} and ifnull(sl_preamount,0)<>0 and ifnull(sl_namount,0)<>0 ' +
                         'and sl_ym<=DATE_FORMAT(str_to_date(\'{vc_date}\', \'%Y-%m-%d\'),\'%Y%m\')' +
-                        ' and ((sl_kind=\'付款单\') or ' +
-                        '( sl_id =(select sl_id from subledger where ifnull(sl_vendid,0)={vc_vendid} and sl_kind=\'期初余额\'' +
-                        'and sl_ym>=(select min(pd_detno) from periodsdetail  where pd_status=0 and periodsdetail.companyid=subledger.companyid) order by sl_ym limit 1)))',
+                        ' and  sl_kind in(\'付款单\',\'期初余额\')',
 
 
-                        'ifnull(sl_vendid,0)={vc_vendid} and ifnull(sl_preamount,0)=0 and ifnull(sl_namount,0)<>0' +
+                        'ifnull(sl_currency,\'RMB\') = \'{vc_currency}\' and ifnull(sl_vendid,0)={vc_vendid} and ifnull(sl_preamount,0)=0 and ifnull(sl_namount,0)<>0' +
                         ' and sl_ym<=DATE_FORMAT(str_to_date(\'{vc_date}\', \'%Y-%m-%d\'),\'%Y%m\')' +
-                        ' and (sl_kind in (\'采购验收单\',\'采购验退单\') or ' +
-                        '( sl_id =(select sl_id from subledger where ifnull(sl_vendid,0)={vc_vendid} and sl_kind=\'期初余额\'' +
-                        ' and sl_ym>=(select min(pd_detno) from periodsdetail  where pd_status=0 and periodsdetail.companyid=subledger.companyid) order by sl_ym limit 1)))'
+                        ' and sl_kind in (\'采购验收单\',\'采购验退单\',\'期初余额\')'
                     ],
                     receivable_offset_payable: ['ifnull(sl_currency,\'RMB\') = \'{vc_currency}\' and ifnull(sl_custid,0)={vc_custid} and ifnull(sl_preamount,0)=0 and ifnull(sl_namount,0)<>0 ' +
                         ' and sl_ym<=DATE_FORMAT(str_to_date(\'{vc_date}\', \'%Y-%m-%d\'),\'%Y%m\')' +
-                        ' and ((sl_kind in (\'出货单\',\'销售退货单\')) or ' +
-                        '( sl_id =(select sl_id from subledger where ifnull(sl_custid,0)={vc_custid} and sl_kind=\'期初余额\' ' +
-                        'and sl_ym>=(select min(pd_detno) from periodsdetail  where pd_status=0 and periodsdetail.companyid=subledger.companyid) order by sl_ym limit 1)))',
+                        ' and sl_kind in (\'出货单\',\'销售退货单\',\'期初余额\')',
 
                         'ifnull(sl_currency,\'RMB\') = \'{vc_currency}\' and ifnull(sl_vendid,0)={vc_vendid} and ifnull(sl_preamount,0)=0 and ifnull(sl_namount,0)<>0 ' +
                         ' and sl_ym<=DATE_FORMAT(str_to_date(\'{vc_date}\', \'%Y-%m-%d\'),\'%Y%m\')' +
-                        ' and (sl_kind in (\'采购验收单\',\'采购验退单\') or ' +
-                        '( sl_id =(select sl_id from subledger where ifnull(sl_vendid,0)={vc_vendid} and sl_kind=\'期初余额\' ' +
-                        'and sl_ym>=(select min(pd_detno) from periodsdetail  where pd_status=0 and periodsdetail.companyid=subledger.companyid) order by sl_ym limit 1)))'
+                        ' and sl_kind in (\'采购验收单\',\'采购验退单\',\'期初余额\')'
                     ],
                     receivable_to_receivable: ['ifnull(sl_currency,\'RMB\') = \'{vc_currency}\' and ifnull(sl_custid,0)={vc_custid} and ifnull(sl_preamount,0)=0 and ifnull(sl_namount,0)<>0 ' +
                         ' and sl_ym<=DATE_FORMAT(str_to_date(\'{vc_date}\', \'%Y-%m-%d\'),\'%Y%m\')' +
-                        ' and ((sl_kind in (\'出货单\',\'销售退货单\')) or' +
-                        '( sl_id =(select sl_id from subledger where ifnull(sl_custid,0)={vc_custid} and sl_kind=\'期初余额\' ' +
-                        'and sl_ym>=(select min(pd_detno) from periodsdetail  where pd_status=0 and periodsdetail.companyid=subledger.companyid) order by sl_ym limit 1)))'
+                        ' and sl_kind in (\'出货单\',\'销售退货单\',\'期初余额\')'
                     ],
                     payable_to_payable: ['ifnull(sl_currency,\'RMB\') = \'{vc_currency}\' and ifnull(sl_vendid,0)={vc_vendid} and ifnull(sl_preamount,0)=0 and ifnull(sl_namount,0)<>0' +
                         ' and sl_ym<=DATE_FORMAT(str_to_date(\'{vc_date}\', \'%Y-%m-%d\'),\'%Y%m\')' +
-                        ' and (sl_kind in (\'采购验收单\',\'采购验退单\') or ' +
-                        '( sl_id =(select sl_id from subledger where ifnull(sl_vendid,0)={vc_vendid} and sl_kind=\'期初余额\' ' +
-                        ' and sl_ym>=(select min(pd_detno) from periodsdetail  where pd_status=0 and periodsdetail.companyid=subledger.companyid) order by sl_ym limit 1)))'
+                        ' and sl_kind in (\'采购验收单\',\'采购验退单\',\'期初余额\')'
                     ]
                 }
             },

+ 1 - 0
frontend/saas-web/app/view/purchase/b2b/reconciliation/FormPanelModel.js

@@ -17,6 +17,7 @@ Ext.define('saas.view.purchase.b2b.reconciliation.FormPanelModel', {
         showCopyBtn: false, // 显示复制按钮
         showAuditBtn: false, // 显示审核、反审核按钮
         showPrintBtn: false, // 显示打印按钮
+        showLogBtn: false, // 显示操作日志按钮
         configurable: false, // 显示界面设置按钮
 
         detailBindeFields: [], // 从表绑定列

+ 8 - 0
frontend/saas-web/app/view/purchase/purchase/FormPanel.js

@@ -289,6 +289,14 @@ Ext.define('saas.view.purchase.purchase.FormPanel', {
                     summaryRenderer: function (v, d, f, m) {
                         return saas.util.BaseUtil.numberFormat(v, 2, true);
                     }
+                },{
+                    text: '最新购价(元)',
+                    dataIndex: 'pd_lastprice',
+                    xtype: 'numbercolumn',
+                    width: 110,
+                    renderer: function(v, m, r) {
+                        return saas.util.BaseUtil.numberFormat(v, 4, true);
+                    }
                 }, {
                     text: "价税合计(元)",
                     xtype: 'numbercolumn',

+ 1 - 1
frontend/saas-web/app/view/purchase/purchase/FormPanelController.js

@@ -64,7 +64,7 @@ Ext.define('saas.view.purchase.purchase.FormPanelController', {
                         },{
                             from: 'pr_unit', to: 'pr_unit'
                         }, {
-                            from:'pr_purcprice',to:'pd_taxprice'
+                            from:'pr_purcprice',to:'pd_lastprice'
                         },{
                             from:'pr_zxbzs',to:'pr_zxbzs'
                         }],

+ 8 - 0
frontend/saas-web/app/view/purchase/purchase/QueryPanel.js

@@ -263,6 +263,14 @@ Ext.define('saas.view.purchase.purchase.QueryPanel', {
                         return saas.util.BaseUtil.numberFormat(v, 2, true);
                     }
                 }, {
+                    text: '最新购价(元)',
+                    dataIndex: 'pd_lastprice',
+                    xtype: 'numbercolumn',
+                    width: 110,
+                    renderer: function(v, m, r) {
+                        return saas.util.BaseUtil.numberFormat(v, 4, true);
+                    }
+                },{
                     text: '价税合计(元)',
                     dataIndex: 'pd_total',
                     xtype: 'numbercolumn',

+ 1 - 1
frontend/saas-web/app/view/sale/b2b/recformpanel/FormPanelController.js

@@ -78,7 +78,6 @@ Ext.define('saas.view.sale.b2b.recformpanel.FormPanelController', {
     check:function(url){
         var me = this;
         var view = me.getView();
-        view.setLoading(true);
 
         //判断数据是否合格
         var selected = view.down('[xtype=grid]').selModel.selected.items;
@@ -141,6 +140,7 @@ Ext.define('saas.view.sale.b2b.recformpanel.FormPanelController', {
             items:items
         }
         
+        view.setLoading(true);
         saas.util.BaseUtil.request({
             url: '/api/sale/b2b/apCheck/operation/save',
             params: JSON.stringify(params),

+ 1 - 0
frontend/saas-web/app/view/sale/b2b/recformpanel/FormPanelModel.js

@@ -17,6 +17,7 @@ Ext.define('saas.view.sale.b2b.recformpanel.FormPanelModel', {
         showCopyBtn: false, // 显示复制按钮
         showAuditBtn: false, // 显示审核、反审核按钮
         showPrintBtn: false, // 显示打印按钮
+        showLogBtn: false, // 显示操作日志按钮
         configurable: false, // 显示界面设置按钮
 
         detailBindeFields: [], // 从表绑定列

+ 8 - 0
frontend/saas-web/app/view/sale/sale/FormPanel.js

@@ -309,6 +309,14 @@ Ext.define('saas.view.sale.sale.FormPanel', {
                         return saas.util.BaseUtil.numberFormat(v, 2, true);
                     }
                 }, {
+                    text: '最新售价(元)',
+                    dataIndex: 'sd_lastprice',
+                    xtype: 'numbercolumn',
+                    width: 120,
+                    renderer: function(v, m, r) {
+                        return saas.util.BaseUtil.numberFormat(v, 4, true);
+                    }
+                },{
                     text: "价税合计(元)",
                     xtype: 'numbercolumn',
                     dataIndex: "sd_total",

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

@@ -63,7 +63,7 @@ Ext.define('saas.view.sale.sale.FormPanelController', {
                         dbfinds: [{
                             from: 'pr_code', to: 'sd_prodcode'
                         }, {
-                            from: 'pr_saleprice', to: 'sd_netprice'
+                            from: 'pr_saleprice', to: 'sd_lastprice'
                         }, {
                             from: 'pr_detail', to: 'pr_detail'
                         }, {

+ 8 - 0
frontend/saas-web/app/view/sale/sale/QueryPanel.js

@@ -255,6 +255,14 @@ Ext.define('saas.view.sale.sale.QueryPanel', {
                     renderer : function(v,g,r) {
                         return saas.util.BaseUtil.numberFormat(v, 2, true);
                     }
+                },{
+                    text: '最新售价(元)',
+                    dataIndex: 'sd_lastprice',
+                    xtype: 'numbercolumn',
+                    width: 110,
+                    renderer: function(v, m, r) {
+                        return saas.util.BaseUtil.numberFormat(v, 4, true);
+                    }
                 },{
                     text: '价税合计(元)',
                     dataIndex: 'sd_total',

+ 10 - 0
frontend/saas-web/resources/json/navigation.json

@@ -261,12 +261,22 @@
             "viewType": "document-vendor-basepanel",
             "addType":"document-vendor-formpanel",
             "leaf": true
+        }, {
+            "id":"vendapamount-list-formpanel",
+            "text": "供应商期初设置",
+            "viewType": "document-vendapamount-basepanel",
+            "leaf": true
         }, {
             "id":"customer-list-formpanel",
             "text": "客户资料",
             "viewType": "document-customer-basepanel",
             "addType":"document-customer-formpanel",
             "leaf": true
+        },{
+            "id":"custaramount-list-formpanel",
+            "text": "客户期初设置",
+            "viewType": "document-custaramount-basepanel",
+            "leaf": true
         }, {
             "b2b":true,
             "id": "document-uusetting",