Browse Source

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

hy 7 years ago
parent
commit
8d0cacfc8c
100 changed files with 2392 additions and 271 deletions
  1. 3 0
      applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/exception/BizExceptionCode.java
  2. 12 0
      applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/po/Operation.java
  3. 53 2
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/controller/HomePageController.java
  4. 4 0
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/mapper/HomePageMapper.java
  5. 11 0
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/HomePageService.java
  6. 32 5
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/impl/HomePageServiceImpl.java
  7. 36 16
      applications/commons/commons-server/src/main/resources/mapper/HomePageMapper.xml
  8. 14 0
      applications/document/document-api/src/main/java/com/usoftchina/saas/document/api/EmployeeApi.java
  9. 1 1
      applications/document/document-dto/src/main/java/com.usoftchina.saas.document.dto/ProductDTO.java
  10. 8 0
      applications/document/document-server/pom.xml
  11. 7 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/controller/EmployeeController.java
  12. 1 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/CustomerMapper.java
  13. 8 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/EmployeeMapper.java
  14. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/VendorMapper.java
  15. 3 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/EmployeeService.java
  16. 10 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/CustomerServiceImpl.java
  17. 31 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/EmployeeServiceImpl.java
  18. 11 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/VendorServiceImpl.java
  19. 7 0
      applications/document/document-server/src/main/resources/mapper/CustomerMapper.xml
  20. 17 0
      applications/document/document-server/src/main/resources/mapper/EmployeeMapper.xml
  21. 1 1
      applications/document/document-server/src/main/resources/mapper/ProductMapper.xml
  22. 6 0
      applications/document/document-server/src/main/resources/mapper/VendorMapper.xml
  23. 2 0
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/mapper/OthreceiptsdetailMapper.java
  24. 1 0
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/mapper/OthspendingsdetailMapper.java
  25. 4 0
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/mapper/PaybalanceMapper.java
  26. 1 0
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/mapper/PaybalancedetMapper.java
  27. 1 0
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/mapper/RecbalancedetMapper.java
  28. 14 0
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/mapper/StatsinfoMapper.java
  29. 20 0
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/Bankinformation.java
  30. 71 0
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/Statsinfo.java
  31. 27 4
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/FundtransferServiceImpl.java
  32. 33 4
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/OthreceiptsServiceImpl.java
  33. 34 4
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/OthspendingsServiceImpl.java
  34. 64 15
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/PaybalanceServiceImpl.java
  35. 60 9
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/RecbalanceServiceImpl.java
  36. 2 2
      applications/money/money-server/src/main/resources/mapper/OthreceiptsMapper.xml
  37. 4 0
      applications/money/money-server/src/main/resources/mapper/OthreceiptsdetailMapper.xml
  38. 4 0
      applications/money/money-server/src/main/resources/mapper/OthspendingsdetailMapper.xml
  39. 20 3
      applications/money/money-server/src/main/resources/mapper/PaybalanceMapper.xml
  40. 4 0
      applications/money/money-server/src/main/resources/mapper/PaybalancedetMapper.xml
  41. 9 1
      applications/money/money-server/src/main/resources/mapper/RecbalanceMapper.xml
  42. 3 0
      applications/money/money-server/src/main/resources/mapper/RecbalancedetMapper.xml
  43. 103 0
      applications/money/money-server/src/main/resources/mapper/StatsinfoMapper.xml
  44. 4 0
      applications/purchase/purchase-server/pom.xml
  45. 6 0
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/controller/PurchaseReportController.java
  46. 4 1
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/mapper/PurchaseReportMapper.java
  47. 151 0
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/po/report/PurchaseReportDetail.java
  48. 2 0
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/service/PurchaseReportService.java
  49. 10 1
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/service/impl/ProdInOutServiceImpl.java
  50. 12 3
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/service/impl/PurchaseReportServiceImpl.java
  51. 10 5
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/service/impl/PurchaseServiceImpl.java
  52. 4 2
      applications/purchase/purchase-server/src/main/resources/mapper/ProdIODetailMapper.xml
  53. 0 32
      applications/purchase/purchase-server/src/main/resources/mapper/PurchasePayMapper.xml
  54. 128 0
      applications/purchase/purchase-server/src/main/resources/mapper/PurchaseReportMapper.xml
  55. 1 2
      applications/storage/storage-server/src/main/java/com/usoftchina/saas/storage/mapper/MakeMapper.java
  56. 2 0
      applications/storage/storage-server/src/main/java/com/usoftchina/saas/storage/mapper/MakeMaterialMapper.java
  57. 59 36
      applications/storage/storage-server/src/main/java/com/usoftchina/saas/storage/service/impl/MakeServiceImpl.java
  58. 5 0
      applications/storage/storage-server/src/main/resources/mapper/MakematerialMapper.xml
  59. 4 2
      applications/storage/storage-server/src/main/resources/mapper/ProdIODetailMapper.xml
  60. 1 0
      base-servers/gateway-server/src/main/resources/application.yml
  61. 23 0
      base-servers/mail/mail-api/pom.xml
  62. 191 0
      base-servers/mail/mail-api/src/main/java/com/usoftchina/saas/mail/MailBuilder.java
  63. 33 0
      base-servers/mail/mail-api/src/main/java/com/usoftchina/saas/mail/api/MailApi.java
  64. 0 1
      base-servers/mail/mail-dto/pom.xml
  65. 0 11
      base-servers/mail/mail-dto/src/main/java/com/usoftchina/saas/mail/dto/MailDto.java
  66. 57 0
      base-servers/mail/mail-dto/src/main/java/com/usoftchina/saas/mail/dto/MailLogDTO.java
  67. 89 0
      base-servers/mail/mail-dto/src/main/java/com/usoftchina/saas/mail/dto/TemplateMailMessage.java
  68. 11 25
      base-servers/mail/mail-server/pom.xml
  69. 6 0
      base-servers/mail/mail-server/src/main/java/com/usoftchina/saas/mail/MailApplication.java
  70. 88 0
      base-servers/mail/mail-server/src/main/java/com/usoftchina/saas/mail/controller/MailController.java
  71. 26 0
      base-servers/mail/mail-server/src/main/java/com/usoftchina/saas/mail/mapper/MailLogMapper.java
  72. 40 0
      base-servers/mail/mail-server/src/main/java/com/usoftchina/saas/mail/mapper/MailTemplateMapper.java
  73. 110 0
      base-servers/mail/mail-server/src/main/java/com/usoftchina/saas/mail/po/MailLog.java
  74. 38 0
      base-servers/mail/mail-server/src/main/java/com/usoftchina/saas/mail/po/MailTemplate.java
  75. 29 0
      base-servers/mail/mail-server/src/main/java/com/usoftchina/saas/mail/service/MailLogService.java
  76. 42 0
      base-servers/mail/mail-server/src/main/java/com/usoftchina/saas/mail/service/MailTemplateService.java
  77. 39 0
      base-servers/mail/mail-server/src/main/java/com/usoftchina/saas/mail/service/impl/MailLogServiceImpl.java
  78. 38 0
      base-servers/mail/mail-server/src/main/java/com/usoftchina/saas/mail/service/impl/MailTemplateServiceImpl.java
  79. 85 0
      base-servers/mail/mail-server/src/main/resources/application.yml
  80. 12 0
      base-servers/mail/mail-server/src/main/resources/config/application-docker-dev.yml
  81. 10 0
      base-servers/mail/mail-server/src/main/resources/config/application-docker.yml
  82. 0 0
      base-servers/mail/mail-server/src/main/resources/i18n/messages_en_US.properties
  83. 0 0
      base-servers/mail/mail-server/src/main/resources/i18n/messages_zh_CN.properties
  84. 113 0
      base-servers/mail/mail-server/src/main/resources/logback-spring.xml
  85. 31 0
      base-servers/mail/mail-server/src/main/resources/mapper/MailLogMapper.xml
  86. 29 0
      base-servers/mail/mail-server/src/main/resources/mapper/MailTemplateMapper.xml
  87. 0 1
      base-servers/mail/pom.xml
  88. 1 1
      frontend/saas-portal-web/Dockerfile
  89. 5 2
      frontend/saas-portal-web/README.md
  90. 0 5
      frontend/saas-portal-web/config/dev.env.js
  91. 15 0
      frontend/saas-portal-web/config/env.js
  92. 0 5
      frontend/saas-portal-web/config/prod.env.js
  93. 4 1
      frontend/saas-portal-web/package.json
  94. 65 68
      frontend/saas-portal-web/src/css/main.css
  95. BIN
      frontend/saas-portal-web/src/img/assets/Group.png
  96. BIN
      frontend/saas-portal-web/src/img/assets/Group3x.png
  97. BIN
      frontend/saas-portal-web/src/img/assets/Group@2x.png
  98. BIN
      frontend/saas-portal-web/src/img/assets/Group@3x.png
  99. 0 0
      frontend/saas-portal-web/src/img/assets/back2x.png
  100. 0 0
      frontend/saas-portal-web/src/img/assets/beijing.png

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

@@ -37,6 +37,7 @@ public enum BizExceptionCode implements BaseExceptionCode {
     ILLEGAL_ID(79999, "id不正确"),
     PRODUCT_HAS_WAREHOUSE(79502, "存在物料默认仓库资料为该仓库资料,无法删除"),
     PRODUCTWH_HAS_WAREHOUSE(79503, "该仓库资料存在库存,无法删除"),
+    ACCOUNT_EXISTS(79503, "账号已存在"),
 
 
 
@@ -61,6 +62,8 @@ public enum BizExceptionCode implements BaseExceptionCode {
 
     RECALANCE_OUTNOWBALANCE(74003,"本次核销金额不能大于未核销金额"),
 
+    BANK_AMOUNT_NOTENOUGH(74004, "资金账号不足"),
+
 
 
     //库存

+ 12 - 0
applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/po/Operation.java

@@ -60,6 +60,18 @@ public enum Operation {
      * 反记账
      */
     UNENDPRODUCT("msg.unEndProduct", "msg.unEndProductSuccess"),
+
+
+    /**
+     * 转采购验收单
+     */
+    TURNPURCCHECKIN("msg.TurnPurcCheckin", "msg.TurnPurcCheckinSuccess"),
+
+    /**
+     * 转采购验退单
+     */
+    TURNPURCCHECKOUT("msg.TurnPurcCheckout", "msg.TurnPurcCheckoutSuccess"),
+
     /**
      * 转出货单
      */

+ 53 - 2
applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/controller/HomePageController.java

@@ -21,25 +21,76 @@ public class HomePageController {
     @Autowired
     private HomePageService homePageService;
 
-
+    /**
+    * @Description 实时数据
+    * @Param: [req]
+    * @return: com.usoftchina.saas.base.Result
+    * @Author: guq
+    * @Date: 2018/11/14
+    */
     @GetMapping("liveData")
     public Result liveData(ServletRequest req) {
         return homePageService.liveDate();
     }
 
+    /**
+    * @Description  采购数据
+    * @Param: [sixMonths]
+    * @return: com.usoftchina.saas.base.Result
+    * @Author: guq
+    * @Date: 2018/11/14
+    */
     @GetMapping("purchaseData")
     public Result purchaseData(Boolean sixMonths) {
         return homePageService.purchaseData(sixMonths);
     }
 
+    /**
+    * @Description 仓库数据
+    * @Param: [req]
+    * @return: com.usoftchina.saas.base.Result
+    * @Author: guq
+    * @Date: 2018/11/14
+    */
     @GetMapping("storageData")
     public Result storageData(ServletRequest req) {
         return homePageService.storageData();
     }
 
-
+    /**
+    * @Description 收入支出
+    * @Param: [req]
+    * @return: com.usoftchina.saas.base.Result
+    * @Author: guq
+    * @Date: 2018/11/14
+    */
     @RequestMapping("payAndRecData")
     public Result payAndRecData(ServletRequest req) {
         return homePageService.payAndRecData();
     }
+
+    /**
+    * @Description 销售饼图
+    * @Param: []
+    * @return: com.usoftchina.saas.base.Result
+    * @Author: guq
+    * @Date: 2018/11/14
+    */
+    @GetMapping("saleData")
+    public Result saleData() {
+        return homePageService.saleData();
+    }
+
+    /**
+     * @Description 销售趋势图折线图
+     * @Param: []
+     * @return: com.usoftchina.saas.base.Result
+     * @Author: guq
+     * @Date: 2018/11/14
+     */
+    @GetMapping("saleFutureData")
+    public Result saleFutureData() {
+        return homePageService.saleFutureData();
+    }
+
 }

+ 4 - 0
applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/mapper/HomePageMapper.java

@@ -13,4 +13,8 @@ public interface HomePageMapper {
     String getStorageData(Long componyId);
 
     String getPayAndRecData(Long companyId);
+
+    String getSaleData(Long componyId);
+
+    String getSaleFutureData(Long componyId);
 }

+ 11 - 0
applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/HomePageService.java

@@ -38,4 +38,15 @@ public interface HomePageService {
     * @Date: 2018/11/13
     */
     Result payAndRecData();
+
+    /**
+    * @Description 获取
+    * @Param: []
+    * @return: com.usoftchina.saas.base.Result
+    * @Author: guq
+    * @Date: 2018/11/14
+    */
+    Result saleData();
+
+    Result saleFutureData();
 }

+ 32 - 5
applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/impl/HomePageServiceImpl.java

@@ -1,7 +1,7 @@
 package com.usoftchina.saas.commons.service.impl;
 
 import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.JSONArray;
 import com.usoftchina.saas.base.Result;
 import com.usoftchina.saas.commons.mapper.HomePageMapper;
 import com.usoftchina.saas.commons.service.HomePageService;
@@ -43,25 +43,39 @@ public class HomePageServiceImpl implements HomePageService{
         Object json = null;
         if (null != sixMonths && sixMonths) {
             res = homePageMapper.getPurchaseDataInSixMonth(componyId);
-            json = parseJson(res);
+            json = parseJsonArray(res);
             return Result.success(json);
         }
         res = homePageMapper.getPurchaseDataNow(componyId);
-        json = parseJson(res);
+        json = parseJsonArray(res);
         return Result.success(json);
     }
 
     @Override
     public Result storageData() {
         Long componyId = BaseContextHolder.getCompanyId();
-        Object json = parseJson(homePageMapper.getStorageData(componyId));
+        Object json = parseJsonArray(homePageMapper.getStorageData(componyId));
         return Result.success(json);
     }
 
     @Override
     public Result payAndRecData() {
         Long componyId = BaseContextHolder.getCompanyId();
-        Object json = parseJson(homePageMapper.getPayAndRecData(componyId));
+        Object json = parseJsonArray(homePageMapper.getPayAndRecData(componyId));
+        return Result.success(json);
+    }
+
+    @Override
+    public Result saleData() {
+        Long componyId = BaseContextHolder.getCompanyId();
+        Object json = parseJsonArray(homePageMapper.getSaleData(componyId));
+        return Result.success(json);
+    }
+
+    @Override
+    public Result saleFutureData() {
+        Long componyId = BaseContextHolder.getCompanyId();
+        Object json = parseJsonArray(homePageMapper.getSaleFutureData(componyId));
         return Result.success(json);
     }
 
@@ -77,4 +91,17 @@ public class HomePageServiceImpl implements HomePageService{
         }
         return null;
     }
+
+    private Object parseJsonArray(String text) {
+        Object array = null;
+        if (null != text) {
+            try {
+                array = JSONArray.parse(text);
+            }catch (Exception e) {
+                e.printStackTrace();
+            }
+            return array;
+        }
+        return null;
+    }
 }

+ 36 - 16
applications/commons/commons-server/src/main/resources/mapper/HomePageMapper.xml

@@ -11,52 +11,72 @@
     </select>
 
     <select id="getPurchaseDataNow" parameterType="long" resultType="string">
-        select concat('{',GROUP_CONCAT(concat('"',si_vendname,'":',IFNULL(si_amount,0))),'}') from statsinfo
+        select concat('[',GROUP_CONCAT(concat('{"x":"',si_vendname,'","y":',IFNULL(round(si_amount/10000,2),0),'}')),']')  from statsinfo
         where companyid=#{componyId} and si_yearmonth=DATE_FORMAT(now(),'%Y%m') and si_type='PURC' ORDER BY si_amount desc
     </select>
 
     <select id="getPurchaseDataInSixMonth" parameterType="long" resultType="string">
-    select concat('{',d1,',',d2,',',d3,',',d4,',',d5,',',d6,'}') from (
-(select concat('"',DATE_FORMAT(now(),'%Y%m'),'":',ifnull(ROUND(sum((ifnull(si_amount,0))),2),'0')) d1 from   statsinfo where companyid=#{componyId} and si_yearmonth=DATE_FORMAT(now(),'%Y%m') and si_type='PURC' ORDER BY si_amount desc) data_1,
+    select concat('[',d1,',',d2,',',d3,',',d4,',',d5,',',d6,']') from (
+(select concat('{"x":',DATE_FORMAT(now(),'%Y%m'),',"y":',ifnull(ROUND(sum((ifnull(si_amount/10000,0))),2),'0'),'}') d1 from   statsinfo where companyid=#{componyId} and si_yearmonth=DATE_FORMAT(now(),'%Y%m') and si_type='PURC' ORDER BY si_amount desc) data_1,
 
-(select concat('"',DATE_FORMAT(date_sub(now(),interval 1 MONTH),'%Y%m'),'":',ifnull(ROUND(sum((ifnull(si_amount,0))),2),'0')) d2 from  statsinfo where companyid=#{componyId} and si_yearmonth=DATE_FORMAT(date_sub(now(),interval 1 MONTH),'%Y%m') and si_type='PURC' ORDER BY si_amount desc)data_2,
+(select concat('{"x":',DATE_FORMAT(date_sub(now(),interval 1 MONTH),'%Y%m'),',"y":',ifnull(ROUND(sum((ifnull(si_amount/10000,0))),2),'0'),'}') d2 from  statsinfo where companyid=#{componyId} and si_yearmonth=DATE_FORMAT(date_sub(now(),interval 1 MONTH),'%Y%m') and si_type='PURC' ORDER BY si_amount desc)data_2,
 
 
-(select concat('"',DATE_FORMAT(date_sub(now(),interval 2 MONTH),'%Y%m'),'":',ifnull(ROUND(sum((ifnull(si_amount,0))),2),'0')) d3 from  statsinfo where companyid=#{componyId} and si_yearmonth=DATE_FORMAT(date_sub(now(),interval 2 MONTH),'%Y%m') and si_type='PURC' ORDER BY si_amount desc)data_3,
+(select concat('{"x":',DATE_FORMAT(date_sub(now(),interval 2 MONTH),'%Y%m'),',"y":',ifnull(ROUND(sum((ifnull(si_amount/10000,0))),2),'0'),'}') d3 from  statsinfo where companyid=#{componyId} and si_yearmonth=DATE_FORMAT(date_sub(now(),interval 2 MONTH),'%Y%m') and si_type='PURC' ORDER BY si_amount desc)data_3,
 
 
-(select concat('"',DATE_FORMAT(date_sub(now(),interval 3 MONTH),'%Y%m'),'":',ifnull(ROUND(sum((ifnull(si_amount,0))),2),'0')) d4 from  statsinfo where companyid=#{componyId} and si_yearmonth=DATE_FORMAT(date_sub(now(),interval 3 MONTH),'%Y%m') and si_type='PURC' ORDER BY si_amount desc) data_4,
+(select concat('{"x":',DATE_FORMAT(date_sub(now(),interval 3 MONTH),'%Y%m'),',"y":',ifnull(ROUND(sum((ifnull(si_amount/10000,0))),2),'0'),'}') d4 from  statsinfo where companyid=#{componyId} and si_yearmonth=DATE_FORMAT(date_sub(now(),interval 3 MONTH),'%Y%m') and si_type='PURC' ORDER BY si_amount desc) data_4,
 
 
-(select concat('"',DATE_FORMAT(date_sub(now(),interval 4 MONTH),'%Y%m'),'":',ifnull(ROUND(sum((ifnull(si_amount,0))),2),'0')) d5 from  statsinfo where companyid=#{componyId} and si_yearmonth=DATE_FORMAT(date_sub(now(),interval 4 MONTH),'%Y%m') and si_type='PURC' ORDER BY si_amount desc)data_5,
+(select concat('{"x":',DATE_FORMAT(date_sub(now(),interval 4 MONTH),'%Y%m'),',"y":',ifnull(ROUND(sum((ifnull(si_amount/10000,0))),2),'0'),'}') d5 from  statsinfo where companyid=#{componyId} and si_yearmonth=DATE_FORMAT(date_sub(now(),interval 4 MONTH),'%Y%m') and si_type='PURC' ORDER BY si_amount desc)data_5,
 
-(select concat('"',DATE_FORMAT(date_sub(now(),interval 5 MONTH),'%Y%m'),'":',ifnull(ROUND(sum((ifnull(si_amount,0))),2),'0')) d6 from  statsinfo where companyid=#{componyId} and si_yearmonth=DATE_FORMAT(date_sub(now(),interval 5 MONTH),'%Y%m') and si_type='PURC' ORDER BY si_amount desc)data_6)
+(select concat('{"x":',DATE_FORMAT(date_sub(now(),interval 5 MONTH),'%Y%m'),',"y":',ifnull(ROUND(sum((ifnull(si_amount/10000,0))),2),'0'),'}') d6 from  statsinfo where companyid=#{componyId} and si_yearmonth=DATE_FORMAT(date_sub(now(),interval 5 MONTH),'%Y%m') and si_type='PURC' ORDER BY si_amount desc)data_6)
  </select>
 
 
     <select id="getStorageData" parameterType="long" resultType="string">
-      select concat('{',d1,',',d2,',',d3,',',d4,',',d5,',',d6,'}') from (
+      select concat('[',d1,',',d2,',',d3,',',d4,',',d5,',',d6,']') from (
 
-(select concat('"',DATE_FORMAT(now(),'%Y%m'),'":',ifnull(ROUND(sum((ifnull(si_amount,0))),2),'0')) d1 from   statsinfo where companyid=#{componyId} and si_yearmonth=DATE_FORMAT(now(),'%Y%m') and si_type='STOCK' ORDER BY si_amount desc) data_1,
+(select concat('{"x":',DATE_FORMAT(now(),'%Y%m'),',"y":',ifnull(ROUND(sum((ifnull(si_amount/10000,0))),2),'0'),'}') d1 from   statsinfo where companyid=#{componyId} and si_yearmonth=DATE_FORMAT(now(),'%Y%m') and si_type='STOCK' ORDER BY si_amount desc) data_1,
 
-(select concat('"',DATE_FORMAT(date_sub(now(),interval 1 MONTH),'%Y%m'),'":',ifnull(ROUND(sum((ifnull(si_amount,0))),2),'0')) d2 from  statsinfo where companyid=#{componyId} and si_yearmonth=DATE_FORMAT(date_sub(now(),interval 1 MONTH),'%Y%m') and si_type='STOCK' ORDER BY si_amount desc)data_2,
+(select concat('{"x":',DATE_FORMAT(date_sub(now(),interval 1 MONTH),'%Y%m'),',"y":',ifnull(ROUND(sum((ifnull(si_amount/10000,0))),2),'0'),'}') d2 from  statsinfo where companyid=#{componyId} and si_yearmonth=DATE_FORMAT(date_sub(now(),interval 1 MONTH),'%Y%m') and si_type='STOCK' ORDER BY si_amount desc)data_2,
 
 
-(select concat('"',DATE_FORMAT(date_sub(now(),interval 2 MONTH),'%Y%m'),'":',ifnull(ROUND(sum((ifnull(si_amount,0))),2),'0')) d3 from  statsinfo where companyid=#{componyId} and si_yearmonth=DATE_FORMAT(date_sub(now(),interval 2 MONTH),'%Y%m') and si_type='STOCK' ORDER BY si_amount desc)data_3,
+(select concat('{"x":',DATE_FORMAT(date_sub(now(),interval 2 MONTH),'%Y%m'),',"y":',ifnull(ROUND(sum((ifnull(si_amount/10000,0))),2),'0'),'}') d3 from  statsinfo where companyid=#{componyId} and si_yearmonth=DATE_FORMAT(date_sub(now(),interval 2 MONTH),'%Y%m') and si_type='STOCK' ORDER BY si_amount desc)data_3,
 
 
-(select concat('"',DATE_FORMAT(date_sub(now(),interval 3 MONTH),'%Y%m'),'":',ifnull(ROUND(sum((ifnull(si_amount,0))),2),'0')) d4 from  statsinfo where companyid=#{componyId} and si_yearmonth=DATE_FORMAT(date_sub(now(),interval 3 MONTH),'%Y%m') and si_type='STOCK' ORDER BY si_amount desc) data_4,
+(select concat('{"x":',DATE_FORMAT(date_sub(now(),interval 3 MONTH),'%Y%m'),',"y":',ifnull(ROUND(sum((ifnull(si_amount/10000,0))),2),'0'),'}') d4 from  statsinfo where companyid=#{componyId} and si_yearmonth=DATE_FORMAT(date_sub(now(),interval 3 MONTH),'%Y%m') and si_type='STOCK' ORDER BY si_amount desc) data_4,
 
 
-(select concat('"',DATE_FORMAT(date_sub(now(),interval 4 MONTH),'%Y%m'),'":',ifnull(ROUND(sum((ifnull(si_amount,0))),2),'0')) d5 from  statsinfo where companyid=#{componyId} and si_yearmonth=DATE_FORMAT(date_sub(now(),interval 4 MONTH),'%Y%m') and si_type='STOCK' ORDER BY si_amount desc)data_5,
+(select concat('{"x":',DATE_FORMAT(date_sub(now(),interval 4 MONTH),'%Y%m'),',"y":',ifnull(ROUND(sum((ifnull(si_amount/10000,0))),2),'0'),'}') d5 from  statsinfo where companyid=#{componyId} and si_yearmonth=DATE_FORMAT(date_sub(now(),interval 4 MONTH),'%Y%m') and si_type='STOCK' ORDER BY si_amount desc)data_5,
 
-(select concat('"',DATE_FORMAT(date_sub(now(),interval 5 MONTH),'%Y%m'),'":',ifnull(ROUND(sum((ifnull(si_amount,0))),2),'0')) d6 from  statsinfo where companyid=#{componyId} and si_yearmonth=DATE_FORMAT(date_sub(now(),interval 5 MONTH),'%Y%m') and si_type='STOCK' ORDER BY si_amount desc)data_6);
+(select concat('{"x":',DATE_FORMAT(date_sub(now(),interval 5 MONTH),'%Y%m'),',"y":',ifnull(ROUND(sum((ifnull(si_amount/10000,0))),2),'0'),'}') d6 from  statsinfo where companyid=#{componyId} and si_yearmonth=DATE_FORMAT(date_sub(now(),interval 5 MONTH),'%Y%m') and si_type='STOCK' ORDER BY si_amount desc)data_6);
     </select>
 
 
     <select id="getPayAndRecData" parameterType="long" resultType="string">
-     select concat('{"支出":',ifnull(si_amount_pay,'0'),',"收入":',ifnull(si_amount_rec,'0'),'}') from statsinfo where companyid=#{componyId} and si_yearmonth=DATE_FORMAT(now(),'%Y%m') and si_type='FUND'
+    select concat('[{"x":"收入","main":',ifnull(round(si_amount_rec/10000,2),'0'),',"other":',ifnull(round(si_amount_otherrec/10000,2),'0'),'},{"x":"支出","main":',ifnull(round(si_amount_pay/10000,2),'0'),',"other":',ifnull(round(si_amount_otherpay/10000,2),'0'),'}]') from statsinfo where companyid=#{componyId} and si_yearmonth=DATE_FORMAT(now(),'%Y%m') and si_type='FUND'
     </select>
 
+    <select id="getSaleData" parameterType="long" resultType="string">
+        select concat('[',GROUP_CONCAT(concat('{"x":"',si_custname,'","y":',IFNULL(si_amount,0),'}')),']')  from statsinfo
+        where companyid=#{componyId} and si_yearmonth=DATE_FORMAT(now(),'%Y%m') and si_type='SALE' ORDER BY si_amount desc
+    </select>
+
+    <select id="getSaleFutureData" parameterType="long" resultType="string">
+       	select concat('[',d1,',',d2,',',d3,',',d4,',',d5,',',d6,']') from (
+        (select concat('{"x":',DATE_FORMAT(now(),'%Y%m'),',"sale":',ifnull(ROUND(sum((ifnull(si_amount/10000,0))),2),'0'),',"saleback":',ifnull(ROUND(sum((ifnull(si_amount_rec/10000,0))),2),'0'),'}') d1 from   statsinfo where companyid=#{componyId} and si_yearmonth=DATE_FORMAT(now(),'%Y%m') and si_type='SALE' ORDER BY si_amount desc) data_1,
+
+        (select concat('{"x":',DATE_FORMAT(date_sub(now(),interval 1 MONTH),'%Y%m'),',"sale":',ifnull(ROUND(sum((ifnull(si_amount/10000,0))),2),'0'),',"saleback":',ifnull(ROUND(sum((ifnull(si_amount_rec/10000,0))),2),'0'),'}') d2 from  statsinfo where companyid=#{componyId} and si_yearmonth=DATE_FORMAT(date_sub(now(),interval 1 MONTH),'%Y%m') and si_type='SALERETURN' ORDER BY si_amount desc)data_2,
+
+
+        (select concat('{"x":',DATE_FORMAT(date_sub(now(),interval 2 MONTH),'%Y%m'),',"sale":',ifnull(ROUND(sum((ifnull(si_amount/10000,0))),2),'0'),',"saleback":',ifnull(ROUND(sum((ifnull(si_amount_rec/10000,0))),2),'0'),'}') d3 from  statsinfo where companyid=#{componyId} and si_yearmonth=DATE_FORMAT(date_sub(now(),interval 2 MONTH),'%Y%m') and si_type='SALERETURN' ORDER BY si_amount desc)data_3,
+
+        (select concat('{"x":',DATE_FORMAT(date_sub(now(),interval 3 MONTH),'%Y%m'),',"sale":',ifnull(ROUND(sum((ifnull(si_amount/10000,0))),2),'0'),',"saleback":',ifnull(ROUND(sum((ifnull(si_amount_rec/10000,0))),2),'0'),'}') d4 from  statsinfo where companyid=#{componyId} and si_yearmonth=DATE_FORMAT(date_sub(now(),interval 3 MONTH),'%Y%m') and si_type='SALERETURN' ORDER BY si_amount desc) data_4,
+
+
+        (select concat('{"x":',DATE_FORMAT(date_sub(now(),interval 4 MONTH),'%Y%m'),',"sale":',ifnull(ROUND(sum((ifnull(si_amount/10000,0))),2),'0'),',"saleback":',ifnull(ROUND(sum((ifnull(si_amount_rec/10000,0))),2),'0'),'}') d5 from  statsinfo where companyid=#{componyId} and si_yearmonth=DATE_FORMAT(date_sub(now(),interval 4 MONTH),'%Y%m') and si_type='SALERETURN' ORDER BY si_amount desc)data_5,
 
+        (select concat('{"x":',DATE_FORMAT(date_sub(now(),interval 5 MONTH),'%Y%m'),',"sale":',ifnull(ROUND(sum((ifnull(si_amount/10000,0))),2),'0'),',"saleback":',ifnull(ROUND(sum((ifnull(si_amount_rec/10000,0))),2),'0'),'}') d6 from  statsinfo where companyid=#{componyId} and si_yearmonth=DATE_FORMAT(date_sub(now(),interval 5 MONTH),'%Y%m') and si_type='SALERETURN' ORDER BY si_amount desc)data_6)
+       </select>
 </mapper>

+ 14 - 0
applications/document/document-api/src/main/java/com/usoftchina/saas/document/api/EmployeeApi.java

@@ -0,0 +1,14 @@
+package com.usoftchina.saas.document.api;
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+
+import java.util.Map;
+
+@FeignClient(name = "document-server")
+public interface EmployeeApi {
+
+    @GetMapping("/employee/getEmployeeByAccount")
+    public Map<String,Object> getEmployeeByAccount();
+
+}

+ 1 - 1
applications/document/document-dto/src/main/java/com.usoftchina.saas.document.dto/ProductDTO.java

@@ -40,7 +40,7 @@ public class ProductDTO implements Serializable {
     protected Date updateTime;
     protected String updaterName;
     //productonhand
-    private Long po_onhand;
+    private Double po_onhand;
 
 
 

+ 8 - 0
applications/document/document-server/pom.xml

@@ -71,6 +71,14 @@
             <groupId>com.usoftchina.saas</groupId>
             <artifactId>commons-api</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.usoftchina.saas</groupId>
+            <artifactId>account-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.usoftchina.saas</groupId>
+            <artifactId>account-dto</artifactId>
+        </dependency>
     </dependencies>
 
     <build>

+ 7 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/controller/EmployeeController.java

@@ -90,4 +90,11 @@ public class EmployeeController {
         return Result.success();
     }
 
+    @GetMapping("/getEmployeeByAccount")
+    public Map<String,Object> getEmployeeByAccount(){
+        return employeeService.getEmployeeByAccount();
+    }
+
+
+
 }

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

@@ -26,4 +26,5 @@ public interface CustomerMapper extends CommonBaseMapper<Customer> {
 
     int validNameAndCodeWhenUpdate(Customer record);
 
+    int validFinish(@Param("id") Long id,@Param("companyId") Long companyId);
 }

+ 8 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/EmployeeMapper.java

@@ -14,6 +14,8 @@ public interface EmployeeMapper extends CommonBaseMapper<Employee> {
 
     Employee selectByPrimaryKey(Long em_id);
 
+    Employee selectByMobile(String mobile);
+
     int updateByPrimaryKeySelective(Employee record);
 
     List<EmployeeDTO> selectEmployeeListByCondition(@Param("con") String con,@Param("companyId") Long companyId);
@@ -21,4 +23,10 @@ public interface EmployeeMapper extends CommonBaseMapper<Employee> {
     Integer validateCodeWhenInsert(@Param("code") String code, @Param("companyId") Long companyId);
 
     Integer validateCodeWhenUpdate(@Param("code") String code, @Param("id") Long id, @Param("companyId") Long company);
+
+    Integer validatePhoneWhenInsert(@Param("phone") String phone, @Param("companyId") Long companyId);
+
+    Integer validatePhoneWhenUpdate(@Param("phone") String phone, @Param("id") Long id, @Param("companyId") Long company);
+
+
 }

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

@@ -26,4 +26,6 @@ public interface VendorMapper extends CommonBaseMapper<Vendor> {
     int getCountByCode(@Param("code") String code, @Param("companyId") Long companyId);
 
     int getCountByName(@Param("name") String name, @Param("companyId") Long companyId);
+
+    int validFinish(@Param("id") Long id,@Param("companyId") Long companyId);
 }

+ 3 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/EmployeeService.java

@@ -10,6 +10,8 @@ import com.usoftchina.saas.document.entities.Employee;
 import com.usoftchina.saas.document.mapper.EmployeeMapper;
 import com.usoftchina.saas.page.PageRequest;
 
+import java.util.Map;
+
 /**
  * Created by zdw
  * 2018-10-23 15:26.
@@ -26,4 +28,5 @@ public interface EmployeeService extends CommonBaseService<EmployeeMapper, Emplo
 
     void batchDelete(BatchDealBaseDTO baseDTOs);
 
+    Map<String,Object> getEmployeeByAccount();
 }

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

@@ -178,6 +178,16 @@ public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, C
             throw new BizException(500, "客户名称或编号重复");
         }
 
+        //检查期初日期是否已结转
+        count = getMapper().validFinish(cu_id,companyId);
+        if (count>0) {
+            Customer cutpl = getMapper().selectByPrimaryKey(cu_id);
+            //期初应收
+            customer.setCu_beginaramount(cutpl.getCu_beginaramount());
+            //期初预收
+            customer.setCu_beginprerecamount(cutpl.getCu_beginprerecamount());
+        }
+
         //更新操作
         getMapper().updateByPrimaryKeySelective(customer);
         //添加从表传输对象

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

@@ -2,6 +2,8 @@ package com.usoftchina.saas.document.service.impl;
 
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import com.usoftchina.saas.account.api.AccountApi;
+import com.usoftchina.saas.account.dto.AccountDTO;
 import com.usoftchina.saas.base.service.CommonBaseServiceImpl;
 import com.usoftchina.saas.commons.api.MaxnumberService;
 import com.usoftchina.saas.commons.api.MessageLogService;
@@ -21,7 +23,9 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * Created by zdw
@@ -34,6 +38,8 @@ public class EmployeeServiceImpl extends CommonBaseServiceImpl<EmployeeMapper, E
     private MessageLogService messageLogService;
     @Autowired
     private MaxnumberService maxnumberService;
+    @Autowired
+    private AccountApi accountApi;
 
 
     @Override
@@ -64,6 +70,11 @@ public class EmployeeServiceImpl extends CommonBaseServiceImpl<EmployeeMapper, E
             employee.setCompanyId(BaseContextHolder.getCompanyId());
             employee.setCreatorId(BaseContextHolder.getUserId());
             employee.setCreateTime(new Date());
+            //检查电话号码
+            int count = getMapper().validatePhoneWhenInsert(employee.getEm_mobile(),BaseContextHolder.getCompanyId());
+            if (count>0) {
+                throw new BizException(500, "电话号码重复");
+            }
             getMapper().insertSelective(employee);
             docBaseDTO = generateMsgObj(employee.getId(), code);
             //记录LOG
@@ -71,6 +82,11 @@ public class EmployeeServiceImpl extends CommonBaseServiceImpl<EmployeeMapper, E
         }else{
             employee.setUpdaterId(BaseContextHolder.getUserId());
             employee.setUpdateTime(new Date());
+            //检查电话号码
+            int count = getMapper().validatePhoneWhenUpdate(employee.getEm_mobile(),employee.getId(),BaseContextHolder.getCompanyId());
+            if (count>0) {
+                throw new BizException(500, "电话号码重复");
+            }
             getMapper().updateByPrimaryKeySelective(employee);
             docBaseDTO = generateMsgObj(employee.getId(), employee.getEm_code());
             //记录LOG
@@ -91,6 +107,21 @@ public class EmployeeServiceImpl extends CommonBaseServiceImpl<EmployeeMapper, E
         }
     }
 
+    @Override
+    public Map<String,Object> getEmployeeByAccount() {
+        Map<String,Object> map = new HashMap();
+        AccountDTO accountDTO = accountApi.getAccountById(BaseContextHolder.getUserId()).getData();
+        Employee employee = getMapper().selectByMobile(accountDTO.getMobile());
+        if (employee!=null){
+            map.put("em_id",employee.getId());
+            map.put("em_name",employee.getEm_name());
+        }else {
+            map.put("em_id",accountDTO.getId());
+            map.put("em_name",accountDTO.getRealname());
+        }
+        return map;
+    }
+
     private List<EmployeeDTO> getList(ListReqDTO listReqDTO){
         Long companyId = BaseContextHolder.getCompanyId();
         String condition = listReqDTO.getFinalCondition();

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

@@ -138,6 +138,7 @@ public class VendorServiceImpl extends CommonBaseServiceImpl<VendorMapper, Vendo
             messageLogService.save(generateMsgObj(mainId, code));
         }else{
             code = main.getVe_code();
+            Long mainId = main.getId();
             Vendor oldVendor = getMapper().selectByPrimaryKey(main.getId());
             int count = getMapper().getCountByCode(code, companyId);
             if (!code.equals(oldVendor.getVe_code())){
@@ -152,6 +153,16 @@ public class VendorServiceImpl extends CommonBaseServiceImpl<VendorMapper, Vendo
                 }
             }
 
+            //检查期初日期是否已结转
+            count = getMapper().validFinish(mainId,companyId);
+            if (count>0) {
+                Vendor vendortpl = getMapper().selectByPrimaryKey(mainId);
+                //期初应收
+                main.setVe_beginapamount(vendortpl.getVe_beginapamount());
+                //期初预收
+                main.setVe_beginprepayamount(vendortpl.getVe_beginprepayamount());
+            }
+
             getMapper().updateByPrimaryKeySelective(main);
             if (items.size() > 0) {
                 List<Vendorcontact> updateItems = new ArrayList<Vendorcontact>();

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

@@ -386,4 +386,11 @@
     where cu_id = #{id,jdbcType=INTEGER}
   </select>
 
+  <select id="validFinish" parameterType="long" resultType="int">
+  select count(1) from periodsdetail where pd_status=99 and pd_detno=(select DATE_FORMAT(cu_begindate,'%Y%m') from customer where cu_id =#{id})
+  and companyId =#{companyId};
+  </select>
+
+
+
 </mapper>

+ 17 - 0
applications/document/document-server/src/main/resources/mapper/EmployeeMapper.xml

@@ -28,6 +28,16 @@
     from employee
     where em_id = #{em_id,jdbcType=INTEGER}
   </select>
+
+  <select id="selectByMobile" parameterType="string" resultMap="BaseResultMap">
+    select
+    <include refid="Base_Column_List" />
+    from employee
+    where em_mobile = #{mobile,jdbcType=INTEGER}
+  </select>
+
+
+
   <delete id="deleteByPrimaryKey" parameterType="long">
     delete from employee
     where em_id = #{em_id,jdbcType=INTEGER}
@@ -200,5 +210,12 @@
     select count(*) from Employee where em_code = #{code} and em_id != #{id} and companyId =#{companyId}
   </select>
 
+  <select id="validatePhoneWhenInsert" resultType="int">
+    select count(*) from Employee where em_mobile = #{phone} and companyId =#{companyId}
+  </select>
+  <select id="validatePhoneWhenUpdate" resultType="int" >
+    select count(*) from Employee where em_mobile = #{phone} and em_id != #{id} and companyId =#{companyId}
+  </select>
+
 
 </mapper>

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

@@ -45,7 +45,7 @@
         <result column="pr_whcode" property="pr_whcode" jdbcType="VARCHAR" />
         <result column="pr_whname" property="pr_whname" jdbcType="VARCHAR" />
         <!--productonhand-->
-        <result column="po_onhand" property="po_onhand" jdbcType="INTEGER" />
+        <result column="po_onhand" property="po_onhand" jdbcType="DOUBLE" />
         <!--productonhand-->
         <result column="pr_kind" property="pr_kind" jdbcType="VARCHAR" />
         <result column="pr_orispeccode" property="pr_orispeccode" jdbcType="VARCHAR" />

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

@@ -471,5 +471,11 @@
     <select id="getCountByName" resultType="int">
         SELECT COUNT(*) FROM VENDOR WHERE COMPANYID = #{companyId} AND VE_NAME=#{name}
     </select>
+
+    <select id="validFinish" parameterType="long" resultType="int">
+        select count(1) from periodsdetail where pd_status=99 and pd_detno=(select DATE_FORMAT(ve_begindate,'%Y%m') from vendor where ve_id =#{id})
+        and companyId =#{companyId};
+    </select>
+
 </mapper>
 

+ 2 - 0
applications/money/money-server/src/main/java/com/usoftchina/saas/money/mapper/OthreceiptsdetailMapper.java

@@ -17,4 +17,6 @@ public interface OthreceiptsdetailMapper {
     int updateByPrimaryKeySelective(Othreceiptsdetail record);
 
     int updateByPrimaryKey(Othreceiptsdetail record);
+
+    List<Integer> selectYm(Integer id);
 }

+ 1 - 0
applications/money/money-server/src/main/java/com/usoftchina/saas/money/mapper/OthspendingsdetailMapper.java

@@ -17,4 +17,5 @@ public interface OthspendingsdetailMapper {
     int updateByPrimaryKeySelective(Othspendingsdetail record);
 
     int updateByPrimaryKey(Othspendingsdetail record);
+    List<Integer> selectYm(Integer id);
 }

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

@@ -38,4 +38,8 @@ public interface PaybalanceMapper extends CommonBaseMapper<Paybalance> {
     Vendor selectVendorByPrimaryKey(Integer bkId);
 
     int updateVendorByPrimaryKeySelective(Vendor record);
+
+    Double selectThisamount(Integer id);
+
+    void updateBankAmount(@Param("bk_thisamount") Double bk_thisamount, @Param("id") Integer id);
 }

+ 1 - 0
applications/money/money-server/src/main/java/com/usoftchina/saas/money/mapper/PaybalancedetMapper.java

@@ -19,5 +19,6 @@ public interface PaybalancedetMapper {
     int updateByPrimaryKeySelective(Paybalancedet record);
 
     int updateByPrimaryKey(Paybalancedet record);
+    List<Integer> selectYm(Integer id);
 
 }

+ 1 - 0
applications/money/money-server/src/main/java/com/usoftchina/saas/money/mapper/RecbalancedetMapper.java

@@ -23,4 +23,5 @@ public interface RecbalancedetMapper extends CommonBaseMapper<Recbalancedet> {
     int updateByPrimaryKeySelective(Recbalancedet record);
 
     int updateByPrimaryKey(Recbalancedet record);
+    List<Integer> selectYm(Integer id);
 }

+ 14 - 0
applications/money/money-server/src/main/java/com/usoftchina/saas/money/mapper/StatsinfoMapper.java

@@ -0,0 +1,14 @@
+package com.usoftchina.saas.money.mapper;
+
+import com.usoftchina.saas.money.po.Statsinfo;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * @author heqw
+ * @date 2018/11/14 16:13
+ **/
+public interface StatsinfoMapper {
+    Integer select(@Param("si_yearmonth") Integer si_yearmonth, @Param("companyid") Long companyid);
+    void update(Statsinfo statsinfo);
+    void insert(Statsinfo statsinfo);
+}

+ 20 - 0
applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/Bankinformation.java

@@ -43,6 +43,10 @@ public class Bankinformation extends CommonBaseEntity implements Serializable {
 
     private String bk_remark;
 
+    private Double bk_income;
+
+    private Double bk_spending;
+
     public String getBk_bankcode() {
         return bk_bankcode;
     }
@@ -186,4 +190,20 @@ public class Bankinformation extends CommonBaseEntity implements Serializable {
     public void setBk_remark(String bk_remark) {
         this.bk_remark = bk_remark;
     }
+
+    public Double getBk_income() {
+        return bk_income;
+    }
+
+    public void setBk_income(Double bk_income) {
+        this.bk_income = bk_income;
+    }
+
+    public Double getBk_spending() {
+        return bk_spending;
+    }
+
+    public void setBk_spending(Double bk_spending) {
+        this.bk_spending = bk_spending;
+    }
 }

+ 71 - 0
applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/Statsinfo.java

@@ -0,0 +1,71 @@
+package com.usoftchina.saas.money.po;
+
+/**
+ * @author heqw
+ * @date 2018/11/14 16:02
+ **/
+public class Statsinfo {
+    private Double si_yearmonth;
+    private Double si_amount_pay;
+    private Double si_amount_otherpay;
+    private Double si_amount_rec;
+    private Double si_amount_otherrec;
+    private Long companyid;
+    private String si_type;
+
+    public Double getSi_yearmonth() {
+        return si_yearmonth;
+    }
+
+    public void setSi_yearmonth(Double si_yearmonth) {
+        this.si_yearmonth = si_yearmonth;
+    }
+
+    public Double getSi_amount_pay() {
+        return si_amount_pay;
+    }
+
+    public void setSi_amount_pay(Double si_amount_pay) {
+        this.si_amount_pay = si_amount_pay;
+    }
+
+    public Double getSi_amount_otherpay() {
+        return si_amount_otherpay;
+    }
+
+    public void setSi_amount_otherpay(Double si_amount_otherpay) {
+        this.si_amount_otherpay = si_amount_otherpay;
+    }
+
+    public Double getSi_amount_rec() {
+        return si_amount_rec;
+    }
+
+    public void setSi_amount_rec(Double si_amount_rec) {
+        this.si_amount_rec = si_amount_rec;
+    }
+
+    public Double getSi_amount_otherrec() {
+        return si_amount_otherrec;
+    }
+
+    public void setSi_amount_otherrec(Double si_amount_otherrec) {
+        this.si_amount_otherrec = si_amount_otherrec;
+    }
+
+    public Long getCompanyid() {
+        return companyid;
+    }
+
+    public void setCompanyid(Long companyid) {
+        this.companyid = companyid;
+    }
+
+    public String getSi_type() {
+        return si_type;
+    }
+
+    public void setSi_type(String si_type) {
+        this.si_type = si_type;
+    }
+}

+ 27 - 4
applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/FundtransferServiceImpl.java

@@ -11,9 +11,7 @@ import com.usoftchina.saas.commons.po.BillCodeSeq;
 import com.usoftchina.saas.commons.po.Status;
 import com.usoftchina.saas.context.BaseContextHolder;
 import com.usoftchina.saas.exception.BizException;
-import com.usoftchina.saas.money.mapper.BanksubledgerMapper;
-import com.usoftchina.saas.money.mapper.FundtransferMapper;
-import com.usoftchina.saas.money.mapper.FundtransferdetailMapper;
+import com.usoftchina.saas.money.mapper.*;
 import com.usoftchina.saas.money.po.*;
 import com.usoftchina.saas.money.service.FundtransferService;
 import com.usoftchina.saas.page.PageRequest;
@@ -38,6 +36,8 @@ public class FundtransferServiceImpl implements FundtransferService {
     private MaxnumberService maxnumberService;
     @Autowired
     private BanksubledgerMapper banksubledgerMapper;
+    @Autowired
+    private PaybalanceMapper paybalanceMapper;
 
     @Override
     public DocBaseDTO insert(Fundtran fundtran) {
@@ -101,17 +101,32 @@ public class FundtransferServiceImpl implements FundtransferService {
             }
         }
 
-        //取从表金额
+        //取从表金额更新中间表、资金账号表
         List<Fundtransferdetail> fundtransferdetailList = fundtran.getItems();
         Iterator isList = fundtransferdetailList.iterator();
         while (isList.hasNext()){
             Fundtransferdetail fundtransferdetail = (Fundtransferdetail) isList.next();
             Double amount = banksubledgerMapper.selectThisamount(fundtransferdetail.getFtd_bankcode());
             Double inamount = banksubledgerMapper.selectThisamount(fundtransferdetail.getFtd_inbankcode());
+
+            //中间表
             banksubledgerMapper.updateBankcode(amount, fundtransferdetail.getFtd_nowbalance(),
                     fundtransferdetail.getFtd_bankcode(), "-");
             banksubledgerMapper.updateBankcode(inamount, fundtransferdetail.getFtd_nowbalance(),
                     fundtransferdetail.getFtd_bankcode(), "+");
+
+            //资金账号表
+            int bk_id = fundtransferdetail.getFtd_bankid();
+            int bk_inid = fundtransferdetail.getFtd_inbankid();
+            Double bk_amount = paybalanceMapper.selectThisamount(bk_id) == null ? new Double(0) : paybalanceMapper.selectThisamount(bk_id);
+            Double bk_inamount = paybalanceMapper.selectThisamount(bk_inid) == null ? new Double(0) : paybalanceMapper.selectThisamount(bk_inid);
+
+            Double thisamount = bk_amount - fundtransferdetail.getFtd_nowbalance();
+            if (thisamount < 0){
+                throw new BizException(500, BizExceptionCode.BANK_AMOUNT_NOTENOUGH.getMessage());
+            }
+            paybalanceMapper.updateBankAmount(thisamount, bk_id);
+            paybalanceMapper.updateBankAmount(bk_inamount + fundtransferdetail.getFtd_nowbalance(), bk_inid);
         }
     }
 
@@ -139,6 +154,14 @@ public class FundtransferServiceImpl implements FundtransferService {
                     fundtransferdetail.getFtd_bankcode(), "+");
             banksubledgerMapper.updateBankcode(inamount, fundtransferdetail.getFtd_nowbalance(),
                     fundtransferdetail.getFtd_bankcode(), "-");
+
+            //资金账号表
+            int bk_id = fundtransferdetail.getFtd_bankid();
+            int bk_inid = fundtransferdetail.getFtd_inbankid();
+            Double bk_amount = paybalanceMapper.selectThisamount(bk_id) == null ? new Double(0) : paybalanceMapper.selectThisamount(bk_id);
+            Double bk_inamount = paybalanceMapper.selectThisamount(bk_inid) == null ? new Double(0) : paybalanceMapper.selectThisamount(bk_inid);
+            paybalanceMapper.updateBankAmount(bk_amount + fundtransferdetail.getFtd_nowbalance(), bk_id);
+            paybalanceMapper.updateBankAmount(bk_inamount - fundtransferdetail.getFtd_nowbalance(), bk_inid);
         }
     }
 

+ 33 - 4
applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/OthreceiptsServiceImpl.java

@@ -14,10 +14,8 @@ import com.usoftchina.saas.exception.BizException;
 import com.usoftchina.saas.money.mapper.BanksubledgerMapper;
 import com.usoftchina.saas.money.mapper.OthreceiptsMapper;
 import com.usoftchina.saas.money.mapper.OthreceiptsdetailMapper;
-import com.usoftchina.saas.money.po.Banksubledger;
-import com.usoftchina.saas.money.po.Othreceipts;
-import com.usoftchina.saas.money.po.Othreceiptsdetail;
-import com.usoftchina.saas.money.po.Othte;
+import com.usoftchina.saas.money.mapper.StatsinfoMapper;
+import com.usoftchina.saas.money.po.*;
 import com.usoftchina.saas.money.service.OthreceiptsService;
 import com.usoftchina.saas.page.PageRequest;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -42,6 +40,8 @@ public class OthreceiptsServiceImpl implements OthreceiptsService {
     private MaxnumberService maxnumberService;
     @Autowired
     private BanksubledgerMapper banksubledgerMapper;
+    @Autowired
+    private StatsinfoMapper statsinfoMapper;
 
     @Override
     public DocBaseDTO insert(Othte othte) {
@@ -114,6 +114,21 @@ public class OthreceiptsServiceImpl implements OthreceiptsService {
             banksubledgerMapper.updateBankcode(amount, othreceiptsdetail.getOrd_nowbalance(),
                     othreceipts.getOr_bankcode(), "+");
         }
+
+        //计算期间金额
+        Statsinfo statsinfo = new Statsinfo();
+        List<Integer> ymList = othreceiptsdetailMapper.selectYm(id);
+        Integer ym = ymList.indexOf(0);
+        System.out.println("ym:"+ym);
+        statsinfo.setCompanyid(BaseContextHolder.getCompanyId());
+        Integer yms = statsinfoMapper.select(ym, BaseContextHolder.getCompanyId());
+        statsinfo.setSi_yearmonth(Double.valueOf(ym));
+        statsinfo.setSi_amount_otherrec(othreceipts.getOr_amount());
+        if (yms == null){
+            statsinfoMapper.insert(statsinfo);
+        }else {
+            statsinfoMapper.update(statsinfo);
+        }
     }
 
     @Override
@@ -138,6 +153,20 @@ public class OthreceiptsServiceImpl implements OthreceiptsService {
                     othreceipts.getOr_bankcode(), "-");
         }
 
+        //计算期间金额
+        Statsinfo statsinfo = new Statsinfo();
+        List<Integer> ymList = othreceiptsdetailMapper.selectYm(id);
+        Integer ym = ymList.indexOf(0);
+        statsinfo.setCompanyid(BaseContextHolder.getCompanyId());
+        Integer yms = statsinfoMapper.select(ym, BaseContextHolder.getCompanyId());
+        statsinfo.setSi_yearmonth(Double.valueOf(ym));
+        statsinfo.setSi_amount_otherrec(othreceipts.getOr_amount());
+        if (yms == null){
+            statsinfoMapper.insert(statsinfo);
+        }else {
+            statsinfoMapper.update(statsinfo);
+        }
+
     }
 
 

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

@@ -14,10 +14,8 @@ import com.usoftchina.saas.exception.BizException;
 import com.usoftchina.saas.money.mapper.BanksubledgerMapper;
 import com.usoftchina.saas.money.mapper.OthspendingsMapper;
 import com.usoftchina.saas.money.mapper.OthspendingsdetailMapper;
-import com.usoftchina.saas.money.po.Banksubledger;
-import com.usoftchina.saas.money.po.Othsp;
-import com.usoftchina.saas.money.po.Othspendings;
-import com.usoftchina.saas.money.po.Othspendingsdetail;
+import com.usoftchina.saas.money.mapper.StatsinfoMapper;
+import com.usoftchina.saas.money.po.*;
 import com.usoftchina.saas.money.service.OthspendingsService;
 import com.usoftchina.saas.page.PageRequest;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -41,6 +39,8 @@ public class OthspendingsServiceImpl implements OthspendingsService {
     private MaxnumberService maxnumberService;
     @Autowired
     private BanksubledgerMapper banksubledgerMapper;
+    @Autowired
+    private StatsinfoMapper statsinfoMapper;
 
     @Override
     public DocBaseDTO insert(Othsp othsp) {
@@ -146,6 +146,21 @@ public class OthspendingsServiceImpl implements OthspendingsService {
             banksubledgerMapper.updateBankcode(amount, othspendingsdetail.getOsd_nowbalance(),
                     othspendings.getOs_bankcode(), "+");
         }
+
+        //计算期间金额
+        Statsinfo statsinfo = new Statsinfo();
+        List<Integer> ymList = othspendingsdetailMapper.selectYm(id);
+        Integer ym = ymList.indexOf(0);
+        System.out.println("ym:"+ym);
+        statsinfo.setCompanyid(BaseContextHolder.getCompanyId());
+        Integer yms = statsinfoMapper.select(ym, BaseContextHolder.getCompanyId());
+        statsinfo.setSi_yearmonth(Double.valueOf(ym));
+        statsinfo.setSi_amount_otherpay(othspendings.getOs_amount());
+        if (yms == null){
+            statsinfoMapper.insert(statsinfo);
+        }else {
+            statsinfoMapper.update(statsinfo);
+        }
     }
 
     @Override
@@ -170,6 +185,21 @@ public class OthspendingsServiceImpl implements OthspendingsService {
             banksubledgerMapper.updateBankcode(amount, othspendingsdetail.getOsd_nowbalance(),
                     othspendings.getOs_bankcode(), "-");
         }
+
+        //计算期间金额
+        Statsinfo statsinfo = new Statsinfo();
+        List<Integer> ymList = othspendingsdetailMapper.selectYm(id);
+        Integer ym = ymList.indexOf(0);
+        System.out.println("ym:"+ym);
+        statsinfo.setCompanyid(BaseContextHolder.getCompanyId());
+        Integer yms = statsinfoMapper.select(ym, BaseContextHolder.getCompanyId());
+        statsinfo.setSi_yearmonth(Double.valueOf(ym));
+        statsinfo.setSi_amount_otherpay(othspendings.getOs_amount());
+        if (yms == null){
+            statsinfoMapper.insert(statsinfo);
+        }else {
+            statsinfoMapper.update(statsinfo);
+        }
     }
 
     @Override

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

@@ -40,6 +40,8 @@ public class PaybalanceServiceImpl implements PaybalanceService {
     private SubledgerMapper subledgerMapper;
     @Autowired
     private BanksubledgerMapper banksubledgerMapper;
+    @Autowired
+    private StatsinfoMapper statsinfoMapper;
 
     public DocBaseDTO insert(Pay pay) {
         Paybalance paybalance = pay.getMain();
@@ -192,14 +194,20 @@ public class PaybalanceServiceImpl implements PaybalanceService {
             //更新账户资料金额
             Bankinformation bankinformation = new Bankinformation();
             Bankinformation nowBankInformation = paybalanceMapper.selectBankInformationByPrimaryKey(det.getPd_bankid());
-            bankinformation.setBk_thisamount((nowBankInformation.getBk_thisamount() == null ? new Double(0) : nowBankInformation.getBk_thisamount())
-                    + (det.getPd_amount() == null ? 0.0 : det.getPd_amount()));
+            Double amount = det.getPd_amount() == null ? new Double(0) : det.getPd_amount();
+            Double preamount = nowBankInformation.getBk_beginamount() ==null ? new Double(0):nowBankInformation.getBk_beginamount();//期初金额
+            Double incoming = nowBankInformation.getBk_income() ==null ? new Double(0):nowBankInformation.getBk_income();
+            Double spending = nowBankInformation.getBk_spending() ==null ? new Double(0):nowBankInformation.getBk_spending();
+            bankinformation.setBk_spending(spending+amount);
+            bankinformation.setBk_thisamount(preamount+incoming-(spending+amount));
+            bankinformation.setId(Long.valueOf(String.valueOf(det.getPd_bankid())));
             paybalanceMapper.updateBankByPrimaryKeySelective(bankinformation);
+
         }
         //更新主表pb_pbdamount=从表二金额合计
         Double amountTotal2 = new Double(0);
         for (Paybalancedetail detail : paybalancedetail){
-            amountTotal2 = amountTotal2 + detail.getPbd_amount();
+            amountTotal2 = amountTotal2 + detail.getPbd_nowbalance();
         }
         updatePay.setId(pay.getMain().getId());
         updatePay.setPb_pdamount(amountTotal);
@@ -218,19 +226,38 @@ public class PaybalanceServiceImpl implements PaybalanceService {
         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+amountTotal);
+        vendor.setVe_preamount(preamount+recbalancePreamount);
         vendor.setVe_payamount(payamount-amountTotal2);
-        vendor.setVe_leftamount(beginapamount-beginprepayamount+payamount-amountTotal2-preamount-amountTotal);
+        vendor.setVe_leftamount(beginapamount-beginprepayamount+payamount-amountTotal2-preamount-recbalancePreamount);
         paybalanceMapper.updateVendorByPrimaryKeySelective(vendor);
 
         for (Paybalancedetail detail: paybalancedetail) {
-            Subledger newsubledger = new Subledger();
+            Subledger subledger1 = new Subledger();
             Subledger nowSubledger = subledgerMapper.selectByPrimaryKey(detail.getPbd_slid());
-            newsubledger.setId(Long.valueOf(String.valueOf(detail.getPbd_slid())));
-            newsubledger.setSl_yamount(detail.getPbd_nowbalance()+nowSubledger.getSl_yamount());//已核销
-            newsubledger.setSl_namount(nowSubledger.getSl_namount()-detail.getPbd_nowbalance());//未核销
-            subledgerMapper.updateByPrimaryKeySelective(newsubledger);
+            subledger1.setId(Long.valueOf(String.valueOf(detail.getPbd_slid())));
+            Double yamount = nowSubledger.getSl_yamount()==null?new Double(0):nowSubledger.getSl_yamount();
+            Double namount = nowSubledger.getSl_namount()==null?new Double(0):nowSubledger.getSl_namount();
+            Double nowBalance = detail.getPbd_nowbalance()==null?new Double(0):detail.getPbd_nowbalance();
+            subledger1.setSl_yamount(yamount+nowBalance);//已核销
+            subledger1.setSl_namount(namount-nowBalance);//未核销
+            subledgerMapper.updateByPrimaryKeySelective(subledger1);
+        }
+
+        //计算期间金额
+        Statsinfo statsinfo = new Statsinfo();
+        List<Integer> ymList = paybalancedetMapper.selectYm(id);
+        Integer ym = ymList.indexOf(0);
+        System.out.println("ym:"+ym);
+        statsinfo.setCompanyid(BaseContextHolder.getCompanyId());
+        Integer yms = statsinfoMapper.select(ym, BaseContextHolder.getCompanyId());
+        statsinfo.setSi_yearmonth(Double.valueOf(ym));
+        statsinfo.setSi_amount_pay(100.0);
+        if (yms == null){
+            statsinfoMapper.insert(statsinfo);
+        }else {
+            statsinfoMapper.update(statsinfo);
         }
     }
 
@@ -260,10 +287,16 @@ public class PaybalanceServiceImpl implements PaybalanceService {
         //更新账户资料金额
         List<Paybalancedet> paybalancedet = paybalancedetMapper.selectByPrimaryKey(id);
         for (Paybalancedet det:paybalancedet) {
+            //更新账户资料金额
             Bankinformation bankinformation = new Bankinformation();
             Bankinformation nowBankInformation = paybalanceMapper.selectBankInformationByPrimaryKey(det.getPd_bankid());
-            bankinformation.setBk_thisamount((nowBankInformation.getBk_thisamount() == null ? new Double(0) : nowBankInformation.getBk_thisamount())
-                    - (det.getPd_amount() == null ? new Double(0) : det.getPd_amount()));
+            Double amount = det.getPd_amount() == null ? new Double(0) : det.getPd_amount();
+            Double bkpreamount = nowBankInformation.getBk_beginamount() ==null ? new Double(0):nowBankInformation.getBk_beginamount();//期初金额
+            Double bkincoming = nowBankInformation.getBk_income() ==null ? new Double(0):nowBankInformation.getBk_income();
+            Double bkspending = nowBankInformation.getBk_spending() ==null ? new Double(0):nowBankInformation.getBk_spending();
+            bankinformation.setBk_spending(bkspending-amount);
+            bankinformation.setBk_thisamount(bkpreamount+bkincoming-(bkspending-amount));
+            bankinformation.setId(Long.valueOf(String.valueOf(det.getPd_bankid())));
             paybalanceMapper.updateBankByPrimaryKeySelective(bankinformation);
         }
 
@@ -272,8 +305,11 @@ public class PaybalanceServiceImpl implements PaybalanceService {
             Subledger subledger1 = new Subledger();
             Subledger nowSubledger = subledgerMapper.selectByPrimaryKey(detail.getPbd_slid());
             subledger1.setId(Long.valueOf(String.valueOf(detail.getPbd_slid())));
-            subledger1.setSl_yamount(nowSubledger.getSl_yamount()-detail.getPbd_nowbalance());//已核销
-            subledger1.setSl_namount(nowSubledger.getSl_namount()+detail.getPbd_nowbalance());//未核销
+            Double yamount = nowSubledger.getSl_yamount()==null?new Double(0):nowSubledger.getSl_yamount();
+            Double namount = nowSubledger.getSl_namount()==null?new Double(0):nowSubledger.getSl_namount();
+            Double nowBalance = detail.getPbd_nowbalance()==null?new Double(0):detail.getPbd_nowbalance();
+            subledger1.setSl_yamount(yamount-nowBalance);//已核销
+            subledger1.setSl_namount(namount+nowBalance);//未核销
             subledgerMapper.updateByPrimaryKeySelective(subledger1);
         }
 
@@ -288,7 +324,20 @@ public class PaybalanceServiceImpl implements PaybalanceService {
         subledgerMapper.deleteByPrimaryKey(paybalance.getPb_code(), paybalance.getPb_kind());
         banksubledgerMapper.deleteByPrimaryKey(paybalance.getPb_code(), paybalance.getPb_kind());
 
-
+        //计算期间金额
+        Statsinfo statsinfo = new Statsinfo();
+        List<Integer> ymList = paybalancedetMapper.selectYm(id);
+        Integer ym = ymList.indexOf(0);
+        System.out.println("ym:"+ym);
+        statsinfo.setCompanyid(BaseContextHolder.getCompanyId());
+        Integer yms = statsinfoMapper.select(ym, BaseContextHolder.getCompanyId());
+        statsinfo.setSi_yearmonth(Double.valueOf(ym));
+        statsinfo.setSi_amount_pay(100.0);
+        if (yms == null){
+            statsinfoMapper.insert(statsinfo);
+        }else {
+            statsinfoMapper.update(statsinfo);
+        }
     }
 
 

+ 60 - 9
applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/RecbalanceServiceImpl.java

@@ -40,6 +40,8 @@ public class RecbalanceServiceImpl implements RecbalanceService {
     private BanksubledgerMapper banksubledgerMapper;
     @Autowired
     private SubledgerMapper subledgerMapper;
+    @Autowired
+    private StatsinfoMapper statsinfoMapper;
 
     @Override
     public DocBaseDTO insert(Rec rec) {
@@ -218,7 +220,13 @@ public class RecbalanceServiceImpl implements RecbalanceService {
             //更新账户资料金额
             Bankinformation bankinformation = new Bankinformation();
             Bankinformation nowBankInformation = recbalanceMapper.selectBankInformationByPrimaryKey(det.getRd_bankid());
-            bankinformation.setBk_thisamount(nowBankInformation.getBk_thisamount()+det.getRd_amount());
+            Double amount = det.getRd_amount() == null ? new Double(0) : det.getRd_amount();
+            Double preamount = nowBankInformation.getBk_beginamount() ==null ? new Double(0):nowBankInformation.getBk_beginamount();//期初金额
+            Double incoming = nowBankInformation.getBk_income() ==null ? new Double(0):nowBankInformation.getBk_income();
+            Double spending = nowBankInformation.getBk_spending() ==null ? new Double(0):nowBankInformation.getBk_spending();
+            bankinformation.setBk_income(incoming+amount);
+            bankinformation.setBk_thisamount(preamount+(incoming+amount)-spending);
+            bankinformation.setId(Long.valueOf(String.valueOf(det.getRd_bankid())));
             recbalanceMapper.updateBankByPrimaryKeySelective(bankinformation);
         }
         //更新主表pb_pbdamount=从表二金额合计
@@ -243,11 +251,12 @@ public class RecbalanceServiceImpl implements RecbalanceService {
         Double recamount = customerData.getCu_recamount()==null?new Double(0):customerData.getCu_recamount();
 
         Customer customer = new Customer();
+        Double paybalancePreamount = recbalance.getRb_preamount();
         customer.setId(Long.valueOf(String.valueOf(recbalance.getRb_custid())));
         customer.setId(Long.valueOf(String.valueOf(recbalance.getRb_custid())));
-        customer.setCu_preamount(preamount+amountTotal);
+        customer.setCu_preamount(preamount+paybalancePreamount);
         customer.setCu_recamount(recamount-amountTotal2);
-        customer.setCu_leftamount(beginapamount-beginprepayamount+recamount-amountTotal2-preamount-amountTotal);
+        customer.setCu_leftamount(beginapamount-beginprepayamount+recamount-amountTotal2-preamount-paybalancePreamount);
         recbalanceMapper.updateCustomerByPrimaryKeySelective(customer);
 
         //更新本次核销金额
@@ -255,10 +264,28 @@ public class RecbalanceServiceImpl implements RecbalanceService {
             Subledger subledger1 = new Subledger();
             Subledger nowSubledger = subledgerMapper.selectByPrimaryKey(detail.getRbd_slid());
             subledger1.setId(Long.valueOf(String.valueOf(detail.getRbd_slid())));
-            subledger1.setSl_yamount(detail.getRbd_nowbalance() + nowSubledger.getSl_yamount());//已核销
-            subledger1.setSl_namount(nowSubledger.getSl_namount() - detail.getRbd_nowbalance());//未核销
+            Double yamount = nowSubledger.getSl_yamount()==null?new Double(0):nowSubledger.getSl_yamount();
+            Double namount = nowSubledger.getSl_namount()==null?new Double(0):nowSubledger.getSl_namount();
+            Double nowBalance = detail.getRbd_nowbalance()==null?new Double(0):detail.getRbd_nowbalance();
+            subledger1.setSl_yamount(yamount+nowBalance);//已核销
+            subledger1.setSl_namount(namount-nowBalance);//未核销
             subledgerMapper.updateByPrimaryKeySelective(subledger1);
         }
+
+        //计算期间金额
+        Statsinfo statsinfo = new Statsinfo();
+        List<Integer> ymList = recbalancedetMapper.selectYm(id);
+        Integer ym = ymList.indexOf(0);
+        System.out.println("ym:"+ym);
+        statsinfo.setCompanyid(BaseContextHolder.getCompanyId());
+        Integer yms = statsinfoMapper.select(ym, BaseContextHolder.getCompanyId());
+        statsinfo.setSi_yearmonth(Double.valueOf(ym));
+        statsinfo.setSi_amount_rec(100.0);
+        if (yms == null){
+            statsinfoMapper.insert(statsinfo);
+        }else {
+            statsinfoMapper.update(statsinfo);
+        }
     }
 
     @Override
@@ -287,9 +314,16 @@ public class RecbalanceServiceImpl implements RecbalanceService {
         //更新账户资料金额
         List<Recbalancedet> recbalancedet = recbalancedetMapper.selectByPrimaryKey(Math.toIntExact(id));
         for (Recbalancedet det:recbalancedet) {
+            //更新账户资料金额
             Bankinformation bankinformation = new Bankinformation();
             Bankinformation nowBankInformation = recbalanceMapper.selectBankInformationByPrimaryKey(det.getRd_bankid());
-            bankinformation.setBk_thisamount(nowBankInformation.getBk_thisamount()-det.getRd_amount());
+            Double amount = det.getRd_amount() == null ? new Double(0) : det.getRd_amount();
+            Double bkpreamount = nowBankInformation.getBk_beginamount() ==null ? new Double(0):nowBankInformation.getBk_beginamount();//期初金额
+            Double bkincoming = nowBankInformation.getBk_income() ==null ? new Double(0):nowBankInformation.getBk_income();
+            Double bkspending = nowBankInformation.getBk_spending() ==null ? new Double(0):nowBankInformation.getBk_spending();
+            bankinformation.setBk_income(bkincoming-amount);
+            bankinformation.setBk_thisamount(bkpreamount+(bkincoming-amount)-bkspending);
+            bankinformation.setId(Long.valueOf(String.valueOf(det.getRd_bankid())));
             recbalanceMapper.updateBankByPrimaryKeySelective(bankinformation);
         }
 
@@ -310,11 +344,28 @@ public class RecbalanceServiceImpl implements RecbalanceService {
         for(Recbalancedetail detail: recbalancedetail) {
             Subledger subledger1 = new Subledger();
             Subledger nowSubledger = subledgerMapper.selectByPrimaryKey(detail.getRbd_slid());
-            subledger1.setId(Long.valueOf(String.valueOf(detail.getRbd_slid())));
-            subledger1.setSl_yamount(nowSubledger.getSl_yamount()-detail.getRbd_nowbalance());//已核销
-            subledger1.setSl_namount(nowSubledger.getSl_namount()+detail.getRbd_nowbalance());//未核销
+            subledger1.setId(Long.valueOf(String.valueOf(detail.getRbd_slid())));Double yamount = nowSubledger.getSl_yamount()==null?new Double(0):nowSubledger.getSl_yamount();
+            Double namount = nowSubledger.getSl_namount()==null?new Double(0):nowSubledger.getSl_namount();
+            Double nowBalance = detail.getRbd_nowbalance()==null?new Double(0):detail.getRbd_nowbalance();
+            subledger1.setSl_yamount(yamount-nowBalance);//已核销
+            subledger1.setSl_namount(namount+nowBalance);//未核销
             subledgerMapper.updateByPrimaryKeySelective(subledger1);
         }
+
+        //计算期间金额
+        Statsinfo statsinfo = new Statsinfo();
+        List<Integer> ymList = recbalancedetMapper.selectYm(Math.toIntExact(id));
+        Integer ym = ymList.indexOf(0);
+        System.out.println("ym:"+ym);
+        statsinfo.setCompanyid(BaseContextHolder.getCompanyId());
+        Integer yms = statsinfoMapper.select(ym, BaseContextHolder.getCompanyId());
+        statsinfo.setSi_yearmonth(Double.valueOf(ym));
+        statsinfo.setSi_amount_rec(100.0);
+        if (yms == null){
+            statsinfoMapper.insert(statsinfo);
+        }else {
+            statsinfoMapper.update(statsinfo);
+        }
     }
 
     public PageInfo<Recbalance> selectList(PageRequest page, ListReqDTO reqDTO) {

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

@@ -324,7 +324,7 @@
         ${con}
       </if>
       <if test="companyId != null">
-        and   othreceipts.companyId = #{companyId}
+        and   othreceipts.companyId = #{companyId, jdbcType=INTEGER}
       </if>
     </where>  order by or_date desc
   </select>
@@ -339,7 +339,7 @@
         ${con}
       </if>
       <if test="companyId != null">
-        and   othreceipts.companyId = #{companyId}
+        and   othreceipts.companyId = #{companyId, jdbcType=INTEGER}
       </if>
     </where>  order by or_date desc
   </select>

+ 4 - 0
applications/money/money-server/src/main/resources/mapper/OthreceiptsdetailMapper.xml

@@ -207,4 +207,8 @@
       ord_text5 = #{ordText5,jdbcType=VARCHAR}
     where ord_id = #{ordId,jdbcType=INTEGER}
   </update>
+
+  <select id="selectYm" parameterType="java.lang.Integer" resultType="java.lang.Integer">
+    select ord_ym from othreceiptsdetail where ord_orid = #{id,jdbcType=INTEGER}
+  </select>
 </mapper>

+ 4 - 0
applications/money/money-server/src/main/resources/mapper/OthspendingsdetailMapper.xml

@@ -213,4 +213,8 @@
       osd_text5 = #{osdText5,jdbcType=VARCHAR}
     where osd_id = #{osdId,jdbcType=INTEGER}
   </update>
+
+  <select id="selectYm" parameterType="java.lang.Integer" resultType="java.lang.Integer">
+    select osd_ym from othspendingsdetail where osd_orid = #{id,jdbcType=INTEGER}
+  </select>
 </mapper>

+ 20 - 3
applications/money/money-server/src/main/resources/mapper/PaybalanceMapper.xml

@@ -428,7 +428,7 @@
       <if test="companyId != null">
         and   paybalance.companyId = #{companyId}
       </if>
-    </where>  order by pb_id
+    </where>  order by pb_date desc, order by pb_code
   </select>
 
   <select id="selectPaybalanceListByCondition" resultMap="BaseResultMap">
@@ -443,7 +443,7 @@
       <if test="companyId != null">
         and   paybalance.companyId = #{companyId}
       </if>
-    </where>  order by pb_id
+    </where>  order by pb_date desc, order by pb_code
   </select>
 
   <select id="validateCodeWhenInsert" resultType="int">
@@ -458,7 +458,7 @@
   <sql id="Bank_Column_List" >
     bk_id, bk_bankcode, bk_bankname, bk_date, bk_type, bk_beginamount, bk_thisamount,
     bk_status, bk_statuscode, bk_recorderid, bk_recorder, bk_recorddate, bk_ym, companyid,
-    updaterId, updateTime, bk_text1, bk_text2, bk_text3, bk_text4, bk_text5, bk_remark
+    updaterId, updateTime, bk_text1, bk_text2, bk_text3, bk_text4, bk_text5, bk_remark,bk_spending,bk_income
   </sql>
   <sql id="Blob_Column_List" >
     bk_remark
@@ -497,6 +497,8 @@
     <result column="bk_text4" property="bk_text4" jdbcType="VARCHAR" />
     <result column="bk_text5" property="bk_text5" jdbcType="VARCHAR" />
     <result column="bk_remark" property="bk_remark" jdbcType="VARCHAR" />
+    <result column="bk_spending" property="bk_spending" jdbcType="DOUBLE" />
+    <result column="bk_income" property="bk_income" jdbcType="DOUBLE" />
   </resultMap>
   <update id="updateBankByPrimaryKeySelective" parameterType="com.usoftchina.saas.money.po.Bankinformation" >
     update bankinformation
@@ -564,10 +566,25 @@
       <if test="bk_remark != null" >
         bk_remark = #{bk_remark,jdbcType=LONGVARCHAR},
       </if>
+      <if test="bk_spending != null" >
+        bk_spending = #{bk_spending,jdbcType=DOUBLE},
+      </if>
+      <if test="bk_income != null" >
+        bk_income = #{bk_income,jdbcType=DOUBLE},
+      </if>
     </set>
     where bk_id = #{id,jdbcType=INTEGER}
   </update>
 
+  <update id="updateBankAmount" >
+    update bankinformation set bk_thisamount = #{bk_thisamount,jdbcType=DOUBLE}
+     where bk_id = #{id,jdbcType=INTEGER}
+  </update>
+
+<select id="selectThisamount" parameterType="java.lang.Integer" resultType="java.lang.Double">
+  select bk_thisamount from bankinformation where bk_id = #{id,jdbcType=INTEGER}
+</select>
+
 <!-- 供应商-->
   <resultMap id="VendorResultMapper" type="com.usoftchina.saas.money.po.Vendor">
     <id column="ve_id" property="id" jdbcType="INTEGER" />

+ 4 - 0
applications/money/money-server/src/main/resources/mapper/PaybalancedetMapper.xml

@@ -287,4 +287,8 @@
       </if>
     </where>  order by pb_id
   </select>
+
+  <select id="selectYm" parameterType="java.lang.Integer" resultType="java.lang.Integer">
+    select pd_ym from paybalancedet where pd_pbid = #{id,jdbcType=INTEGER}
+  </select>
 </mapper>

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

@@ -591,7 +591,7 @@
   <sql id="Bank_Column_List" >
     bk_id, bk_bankcode, bk_bankname, bk_date, bk_type, bk_beginamount, bk_thisamount,
     bk_status, bk_statuscode, bk_recorderid, bk_recorder, bk_recorddate, bk_ym, companyid,
-    updaterId, updateTime, bk_text1, bk_text2, bk_text3, bk_text4, bk_text5, bk_remark
+    updaterId, updateTime, bk_text1, bk_text2, bk_text3, bk_text4, bk_text5, bk_remark,bk_spending,bk_income
   </sql>
   <sql id="Blob_Column_List" >
     bk_remark
@@ -630,6 +630,8 @@
     <result column="bk_text4" property="bk_text4" jdbcType="VARCHAR" />
     <result column="bk_text5" property="bk_text5" jdbcType="VARCHAR" />
     <result column="bk_remark" property="bk_remark" jdbcType="VARCHAR" />
+    <result column="bk_spending" property="bk_spending" jdbcType="DOUBLE" />
+    <result column="bk_income" property="bk_income" jdbcType="DOUBLE" />
   </resultMap>
   <update id="updateBankByPrimaryKeySelective" parameterType="com.usoftchina.saas.money.po.Bankinformation" >
     update bankinformation
@@ -697,6 +699,12 @@
       <if test="bk_remark != null" >
         bk_remark = #{bk_remark,jdbcType=LONGVARCHAR},
       </if>
+      <if test="bk_spending != null" >
+        bk_spending = #{bk_spending,jdbcType=DOUBLE},
+      </if>
+      <if test="bk_income != null" >
+        bk_income = #{bk_income,jdbcType=DOUBLE},
+      </if>
     </set>
     where bk_id = #{id,jdbcType=INTEGER}
   </update>

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

@@ -294,4 +294,7 @@
     where rd_id = #{id,jdbcType=INTEGER}
   </update>
 
+  <select id="selectYm" parameterType="java.lang.Integer" resultType="java.lang.Integer">
+    select rd_ym from recbalancedet where rd_rbid = #{id,jdbcType=INTEGER}
+  </select>
 </mapper>

+ 103 - 0
applications/money/money-server/src/main/resources/mapper/StatsinfoMapper.xml

@@ -0,0 +1,103 @@
+<?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.money.mapper.StatsinfoMapper" >
+    <resultMap id="BaseResultMap" type="com.usoftchina.saas.money.po.Statsinfo">
+        <result column="si_yearmonth" jdbcType="DOUBLE" property="si_yearmonth" />
+        <result column="si_amount_pay" jdbcType="DOUBLE" property="si_amount_pay" />
+        <result column="si_amount_otherpay" jdbcType="DOUBLE" property="si_amount_otherpay" />
+        <result column="si_amount_rec" jdbcType="DOUBLE" property="si_amount_rec" />
+        <result column="si_amount_otherrec" jdbcType="DOUBLE" property="si_amount_otherrec" />
+        <result column="companyid" jdbcType="INTEGER" property="companyid" />
+        <result column="si_type" jdbcType="VARCHAR" property="si_type" />
+    </resultMap>
+
+    <insert id="insert" parameterType="com.usoftchina.saas.money.po.Statsinfo">
+        insert into statsinfo
+        <trim prefix="(" suffix=")" suffixOverrides="," >
+        <if test="si_yearmonth != null" >
+            si_yearmonth,
+        </if>
+        <if test="si_amount_pay != null" >
+            si_amount_pay,
+        </if>
+        <if test="si_amount_otherpay != null" >
+            si_amount_otherpay,
+        </if>
+        <if test="si_amount_rec != null" >
+            si_amount_rec,
+        </if>
+        <if test="si_amount_otherrec != null" >
+            si_amount_otherrec,
+        </if>
+        <if test="companyid != null" >
+            companyid,
+        </if>
+            si_type,
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides="," >
+            <if test="si_yearmonth != null" >
+                #{si_yearmonth,jdbcType=INTEGER},
+            </if>
+            <if test="si_amount_pay != null" >
+                select sum(pd_amount) from paybalancedet left join paybalance on pd_pbid=pb_id
+                where paybalance.companyId= #{companyid,jdbcType=INTEGER}
+                and pd_ym=#{si_yearmonth,jdbcType=INTEGER} and pb_statuscode='AUDITED',
+            </if>
+            <if test="si_amount_otherpay != null" >
+                (select sum(os_amount) from othspendings RIGHT JOIN othspendingsdetail on os_id = osd_orid
+                where othspendingsdetail.companyId=#{companyid,jdbcType=INTEGER}
+                and osd_ym=#{si_yearmonth,jdbcType=INTEGER} and os_statuscode='AUDITED'),
+            </if>
+            <if test="si_amount_rec != null" >
+                (select sum(rd_amount) from recbalancedet left join recbalance on rd_rbid=rb_id
+                where recbalancedet.companyId=#{companyid,jdbcType=INTEGER}
+                and rd_ym=#{si_yearmonth,jdbcType=INTEGER} and rb_statuscode='AUDITED'),
+            </if>
+            <if test="si_amount_otherrec != null" >
+                (select  sum(or_amount) from othreceipts RIGHT JOIN othreceiptsdetail on or_id = ord_orid
+                where othreceiptsdetail.companyId=#{companyid,jdbcType=INTEGER}
+                and ord_ym=#{si_yearmonth,jdbcType=INTEGER} and or_statuscode='AUDITED'),
+            </if>
+            <if test="companyid != null" >
+                #{companyid,jdbcType=INTEGER},
+            </if>
+                'FUND',
+        </trim>
+    </insert>
+
+    <update id="update" parameterType="com.usoftchina.saas.money.po.Statsinfo" >
+        update statsinfo
+        <set >
+            <if test="si_amount_pay != null" >
+                si_amount_pay =
+                (select sum(pd_amount) from paybalancedet left join paybalance on pd_pbid=pb_id
+                where paybalance.companyId= #{companyid,jdbcType=INTEGER}
+                and pd_ym=#{si_yearmonth,jdbcType=INTEGER} and pb_statuscode='AUDITED'),
+            </if>
+            <if test="si_amount_otherpay != null" >
+                si_amount_otherpay =
+                (select sum(os_amount) from othspendings RIGHT JOIN othspendingsdetail on os_id = osd_orid
+                where othspendingsdetail.companyId=#{companyid,jdbcType=INTEGER}
+                and osd_ym=#{si_yearmonth,jdbcType=INTEGER} and os_statuscode='AUDITED'),
+            </if>
+            <if test="si_amount_rec != null" >
+                si_amount_rec =
+                (select sum(rd_amount) from recbalancedet left join recbalance on rd_rbid=rb_id
+                where recbalancedet.companyId=#{companyid,jdbcType=INTEGER}
+                and rd_ym=#{si_yearmonth,jdbcType=INTEGER} and rb_statuscode='AUDITED'),
+            </if>
+            <if test="si_amount_otherrec != null" >
+                si_amount_otherrec =
+                (select  sum(or_amount) from othreceipts RIGHT JOIN othreceiptsdetail on or_id = ord_orid
+                where othreceiptsdetail.companyId=#{companyid,jdbcType=INTEGER}
+                and ord_ym=#{si_yearmonth,jdbcType=INTEGER} and or_statuscode='AUDITED'),
+            </if>
+        </set>
+        where si_yearmonth = #{si_yearmonth,jdbcType=INTEGER} and companyid = #{companyid,jdbcType=INTEGER}
+        and si_type = 'FUND'
+    </update>
+
+    <select id="select" resultType="java.lang.Integer">
+        select DISTINCT si_yearmonth from statsinfo where si_yearmonth =#{si_yearmonth,jdbcType=INTEGER} and companyid = #{companyid,jdbcType=INTEGER}
+    </select>
+</mapper>

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

@@ -81,6 +81,10 @@
             <groupId>com.usoftchina.saas</groupId>
             <artifactId>commons-api</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.usoftchina.saas</groupId>
+            <artifactId>document-api</artifactId>
+        </dependency>
     </dependencies>
 
     <build>

+ 6 - 0
applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/controller/PurchaseReportController.java

@@ -27,4 +27,10 @@ public class PurchaseReportController {
         return Result.success(listData);
     }
 
+    @GetMapping("/purchaseDetail")
+    public Result PurchaseDetail(PageRequest page, ListReqDTO req) {
+        PageInfo listData = purchaseReportService.getPurchaseDetailData(page, req);
+        return Result.success(listData);
+    }
+
 }

+ 4 - 1
applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/mapper/PurchasePayMapper.java → applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/mapper/PurchaseReportMapper.java

@@ -1,10 +1,13 @@
 package com.usoftchina.saas.purchase.mapper;
 
+import com.usoftchina.saas.purchase.po.report.PurchaseReportDetail;
 import com.usoftchina.saas.purchase.po.report.PurchasePay;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
-public interface PurchasePayMapper {
+public interface PurchaseReportMapper {
     List<PurchasePay> selectByCondition(@Param("con") String con, @Param("companyId") Long companyId);
+
+    List<PurchaseReportDetail> selectDetailByCondition(@Param("con") String con, @Param("companyId") Long companyId);
 }

+ 151 - 0
applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/po/report/PurchaseReportDetail.java

@@ -0,0 +1,151 @@
+package com.usoftchina.saas.purchase.po.report;
+
+
+import com.usoftchina.saas.base.entity.CommonBaseEntity;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author: guq
+ * @create: 2018-10-10 16:42
+ **/
+@Data
+public class PurchaseReportDetail extends CommonBaseEntity implements Serializable {
+
+    //主表信息
+    private  Integer pu_id;
+
+    private String pu_code;
+
+    private Date pu_date;
+
+    private Integer pu_vendid;
+
+    private String pu_vendcode;
+
+    private String pu_vendname;
+
+    private Integer pu_buyerid;
+
+    private String pu_buyercode;
+
+    private String pu_buyername;
+
+    private Date pu_delivery;
+
+
+    private Double pu_taxtotal;
+
+    private Double pu_total;
+
+    private String pu_remark;
+
+    private String pu_totalupper;
+
+    private String pu_printstatus;
+
+    private String pu_printstatuscode;
+
+    private String pu_acceptstatuscode;
+
+    private String pu_acceptstatus;
+
+    private String pu_statuscode;
+
+    private String pu_status;
+
+    private String pu_text1;
+
+    private String pu_text2;
+
+    private String pu_text3;
+
+    private String pu_text4;
+
+    private String pu_text5;
+
+    private String pu_shipaddresscode;
+
+    //从表字段
+    private Long pd_id;
+
+    private  Long pd_puid;
+
+    private String pd_code;
+
+    private Integer pd_detno;
+
+    private Integer pd_prodid;
+
+    private String pd_prodcode;
+
+    private String pd_unit;
+
+    private Double pd_qty;
+
+    private Double pd_price;
+
+    private Double pd_taxprice;
+
+    private Double pd_total;
+
+    private Double pd_taxrate;
+
+    private Double pd_taxtotal;
+
+    private Double pd_acceptqty;
+
+    private Date pd_delivery;
+
+    private String pd_salecode;
+
+    private Integer pd_saledetno;
+
+    private Integer pd_sdid;
+
+    private String pd_text1;
+
+    private String pd_text2;
+
+    private String pd_text3;
+
+    private String pd_text4;
+
+    private String pd_text5;
+
+    private Double pd_yqty;
+
+    private Double pd_accepttotal;
+
+    //private ProductDTO productDTO;
+    private Long pr_id;
+    private String pr_code;
+    private String pr_detail;
+    private String pr_spec;
+    private String pr_unit;
+    private String pr_kind;
+    private String pr_orispeccode;
+    private long pr_whid;
+    private String pr_whcode;
+    private String pr_whname;
+    private long pr_zxbzs;
+    private long pr_leadtime;
+    private String pr_brand;
+    private String pr_standardprice;
+    private String pr_purcprice;
+    private String pr_saleprice;
+    private long pr_vendid;
+    private String pr_vendname;
+    private String pr_vendcode;
+    private Date pr_docdate;
+    private long pr_recordmanid;
+    private String pr_recordman;
+    private String pr_status;
+    private String pr_statuscode;
+    private String pr_text1;
+    private String pr_text2;
+    private String pr_text3;
+    private String pr_text4;
+}

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

@@ -7,4 +7,6 @@ import com.usoftchina.saas.page.PageRequest;
 public interface PurchaseReportService {
 
     PageInfo getPurchasePayData(PageRequest page, ListReqDTO req);
+
+    PageInfo getPurchaseDetailData(PageRequest page, ListReqDTO req);
 }

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

@@ -11,8 +11,10 @@ import com.usoftchina.saas.commons.dto.DocBaseDTO;
 import com.usoftchina.saas.commons.dto.ListReqDTO;
 import com.usoftchina.saas.commons.exception.BizExceptionCode;
 import com.usoftchina.saas.commons.po.BillCodeSeq;
+import com.usoftchina.saas.commons.po.Operation;
 import com.usoftchina.saas.commons.po.Status;
 import com.usoftchina.saas.context.BaseContextHolder;
+import com.usoftchina.saas.document.api.EmployeeApi;
 import com.usoftchina.saas.document.api.WarehouseApi;
 import com.usoftchina.saas.exception.BizException;
 import com.usoftchina.saas.exception.ExceptionCode;
@@ -52,6 +54,8 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
     private ProdInOutListMapper prodInOutListMapper;
     @Autowired
     private WarehouseApi warehouseApi;
+    @Autowired
+    private EmployeeApi employeeApi;
 
     @Autowired
     private MaxnumberService maxnumberService;
@@ -116,7 +120,9 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
         //公司ID
         Long companyId = BaseContextHolder.getCompanyId();
         //人员Id
-        Long userId = BaseContextHolder.getUserId();
+        Map<String,Object>  emp= employeeApi.getEmployeeByAccount();
+        Long userId = Long.valueOf(String.valueOf(emp.get("em_id")));
+
         //获取主表信息
         ProdInOutDTO main = formdata.getMain();
         List<ProdIODetailDTO> items = formdata.getItems();
@@ -130,6 +136,8 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
         String pi_class = main.getPi_class();
         ProdInOut prodInOut = BeanMapper.map(main,ProdInOut.class);
         prodInOut.setCompanyId(companyId);
+        prodInOut.setPi_recordmanid(userId.intValue());
+        prodInOut.setPi_recordman(emp.get("em_name").toString());
         prodInOut.setCreatorId(userId);
         prodInOut.setCreateTime(new Date());
         prodInOut.setPi_date(new Date());
@@ -206,6 +214,7 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
         updateYqty(prodInOut);
         //日志记录
         messageLogService.update(baseDTO);
+        messageLogService.customizeLog(baseDTO, Operation.TURNPURCCHECKOUT);
         return baseDTO;
     }
 

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

@@ -5,7 +5,7 @@ import com.github.pagehelper.PageInfo;
 import com.usoftchina.saas.commons.dto.ListReqDTO;
 import com.usoftchina.saas.context.BaseContextHolder;
 import com.usoftchina.saas.page.PageRequest;
-import com.usoftchina.saas.purchase.mapper.PurchasePayMapper;
+import com.usoftchina.saas.purchase.mapper.PurchaseReportMapper;
 import com.usoftchina.saas.purchase.service.PurchaseReportService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -20,12 +20,18 @@ import java.util.List;
 public class PurchaseReportServiceImpl implements PurchaseReportService{
 
     @Autowired
-    private PurchasePayMapper purchasePayMapper;
+    private PurchaseReportMapper purchaseReportMapper;
+
     @Override
     public PageInfo getPurchasePayData(PageRequest page, ListReqDTO req) {
         return getListDATA(page, req, "PurchasePay");
     }
 
+    @Override
+    public PageInfo getPurchaseDetailData(PageRequest page, ListReqDTO req) {
+        return getListDATA(page, req, "PurchaseReportDetail");
+    }
+
     private PageInfo getListDATA(PageRequest page, ListReqDTO req, String type) {
         //设置默认分页
         if (null == page || page.getSize() == 0 || page.getNumber() == 0) {
@@ -44,12 +50,15 @@ public class PurchaseReportServiceImpl implements PurchaseReportService{
     private List getListByType(ListReqDTO req, String type) {
         List list = null;
         Long companyId = BaseContextHolder.getCompanyId();
+        companyId = 1l;
         String con = req.getFinalCondition();
         if (null == con) {
             con = "1=1";
         }
         if ("PurchasePay".equals(type)) {
-            list = purchasePayMapper.selectByCondition(con, companyId);
+            list = purchaseReportMapper.selectByCondition(con, companyId);
+        } else if ("PurchaseReportDetail".equals(type)){
+            list = purchaseReportMapper.selectDetailByCondition(con, companyId);
         }
         return list;
     }

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

@@ -11,8 +11,10 @@ import com.usoftchina.saas.commons.dto.DocBaseDTO;
 import com.usoftchina.saas.commons.dto.ListReqDTO;
 import com.usoftchina.saas.commons.exception.BizExceptionCode;
 import com.usoftchina.saas.commons.po.BillCodeSeq;
+import com.usoftchina.saas.commons.po.Operation;
 import com.usoftchina.saas.commons.po.Status;
 import com.usoftchina.saas.context.BaseContextHolder;
+import com.usoftchina.saas.document.api.EmployeeApi;
 import com.usoftchina.saas.document.api.ProductApi;
 import com.usoftchina.saas.exception.BizException;
 import com.usoftchina.saas.exception.ExceptionCode;
@@ -33,6 +35,7 @@ import org.springframework.util.StringUtils;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
 
 /**
@@ -51,6 +54,8 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
     @Autowired
     private ProductApi productApi;
     @Autowired
+    private EmployeeApi employeeApi;
+    @Autowired
     private MaxnumberService maxnumberService;
     @Autowired
     private ProdInOutMapper prodInOutMapper;
@@ -106,7 +111,8 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
         //公司ID
         Long companyId = BaseContextHolder.getCompanyId();
         //人员Id
-        Long userId = BaseContextHolder.getUserId();
+        Map<String,Object>  emp= employeeApi.getEmployeeByAccount();
+        Long userId = (Long)emp.get("em_id");
         //获取主表信息
         PurchaseDTO main = formdata.getMain();
         List<PurchaseDetailDTO> items = formdata.getItems();
@@ -138,6 +144,7 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
                 detail.setPd_puid(pu_id);
                 detail.setPd_code(pu_code);
                 detail.setPd_yqty(new Double(0));
+                detail.setPd_delivery(item.getPd_delivery()==null?purchase.getPu_delivery():item.getPd_delivery());
                 detail.setCompanyId(companyId);
                 detail.setCreatorId(userId);
                 detail.setCreateTime(new Date());
@@ -464,10 +471,8 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
 
         //采购验收单相关计算
         prodInOutService.calcProdInout(pi_id,"采购验收单");
-        DocBaseDTO baseDTO = new DocBaseDTO();
-        baseDTO.setId(pi_id);
-        baseDTO.setCode(piInoutno);
-        baseDTO.setName("采购验收单");
+        DocBaseDTO baseDTO = new DocBaseDTO(pi_id, piInoutno, BillCodeSeq.PURCHASEIN.getName());
+        messageLogService.customizeLog(baseDTO, Operation.TURNPURCCHECKIN);
         return Result.success(baseDTO);
     }
 

+ 4 - 2
applications/purchase/purchase-server/src/main/resources/mapper/ProdIODetailMapper.xml

@@ -38,6 +38,7 @@
     <result column="pd_text3" jdbcType="VARCHAR" property="pd_text3" />
     <result column="pd_text4" jdbcType="VARCHAR" property="pd_text4" />
     <result column="pd_text5" jdbcType="VARCHAR" property="pd_text5" />
+    <result column="pd_remark" jdbcType="VARCHAR" property="pd_remark" />
     <result column="pd_ym" jdbcType="INTEGER" property="pd_ym" />
     <result column="pd_yqty" jdbcType="DOUBLE" property="pd_yqty" />
     <result column="pd_ioid" jdbcType="INTEGER" property="pd_ioid" />
@@ -603,8 +604,9 @@
       #{item.pd_text5,jdbcType=VARCHAR},
       #{item.pd_ym,jdbcType=INTEGER},
       #{item.pd_yqty,jdbcType=DOUBLE},
-      #{item.pd_remark,jdbcType=LONGVARCHAR},
-      #{item.pd_ioid,jdbcType=INTEGER})
+      #{item.pd_ioid,jdbcType=INTEGER},
+      #{item.pd_remark,jdbcType=LONGVARCHAR}
+      )
     </foreach>
   </insert>
 

+ 0 - 32
applications/purchase/purchase-server/src/main/resources/mapper/PurchasePayMapper.xml

@@ -1,32 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
-<mapper namespace="com.usoftchina.saas.purchase.mapper.PurchasePayMapper" >
-  <resultMap id="BaseResultMap" type="com.usoftchina.saas.purchase.po.report.PurchasePay" >
-    <result column="pb_id" property="pb_id" jdbcType="INTEGER" />
-    <result column="pb_code" property="pb_code" jdbcType="VARCHAR" />
-    <result column="pu_vendcode" property="pu_vendcode" jdbcType="VARCHAR" />
-    <result column="pu_vendname" property="pu_vendname" jdbcType="VARCHAR" />
-    <result column="pb_recorder" property="pb_recorder" jdbcType="VARCHAR" />
-    <result column="pb_recorddate" property="pb_recorddate" jdbcType="TIMESTAMP" />
-    <result column="pbd_slcode" property="pbd_slcode" jdbcType="VARCHAR" />
-    <result column="pbd_slkind" property="pbd_slkind" jdbcType="VARCHAR" />
-    <result column="pbd_amount" property="pbd_amount" jdbcType="DOUBLE" />
-    <result column="pbd_nowbalance" property="pbd_nowbalance" jdbcType="DOUBLE" />
-    <result column="pb_pbdamount" property="pb_pbdamount" jdbcType="DOUBLE" />
-    <result column="pb_payrate" property="pb_payrate" jdbcType="DOUBLE" />
-    <result column="pd_remark" property="pd_remark" jdbcType="VARCHAR" />
-    <result column="companyid" property="companyid" jdbcType="INTEGER" />
-  </resultMap>
-  <select id="selectByCondition" resultMap="BaseResultMap">
-    select  *  from purchasepay_view
-    <where>
-      <if test="con != null">
-        ${con}
-      </if>
-      <if test="companyId != null">
-        and  companyId = #{companyId}
-      </if>
-    </where>
-    order by pb_recorddate desc
-  </select>
-</mapper>

+ 128 - 0
applications/purchase/purchase-server/src/main/resources/mapper/PurchaseReportMapper.xml

@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.usoftchina.saas.purchase.mapper.PurchaseReportMapper" >
+  <resultMap id="BaseResultMap" type="com.usoftchina.saas.purchase.po.report.PurchasePay" >
+    <result column="pb_id" property="pb_id" jdbcType="INTEGER" />
+    <result column="pb_code" property="pb_code" jdbcType="VARCHAR" />
+    <result column="pu_vendcode" property="pu_vendcode" jdbcType="VARCHAR" />
+    <result column="pu_vendname" property="pu_vendname" jdbcType="VARCHAR" />
+    <result column="pb_recorder" property="pb_recorder" jdbcType="VARCHAR" />
+    <result column="pb_recorddate" property="pb_recorddate" jdbcType="TIMESTAMP" />
+    <result column="pbd_slcode" property="pbd_slcode" jdbcType="VARCHAR" />
+    <result column="pbd_slkind" property="pbd_slkind" jdbcType="VARCHAR" />
+    <result column="pbd_amount" property="pbd_amount" jdbcType="DOUBLE" />
+    <result column="pbd_nowbalance" property="pbd_nowbalance" jdbcType="DOUBLE" />
+    <result column="pb_pbdamount" property="pb_pbdamount" jdbcType="DOUBLE" />
+    <result column="pb_payrate" property="pb_payrate" jdbcType="DOUBLE" />
+    <result column="pd_remark" property="pd_remark" jdbcType="VARCHAR" />
+    <result column="companyid" property="companyid" jdbcType="INTEGER" />
+  </resultMap>
+  <resultMap id="ListMap" type="com.usoftchina.saas.purchase.po.report.PurchaseReportDetail">
+    <id column="pu_id" property="pu_id" jdbcType="INTEGER" />
+    <result column="pu_code" property="pu_code" jdbcType="VARCHAR" />
+    <result column="pu_date" property="pu_date" jdbcType="TIMESTAMP" />
+    <result column="pu_vendid" property="pu_vendid" jdbcType="INTEGER" />
+    <result column="PU_VENDCODE" property="pu_vendcode" jdbcType="VARCHAR" />
+    <result column="PU_VENDNAME" property="pu_vendname" jdbcType="VARCHAR" />
+    <result column="PU_BUYERID" property="pu_buyerid" jdbcType="INTEGER" />
+    <result column="PU_BUYERCODE" property="pu_buyercode" jdbcType="VARCHAR" />
+    <result column="PU_BUYERNAME" property="pu_buyername" jdbcType="VARCHAR" />
+    <result column="PU_DELIVERY" property="pu_delivery" jdbcType="TIMESTAMP" />
+    <result column="PU_TAXTOTAL" property="pu_taxtotal" jdbcType="DOUBLE" />
+    <result column="PU_TOTAL" property="pu_total" jdbcType="DOUBLE" />
+    <result column="PU_REMARK" property="pu_remark" jdbcType="VARCHAR" />
+    <result column="PU_TOTALUPPER" property="pu_totalupper" jdbcType="VARCHAR" />
+    <result column="PU_INDATE" property="createTime" jdbcType="TIMESTAMP" />
+    <result column="PU_PRINTSTATUS" property="pu_printstatus" jdbcType="VARCHAR" />
+    <result column="PU_PRINTSTATUSCODE" property="pu_printstatuscode" jdbcType="VARCHAR" />
+    <result column="PU_ACCEPTSTATUSCODE" property="pu_acceptstatuscode" jdbcType="VARCHAR" />
+    <result column="PU_ACCEPTSTATUS" property="pu_acceptstatus" jdbcType="VARCHAR" />
+    <result column="PU_STATUSCODE" property="pu_statuscode" jdbcType="VARCHAR" />
+    <result column="PU_STATUS" property="pu_status" jdbcType="VARCHAR" />
+    <result column="companyid" property="companyId" jdbcType="BIGINT" />
+    <result column="updatemanid" property="updaterId" jdbcType="INTEGER" />
+    <result column="updatedate" property="updateTime" jdbcType="TIMESTAMP" />
+    <result column="pu_text1" property="pu_text1" jdbcType="VARCHAR" />
+    <result column="pu_text2" property="pu_text2" jdbcType="VARCHAR" />
+    <result column="pu_text3" property="pu_text3" jdbcType="VARCHAR" />
+    <result column="pu_text4" property="pu_text4" jdbcType="VARCHAR" />
+    <result column="pu_text5" property="pu_text5" jdbcType="VARCHAR" />
+    <result column="PD_ID" property="pd_id" jdbcType="INTEGER" />
+    <result column="PD_PUID" property="pd_puid" jdbcType="INTEGER" />
+    <result column="PD_CODE" property="pd_code" jdbcType="VARCHAR" />
+    <result column="PD_DETNO" property="pd_detno" jdbcType="INTEGER" />
+    <result column="PD_PRODID" property="pd_prodid" jdbcType="INTEGER" />
+    <result column="PD_PRODCODE" property="pd_prodcode" jdbcType="VARCHAR" />
+    <result column="PD_UNIT" property="pd_unit" jdbcType="VARCHAR" />
+    <result column="PD_QTY" property="pd_qty" jdbcType="DOUBLE" />
+    <result column="PD_PRICE" property="pd_price" jdbcType="DOUBLE" />
+    <result column="PD_TAXPRICE" property="pd_taxprice" jdbcType="DOUBLE" />
+    <result column="PD_TOTAL" property="pd_total" jdbcType="DOUBLE" />
+    <result column="PD_TAXTOTAL" property="pd_taxtotal" jdbcType="DOUBLE" />
+    <result column="PD_ACCEPTQTY" property="pd_acceptqty" jdbcType="DOUBLE" />
+    <result column="PD_DELIVERY" property="pd_delivery" jdbcType="TIMESTAMP" />
+    <result column="PD_SALECODE" property="pd_salecode" jdbcType="VARCHAR" />
+    <result column="PD_SALEDETNO" property="pd_saledetno" jdbcType="INTEGER" />
+    <result column="PD_SDID" property="pd_sdid" jdbcType="INTEGER" />
+    <result column="pd_text1" property="pd_text1" jdbcType="VARCHAR" />
+    <result column="pd_text2" property="pd_text2" jdbcType="VARCHAR" />
+    <result column="pd_text3" property="pd_text3" jdbcType="VARCHAR" />
+    <result column="pd_text4" property="pd_text4" jdbcType="VARCHAR" />
+    <result column="pd_text5" property="pd_text5" jdbcType="VARCHAR" />
+    <result column="pd_yqty" property="pd_yqty" jdbcType="DOUBLE" />
+    <result column="pr_id" property="pr_id"/>
+    <result column="pr_code" property="pr_code"/>
+    <result column="pr_detail" property="pr_detail"/>
+    <result column="pr_spec" property="pr_spec"/>
+    <result column="pr_unit" property="pr_unit"/>
+    <result column="pr_kind" property="pr_kind"/>
+    <result column="pr_orispeccode" property="pr_orispeccode"/>
+    <result column="pr_whid" property="pr_whid"/>
+    <result column="pr_whcode" property="pr_whcode"/>
+    <result column="pr_whname" property="pr_whname"/>
+    <result column="pr_zxbzs" property="pr_zxbzs"/>
+    <result column="pr_leadtime" property="pr_leadtime"/>
+    <result column="pr_brand" property="pr_brand"/>
+    <result column="pr_standardprice" property="pr_standardprice"/>
+    <result column="pr_purcprice" property="pr_purcprice"/>
+    <result column="pr_saleprice" property="pr_saleprice"/>
+    <result column="pr_vendid" property="pr_vendid"/>
+    <result column="pr_vendname" property="pr_vendname"/>
+    <result column="pr_vendcode" property="pr_vendcode"/>
+    <result column="pr_docdate" property="pr_docdate"/>
+    <result column="pr_recordmanid" property="pr_recordmanid"/>
+    <result column="pr_recordman" property="pr_recordman"/>
+    <result column="pr_status" property="pr_status"/>
+    <result column="pr_statuscode" property="pr_statuscode"/>
+    <result column="pr_text1" property="pr_text1"/>
+    <result column="pr_text2" property="pr_text2"/>
+    <result column="pr_text3" property="pr_text3"/>
+    <result column="pr_text4" property="pr_text4"/>
+    <result column="pd_accepttotal" property="pd_accepttotal"/>
+  </resultMap>
+  <select id="selectByCondition" resultMap="BaseResultMap">
+    select  *  from purchasepay_view
+    <where>
+      <if test="con != null">
+        ${con}
+      </if>
+      <if test="companyId != null">
+        and  companyId = #{companyId}
+      </if>
+    </where>
+    order by pb_recorddate desc
+  </select>
+
+  <select id="selectDetailByCondition"  resultMap="ListMap">
+    select  *,ifnull(purchasedetail.PD_ACCEPTQTY,0)*ifnull(purchasedetail.PD_PRICE,0) pd_accepttotal  from purchase left join purchasedetail on pu_id=pd_puid
+    left join product on pd_prodid=pr_id
+    <where>
+      <if test="con != null">
+        ${con}
+      </if>
+      <if test="companyId != null">
+        and   purchase.companyId = #{companyId}
+      </if>
+    </where>  order by pu_date desc
+  </select>
+</mapper>

+ 1 - 2
applications/storage/storage-server/src/main/java/com/usoftchina/saas/storage/mapper/MakeMapper.java

@@ -25,9 +25,8 @@ public interface MakeMapper extends CommonBaseMapper<Make> {
 
     int validateCodeWhenUpdate(@Param("code") String code, @Param("id") Long id, @Param("companyId") Long company);
 
-    double getOnHand(@Param("prodcode") String prodcode, @Param("whcode") String whcode, @Param("companyId") Long companyId);
+    Double getOnHand(@Param("prodcode") String prodcode, @Param("whcode") String whcode, @Param("companyId") Long companyId);
 
     String selectMakeInOutCode(@Param("code") String code, @Param("companyId") Long companyId, @Param("type") String type);
 
-    void calcMakePriceAndTotal(Long id);
 }

+ 2 - 0
applications/storage/storage-server/src/main/java/com/usoftchina/saas/storage/mapper/MakeMaterialMapper.java

@@ -25,4 +25,6 @@ public interface MakeMaterialMapper {
     void batchInsert(List<MakeMaterial> vendorcontactList);
 
     void batchUpdate(List<MakeMaterial> vendorcontactList);
+
+    void calcdetailtotal(Long ma_id);
 }

+ 59 - 36
applications/storage/storage-server/src/main/java/com/usoftchina/saas/storage/service/impl/MakeServiceImpl.java

@@ -105,11 +105,6 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
             docBaseDTO = generateMsgObj(make.getId(), make.getMa_code());
             messageLogService.save(docBaseDTO);
 
-
-            //抓取出库单位成本,计算出库成本
-            calcMakePriceAndTotal(make.getId());
-
-
         }else{
             //更新主表
             make.setUpdaterId(BaseContextHolder.getUserId());
@@ -147,17 +142,10 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
             docBaseDTO = generateMsgObj(make.getId(), make.getMa_code());
             messageLogService.update(docBaseDTO);
 
-            //抓取出库单位成本,计算出库成本
-            calcMakePriceAndTotal(make.getId());
-
         }
         return docBaseDTO;
     }
 
-    private void calcMakePriceAndTotal(Long id) {
-        getMapper().calcMakePriceAndTotal(id);
-    }
-
 
     /**
      * 校验库存是否足够
@@ -171,8 +159,11 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
             int i = 0;
             for(MakeMaterial makeMaterial : makeMaterialList){
                 i++;
-                double qty = makeMaterial.getMm_qty();
-                double onHand = getMapper().getOnHand(makeMaterial.getMm_prodcode(),makeMaterial.getMm_whcode(), BaseContextHolder.getCompanyId());
+                double qty = makeMaterial.getMm_qty()==null?0:makeMaterial.getMm_qty();
+                Double onHand = getMapper().getOnHand(makeMaterial.getMm_prodcode(),makeMaterial.getMm_whcode(), BaseContextHolder.getCompanyId());
+                if (onHand==null){
+                    onHand=0d;
+                }
                 if(onHand < qty){
                     throw new BizException(79402, "行" + i + "库存不足");
                 }
@@ -265,22 +256,21 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
             DocBaseDTO docBaseDTO = saveOrUpdate(makeListDTO);
             make.setId(docBaseDTO.getId());
         }
-        //抓取出库单位成本,计算出库成本
-        calcMakePriceAndTotal(make.getId());
-
         //2.校验库存是否足够
         validStorage(makeListDTO);
         //3.生成  完工入库单和领料单 并 过账
         generateProdIO(makeListDTO);
+
         //4.修改单据状态
         Make updateMake = new Make();
+        updateMake.setId(make.getId());
         updateMake.setMa_status(Status.AUDITED.getDisplay());
         updateMake.setMa_statuscode(Status.AUDITED.name());
         updateMake.setUpdateTime(new Date());
         updateMake.setUpdaterId(BaseContextHolder.getUserId());
         updateMake.setMa_auditman("");
         updateMake.setMa_auditdate(new Date());
-        getMapper().updateByPrimaryKeySelective(make);
+        getMapper().updateByPrimaryKeySelective(updateMake);
         DocBaseDTO docBaseDTO = generateMsgObj(make.getId(), make.getMa_code());
         //5.记录LOG
         messageLogService.audit(docBaseDTO);
@@ -292,9 +282,12 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
      * 2.过账
      * @param makeListDTO
      */
+    @Transactional(rollbackFor = Exception.class)
     private void generateProdIO(MakeListDTO makeListDTO) {
         Make make = makeListDTO.getMain();
+        Long ma_id = make.getId();
         List<MakeMaterial> items = makeListDTO.getItems();
+
         if ("组装".equals(make.getMa_type())){
             /** 1.生产领料单 **/
             //a.主表
@@ -303,7 +296,6 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
             String code = maxnumberService.getMaxnumber("MakeOut", true).getData();
             prodInOut.setPi_inoutno(code);
             prodInOut.setPi_date(new Date());       //出入库日期
-            //prodInOut.setPi_total(make.getMa_price());
             prodInOut.setPi_recordmanid(BaseContextHolder.getUserId());     //录入人ID
             prodInOut.setPi_recorddate(new Date());     //录入日期
             prodInOut.setPi_auditdate(new Date());      //审核日期
@@ -353,6 +345,10 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
             if (!StringUtils.isEmpty(map.get("result"))){
                 throw new BizException(76201, map.get("result").toString());
             }
+
+            //重新获取更新后的工单
+            make = getMapper().selectByPrimaryKey(ma_id);
+
             /** 2.完工入库单 **/
             //a.主表
             prodInOut = new ProdInOut();
@@ -360,7 +356,6 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
             code = maxnumberService.getMaxnumber("MakeIn", true).getData();
             prodInOut.setPi_inoutno(code);
             prodInOut.setPi_date(new Date());       //出入库日期
-            //prodInOut.setPi_total(make.getMa_price());
             prodInOut.setPi_recordmanid(BaseContextHolder.getUserId());     //录入人ID
             prodInOut.setPi_recorddate(new Date());     //录入日期
             prodInOut.setPi_auditdate(new Date());      //审核日期
@@ -371,6 +366,7 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
             prodInOut.setCompanyId(BaseContextHolder.getCompanyId());   //公司ID
             prodInOut.setCreateTime(new Date());
             prodInOut.setCreatorId(BaseContextHolder.getUserId());      //创建人ID
+            prodInOut.setPi_total(make.getMa_total());
             prodInOutMapper.insertSelective(prodInOut);
             pi_id = prodInOut.getId();
             //b.从表
@@ -403,10 +399,10 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
                 throw new BizException(76201, map.get("result").toString());
             }
         }else if ("拆件".equals(make.getMa_type())){
-            /** 1.生产领料单 **/
+            /** 1.拆件领料单 **/
             //a.主表
             ProdInOut prodInOut = new ProdInOut();
-            prodInOut.setPi_class("生产领料单");
+            prodInOut.setPi_class("拆件领料单");
             String code = maxnumberService.getMaxnumber("MakeOut", true).getData();
             prodInOut.setPi_inoutno(code);
             prodInOut.setPi_date(new Date());       //出入库日期
@@ -434,8 +430,8 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
             prodIODetail.setPd_prodid(make.getMa_prodid());    //物料ID
             prodIODetail.setPd_prodcode(make.getMa_prodcode()); //物料CODE
             prodIODetail.setPd_outqty(make.getMa_qty());        //出库数
-            prodIODetail.setPd_price(make.getMa_price());       //成本单价 ???
-            prodIODetail.setPd_total(make.getMa_total());      //金额
+            prodIODetail.setPd_price(new Double(0));       //成本单价 ???
+            prodIODetail.setPd_total(new Double(0));      //金额
             prodIODetail.setPd_whid(make.getMa_whid());         //仓库ID
             prodIODetail.setPd_whcode(make.getMa_whcode());     //仓库CODE
             prodIODetail.setPd_whname(make.getMa_whname());     //仓库名称
@@ -446,7 +442,7 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
             //c.领料单过账
             Map<String, Object> map = new HashMap<String, Object>();
             map.put("inoutNo", code);
-            map.put("class", "生产领料单");
+            map.put("class", "拆件领料单");
             map.put("commitid", BaseContextHolder.getUserId());
             map.put("companyId", BaseContextHolder.getCompanyId());
             map.put("result", null);
@@ -454,6 +450,14 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
             if (!StringUtils.isEmpty(map.get("result"))){
                 throw new BizException(76201, map.get("result").toString());
             }
+
+            //重新获取更新后的工单
+            //合计工单明细
+            makeMaterialMapper.calcdetailtotal(ma_id);
+            make = getMapper().selectByPrimaryKey(ma_id);
+            items = makeMaterialMapper.selectByFK(ma_id,BaseContextHolder.getCompanyId());
+
+
             /** 2.完工入库单 **/
             //a.主表
             prodInOut = new ProdInOut();
@@ -461,7 +465,6 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
             code = maxnumberService.getMaxnumber("MakeIn", true).getData();
             prodInOut.setPi_inoutno(code);
             prodInOut.setPi_date(new Date());       //出入库日期
-            //prodInOut.setPi_total(make.getMa_price());
             prodInOut.setPi_recordmanid(BaseContextHolder.getUserId());     //录入人ID
             prodInOut.setPi_recorddate(new Date());     //录入日期
             prodInOut.setPi_auditdate(new Date());      //审核日期
@@ -474,6 +477,8 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
             prodInOut.setCreatorId(BaseContextHolder.getUserId());      //创建人ID
             prodInOutMapper.insertSelective(prodInOut);
             pi_id = prodInOut.getId();
+            //计算完工入库单主表金额
+            prodIODetailMapper.calcProdIn(pi_id);
             //b.从表
             List<ProdIODetail> prodIODetailList = new ArrayList<ProdIODetail>();
             int detno = 0;
@@ -526,11 +531,12 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
         selectProdIO(make);
         //5.修改单据状态
         Make updateMake = new Make();
-        make.setMa_status(Status.UNAUDITED.getDisplay());
-        make.setMa_statuscode(Status.UNAUDITED.name());
-        make.setUpdateTime(new Date());
-        make.setUpdaterId(BaseContextHolder.getUserId());
-        getMapper().updateByPrimaryKeySelective(make);
+        updateMake.setId(make.getId());
+        updateMake.setMa_status(Status.UNAUDITED.getDisplay());
+        updateMake.setMa_statuscode(Status.UNAUDITED.name());
+        updateMake.setUpdateTime(new Date());
+        updateMake.setUpdaterId(BaseContextHolder.getUserId());
+        getMapper().updateByPrimaryKeySelective(updateMake);
         DocBaseDTO docBaseDTO = generateMsgObj(id, make.getMa_code());
         //6.记录LOG
         messageLogService.unAudit(docBaseDTO);
@@ -580,11 +586,18 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
      * 2.反过账
      * @param make
      */
+    @Transactional(rollbackFor = Exception.class)
     private void selectProdIO(Make make) {
         String code = make.getMa_code();
+        String type = make.getMa_type();
+        String outCode="";
         Long companyId = BaseContextHolder.getCompanyId();
         String inCode = getMapper().selectMakeInOutCode(code, companyId, "完工入库单");
-        String outCode = getMapper().selectMakeInOutCode(code, companyId, "生产领料单");
+        if ("拆件".equals(type)){
+            outCode = getMapper().selectMakeInOutCode(code, companyId, "拆件领料单");
+        }else if ("组装".equals(type)){
+            outCode = getMapper().selectMakeInOutCode(code, companyId, "生产领料单");
+        }
         Map<String, Object> map = new HashMap<String, Object>();
         map.put("inoutNo", inCode);
         map.put("class", "完工入库单");
@@ -599,15 +612,25 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
         prodInOutMapper.deleteByInOutNo(inCode, "完工入库单", BaseContextHolder.getCompanyId());
         prodIODetailMapper.deleteByInOutNo(inCode, "完工入库单", BaseContextHolder.getCompanyId());
 
+        if ("拆件".equals(type)){
+            map.put("class", "拆件领料单");
+        }else if ("组装".equals(type)){
+            map.put("class", "生产领料单");
+        }
         map.put("inoutNo", outCode);
-        map.put("class", "生产领料单");
-        //生产领料单反过账
+        map.put("result", null);
+        //生产领料单/拆件领料反过账
         prodInOutMapper.unPost(map);
         if(!StringUtils.isEmpty(map.get("result"))){
             throw new BizException(76204, map.get("result").toString());
         }
-        prodInOutMapper.deleteByInOutNo(outCode, "生产领料单", BaseContextHolder.getCompanyId());
-        prodIODetailMapper.deleteByInOutNo(outCode, "生产领料单", BaseContextHolder.getCompanyId());
+        if ("拆件".equals(type)){
+            prodInOutMapper.deleteByInOutNo(outCode, "拆件领料单", BaseContextHolder.getCompanyId());
+            prodIODetailMapper.deleteByInOutNo(outCode, "拆件领料单", BaseContextHolder.getCompanyId());
+        }else if ("组装".equals(type)){
+            prodInOutMapper.deleteByInOutNo(outCode, "生产领料单", BaseContextHolder.getCompanyId());
+            prodIODetailMapper.deleteByInOutNo(outCode, "生产领料单", BaseContextHolder.getCompanyId());
+        }
     }
 
     /**

+ 5 - 0
applications/storage/storage-server/src/main/resources/mapper/MakematerialMapper.xml

@@ -337,4 +337,9 @@
         where mm_id=#{item.id}
     </foreach>
   </update>
+
+  <update id="calcdetailtotal" parameterType="long" >
+    update MakeMaterial set mm_amount = mm_price*mm_qty where mm_maid = #{id}
+  </update>
+
 </mapper>

+ 4 - 2
applications/storage/storage-server/src/main/resources/mapper/ProdIODetailMapper.xml

@@ -38,6 +38,7 @@
     <result column="pd_text3" jdbcType="VARCHAR" property="pd_text3" />
     <result column="pd_text4" jdbcType="VARCHAR" property="pd_text4" />
     <result column="pd_text5" jdbcType="VARCHAR" property="pd_text5" />
+    <result column="pd_remark" jdbcType="VARCHAR" property="pd_remark" />
     <result column="pd_ym" jdbcType="INTEGER" property="pd_ym" />
     <result column="pd_yqty" jdbcType="DOUBLE" property="pd_yqty" />
     <result column="pd_ioid" jdbcType="INTEGER" property="pd_ioid" />
@@ -603,8 +604,9 @@
       #{item.pd_text5,jdbcType=VARCHAR},
       #{item.pd_ym,jdbcType=INTEGER},
       #{item.pd_yqty,jdbcType=DOUBLE},
-      #{item.pd_remark,jdbcType=LONGVARCHAR},
-      #{item.pd_ioid,jdbcType=INTEGER})
+      #{item.pd_ioid,jdbcType=INTEGER},
+      #{item.pd_remark,jdbcType=LONGVARCHAR}
+      )
     </foreach>
   </insert>
 

+ 1 - 0
base-servers/gateway-server/src/main/resources/application.yml

@@ -177,3 +177,4 @@ auth:
     - /api/auth/authorize
     - /api/account/account/register
     - /api/account/company/register
+    - /api/auth/info

+ 23 - 0
base-servers/mail/mail-api/pom.xml

@@ -11,4 +11,27 @@
 
     <artifactId>mail-api</artifactId>
     <description>mail api</description>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-openfeign</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.usoftchina.saas</groupId>
+            <artifactId>core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.usoftchina.saas</groupId>
+            <artifactId>mail-dto</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-context-support</artifactId>
+        </dependency>
+    </dependencies>
 </project>

+ 191 - 0
base-servers/mail/mail-api/src/main/java/com/usoftchina/saas/mail/MailBuilder.java

@@ -0,0 +1,191 @@
+package com.usoftchina.saas.mail;
+
+import com.usoftchina.saas.base.Result;
+import com.usoftchina.saas.context.SpringContextHolder;
+import com.usoftchina.saas.exception.BizException;
+import com.usoftchina.saas.mail.api.MailApi;
+import com.usoftchina.saas.mail.dto.TemplateMailMessage;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.mail.SimpleMailMessage;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author yingp
+ * @date 2018/11/13
+ */
+public abstract class MailBuilder {
+
+    private Logger logger = LoggerFactory.getLogger(MailBuilder.class);
+
+    protected String from;
+    protected String[] to;
+    protected String[] cc;
+    protected String[] bcc;
+
+    /**
+     * 发送人
+     *
+     * @param from
+     * @return
+     */
+    public MailBuilder from(String from) {
+        this.from = from;
+        return this;
+    }
+
+    /**
+     * 接收人
+     *
+     * @param to
+     * @return
+     */
+    public MailBuilder to(String... to) {
+        this.to = to;
+        return this;
+    }
+
+    /**
+     * 接收人
+     *
+     * @param to
+     * @return
+     */
+    public MailBuilder to(List<String> to) {
+        this.to = to.toArray(new String[]{});
+        return this;
+    }
+
+    /**
+     * @param cc
+     * @return
+     */
+    public MailBuilder cc(String... cc) {
+        this.cc = cc;
+        return this;
+    }
+
+    /**
+     * @param cc
+     * @return
+     */
+    public MailBuilder cc(List<String> cc) {
+        this.cc = cc.toArray(new String[]{});
+        return this;
+    }
+
+    /**
+     * @param bcc
+     * @return
+     */
+    public MailBuilder bcc(String... bcc) {
+        this.bcc = bcc;
+        return this;
+    }
+
+    /**
+     * @param bcc
+     * @return
+     */
+    public MailBuilder bcc(List<String> bcc) {
+        this.bcc = bcc.toArray(new String[]{});
+        return this;
+    }
+
+    /**
+     * 发送邮件
+     *
+     * @param api
+     * @return
+     */
+    protected abstract Result send(MailApi api);
+
+    /**
+     * 发送邮件
+     */
+    public void send() {
+        MailApi api = SpringContextHolder.getBean(MailApi.class);
+        Result result = send(api);
+        if (!result.isSuccess()) {
+            logger.error("failed to send mail, " + result.getMessage());
+            throw new BizException(result.getCode(), result.getMessage());
+        }
+    }
+
+    public static SimpleMailBuilder simple() {
+        return new SimpleMailBuilder();
+    }
+
+    public static TemplateMailBuilder template(String templateId) {
+        return new TemplateMailBuilder(templateId);
+    }
+
+    private static class SimpleMailBuilder extends MailBuilder{
+        private String subject;
+        private String text;
+
+        /**
+         * 邮件主题
+         *
+         * @param subject
+         * @return
+         */
+        public MailBuilder subject(String subject) {
+            this.subject = subject;
+            return this;
+        }
+
+        /**
+         * 邮件内容
+         *
+         * @param text
+         * @return
+         */
+        public MailBuilder text(String text) {
+            this.text = text;
+            return this;
+        }
+
+        @Override
+        protected Result send(MailApi api) {
+            SimpleMailMessage message = new SimpleMailMessage();
+            message.setFrom(from);
+            message.setTo(to);
+            message.setCc(cc);
+            message.setBcc(bcc);
+            message.setSubject(subject);
+            message.setText(text);
+            return api.send(message);
+        }
+    }
+
+    private static class TemplateMailBuilder extends MailBuilder{
+        private String templateId;
+        private Map<String, Object> metadata;
+
+        public TemplateMailBuilder(String templateId) {
+            this.templateId = templateId;
+        }
+
+        public TemplateMailBuilder metadata(Map<String, Object> metadata) {
+            this.metadata = metadata;
+            return this;
+        }
+
+        public TemplateMailBuilder set(String key, String value) {
+            if (null == metadata) {
+                metadata = new HashMap<>(1);
+            }
+            metadata.put(key, value);
+            return this;
+        }
+
+        @Override
+        protected Result send(MailApi api) {
+            return api.sendTemplate(new TemplateMailMessage(templateId, to, cc, bcc, metadata));
+        }
+    }
+}

+ 33 - 0
base-servers/mail/mail-api/src/main/java/com/usoftchina/saas/mail/api/MailApi.java

@@ -0,0 +1,33 @@
+package com.usoftchina.saas.mail.api;
+
+import com.usoftchina.saas.base.Result;
+import com.usoftchina.saas.mail.dto.TemplateMailMessage;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.mail.SimpleMailMessage;
+import org.springframework.web.bind.annotation.PostMapping;
+
+/**
+ * 邮件接口
+ *
+ * @author yingp
+ * @date 2018/11/13
+ */
+@FeignClient(name = "mail-server")
+public interface MailApi {
+    /**
+     * 发送邮件
+     *
+     * @param message
+     * @return
+     */
+    @PostMapping(value = "/send")
+    Result send(SimpleMailMessage message);
+    /**
+     * 指定模板发送邮件
+     *
+     * @param message
+     * @return
+     */
+    @PostMapping(value = "/template/send")
+    Result sendTemplate(TemplateMailMessage message);
+}

+ 0 - 1
base-servers/mail/mail-dto/pom.xml

@@ -12,5 +12,4 @@
     <artifactId>mail-dto</artifactId>
     <description>mail data transfer object</description>
 
-
 </project>

+ 0 - 11
base-servers/mail/mail-dto/src/main/java/com/usoftchina/saas/mail/dto/MailDto.java

@@ -1,11 +0,0 @@
-package com.usoftchina.saas.mail.dto;
-
-import java.io.Serializable;
-
-/**
- * @author yingp
- * @date 2018/10/3
- */
-public class MailDto implements Serializable {
-
-}

+ 57 - 0
base-servers/mail/mail-dto/src/main/java/com/usoftchina/saas/mail/dto/MailLogDTO.java

@@ -0,0 +1,57 @@
+package com.usoftchina.saas.mail.dto;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author yingp
+ * @date 2018/11/13
+ */
+public class MailLogDTO implements Serializable{
+    private String subject;
+    private String message;
+    private String recipients;
+    private Date createTime;
+
+    public String getSubject() {
+        return subject;
+    }
+
+    public void setSubject(String subject) {
+        this.subject = subject;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    public String getRecipients() {
+        return recipients;
+    }
+
+    public void setRecipients(String recipients) {
+        this.recipients = recipients;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    @Override
+    public String toString() {
+        return "MailLogDTO{" +
+                "subject='" + subject + '\'' +
+                ", message='" + message + '\'' +
+                ", recipients='" + recipients + '\'' +
+                ", createTime=" + createTime +
+                '}';
+    }
+}

+ 89 - 0
base-servers/mail/mail-dto/src/main/java/com/usoftchina/saas/mail/dto/TemplateMailMessage.java

@@ -0,0 +1,89 @@
+package com.usoftchina.saas.mail.dto;
+
+import java.io.Serializable;
+import java.util.Map;
+
+/**
+ * @author yingp
+ * @date 2018/11/13
+ */
+public class TemplateMailMessage implements Serializable{
+    private String templateId;
+    private String from;
+    private String[] to;
+    private String[] cc;
+    private String[] bcc;
+    private Map<String, Object> metadata;
+
+    public TemplateMailMessage() {
+    }
+
+    public TemplateMailMessage(String templateId, String from, String[] to, String[] cc, String[] bcc, Map<String, Object> metadata) {
+        this.templateId = templateId;
+        this.from = from;
+        this.to = to;
+        this.cc = cc;
+        this.bcc = bcc;
+        this.metadata = metadata;
+    }
+
+    public String getFrom() {
+        return from;
+    }
+
+    public void setFrom(String from) {
+        this.from = from;
+    }
+
+    public String[] getTo() {
+        return to;
+    }
+
+    public void setTo(String[] to) {
+        this.to = to;
+    }
+
+    public String[] getCc() {
+        return cc;
+    }
+
+    public void setCc(String[] cc) {
+        this.cc = cc;
+    }
+
+    public String[] getBcc() {
+        return bcc;
+    }
+
+    public void setBcc(String[] bcc) {
+        this.bcc = bcc;
+    }
+
+    public String getTemplateId() {
+        return templateId;
+    }
+
+    public void setTemplateId(String templateId) {
+        this.templateId = templateId;
+    }
+
+    public Map<String, Object> getMetadata() {
+        return metadata;
+    }
+
+    public void setMetadata(Map<String, Object> metadata) {
+        this.metadata = metadata;
+    }
+
+    @Override
+    public String toString() {
+        return "TemplateMailMessage{" +
+                "templateId='" + templateId + '\'' +
+                ", from='" + from + '\'' +
+                ", to=" + Arrays.toString(to) +
+                ", cc=" + Arrays.toString(cc) +
+                ", bcc=" + Arrays.toString(bcc) +
+                ", metadata=" + metadata +
+                '}';
+    }
+}

+ 11 - 25
base-servers/mail/mail-server/pom.xml

@@ -19,7 +19,7 @@
         </dependency>
         <dependency>
             <groupId>com.usoftchina.saas</groupId>
-            <artifactId>core</artifactId>
+            <artifactId>server-starter</artifactId>
         </dependency>
         <dependency>
             <groupId>com.usoftchina.saas</groupId>
@@ -27,30 +27,7 @@
         </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-web</artifactId>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.hibernate</groupId>
-                    <artifactId>hibernate-validator</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>org.apache.tomcat.embed</groupId>
-                    <artifactId>tomcat-embed-websocket</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-        <!-- management -->
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-actuator</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-security</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.springframework.cloud</groupId>
-            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
+            <artifactId>spring-boot-starter-mail</artifactId>
         </dependency>
         <!-- db -->
         <dependency>
@@ -61,6 +38,10 @@
             <groupId>org.mybatis.spring.boot</groupId>
             <artifactId>mybatis-spring-boot-starter</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.github.pagehelper</groupId>
+            <artifactId>pagehelper-spring-boot-starter</artifactId>
+        </dependency>
         <!-- api doc -->
         <dependency>
             <groupId>io.springfox</groupId>
@@ -70,6 +51,11 @@
             <groupId>io.springfox</groupId>
             <artifactId>springfox-swagger2</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>org.freemarker</groupId>
+            <artifactId>freemarker</artifactId>
+        </dependency>
     </dependencies>
 
     <build>

+ 6 - 0
base-servers/mail/mail-server/src/main/java/com/usoftchina/saas/mail/MailApplication.java

@@ -1,8 +1,11 @@
 package com.usoftchina.saas.mail;
 
+import com.usoftchina.saas.auth.client.EnableAuthClient;
+import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
 
 /**
  * @author yingp
@@ -10,6 +13,9 @@ import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
  */
 @SpringBootApplication
 @EnableEurekaClient
+@EnableAuthClient
+@MapperScan
+@EnableTransactionManagement
 public class MailApplication {
     public static void main(String[] args) {
         SpringApplication.run(MailApplication.class, args);

+ 88 - 0
base-servers/mail/mail-server/src/main/java/com/usoftchina/saas/mail/controller/MailController.java

@@ -0,0 +1,88 @@
+package com.usoftchina.saas.mail.controller;
+
+import com.usoftchina.saas.base.Result;
+import com.usoftchina.saas.mail.dto.TemplateMailMessage;
+import com.usoftchina.saas.mail.po.MailLog;
+import com.usoftchina.saas.mail.po.MailTemplate;
+import com.usoftchina.saas.mail.service.MailLogService;
+import com.usoftchina.saas.mail.service.MailTemplateService;
+import freemarker.template.Template;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.mail.SimpleMailMessage;
+import org.springframework.mail.javamail.JavaMailSender;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.io.StringReader;
+import java.io.StringWriter;
+
+/**
+ * @author yingp
+ * @date 2018/11/13
+ */
+@RestController
+@RequestMapping
+public class MailController {
+
+    @Autowired
+    private MailTemplateService mailTemplateService;
+
+    @Autowired
+    private MailLogService mailLogService;
+
+    @Autowired
+    private JavaMailSender javaMailSender;
+
+    /**
+     * 发送邮件
+     *
+     * @param message
+     * @return
+     */
+    @PostMapping(value = "/send")
+    public Result send(SimpleMailMessage message) {
+        javaMailSender.send(message);
+        mailLogService.save(new MailLog(message));
+        return Result.success();
+    }
+
+    /**
+     * 指定模板发送邮件
+     *
+     * @param message
+     * @return
+     */
+    @PostMapping(value = "/template/send")
+    public Result sendTemplate(TemplateMailMessage message) throws Exception{
+        SimpleMailMessage mailMessage = getMessageByTemplate(message);
+        javaMailSender.send(mailMessage);
+        MailLog log = new MailLog(mailMessage);
+        log.setTemplateId(message.getTemplateId());
+        mailLogService.save(log);
+        return Result.success();
+    }
+
+    /**
+     * freemarker模板处理
+     *
+     * @param message
+     * @return
+     * @throws Exception
+     */
+    private SimpleMailMessage getMessageByTemplate(TemplateMailMessage message) throws Exception{
+        MailTemplate mailTemplate = mailTemplateService.findByPrimaryKey(message.getTemplateId());
+        Template template = new Template(mailTemplate.getId(),
+                new StringReader(mailTemplate.getText()), null);
+        StringWriter text = new StringWriter();
+        template.process(message.getMetadata(), text);
+        SimpleMailMessage mailMessage = new SimpleMailMessage();
+        mailMessage.setBcc(message.getBcc());
+        mailMessage.setCc(message.getCc());
+        mailMessage.setTo(message.getTo());
+        mailMessage.setFrom(message.getFrom());
+        mailMessage.setSubject(mailTemplate.getSubject());
+        mailMessage.setText(text.toString());
+        return mailMessage;
+    }
+}

+ 26 - 0
base-servers/mail/mail-server/src/main/java/com/usoftchina/saas/mail/mapper/MailLogMapper.java

@@ -0,0 +1,26 @@
+package com.usoftchina.saas.mail.mapper;
+
+import com.usoftchina.saas.mail.po.MailLog;
+
+import java.util.List;
+
+/**
+ * @author yingp
+ * @date 2018/11/13
+ */
+public interface MailLogMapper {
+    /**
+     * 新增
+     *
+      * @param log
+     * @return
+     */
+    int insert(MailLog log);
+
+    /**
+     * 查找
+     *
+     * @return
+     */
+    List<MailLog> selectAll();
+}

+ 40 - 0
base-servers/mail/mail-server/src/main/java/com/usoftchina/saas/mail/mapper/MailTemplateMapper.java

@@ -0,0 +1,40 @@
+package com.usoftchina.saas.mail.mapper;
+
+import com.usoftchina.saas.mail.po.MailTemplate;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * @author yingp
+ * @date 2018/11/13
+ */
+public interface MailTemplateMapper {
+    /**
+     * 新增
+     *
+     * @param template
+     * @return
+     */
+    int insert(MailTemplate template);
+
+    /**
+     * 更新
+     * @param template
+     * @return
+     */
+    int updateByPrimaryKey(MailTemplate template);
+
+    /**
+     * 删除
+     *
+     * @param id
+     * @return
+     */
+    int deleteByPrimaryKey(@Param("id") String id);
+    /**
+     * 查询
+     *
+     * @param id
+     * @return
+     */
+    MailTemplate selectByPrimaryKey(@Param("id") String id);
+}

+ 110 - 0
base-servers/mail/mail-server/src/main/java/com/usoftchina/saas/mail/po/MailLog.java

@@ -0,0 +1,110 @@
+package com.usoftchina.saas.mail.po;
+
+import com.usoftchina.saas.context.BaseContextHolder;
+import com.usoftchina.saas.utils.StringUtils;
+import org.springframework.mail.SimpleMailMessage;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author yingp
+ * @date 2018/11/13
+ */
+public class MailLog implements Serializable{
+    private Long id;
+    private String templateId;
+    private String subject;
+    private String text;
+    private String from;
+    private String to;
+    private Long companyId;
+    private Long creatorId;
+    private Date createTime;
+
+    public MailLog() {
+        this.companyId = BaseContextHolder.getCompanyId();
+        this.creatorId = BaseContextHolder.getUserId();
+        this.createTime = new Date();
+    }
+
+    public MailLog(SimpleMailMessage message) {
+        this();
+        this.from = message.getFrom();
+        this.to = StringUtils.arrayToCommaDelimitedString(message.getTo());
+        this.subject = message.getSubject();
+        this.text = message.getText();
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public String getTemplateId() {
+        return templateId;
+    }
+
+    public void setTemplateId(String templateId) {
+        this.templateId = templateId;
+    }
+
+    public Long getCompanyId() {
+        return companyId;
+    }
+
+    public void setCompanyId(Long companyId) {
+        this.companyId = companyId;
+    }
+
+    public String getSubject() {
+        return subject;
+    }
+
+    public void setSubject(String subject) {
+        this.subject = subject;
+    }
+
+    public String getText() {
+        return text;
+    }
+
+    public void setText(String text) {
+        this.text = text;
+    }
+
+    public String getFrom() {
+        return from;
+    }
+
+    public void setFrom(String from) {
+        this.from = from;
+    }
+
+    public String getTo() {
+        return to;
+    }
+
+    public void setTo(String to) {
+        this.to = to;
+    }
+
+    public Long getCreatorId() {
+        return creatorId;
+    }
+
+    public void setCreatorId(Long creatorId) {
+        this.creatorId = creatorId;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+}

+ 38 - 0
base-servers/mail/mail-server/src/main/java/com/usoftchina/saas/mail/po/MailTemplate.java

@@ -0,0 +1,38 @@
+package com.usoftchina.saas.mail.po;
+
+import java.io.Serializable;
+
+/**
+ * @author yingp
+ * @date 2018/11/13
+ */
+public class MailTemplate implements Serializable{
+
+    private String id;
+    private String subject;
+    private String text;
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getSubject() {
+        return subject;
+    }
+
+    public void setSubject(String subject) {
+        this.subject = subject;
+    }
+
+    public String getText() {
+        return text;
+    }
+
+    public void setText(String text) {
+        this.text = text;
+    }
+}

+ 29 - 0
base-servers/mail/mail-server/src/main/java/com/usoftchina/saas/mail/service/MailLogService.java

@@ -0,0 +1,29 @@
+package com.usoftchina.saas.mail.service;
+
+import com.github.pagehelper.PageInfo;
+import com.usoftchina.saas.mail.dto.MailLogDTO;
+import com.usoftchina.saas.mail.po.MailLog;
+import com.usoftchina.saas.page.PageRequest;
+
+/**
+ * @author yingp
+ * @date 2018/11/13
+ */
+public interface MailLogService {
+
+    /**
+     * 保存日志
+     *
+     * @param log
+     * @return
+     */
+    boolean save(MailLog log);
+
+    /**
+     * 分页查找日志
+     *
+     * @param page
+     * @return
+     */
+    PageInfo<MailLogDTO> findPage(PageRequest page);
+}

+ 42 - 0
base-servers/mail/mail-server/src/main/java/com/usoftchina/saas/mail/service/MailTemplateService.java

@@ -0,0 +1,42 @@
+package com.usoftchina.saas.mail.service;
+
+import com.usoftchina.saas.mail.po.MailTemplate;
+
+/**
+ * @author yingp
+ * @date 2018/11/13
+ */
+public interface MailTemplateService {
+
+    /**
+     * 新增
+     *
+     * @param template
+     * @return
+     */
+    boolean save(MailTemplate template);
+
+    /**
+     * 更新
+     *
+     * @param template
+     * @return
+     */
+    boolean updateByPrimaryKey(MailTemplate template);
+
+    /**
+     * 删除
+     *
+     * @param id
+     * @return
+     */
+    boolean removeByPrimaryKey(String id);
+
+    /**
+     * 查找
+     *
+     * @param id
+     * @return
+     */
+    MailTemplate findByPrimaryKey(String id);
+}

+ 39 - 0
base-servers/mail/mail-server/src/main/java/com/usoftchina/saas/mail/service/impl/MailLogServiceImpl.java

@@ -0,0 +1,39 @@
+package com.usoftchina.saas.mail.service.impl;
+
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.usoftchina.saas.mail.dto.MailLogDTO;
+import com.usoftchina.saas.mail.mapper.MailLogMapper;
+import com.usoftchina.saas.mail.po.MailLog;
+import com.usoftchina.saas.mail.service.MailLogService;
+import com.usoftchina.saas.page.PageRequest;
+import com.usoftchina.saas.utils.BeanMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * @author yingp
+ * @date 2018/11/13
+ */
+@Service
+public class MailLogServiceImpl implements MailLogService{
+
+    @Autowired
+    private MailLogMapper mailLogMapper;
+
+    @Override
+    @Async
+    public boolean save(MailLog log) {
+        return mailLogMapper.insert(log) > 0;
+    }
+
+    @Override
+    public PageInfo<MailLogDTO> findPage(PageRequest page) {
+        PageHelper.startPage(page.getNumber(), page.getSize());
+        List<MailLog> logs = mailLogMapper.selectAll();
+        return new PageInfo<>(BeanMapper.mapList(logs, MailLogDTO.class));
+    }
+}

+ 38 - 0
base-servers/mail/mail-server/src/main/java/com/usoftchina/saas/mail/service/impl/MailTemplateServiceImpl.java

@@ -0,0 +1,38 @@
+package com.usoftchina.saas.mail.service.impl;
+
+import com.usoftchina.saas.mail.mapper.MailTemplateMapper;
+import com.usoftchina.saas.mail.po.MailTemplate;
+import com.usoftchina.saas.mail.service.MailTemplateService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author yingp
+ * @date 2018/11/13
+ */
+@Service
+public class MailTemplateServiceImpl implements MailTemplateService{
+
+    @Autowired
+    private MailTemplateMapper mailTemplateMapper;
+
+    @Override
+    public boolean save(MailTemplate template) {
+        return mailTemplateMapper.insert(template) > 0;
+    }
+
+    @Override
+    public boolean updateByPrimaryKey(MailTemplate template) {
+        return mailTemplateMapper.updateByPrimaryKey(template) > 0;
+    }
+
+    @Override
+    public boolean removeByPrimaryKey(String id) {
+        return mailTemplateMapper.deleteByPrimaryKey(id) > 0;
+    }
+
+    @Override
+    public MailTemplate findByPrimaryKey(String id) {
+        return mailTemplateMapper.selectByPrimaryKey(id);
+    }
+}

+ 85 - 0
base-servers/mail/mail-server/src/main/resources/application.yml

@@ -0,0 +1,85 @@
+spring:
+  application:
+    name: mail-server
+  security:
+    user:
+      name: admin
+      password: select111***
+  rabbitmq:
+    host: 192.168.0.176
+    port: 5672
+    virtual-host: dev
+    username: saas
+    password: select123***
+  zipkin:
+    sender:
+      type: rabbit
+    locator:
+      discovery:
+        enabled: true
+  sleuth:
+    sampler:
+      probability: 1.0
+  datasource:
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    url: jdbc:mysql://192.168.253.12:3306/saas_mail?characterEncoding=utf-8&useSSL=false
+    username: root
+    password: select111***
+    hikari:
+      minimum-idle: 5
+      maximum-pool-size: 50
+      idle-timeout: 30000
+      max-lifetime: 1800000
+      connection-timeout: 30000
+  messages:
+    basename: i18n/messages
+  redis:
+    host: 192.168.253.12
+    port: 6379
+  jackson:
+    date-format: yyyy-MM-dd HH:mm:ss
+    time-zone: GMT+8
+  mail:
+    host: smtp.mxhichina.com
+    username: service@ubtob.com
+    password: Aaabbb111
+eureka:
+  instance:
+    leaseRenewalIntervalInSeconds: 10
+    health-check-url-path: /actuator/health
+    status-page-url-path: /actuator/info
+    prefer-ip-address: true
+    metadata-map:
+      user.name: ${spring.security.user.name}
+      user.password: ${spring.security.user.password}
+  client:
+    registryFetchIntervalSeconds: 5
+    serviceUrl:
+      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@192.168.0.181:8510/eureka/
+server:
+  port: 8660
+  tomcat:
+    uri-encoding: UTF-8
+management:
+  endpoints:
+    web:
+      exposure:
+        include: "*"
+  endpoint:
+    health:
+      show-details: always
+    shutdown:
+      enabled: true
+    restart:
+      enabled: true
+info:
+  name: '@project.artifactId@'
+  description: '@project.description@'
+  version: '@project.version@'
+  spring-boot-version: '@spring.boot.version@'
+  spring-cloud-version: '@spring.cloud.version@'
+mybatis:
+  type-aliases-package: com.usoftchina.saas.mail.po
+  mapper-locations: classpath:mapper/*.xml
+auth:
+  public-key: auth/pub.key

+ 12 - 0
base-servers/mail/mail-server/src/main/resources/config/application-docker-dev.yml

@@ -0,0 +1,12 @@
+eureka:
+  instance:
+    hostname: saas-mail-server-dev
+    prefer-ip-address: false
+  client:
+    serviceUrl:
+      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@saas-eureka-server-dev:8510/eureka/
+spring:
+  rabbitmq:
+    virtual-host: dev
+server:
+  port: 8670

+ 10 - 0
base-servers/mail/mail-server/src/main/resources/config/application-docker.yml

@@ -0,0 +1,10 @@
+eureka:
+  instance:
+    hostname: saas-mail-server
+    prefer-ip-address: false
+  client:
+    serviceUrl:
+      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@saas-eureka-server:8500/eureka/
+spring:
+  rabbitmq:
+    virtual-host: docker

+ 0 - 0
base-servers/mail/mail-server/src/main/resources/i18n/messages_en_US.properties


+ 0 - 0
base-servers/mail/mail-server/src/main/resources/i18n/messages_zh_CN.properties


+ 113 - 0
base-servers/mail/mail-server/src/main/resources/logback-spring.xml

@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+    <include resource="org/springframework/boot/logging/logback/base.xml" />
+    <jmxConfigurator/>
+
+    <!--
+    %m
+    输出代码中指定的消息
+    %p
+    输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
+    %r
+    输出自应用启动到输出该log信息耗费的毫秒数
+    %c
+    输出所属的类目,通常就是所在类的全名
+    %t
+    输出产生该日志事件的线程名
+    %n
+    输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”
+    %d
+    输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},
+    输出类似:2002年10月18日 22:10:28,921
+    %l
+    输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)
+    -->
+
+    <springProperty scope="context" name="log.path" source="logging.path" defaultValue="/var/log/saas/mail-server"/>
+    <springProperty scope="context" name="spring.application.name" source="spring.application.name" defaultValue="mail-server"/>
+    <springProperty scope="context" name="spring.profiles.active" source="spring.profiles.active" defaultValue="dev"/>
+    <springProperty scope="context" name="common-pattern" source="logging.common-pattern" defaultValue="%d{yyyy-MM-dd HH:mm:ss.SSS}:[%5p] [%t:%r] [%C{1}:%M:%L] --> %m%n"/>
+    <springProperty scope="context" name="log.level.console" source="logging.level.console" defaultValue="INFO"/>
+    <springProperty scope="context" name="log.destination" source="logging.destination" defaultValue="192.168.253.3:5000"/>
+
+    <contextName>${spring.application.name}-${spring.profiles.active}-logback</contextName>
+
+    <appender name="CONSOLE_APPENDER" class="ch.qos.logback.core.ConsoleAppender">
+        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+            <level>${log.level.console}</level>
+        </filter>
+        <encoder>
+            <pattern>${common-pattern}</pattern>
+        </encoder>
+    </appender>
+
+    <appender name="ROOT_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${log.path}/root.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <fileNamePattern>${log.path}/%d{yyyy-MM}/root-%d{yyyy-MM-dd}-%i.log.gz</fileNamePattern>
+            <maxFileSize>128MB</maxFileSize>
+            <maxHistory>7</maxHistory>
+            <totalSizeCap>20GB</totalSizeCap>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${common-pattern}</pattern>
+        </encoder>
+    </appender>
+
+    <!-- Appender to log in a JSON format -->
+    <appender name="JSON_APPENDER" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
+        <destination>${log.destination}</destination>
+        <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
+            <providers>
+                <pattern>
+                    <pattern>
+                        {
+                        "severity": "%level",
+                        "service": "${spring.application.name:-}",
+                        "trace": "%X{X-B3-TraceId:-}",
+                        "span": "%X{X-B3-SpanId:-}",
+                        "parent": "%X{X-B3-ParentSpanId:-}",
+                        "exportable": "%X{X-Span-Export:-}",
+                        "pid": "${PID:-}",
+                        "thread": "%thread",
+                        "class": "%logger{40}",
+                        "rest": "%message"
+                        }
+                    </pattern>
+                </pattern>
+            </providers>
+        </encoder>
+    </appender>
+
+    <logger name="org.springframework" level="INFO"/>
+    <logger name="com.usoftchina.saas" level="INFO"/>
+
+    <springProfile name="dev">
+        <root level="INFO">
+            <appender-ref ref="CONSOLE_APPENDER"/>
+        </root>
+    </springProfile>
+
+    <springProfile name="test">
+        <root level="INFO">
+            <appender-ref ref="CONSOLE_APPENDER"/>
+            <appender-ref ref="ROOT_APPENDER"/>
+        </root>
+    </springProfile>
+
+    <springProfile name="docker">
+        <logger name="org.springframework" level="WARN"/>
+        <logger name="com.usoftchina.saas" level="WARN"/>
+        <root level="WARN">
+            <appender-ref ref="CONSOLE_APPENDER"/>
+            <appender-ref ref="JSON_APPENDER"/>
+        </root>
+    </springProfile>
+
+    <springProfile name="docker-dev">
+        <root level="INFO">
+            <appender-ref ref="CONSOLE_APPENDER"/>
+        </root>
+    </springProfile>
+
+</configuration>

+ 31 - 0
base-servers/mail/mail-server/src/main/resources/mapper/MailLogMapper.xml

@@ -0,0 +1,31 @@
+<?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.mail.mapper.MailLogMapper">
+
+    <insert id="insert" parameterType="com.usoftchina.saas.mail.po.MailLog"
+            useGeneratedKeys="true" keyProperty="id">
+        insert into m_log(template_id,subject,text,to,company_id,creator_id,create_time)
+        values (#{templateId,jdbcType=VARCHAR},#{subject,jdbcType=VARCHAR},#{text,jdbcType=VARCHAR},
+        #{from,jdbcType=VARCHAR},#{to,jdbcType=VARCHAR},#{companyId,jdbcType=BIGINT},
+        #{creatorId,jdbcType=BIGINT},#{createTime,jdbcType=TIMESTAMP})
+    </insert>
+
+    <resultMap id="BaseResultMap" type="com.usoftchina.saas.mail.po.MailLog">
+        <id column="id" jdbcType="BIGINT" property="id"/>
+        <result column="template_id" jdbcType="BIGINT" property="templateId"/>
+        <result column="subject" jdbcType="VARCHAR" property="subject"/>
+        <result column="text" jdbcType="VARCHAR" property="text"/>
+        <result column="from" jdbcType="VARCHAR" property="from"/>
+        <result column="to" jdbcType="VARCHAR" property="to"/>
+        <result column="company_id" jdbcType="INTEGER" property="companyId"/>
+        <result column="creator_id" jdbcType="BIGINT" property="creatorId"/>
+        <result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
+    </resultMap>
+    <sql id="baseColumns">
+        id,template_id,subject,text,from,to,company_id,create_time
+    </sql>
+
+    <select id="selectAll" resultMap="BaseResultMap">
+        select <include refid="baseColumns"/> from m_log order by create_time desc
+    </select>
+</mapper>

+ 29 - 0
base-servers/mail/mail-server/src/main/resources/mapper/MailTemplateMapper.xml

@@ -0,0 +1,29 @@
+<?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.mail.mapper.MailTemplateMapper">
+
+    <insert id="insert" parameterType="com.usoftchina.saas.mail.po.MailTemplate">
+        insert into `m_template`(`id`,`subject`,`text`)
+        values (#{id,jdbcType=VARCHAR},#{subject,jdbcType=VARCHAR},#{text,jdbcType=VARCHAR})
+    </insert>
+    <update id="updateByPrimaryKey" parameterType="com.usoftchina.saas.mail.po.MailTemplate">
+        update `m_template` set `subject`=#{subject,jdbcType=VARCHAR},`text`=#{text,jdbcType=VARCHAR}
+        where `id`=#{id,jdbcType=VARCHAR}
+    </update>
+    <delete id="deleteByPrimaryKey" parameterType="java.lang.String">
+        delete from `m_template` where `id`=#{id}
+    </delete>
+
+    <resultMap id="BaseResultMap" type="com.usoftchina.saas.mail.po.MailTemplate">
+        <id column="id" jdbcType="VARCHAR" property="id"/>
+        <result column="subject" jdbcType="VARCHAR" property="subject"/>
+        <result column="text" jdbcType="VARCHAR" property="text"/>
+    </resultMap>
+    <sql id="baseColumns">
+        `id`,`subject`,`text`
+    </sql>
+
+    <select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
+        select <include refid="baseColumns"/> from `m_template` where `id`=#{id}
+    </select>
+</mapper>

+ 0 - 1
base-servers/mail/pom.xml

@@ -18,5 +18,4 @@
         <module>mail-dto</module>
     </modules>
 
-
 </project>

+ 1 - 1
frontend/saas-portal-web/Dockerfile

@@ -2,4 +2,4 @@ FROM hub.c.163.com/library/nginx
 MAINTAINER USOFTCHINA <yingp@usoftchina.com>
 RUN rm /etc/nginx/conf.d/default.conf
 ADD runtime/nginx/default.conf /etc/nginx/conf.d/
-COPY src/ /usr/share/nginx/html/
+COPY dist/ /usr/share/nginx/html/

+ 5 - 2
frontend/saas-portal-web/README.md

@@ -7,9 +7,12 @@ yarn
 # 或者
 npm install --registry=https://registry.npm.taobao.org
 
-# Serve at 127.0.0.1
+# Serve at http://127.0.0.1
 npm run dev
 
-# Build for production with minification
+# Build for production
 npm run build
+
+# Build for docker image
+docker build -t saas-portal-web:1.0.0 .
 ```

+ 0 - 5
frontend/saas-portal-web/config/dev.env.js

@@ -1,5 +0,0 @@
-'use strict'
-module.exports = {
-  NODE_ENV: '"development"',
-  BASE_API: '"http://192.168.0.181:8560"',
-}

+ 15 - 0
frontend/saas-portal-web/config/env.js

@@ -0,0 +1,15 @@
+if (process.env.NODE_ENV == 'production') {
+    window.env = {
+        profile: 'production',
+        server: {
+            baseUrl: 'http://192.168.0.181:8560'
+        }
+    }
+} else {
+    window.env = {
+        profile: 'development',
+        server: {
+            baseUrl: 'http://192.168.0.181:8560'
+        }
+    }
+}

+ 0 - 5
frontend/saas-portal-web/config/prod.env.js

@@ -1,5 +0,0 @@
-'use strict'
-module.exports = {
-  NODE_ENV: '"production"',
-  BASE_API: '"http://192.168.0.181:8560"',
-}

+ 4 - 1
frontend/saas-portal-web/package.json

@@ -4,7 +4,7 @@
   "description": "saas portal",
   "main": "index.js",
   "scripts": {
-    "dev": "webpack-dev-server --inline --progress --config ./webpack.conf.js",
+    "dev": "webpack-dev-server --mode development --inline --progress --config ./webpack.dev.conf.js",
     "start": "npm run dev",
     "build": "webpack --mode production --config ./webpack.conf.js"
   },
@@ -14,6 +14,9 @@
   "author": "yingp@usoftchina.com",
   "license": "ISC",
   "devDependencies": {
+    "clean-webpack-plugin": "^1.0.0",
+    "copy-webpack-plugin": "^4.6.0",
+    "html-webpack-plugin": "^3.2.0",
     "webpack": "^4.25.1",
     "webpack-cli": "^3.1.2",
     "webpack-dev-server": "^3.1.10"

+ 65 - 68
frontend/saas-portal-web/src/css/main.css

@@ -78,6 +78,11 @@ main > section {
 .bg-blue {
     background-color: #0aa6bd;
 }
+.logo-img {
+    width: 123px;
+    height: 53px;
+    margin-top: -6px;
+}
 /* 遮罩 */
 .zhezhao {
     display: none;
@@ -91,6 +96,9 @@ main > section {
     z-index: 5;
 }
 /* 登录弹窗 */
+input {
+    outline: none;
+}
 .box,.box-zc{
     display:none;
     width: 378px;
@@ -113,22 +121,24 @@ main > section {
     /* margin-top: -20px; */
 }
 .tc-logoimg {
-    width: 64px;
-    height: 64px;
+    width: 123px;
+    height: 53px;
+    margin-top: 22px;
 }
 .tc-out {
     position: absolute;
     top: 24px;
     right: 24px;
+    cursor:pointer;
 }
-.tc-logo {
+/* .tc-logo {
     font-family: PingFangSC-Medium;
     font-size: 18px;
     color: #007FE6;
     letter-spacing: 0.34px;
     text-align: center;
-    /* margin-top: 94px; */
-}
+    margin-top: 38px;
+} */
 .tc-title {
     font-family: PingFangSC-Regular;
     font-size: 14px;
@@ -136,6 +146,21 @@ main > section {
     letter-spacing: 0.3px;
     text-align: center;
     margin-top: 10px;
+    line-height: 30px;
+}
+.tc-hrleft {
+    width: 60px;
+    display: inline-block;
+    margin-top: 0;
+    margin-bottom: 5px;
+    margin-right: 5px;
+}
+.tc-hrright {
+    width: 50px;
+    display: inline-block;
+    margin-top: 0;
+    margin-bottom: 5px;
+    margin-left: 5px;
 }
 .tc-phone {
     background: rgba(32,53,128,0.01);
@@ -164,7 +189,7 @@ main > section {
     background-image: linear-gradient(-90deg, #007EE5 0%, #05B3FF 100%, #5533FF 100%);
     border-radius: 3px;
     border: 0;
-    box-shadow: 0px 12px 12px -12px #007EE5;
+    box-shadow: 0px 16px 22px -12px #05B3FF;
     width: 100%;
     height: 40px;
     margin-bottom: 12px;
@@ -201,7 +226,7 @@ main > section {
     height: 38px;
 }
 .tc-shibiema {
-    width: 194px;
+    width: 204px;
     margin-left: -10px;
 }
 .tc-huoqu {
@@ -217,15 +242,17 @@ main > section {
     width: 90px;
     height: 40px;
     margin-left: 10px;
+    border: #0080E6 1px solid;
 }
 /* 11/12注册页面 ..........................................*/
 .login {
     margin-top: 12px;
     color: white;
+    font-size: 14px;
 }
 .login img {
-    width: 27px;
-    height: 26px;
+    width: 25px;
+    height: 24px;
 }
 .login > span:hover{
     cursor:pointer;
@@ -244,8 +271,8 @@ main > section {
 }
 .xieyi {
     color: #999;
-    margin-bottom: 12px;
     float: left;
+    font-size: 12px;
 }
 .form-buttom {
     float: right;
@@ -263,58 +290,40 @@ main > section {
 }
 /* 首页内容 ..........................................*/
 .my-text {
-    display: block;
     position: absolute;
-    top: 156px;
-    left: 245px;
-    z-index: 5;
+    top: 200px;
+    left: 136px;
+    /* z-index: 5; */
+    width: 468px;
+    height: 300px;
 }
-.my-min {
-    font-family: PingFangSC-Medium;
-    font-size: 30px;
-    color: #0080FF;
-    letter-spacing: 4.17px;
-    text-shadow: 0 2px 4px rgba(255,255,255,0.50);
+.sy-dianzi {
+    width: 100%;
+    height: 50px;
 }
-.my-mix {
-    font-family: PingFangSC-Medium;
-    font-size: 36px;
-    color: #0080FF;
-    letter-spacing: 4.17px;
-}
-.my-bgbulue {
-    width: 389px;
-    height: 168px;
-    opacity: 0.41;
-    background: #4E9BFF;
-    position: relative;
-    top: -27px;
-    left: -15px;
+.sy-mb {
+    margin-bottom: 25px;
 }
-.my-bgtext {
-    font-family: PingFangSC-Regular;
-    letter-spacing: 4.17px;
-    position: absolute;
-    top: 39px;
-    left: 28px;
+.sy-mb img{
+    width: 100px;
+    height: 36px;
 }
-.my-right {
-    margin-left: 20px;
+.sy-mbimg2 {
+    width: 150px !important;
 }
-.my-bgtext span {
-    font-size: 30px !important;
-    color: #444444;
+.sy-mb>img:nth-child(2) {
+    margin-left: 15px;
 }
 .my-tiyan {
-    background-image: linear-gradient(90deg, #94E3FF 0%, #49A1FE 31%, #3D97FD 100%, #9DD0FF 100%);
-    box-shadow: 1px 2px 2px 0 rgba(79,92,125,0.50);
-    border-radius: 12px;
-    width: 210px;
-    height: 77px;
+    background: #5172DD;
+    box-shadow: 0 0 19px 0 rgba(137,143,164,0.63);
+    border-radius: 4px;
+    width: 100px;
+    height: 36px;
     font-family: PingFangSC-Regular;
-    font-size: 30px;
+    font-size: 14px;
     color: #FFFFFF;
-    letter-spacing: 4.17px;
+    border: 0;
 }
 .chrw {
     width: 486px;
@@ -323,7 +332,7 @@ main > section {
 .sy-img {
     position: absolute;
     top: 100px;
-    right: 100px;
+    right: 130px;
 }
 /* 特色 .......................................*/
 .ts-box {
@@ -798,13 +807,13 @@ h1.navbar-brand {
     padding: 0;
 }
 .mask-overly {
-    background: rgba(0, 0, 0, 0.2) none repeat scroll 0 0;
+    /* background: rgba(0, 0, 0, 0.2) none repeat scroll 0 0; */
     bottom: 0;
     left: 0;
     position: absolute;
     right: 0;
     top: 0;
-    z-index: 9;
+    /* z-index: 9; */
 
 }
 #slider #nav-arrows > a {
@@ -812,13 +821,7 @@ h1.navbar-brand {
     line-height: 1.5;
 }
 .slider-1 {
-    background-image: url(../img/assets/背景.png);
-}
-.slider-2 {
-    background-image: url(../img/slider/slider-2.jpg);
-}
-.slider-3 {
-    background-image: url(../img/slider/slider-3.jpg);
+    background-image: url(../img/assets/beijing.png);
 }
 .sl-slider-wrapper {
     width: 100%;
@@ -1595,12 +1598,6 @@ ul.external li a:hover {
 /*=================================================================
 	Price
 ==================================================================*/
-
-#social {
-    background-image: url(../img/parallax/testimonial.jpg);
-    padding: 0;
-}
-
 #social .overlay {
     background: url("../img/slide_bg.png") repeat scroll 0 0 transparent;
     padding: 100px 0 120px;

BIN
frontend/saas-portal-web/src/img/assets/Group.png


BIN
frontend/saas-portal-web/src/img/assets/Group3x.png


BIN
frontend/saas-portal-web/src/img/assets/Group@2x.png


BIN
frontend/saas-portal-web/src/img/assets/Group@3x.png


+ 0 - 0
frontend/saas-portal-web/src/img/assets/返回@2x.png → frontend/saas-portal-web/src/img/assets/back2x.png


+ 0 - 0
frontend/saas-portal-web/src/img/assets/背景.png → frontend/saas-portal-web/src/img/assets/beijing.png


Some files were not shown because too many files changed in this diff