Просмотр исходного кода

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

guq 7 лет назад
Родитель
Сommit
25fee04147
100 измененных файлов с 1215 добавлено и 767 удалено
  1. 65 0
      README.md
  2. 1 0
      applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/exception/BizExceptionCode.java
  3. 20 0
      applications/commons/commons-server/src/main/resources/config/application-docker-prod.yml
  4. 0 6
      applications/document/document-dto/src/main/java/com.usoftchina.saas.document.dto/CustomerDTO.java
  5. 0 213
      applications/document/document-dto/src/main/java/com/usoftchina/saas/document/entities/Customer.java
  6. 0 6
      applications/document/document-dto/src/main/java/com/usoftchina/saas/document/entities/CustomerList.java
  7. 4 2
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/BomMapper.java
  8. 12 7
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/BomServiceImpl.java
  9. 4 2
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/CustomerServiceImpl.java
  10. 7 5
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/VendorServiceImpl.java
  11. 23 0
      applications/document/document-server/src/main/resources/config/application-docker-prod.yml
  12. 9 3
      applications/document/document-server/src/main/resources/mapper/BomMapper.xml
  13. 0 3
      applications/document/document-server/src/main/resources/mapper/CustomerListMapper.xml
  14. 1 34
      applications/document/document-server/src/main/resources/mapper/CustomerMapper.xml
  15. 1 1
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/mapper/BanksubledgerMapper.java
  16. 1 1
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/mapper/SubledgerMapper.java
  17. 1 1
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/mapper/VerificationMapper.java
  18. 3 2
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/FundtransferServiceImpl.java
  19. 10 7
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/OthreceiptsServiceImpl.java
  20. 7 4
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/OthspendingsServiceImpl.java
  21. 7 4
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/PaybalanceServiceImpl.java
  22. 20 32
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/RecbalanceServiceImpl.java
  23. 35 28
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/VerificationServiceImpl.java
  24. 23 0
      applications/money/money-server/src/main/resources/config/application-docker-prod.yml
  25. 2 1
      applications/money/money-server/src/main/resources/mapper/BanksubledgerMapper.xml
  26. 2 1
      applications/money/money-server/src/main/resources/mapper/SubledgerMapper.xml
  27. 3 2
      applications/money/money-server/src/main/resources/mapper/VerificationMapper.xml
  28. 5 2
      applications/purchase/purchase-server/src/main/resources/application.yml
  29. 20 0
      applications/purchase/purchase-server/src/main/resources/config/application-docker-prod.yml
  30. 0 1
      applications/purchase/purchase-server/src/main/resources/mapper/PurchaseListMapper.xml
  31. 1 6
      applications/purchase/purchase-server/src/main/resources/mapper/PurchaseMapper.xml
  32. 3 3
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/service/impl/SaleServiceImpl.java
  33. 20 0
      applications/sale/sale-server/src/main/resources/config/application-docker-prod.yml
  34. 0 6
      applications/storage/storage-dto/src/main/java/com/usoftchina/saas/storage/po/Make.java
  35. 4 1
      applications/storage/storage-server/src/main/resources/application.yml
  36. 20 0
      applications/storage/storage-server/src/main/resources/config/application-docker-prod.yml
  37. 3 52
      applications/storage/storage-server/src/main/resources/mapper/MakeMapper.xml
  38. 9 9
      applications/storage/storage-server/src/main/resources/mapper/MakematerialMapper.xml
  39. 5 1
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/controller/AccountController.java
  40. 7 0
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/mapper/AccountCompanyMapper.java
  41. 8 0
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/mapper/AccountMapper.java
  42. 7 0
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/mapper/RoleResourceMapper.java
  43. 7 0
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/service/AccountService.java
  44. 11 1
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/service/impl/AccountCenterServiceImpl.java
  45. 6 0
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/service/impl/AccountServiceImpl.java
  46. 26 3
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/service/impl/RoleServiceImpl.java
  47. 25 0
      base-servers/account/account-server/src/main/resources/config/application-docker-prod.yml
  48. 12 0
      base-servers/account/account-server/src/main/resources/mapper/AccountCompanyMapper.xml
  49. 4 0
      base-servers/account/account-server/src/main/resources/mapper/AccountMapper.xml
  50. 6 2
      base-servers/account/account-server/src/main/resources/mapper/RoleResourceMapper.xml
  51. 9 0
      base-servers/admin-server/src/main/resources/config/application-docker-prod.yml
  52. 38 4
      base-servers/auth/auth-server/src/main/java/com/usoftchina/saas/auth/controller/AuthController.java
  53. 8 0
      base-servers/auth/auth-server/src/main/java/com/usoftchina/saas/auth/mapper/AuthorizeLogMapper.java
  54. 117 0
      base-servers/auth/auth-server/src/main/java/com/usoftchina/saas/auth/po/VirtualAuthorizeLog.java
  55. 8 0
      base-servers/auth/auth-server/src/main/java/com/usoftchina/saas/auth/service/AuthorizeLogService.java
  56. 6 0
      base-servers/auth/auth-server/src/main/java/com/usoftchina/saas/auth/service/impl/AuthorizeLogServiceImpl.java
  57. 26 0
      base-servers/auth/auth-server/src/main/resources/config/application-docker-prod.yml
  58. 5 0
      base-servers/auth/auth-server/src/main/resources/mapper/AuthorizeLogMapper.xml
  59. 7 0
      base-servers/eureka-server/src/main/resources/config/application-docker-prod.yml
  60. 1 1
      base-servers/file/file-server/src/main/java/com/usoftchina/saas/file/controller/FileController.java
  61. 26 0
      base-servers/file/file-server/src/main/resources/config/application-docker-prod.yml
  62. 5 3
      base-servers/file/file-server/src/test/java/com/usoftchina/saas/file/controller/FileControllerTest.java
  63. 8 5
      base-servers/gateway-server/src/main/java/com/usoftchina/saas/gateway/config/AuthFilter.java
  64. 1 0
      base-servers/gateway-server/src/main/resources/application.yml
  65. 19 0
      base-servers/gateway-server/src/main/resources/config/application-docker-prod.yml
  66. 23 0
      base-servers/mail/mail-server/src/main/resources/config/application-docker-prod.yml
  67. 19 0
      base-servers/socket/socket-server/src/main/resources/config/application-docker-prod.yml
  68. 19 0
      base-servers/ui-server/src/main/resources/config/application-docker-prod.yml
  69. 13 0
      base-servers/zipkin-server/src/main/resources/config/application-docker-prod.yml
  70. BIN
      frontend/saas-portal-web/build/logo.png
  71. 0 3
      frontend/saas-portal-web/src/App.vue
  72. BIN
      frontend/saas-portal-web/src/assets/logo.png
  73. 71 43
      frontend/saas-portal-web/src/components/conenter/addgongsi.vue
  74. 3 7
      frontend/saas-portal-web/src/components/conenter/company.vue
  75. 7 9
      frontend/saas-portal-web/src/components/conenter/enterprise.vue
  76. 16 18
      frontend/saas-portal-web/src/components/conenter/home.vue
  77. 1 3
      frontend/saas-portal-web/src/components/conenter/qiyexiangxi.vue
  78. 0 55
      frontend/saas-portal-web/src/components/header/header.vue
  79. 0 2
      frontend/saas-portal-web/src/main.js
  80. 0 4
      frontend/saas-portal-web/static/css/gongsi.css
  81. 2 47
      frontend/saas-portal-web/static/css/main.css
  82. 0 9
      frontend/saas-portal-web/static/js/mains.js
  83. 10 0
      frontend/saas-web/app/Application.scss
  84. 4 2
      frontend/saas-web/app/view/core/chart/ChartBase.js
  85. 30 0
      frontend/saas-web/app/view/core/chart/ChartBase.scss
  86. 1 1
      frontend/saas-web/app/view/core/dbfind/types/VendorDbfindTrigger.js
  87. 14 10
      frontend/saas-web/app/view/core/query/QueryFormPanel.js
  88. 47 1
      frontend/saas-web/app/view/core/query/QueryGridPanel.js
  89. 20 5
      frontend/saas-web/app/view/core/query/QueryPanel.scss
  90. 4 2
      frontend/saas-web/app/view/core/query/QueryPanelController.js
  91. 67 16
      frontend/saas-web/app/view/core/report/ReportPanel.js
  92. 6 5
      frontend/saas-web/app/view/document/kind/ChildForm.js
  93. 0 2
      frontend/saas-web/app/view/home/Home.js
  94. 1 1
      frontend/saas-web/app/view/home/Home.scss
  95. 3 0
      frontend/saas-web/app/view/home/HomeModel.js
  96. 29 16
      frontend/saas-web/app/view/home/charts/MonthIO.js
  97. 25 0
      frontend/saas-web/app/view/home/charts/MonthIO.scss
  98. 11 14
      frontend/saas-web/app/view/home/charts/MonthPurchase.js
  99. 4 11
      frontend/saas-web/app/view/home/charts/MonthSale.js
  100. 11 16
      frontend/saas-web/app/view/home/charts/PurchaseTrend.js

+ 65 - 0
README.md

@@ -83,6 +83,8 @@
 | --------   | :-----: | :-----:  | :----:  | :----: | :------  |
 | saas_account | mysql | 192.168.253.12:3306 |  root  | select111*** |  账户中心  |
 | saas_auth | mysql | 192.168.253.12:3306 |  root  | select111*** |  鉴权系统  |
+| saas_file | mysql | 192.168.253.12:3306 |  root  | select111*** |  文件系统  |
+| saas_mail | mysql | 192.168.253.12:3306 |  root  | select111*** |  邮件系统  |
 | saas_biz | mysql | 192.168.253.12:3306 |  root  | select111*** |  业务系统  |
 | saas_ui | mongo | 192.168.253.12:27017 |    |  |  UI配置  |
 
@@ -124,4 +126,67 @@
 * [admin](http://192.168.0.181:8520) **账号** admin **密码** select111***
 * [zipkin](http://192.168.0.181:8540) **账号** admin **密码** select111***
 
+> 访问
 
+* [门户 https://saas-dev.usoftchina.com:5443](https://saas-dev.usoftchina.com:5443)
+* [系统 https://trade-dev.usoftchina.com:5443](https://trade-dev.usoftchina.com:5443)
+* [打印 https://saas-report-dev.usoftchina.com:5443](https://saas-report-dev.usoftchina.com:5443)
+* [接口 https://saas-api-dev.usoftchina.com:5443](https://saas-api-dev.usoftchina.com:5443)
+
+# 生产环境
+
+> 数据库
+
+| 数据库      | 类型   | 地址   |  账号  |  密码  |  说明  |
+| --------   | :-----: | :-----:  | :----:  | :----: | :------  |
+| saas_account | mysql | 10.10.100.18:3306 |  saas  | select111*** |  账户中心  |
+| saas_auth | mysql | 10.10.100.18:3306 |  saas  | select111*** |  鉴权系统  |
+| saas_file | mysql | 10.10.100.18:3306 |  saas  | select111*** |  文件系统  |
+| saas_mail | mysql | 10.10.100.18:3306 |  saas  | select111*** |  邮件系统  |
+| saas_biz | mysql | 10.10.100.18:3306 |  saas  | select111*** |  业务系统  |
+| saas_ui | mongo | 10.10.100.123:27017 |    |  |  UI配置  |
+
+> 中间件
+
+| 类型 | 地址 | 账号 | 密码 | 说明 |
+| ---- | :----: | :----: | :----: | ---- |
+| rabbitmq | 10.10.100.103:5672 | saas | select123*** | 消息中间件 [控制台](http://10.10.100.103:15672)|
+| redis | 10.10.100.173:6379 | | | 内存数据库 |
+
+
+> 服务器
+
+| IP      |  账号  |  密码  |  环境  |  资源  |
+| --------   | :----:  | :----: | :------:  | :------:  |
+| 10.10.100.103 |  centos  | mykey.key |  CentOS6, RabbitMQ  | Cpu: 4, Mem: 8G, Disk: 35G |
+| 10.10.100.123 |  centos  | mykey.key |  CentOS6, MongoDB  | Cpu: 8, Mem: 8G, Disk: 60G |
+| 10.10.100.160 |  centos  | mykey.key |  CentOS6, ELK  | Cpu: 8, Mem: 8G, Disk: 60G |
+| 10.10.100.173 |  centos  | mykey.key |  CentOS6, Redis  | Cpu: 4, Mem: 8G, Disk: 35G |
+| 10.10.100.23 |  root  | 62cddbcc624b1b072d84117cc0e5a4db |  CentOS7, Docker  | Cpu: 40, Mem: 128G, Disk: 800G |
+| 10.10.100.24 |  root  | 4fd19c28ee472ef9ebc3c06de9277c1b |  CentOS7, Docker  | Cpu: 40, Mem: 128G, Disk: 800G |
+| 10.10.100.25 |  root  | 61a12a65cd42ef77a52dfef8e436bacc |  CentOS7, Docker  | Cpu: 40, Mem: 128G, Disk: 800G |
+| 10.10.100.26 |  root  | 8743e445c7a308edf4588b7997b21c73 |  CentOS7, Docker  | Cpu: 40, Mem: 128G, Disk: 800G |
+
+> 构建
+
+* [jenkins](http://10.10.100.200:5001/job/saas/prod) **账号** admin **密码** select123***
+
+> 日志
+
+* [kibana](http://10.10.100.160:5601)
+* [logstash](tcp://10.10.100.160:5000)
+* [elasticsearch](http://10.10.100.160:9200/_search?pretty)
+
+> 服务
+
+* [eureka http://10.10.100.23:8500](http://10.10.100.23:8500) **账号** admin **密码** select111***
+* [gateway http://10.10.100.23:8560](http://10.10.100.23:8560)
+* [admin](http://10.10.100.23:8520) **账号** admin **密码** select111***
+* [zipkin](http://10.10.100.23:8540) **账号** admin **密码** select111***
+
+> 访问
+
+* [门户 https://saas.usoftchina.com](https://saas.usoftchina.com)
+* [系统 https://trade.usoftchina.com](https://trade.usoftchina.com)
+* [打印 https://saas-report.usoftchina.com](https://saas-report.usoftchina.com)
+* [接口 https://saas-api.usoftchina.com](https://saas-api.usoftchina.com)

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

@@ -86,6 +86,7 @@ public enum BizExceptionCode implements BaseExceptionCode {
     SUBLEDGER_NOT_EXIS(74005,"来源单据不存在"),
     CHECK_SETACOUNT_EXIS(74006, "不能删除单据日期小于等于结账期间<u>%s</u>的单据"),
     VERIFICATION_CHECK_BALANCE(74007,"核销金额不能大于未核销金额"),
+    DELETE_NOT_EXIS(74008,"删除失败,当前单据不存在!"),
 
 
 

+ 20 - 0
applications/commons/commons-server/src/main/resources/config/application-docker-prod.yml

@@ -0,0 +1,20 @@
+eureka:
+  instance:
+    hostname: saas-commons-server
+    prefer-ip-address: false
+  client:
+    serviceUrl:
+      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@saas-eureka-server:8500/eureka/
+spring:
+  rabbitmq:
+    host: 10.10.100.103
+    port: 5672
+    virtual-host: docker
+    username: saas
+    password: select123***
+  datasource:
+    url: jdbc:mysql://10.10.100.18:3306/saas_biz?characterEncoding=utf-8&useSSL=false
+    username: saas
+    password: select111***
+logging:
+  destination: 10.10.100.160:5000

+ 0 - 6
applications/document/document-dto/src/main/java/com.usoftchina.saas.document.dto/CustomerDTO.java

@@ -42,12 +42,6 @@ public class CustomerDTO extends CommonBaseDTO implements Serializable {
 
     private String cu_statuscode;
 
-    private Integer cu_recordmanid;
-
-    private String cu_recordman;
-
-    private Date cu_recorddate;
-
     private String cu_text1;
 
     private String cu_text2;

+ 0 - 213
applications/document/document-dto/src/main/java/com/usoftchina/saas/document/entities/Customer.java

@@ -38,12 +38,6 @@ public class Customer extends CommonBaseEntity implements Serializable {
 
     private String cu_statuscode;
 
-    private Integer cu_recordmanid;
-
-    private String cu_recordman;
-
-    private Date cu_recorddate;
-
     private String cu_text1;
 
     private String cu_text2;
@@ -60,211 +54,4 @@ public class Customer extends CommonBaseEntity implements Serializable {
 
     private Double cu_preamount;
 
-    public String getCu_code() {
-        return cu_code;
-    }
-
-    public void setCu_code(String cu_code) {
-        this.cu_code = cu_code;
-    }
-
-    public String getCu_name() {
-        return cu_name;
-    }
-
-    public void setCu_name(String cu_name) {
-        this.cu_name = cu_name;
-    }
-
-    public String getCu_uu() {
-        return cu_uu;
-    }
-
-    public void setCu_uu(String cu_uu) {
-        this.cu_uu = cu_uu;
-    }
-
-    public String getCu_type() {
-        return cu_type;
-    }
-
-    public void setCu_type(String cu_type) {
-        this.cu_type = cu_type;
-    }
-
-    public Date getCu_begindate() {
-        return cu_begindate;
-    }
-
-    public void setCu_begindate(Date cu_begindate) {
-        this.cu_begindate = cu_begindate;
-    }
-
-    public Double getCu_beginaramount() {
-        return cu_beginaramount;
-    }
-
-    public void setCu_beginaramount(Double cu_beginaramount) {
-        this.cu_beginaramount = cu_beginaramount;
-    }
-
-    public Double getCu_beginprerecamount() {
-        return cu_beginprerecamount;
-    }
-
-    public void setCu_beginprerecamount(Double cu_beginprerecamount) {
-        this.cu_beginprerecamount = cu_beginprerecamount;
-    }
-
-    public Double getCu_promisedays() {
-        return cu_promisedays;
-    }
-
-    public void setCu_promisedays(Double cu_promisedays) {
-        this.cu_promisedays = cu_promisedays;
-    }
-
-    public Double getCu_taxrate() {
-        return cu_taxrate;
-    }
-
-    public void setCu_taxrate(Double cu_taxrate) {
-        this.cu_taxrate = cu_taxrate;
-    }
-
-    public Integer getCu_sellerid() {
-        return cu_sellerid;
-    }
-
-    public void setCu_sellerid(Integer cu_sellerid) {
-        this.cu_sellerid = cu_sellerid;
-    }
-
-    public String getCu_sellercode() {
-        return cu_sellercode;
-    }
-
-    public void setCu_sellercode(String cu_sellercode) {
-        this.cu_sellercode = cu_sellercode;
-    }
-
-    public String getCu_sellername() {
-        return cu_sellername;
-    }
-
-    public void setCu_sellername(String cu_sellername) {
-        this.cu_sellername = cu_sellername;
-    }
-
-    public Double getCu_credit() {
-        return cu_credit;
-    }
-
-    public void setCu_credit(Double cu_credit) {
-        this.cu_credit = cu_credit;
-    }
-
-    public String getCu_status() {
-        return cu_status;
-    }
-
-    public void setCu_status(String cu_status) {
-        this.cu_status = cu_status;
-    }
-
-    public String getCu_statuscode() {
-        return cu_statuscode;
-    }
-
-    public void setCu_statuscode(String cu_statuscode) {
-        this.cu_statuscode = cu_statuscode;
-    }
-
-    public Integer getCu_recordmanid() {
-        return cu_recordmanid;
-    }
-
-    public void setCu_recordmanid(Integer cu_recordmanid) {
-        this.cu_recordmanid = cu_recordmanid;
-    }
-
-    public String getCu_recordman() {
-        return cu_recordman;
-    }
-
-    public void setCu_recordman(String cu_recordman) {
-        this.cu_recordman = cu_recordman;
-    }
-
-    public Date getCu_recorddate() {
-        return cu_recorddate;
-    }
-
-    public void setCu_recorddate(Date cu_recorddate) {
-        this.cu_recorddate = cu_recorddate;
-    }
-
-    public String getCu_text1() {
-        return cu_text1;
-    }
-
-    public void setCu_text1(String cu_text1) {
-        this.cu_text1 = cu_text1;
-    }
-
-    public String getCu_text2() {
-        return cu_text2;
-    }
-
-    public void setCu_text2(String cu_text2) {
-        this.cu_text2 = cu_text2;
-    }
-
-    public String getCu_text3() {
-        return cu_text3;
-    }
-
-    public void setCu_text3(String cu_text3) {
-        this.cu_text3 = cu_text3;
-    }
-
-    public String getCu_text4() {
-        return cu_text4;
-    }
-
-    public void setCu_text4(String cu_text4) {
-        this.cu_text4 = cu_text4;
-    }
-
-    public String getCu_text5() {
-        return cu_text5;
-    }
-
-    public void setCu_text5(String cu_text5) {
-        this.cu_text5 = cu_text5;
-    }
-
-    public Double getCu_leftamount() {
-        return cu_leftamount;
-    }
-
-    public void setCu_leftamount(Double cu_leftamount) {
-        this.cu_leftamount = cu_leftamount;
-    }
-
-    public Double getCu_recamount() {
-        return cu_recamount;
-    }
-
-    public void setCu_recamount(Double cu_recamount) {
-        this.cu_recamount = cu_recamount;
-    }
-
-    public Double getCu_preamount() {
-        return cu_preamount;
-    }
-
-    public void setCu_preamount(Double cu_preamount) {
-        this.cu_preamount = cu_preamount;
-    }
 }

+ 0 - 6
applications/document/document-dto/src/main/java/com/usoftchina/saas/document/entities/CustomerList.java

@@ -43,12 +43,6 @@ public class CustomerList extends CommonBaseEntity{
 
     private String cu_statuscode;
 
-    private Integer cu_recordmanid;
-
-    private String cu_recordman;
-
-    private Date cu_recorddate;
-
     private String cu_text1;
 
     private String cu_text2;

+ 4 - 2
applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/BomMapper.java

@@ -19,7 +19,9 @@ public interface BomMapper extends CommonBaseMapper<Bom> {
 
     int updateByPrimaryKey(Bom record);
 
-    int validCodeAndVersion(@Param("code") String code, @Param("version") String version, @Param("companyId") Long companyId);
+    int validCodeAndVersionWhenInsert(@Param("code") String code, @Param("version") String version, @Param("companyId") Long companyId);
+
+    int validCodeAndVersionWhenUpdate(@Param("code") String code, @Param("id") Long id, @Param("version") String version, @Param("companyId") Long companyId);
 
     int validateCodeWhenInsert(@Param("code") String code, @Param("companyId") Long companyId);
 
@@ -27,7 +29,7 @@ public interface BomMapper extends CommonBaseMapper<Bom> {
 
     List<Bom> getListData(@Param("condition") String condition, @Param("companyId") Long companyId);
 
-    int getCountFromMake(Long id);
+    int getCountFromMake(@Param("code") String code,@Param("version") String version);
 
     void updateCreator(@Param("userId") Long userId,@Param("userName") String userName,@Param("id") Long id);
 }

+ 12 - 7
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/BomServiceImpl.java

@@ -51,9 +51,10 @@ public class BomServiceImpl extends CommonBaseServiceImpl<BomMapper, Bom> implem
         DocBaseDTO docBaseDTO = null;
         if(id == 0){
             //校验编号和版本 是否已存在
-            int count = getMapper().validCodeAndVersion(bom.getBo_mothercode(), bom.getBo_version(), companyId);
+            int count = getMapper().validCodeAndVersionWhenInsert(bom.getBo_mothercode(), bom.getBo_version(), companyId);
             if(count == 0){
-                String code = pushMaxnubmer(bom.getBo_mothercode(), bom.getId());
+//                String code = pushMaxnubmer(bom.getBo_mothercode(), bom.getId());
+                String code = bom.getBo_mothercode();
                 bom.setBo_mothercode(code);
                 bom.setCompanyId(companyId);
                 //保存BOM
@@ -79,8 +80,11 @@ public class BomServiceImpl extends CommonBaseServiceImpl<BomMapper, Bom> implem
             }
         }else{
             //校验编号和版本 是否已存在
-            int count = getMapper().validCodeAndVersion(bom.getBo_mothercode(), bom.getBo_version(), companyId);
+            int count = getMapper().validCodeAndVersionWhenUpdate(bom.getBo_mothercode(),bom.getId(),bom.getBo_version(),companyId);
             //更新主表
+            if (count != 0) {
+                throw new BizException(BizExceptionCode.BOM_SAVE);
+            }
             getMapper().updateByPrimaryKeySelective(bom);
             if (bomDetailList.size() > 0) {
                 List<BomDetail> insertItems = new ArrayList<BomDetail>();
@@ -120,7 +124,8 @@ public class BomServiceImpl extends CommonBaseServiceImpl<BomMapper, Bom> implem
         }
         //校验BOM资料是否已被使用
         Long prodId = getMapper().selectByPrimaryKey(id).getBo_motherid();
-        int count = getMapper().getCountFromMake(prodId);
+        Bom bom = getMapper().selectByPrimaryKey(id);
+        int count = getMapper().getCountFromMake(bom.getBo_mothercode(),bom.getBo_version());
         if (count > 0){
             throw new BizException(BizExceptionCode.BIZ_RELDELETE);
         }
@@ -190,12 +195,13 @@ public class BomServiceImpl extends CommonBaseServiceImpl<BomMapper, Bom> implem
         if(id != null && id > 0){
             //校验BOM资料是否已被使用
             Long prodId = getMapper().selectByPrimaryKey(id).getBo_motherid();
-            int count = getMapper().getCountFromMake(prodId);
+            Bom bom = getMapper().selectByPrimaryKey(id);
+            int count = getMapper().getCountFromMake(bom.getBo_mothercode(),bom.getBo_version());
             if (count > 0){
                 throw new BizException(BizExceptionCode.BIZ_RELCLOSE);
             }
 
-            Bom bom = new Bom();
+            bom = new Bom();
             bom.setId(id);
             bom.setBo_status(Status.CLOSE.getDisplay());
             bom.setBo_statuscode(Status.CLOSE.name());
@@ -228,7 +234,6 @@ public class BomServiceImpl extends CommonBaseServiceImpl<BomMapper, Bom> implem
                 bom.setBo_status(Status.OPEN.getDisplay());
                 bom.setUpdateTime(new Date());
                 bom.setUpdaterId(BaseContextHolder.getUserId());
-
                 getMapper().updateByPrimaryKeySelective(bom);
                 //记录LOG
                 DocBaseDTO docBaseDTO = generateMsgObj(id, code);

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

@@ -147,6 +147,7 @@ public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, C
                 String mes = String.format(BizExceptionCode.LIMIT_PERIOD_CUSTOMER.getMessage(),YM);
                 throw new BizException(code , mes);
             }
+            YM = beginDate;
         }
         //编号校验
         cu_code = RegexpUtils.replaceSpecCharacter(cu_code);
@@ -213,8 +214,9 @@ public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, C
 
                 //限制关联单据不可修改金额
                 Customer customer1 = getMapper().selectByPrimaryKey(customer.getId());
-                if (customer.getCu_beginaramount() != customer1.getCu_beginaramount() ||
-                        customer.getCu_beginprerecamount() != customer1.getCu_beginprerecamount()){
+                if (customer.getCu_beginaramount().doubleValue() != customer1.getCu_beginaramount().doubleValue() ||
+                        customer.getCu_beginprerecamount().doubleValue() != customer1.getCu_beginprerecamount().doubleValue() ||
+                        customer1.getCu_begindate().compareTo(customer.getCu_begindate()) != 0){
                     throw new BizException(BizExceptionCode.BIZ_RELUPDATE_AMOUNT);
                 }
             }

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

@@ -133,13 +133,14 @@ public class VendorServiceImpl extends CommonBaseServiceImpl<VendorMapper, Vendo
                 String mes = String.format(BizExceptionCode.LIMIT_PERIOD_VENDOR.getMessage(),YM);
                 throw new BizException(code , mes);
             }
+            YM = beginDate;
         }
         ve_code = RegexpUtils.replaceSpecCharacter(ve_code);
         String code = pushMaxnubmer(ve_code, main.getId());
         if(main.getId() == 0){
             int count = getMapper().getCountByCode(code, companyId);
             if(count > 0){
-                throw new BizException(BizExceptionCode.REPEAT_NAME);
+                throw new BizException(BizExceptionCode.REPEAT_CODE);
             }
             count = getMapper().getCountByName(main.getVe_name(), companyId);
             if (count > 0){
@@ -182,7 +183,7 @@ public class VendorServiceImpl extends CommonBaseServiceImpl<VendorMapper, Vendo
             if (!main.getVe_name().equals(oldVendor.getVe_name())){
                 count = getMapper().getCountByName(main.getVe_name(), companyId);
                 if (count > 0){
-                    throw new BizException(BizExceptionCode.REPEAT_CODE);
+                    throw new BizException(BizExceptionCode.REPEAT_NAME);
                 }
             }
 
@@ -198,8 +199,9 @@ public class VendorServiceImpl extends CommonBaseServiceImpl<VendorMapper, Vendo
             if(!StringUtils.isEmpty(result)){
                 //限制关联单据不可修改金额
                 Vendor vendor = getMapper().selectByPrimaryKey(main.getId());
-                if (vendor.getVe_beginapamount() != main.getVe_beginapamount() ||
-                        vendor.getVe_beginprepayamount() != main.getVe_beginprepayamount()){
+                if (vendor.getVe_beginapamount().doubleValue() != main.getVe_beginapamount().doubleValue() ||
+                        vendor.getVe_beginprepayamount().doubleValue() != main.getVe_beginprepayamount().doubleValue() ||
+                        vendor.getVe_begindate().compareTo(main.getVe_begindate()) != 0){
                     throw new BizException(BizExceptionCode.BIZ_RELUPDATE_AMOUNT);
                 }
             }
@@ -271,6 +273,7 @@ public class VendorServiceImpl extends CommonBaseServiceImpl<VendorMapper, Vendo
         subledger.setSl_namount(Math.abs(amount));
         Long sl_id = subledgerMapper.selectByKindCodeVendid("期初余额","期初余额",
                 Math.toIntExact(main.getId()),BaseContextHolder.getCompanyId(),YM);
+
         subledger.setId(sl_id);
         if ( sl_id!=null && sl_id > 0 ) {
             subledgerMapper.updateByPrimaryKeySelective(subledger);
@@ -312,7 +315,6 @@ public class VendorServiceImpl extends CommonBaseServiceImpl<VendorMapper, Vendo
         }
     }
 
-
     /**
      * 关闭
      * @param id

+ 23 - 0
applications/document/document-server/src/main/resources/config/application-docker-prod.yml

@@ -0,0 +1,23 @@
+eureka:
+  instance:
+    hostname: saas-document-server
+    prefer-ip-address: false
+  client:
+    serviceUrl:
+      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@saas-eureka-server:8500/eureka/
+spring:
+  rabbitmq:
+    host: 10.10.100.103
+    port: 5672
+    virtual-host: docker
+    username: saas
+    password: select123***
+  datasource:
+    url: jdbc:mysql://10.10.100.18:3306/saas_biz?characterEncoding=utf-8&useSSL=false
+    username: saas
+    password: select111***
+  redis:
+    host: 10.10.100.173
+    port: 6379
+logging:
+  destination: 10.10.100.160:5000

+ 9 - 3
applications/document/document-server/src/main/resources/mapper/BomMapper.xml

@@ -271,9 +271,15 @@
   <select id="validateCodeWhenUpdate" resultType="int" >
     select count(*) from BOM where BO_MOTHERCODE = #{code} and BO_ID != #{id} and companyId =#{companyId}
   </select>
-  <select id="validCodeAndVersion" resultType="int">
+  <select id="validCodeAndVersionWhenInsert" resultType="int">
       SELECT COUNT(*) FROM BOM WHERE BO_MOTHERCODE = #{code} and BO_VERSION=#{version} and COMPANYID=#{companyId}
   </select>
+
+  <select id="validCodeAndVersionWhenUpdate" resultType="int">
+    SELECT COUNT(*) FROM BOM WHERE BO_MOTHERCODE = #{code} and BO_ID != #{id} and BO_VERSION=#{version} and COMPANYID=#{companyId}
+  </select>
+
+
   <select id="getCodeById" resultType="string">
       SELECT BO_MOTHERCODE FROM BOM WHERE BO_ID = #{id} and COMPANYID = #{companyId}
   </select>
@@ -289,8 +295,8 @@
     </where>
     ORDER BY BO_ID DESC
   </select>
-  <select id="getCountFromMake" parameterType="java.lang.Long" resultType="int">
-      SELECT COUNT(*) FROM MAKE WHERE MA_PRODID = #{id}
+  <select id="getCountFromMake" resultType="int">
+      SELECT COUNT(*) FROM MAKE WHERE  ma_prodcode = #{code} and ma_version = #{version}
   </select>
 
   <update id="updateCreator">

+ 0 - 3
applications/document/document-server/src/main/resources/mapper/CustomerListMapper.xml

@@ -18,9 +18,6 @@
     <result column="cu_credit" jdbcType="DOUBLE" property="cu_credit" />
     <result column="cu_status" jdbcType="VARCHAR" property="cu_status" />
     <result column="cu_statuscode" jdbcType="VARCHAR" property="cu_statuscode" />
-    <result column="cu_recordmanid" jdbcType="INTEGER" property="cu_recordmanid" />
-    <result column="cu_recordman" jdbcType="VARCHAR" property="cu_recordman" />
-    <result column="cu_recorddate" jdbcType="TIMESTAMP" property="cu_recorddate" />
     <result column="cu_leftamount" jdbcType="DOUBLE" property="cu_leftamount" />
     <result column="cu_recamount" jdbcType="DOUBLE" property="cu_recamount" />
     <result column="cu_preamount" jdbcType="DOUBLE" property="cu_preamount" />

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

@@ -18,9 +18,6 @@
     <result column="cu_credit" jdbcType="DOUBLE" property="cu_credit" />
     <result column="cu_status" jdbcType="VARCHAR" property="cu_status" />
     <result column="cu_statuscode" jdbcType="VARCHAR" property="cu_statuscode" />
-    <result column="cu_recordmanid" jdbcType="INTEGER" property="cu_recordmanid" />
-    <result column="cu_recordman" jdbcType="VARCHAR" property="cu_recordman" />
-    <result column="cu_recorddate" jdbcType="TIMESTAMP" property="cu_recorddate" />
     <result column="companyid" jdbcType="INTEGER" property="companyId" />
     <result column="updaterid" jdbcType="INTEGER" property="updaterId" />
     <result column="updatetime" jdbcType="TIMESTAMP" property="updateTime" />
@@ -36,7 +33,7 @@
   <sql id="Base_Column_List">
     cu_id, cu_code, cu_name, cu_uu, cu_type, cu_begindate, cu_beginaramount, cu_beginprerecamount, 
     cu_promisedays, cu_taxrate, cu_sellerid, cu_sellercode, cu_sellername, cu_credit, 
-    cu_status, cu_statuscode, cu_recordmanid, cu_recordman, cu_recorddate, companyid, 
+    cu_status, cu_statuscode, companyid,
     updaterid, updatetime, cu_text1, cu_text2, cu_text3, cu_text4, cu_text5, cu_leftamount, 
     cu_recamount,cu_preamount
   </sql>
@@ -102,15 +99,6 @@
       <if test="cu_statuscode != null">
         cu_statuscode,
       </if>
-      <if test="cu_recordmanid != null">
-        cu_recordmanid,
-      </if>
-      <if test="cu_recordman != null">
-        cu_recordman,
-      </if>
-      <if test="cu_recorddate != null">
-        cu_recorddate,
-      </if>
       <if test="companyId != null">
         companyid,
       </if>
@@ -192,15 +180,6 @@
       <if test="cu_statuscode != null">
         #{cu_statuscode,jdbcType=VARCHAR},
       </if>
-      <if test="cu_recordmanid != null">
-        #{cu_recordmanid,jdbcType=INTEGER},
-      </if>
-      <if test="cu_recordman != null">
-        #{cu_recordman,jdbcType=VARCHAR},
-      </if>
-      <if test="cu_recorddate != null">
-        #{cu_recorddate,jdbcType=TIMESTAMP},
-      </if>
       <if test="companyId != null">
         #{companyId,jdbcType=INTEGER},
       </if>
@@ -284,15 +263,6 @@
       <if test="cu_statuscode != null">
         cu_statuscode = #{cu_statuscode,jdbcType=VARCHAR},
       </if>
-      <if test="cu_recordmanid != null">
-        cu_recordmanid = #{cu_recordmanid,jdbcType=INTEGER},
-      </if>
-      <if test="cu_recordman != null">
-        cu_recordman = #{cu_recordman,jdbcType=VARCHAR},
-      </if>
-      <if test="cu_recorddate != null">
-        cu_recorddate = #{cu_recorddate,jdbcType=TIMESTAMP},
-      </if>
       <if test="companyId != null">
         companyid = #{companyId,jdbcType=INTEGER},
       </if>
@@ -346,9 +316,6 @@
       cu_credit = #{cu_credit,jdbcType=DOUBLE},
       cu_status = #{cu_status,jdbcType=VARCHAR},
       cu_statuscode = #{cu_statuscode,jdbcType=VARCHAR},
-      cu_recordmanid = #{cu_recordmanid,jdbcType=INTEGER},
-      cu_recordman = #{cu_recordman,jdbcType=VARCHAR},
-      cu_recorddate = #{cu_recorddate,jdbcType=TIMESTAMP},
       companyid = #{companyid,jdbcType=INTEGER},
       updaterid = #{updaterid,jdbcType=INTEGER},
       updatetime = #{updatetime,jdbcType=TIMESTAMP},

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

@@ -17,7 +17,7 @@ public interface BanksubledgerMapper extends CommonBaseMapper<Banksubledger> {
 
     int deleteByExample(BanksubledgerExample example);
 
-    int deleteByPrimaryKey(@Param("code") String code, @Param("kind") String kind);
+    int deleteByPrimaryKey(@Param("code") String code, @Param("kind") String kind ,@Param("companyid") Long companyid);
 
 //    Long insert(Banksubledger record);
 

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

@@ -13,7 +13,7 @@ import java.util.List;
  * @date 2018/11/6 10:33
  **/
 public interface SubledgerMapper {
-    int deleteByPrimaryKey(@Param("code") String code, @Param("kind") String kind);
+    int deleteByPrimaryKey(@Param("code") String code, @Param("kind") String kind , @Param("companyid") Long companyid);
 
     int insert(Subledger record);
 

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

@@ -39,5 +39,5 @@ public interface VerificationMapper extends CommonBaseMapper<Verification> {
 
     String validateResAudit(Long id);
 
-    int validateSetAcount(int detno);
+    int validateSetAcount(@Param("detno") int detno,@Param("companyid")Long companyid);
 }

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

@@ -200,7 +200,7 @@ public class FundtransferServiceImpl extends CommonBaseServiceImpl<FundtransferM
 
         //删除中间表
         fundtransfer = fundtransferMapper.selectByPrimaryKey(id);
-        banksubledgerMapper.deleteByPrimaryKey(fundtransfer.getFt_code(), "资金转账");
+        banksubledgerMapper.deleteByPrimaryKey(fundtransfer.getFt_code(), "资金转账",BaseContextHolder.getCompanyId());
 
         //资金
         //取从表金额
@@ -256,9 +256,10 @@ public class FundtransferServiceImpl extends CommonBaseServiceImpl<FundtransferM
 
     @Override
     public void delete(int id) {
+        DocBaseDTO baseDTO = getBaseDTOById(Long.valueOf(id));
         fundtransferMapper.deleteByPrimaryKey(id);
         fundtransferdetailMapper.deleteByPrimaryKey(id);
-        DocBaseDTO baseDTO = getBaseDTOById(Long.valueOf(id));
+
         //日志记录
         messageLogService.delete(baseDTO);
     }

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

@@ -162,8 +162,8 @@ public class OthreceiptsServiceImpl extends CommonBaseServiceImpl<OthreceiptsMap
             Customer customer = new Customer();
             customer.setId(Long.valueOf(othreceipts.getOr_custid()));
             customer.setCu_preamount(preamount);
-            customer.setCu_recamount(recamount - or_amount);
-            customer.setCu_leftamount(beginapamount - beginprepayamount + recamount - or_amount - preamount);
+            customer.setCu_recamount(recamount + or_amount);
+            customer.setCu_leftamount(beginapamount - beginprepayamount + recamount + or_amount - preamount);
             recbalanceMapper.updateCustomerByPrimaryKeySelective(customer);
 
             //插入subledger中间表
@@ -216,7 +216,8 @@ public class OthreceiptsServiceImpl extends CommonBaseServiceImpl<OthreceiptsMap
 
         //删除中间表
         othreceipts = othreceiptsMapper.selectByPrimaryKey(id);
-        banksubledgerMapper.deleteByPrimaryKey(othreceipts.getOr_code(), "其他收入单");
+        banksubledgerMapper.deleteByPrimaryKey(othreceipts.getOr_code(), "其他收入单",BaseContextHolder.getCompanyId());
+
 
         //更新资金
         Double amount = banksubledgerMapper.selectThisamount(othreceipts.getOr_bankcode());
@@ -260,9 +261,9 @@ public class OthreceiptsServiceImpl extends CommonBaseServiceImpl<OthreceiptsMap
             customer.setId(Long.valueOf(othreceipts.getOr_custid()));
             customer.setCu_preamount(preamount);
             customer.setCu_recamount(recamount - or_amount);
-            customer.setCu_leftamount(beginapamount + beginprepayamount - recamount + or_amount + preamount);
+            customer.setCu_leftamount(beginapamount + beginprepayamount + recamount - or_amount - preamount);
             recbalanceMapper.updateCustomerByPrimaryKeySelective(customer);
-            subledgerMapper.deleteByPrimaryKey(othreceipts.getOr_code(), "其他收入单");
+            subledgerMapper.deleteByPrimaryKey(othreceipts.getOr_code(), "其他收入单",BaseContextHolder.getCompanyId());
         }
 
 
@@ -286,16 +287,18 @@ public class OthreceiptsServiceImpl extends CommonBaseServiceImpl<OthreceiptsMap
 
     @Override
     public void delete(int id) {
+        DocBaseDTO baseDTO = getBaseDTOById(Long.valueOf(id));
         othreceiptsMapper.deleteByPrimaryKey(id);
         othreceiptsdetailMapper.deleteByPrimaryKey(id);
-        DocBaseDTO baseDTO = getBaseDTOById(Long.valueOf(id));
+
         //日志记录
         messageLogService.delete(baseDTO);
     }
 
     public void deleteItem(int id) {
-        othreceiptsdetailMapper.deleteItem(id);
         DocBaseDTO baseDTO = getBaseDTOById(Long.valueOf(id));
+        othreceiptsdetailMapper.deleteItem(id);
+
         //日志记录
         messageLogService.deleteDetail(baseDTO);
     }

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

@@ -106,17 +106,20 @@ public class OthspendingsServiceImpl extends CommonBaseServiceImpl<OthspendingsM
 
     @Override
     public void delete(int id) {
+        DocBaseDTO baseDTO = getBaseDTOById(Long.valueOf(id));
+
         othspendingsMapper.deleteByPrimaryKey(id);
         othspendingsdetailMapper.deleteItem(id);
-        DocBaseDTO baseDTO = getBaseDTOById(Long.valueOf(id));
+
         //日志记录
         messageLogService.delete(baseDTO);
     }
 
     @Override
     public void deleteItem(int id) {
-        othspendingsdetailMapper.deleteItem(id);
         DocBaseDTO baseDTO = getBaseDTOById(Long.valueOf(id));
+        othspendingsdetailMapper.deleteItem(id);
+
         //日志记录
         messageLogService.deleteDetail(baseDTO);
     }
@@ -248,7 +251,7 @@ public class OthspendingsServiceImpl extends CommonBaseServiceImpl<OthspendingsM
 
         //删除中间表
         othspendings = othspendingsMapper.selectByPrimaryKey(id);
-        banksubledgerMapper.deleteByPrimaryKey(othspendings.getOs_code(), "其他支出单");
+        banksubledgerMapper.deleteByPrimaryKey(othspendings.getOs_code(), "其他支出单",BaseContextHolder.getCompanyId());
 
         //资金
         Double amount = banksubledgerMapper.selectThisamount(othspendings.getOs_bankcode());
@@ -294,7 +297,7 @@ public class OthspendingsServiceImpl extends CommonBaseServiceImpl<OthspendingsM
             vendor.setVe_leftamount(beginapamount + beginprepayamount - payamount + bk_amount + preamount);
             paybalanceMapper.updateVendorByPrimaryKeySelective(vendor);
 
-            subledgerMapper.deleteByPrimaryKey(othspendings.getOs_code(), "其他支出单");
+            subledgerMapper.deleteByPrimaryKey(othspendings.getOs_code(), "其他支出单",BaseContextHolder.getCompanyId());
         }
 
 

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

@@ -354,8 +354,8 @@ public class PaybalanceServiceImpl extends CommonBaseServiceImpl<PaybalanceMappe
 
         //删除中间表
         paybalance = paybalanceMapper.selectByPrimaryKey(Long.valueOf(id));
-        subledgerMapper.deleteByPrimaryKey(paybalance.getPb_code(), paybalance.getPb_kind());
-        banksubledgerMapper.deleteByPrimaryKey(paybalance.getPb_code(), paybalance.getPb_kind());
+        subledgerMapper.deleteByPrimaryKey(paybalance.getPb_code(), paybalance.getPb_kind(),BaseContextHolder.getCompanyId());
+        banksubledgerMapper.deleteByPrimaryKey(paybalance.getPb_code(), paybalance.getPb_kind(),BaseContextHolder.getCompanyId());
 
         //计算期间金额
         Statsinfo statsinfo = new Statsinfo();
@@ -377,10 +377,12 @@ public class PaybalanceServiceImpl extends CommonBaseServiceImpl<PaybalanceMappe
     }
 
     public void delete(int id){
+        DocBaseDTO baseDTO = getBaseDTOById(Long.valueOf(id));
+
         paybalanceMapper.deleteByPrimaryKey(id);
         paybalancedetailMapper.deleteByPrimaryKey(id);
         paybalancedetMapper.deleteByPrimaryKey(id);
-        DocBaseDTO baseDTO = getBaseDTOById(Long.valueOf(id));
+
         //日志记录
         messageLogService.delete(baseDTO);
     }
@@ -395,8 +397,9 @@ public class PaybalanceServiceImpl extends CommonBaseServiceImpl<PaybalanceMappe
 
     @Override
     public void deleteItems(int id) {
-        paybalancedetailMapper.deleteItem(id);
         DocBaseDTO baseDTO = getBaseDTOById(Long.valueOf(id));
+        paybalancedetailMapper.deleteItem(id);
+
         //日志记录
         messageLogService.deleteDetail(baseDTO);
     }

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

@@ -192,10 +192,12 @@ public class RecbalanceServiceImpl extends CommonBaseServiceImpl<RecbalanceMappe
 
     @Override
     public void delete(int id) {
+        DocBaseDTO baseDTO = getBaseDTOById(Long.valueOf(id));
+
         recbalanceMapper.deleteByPrimaryKey(id);
-        recbalancedetMapper.deleteByPrimaryKey(id);
         recbalancedetailMapper.deleteByPrimaryKey(id);
-        DocBaseDTO baseDTO = getBaseDTOById(Long.valueOf(id));
+        recbalancedetMapper.deleteByPrimaryKey(id);
+
         //日志记录
         messageLogService.delete(baseDTO);
     }
@@ -214,16 +216,18 @@ public class RecbalanceServiceImpl extends CommonBaseServiceImpl<RecbalanceMappe
 
     @Override
     public void deleteItem(int id) {
-        recbalancedetMapper.deleteItem(id);
         DocBaseDTO baseDTO = getBaseDTOById(Long.valueOf(id));
+        recbalancedetMapper.deleteItem(id);
+
         //日志记录
         messageLogService.deleteDetail(baseDTO);
     }
 
     @Override
     public void deleteItems(int id) {
-        recbalancedetailMapper.deleteItem(id);
         DocBaseDTO baseDTO = getBaseDTOById(Long.valueOf(id));
+        recbalancedetailMapper.deleteItem(id);
+
         //日志记录
         messageLogService.deleteDetail(baseDTO);
     }
@@ -378,8 +382,8 @@ public class RecbalanceServiceImpl extends CommonBaseServiceImpl<RecbalanceMappe
 
         //删除中间表
         recbalance = recbalanceMapper.selectByPrimaryKey(id.intValue());
-        subledgerMapper.deleteByPrimaryKey(recbalance.getRb_code(), recbalance.getRb_kind());
-        banksubledgerMapper.deleteByPrimaryKey(recbalance.getRb_code(), recbalance.getRb_kind());
+        subledgerMapper.deleteByPrimaryKey(recbalance.getRb_code(), recbalance.getRb_kind(),BaseContextHolder.getCompanyId());
+        banksubledgerMapper.deleteByPrimaryKey(recbalance.getRb_code(), recbalance.getRb_kind(),BaseContextHolder.getCompanyId());
 
         //更新源单数据
         List<Recbalancedetail> recbalancedetail = recbalancedetailMapper.selectByPrimaryKey(Math.toIntExact(id));
@@ -516,32 +520,15 @@ public class RecbalanceServiceImpl extends CommonBaseServiceImpl<RecbalanceMappe
         subledger.setSl_vendid(0);
         subledger.setSl_date(recbalance.getRb_date());
         subledger.setSl_ym(DateUtils.getYm(recbalance.getRb_date()));
-        if (recbalance.getRb_rdamount() == null){
-            subledger.setSl_amount((double) 0);
-        }else {
-            subledger.setSl_amount(recbalance.getRb_rdamount() * -1);
-        }
-        subledger.setSl_orderamount(recbalance.getRb_rdamount());
-
-        Double yamount = recbalance.getRb_preamount();
-        if (yamount == null){
-            yamount = Double.valueOf(0);
-        }
-        if (yamount > 0 || yamount < 0){
-            subledger.setSl_yamount(yamount);
-        }else {
-            subledger.setSl_yamount((double) 0);
-        }
-        if (subledger.getSl_orderamount() == null){
-            subledger.setSl_orderamount((double) 0);
-        }
+        Double rdamount = recbalance.getRb_rdamount()==null?new Double(0):recbalance.getRb_rdamount();
+        Double preamount = recbalance.getRb_preamount()==null?new Double(0):recbalance.getRb_preamount();
+        subledger.setSl_amount(-rdamount);
+        subledger.setSl_yamount(preamount);
+        subledger.setSl_orderamount(rdamount);
 
-        if (subledger.getSl_discount() == null){
-            subledger.setSl_discount((double) 0);
-        }
-        subledger.setSl_namount(subledger.getSl_orderamount() + subledger.getSl_discount() - subledger.getSl_yamount());
+        subledger.setSl_namount(rdamount-preamount);
         subledger.setSl_remark(subledger.getSl_remark());
-        subledger.setSl_preamount(subledger.getSl_preamount());
+        subledger.setSl_preamount(preamount);
 
         subledgerMapper.insertSelective(subledger);
     }
@@ -569,10 +556,11 @@ public class RecbalanceServiceImpl extends CommonBaseServiceImpl<RecbalanceMappe
             banksubledger.setBl_assid(recbalance.getRb_custid());
             banksubledger.setBl_asscode(recbalance.getRb_custcode());
             banksubledger.setBl_assname(recbalance.getRb_custname());
-            banksubledger.setBl_spending(recbalancedet.getRd_amount());
+            Double amount = recbalancedet.getRd_amount()==null?new Double(0):recbalancedet.getRd_amount();
+            banksubledger.setBl_spending(amount);
             banksubledger.setBl_manname(recbalance.getRb_manname());
             banksubledger.setBl_remark(recbalancedet.getRd_remark());
-            banksubledger.setBl_orderamount(recbalancedet.getRd_amount());
+            banksubledger.setBl_orderamount(amount);
             if (banksubledgerMapper.selectCode(banksubledger.getBl_code()) == null){
                 banksubledgerMapper.insertSelective(banksubledger);
             }else {

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

@@ -373,27 +373,30 @@ public class VerificationServiceImpl extends CommonBaseServiceImpl<VerificationM
         if (null != id) {
             Verification verification = verificationMapper.selectByPrimaryKey(Math.toIntExact(id));
             SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMM");
-            String ym = simpleDateFormat.format(verification.getVc_date());
-            int detno = Integer.valueOf(ym);
-            if(checkSetAcount(detno)){
-                throw new BizException(500, BizExceptionCode.CHECK_SETACOUNT_EXIS.getMessage());
+            if(verification!=null){
+                String ym = simpleDateFormat.format(verification.getVc_date());
+                int detno = Integer.valueOf(ym);
+                if(checkSetAcount(detno)){
+                    throw new BizException(500, String.format(BizExceptionCode.CHECK_SETACOUNT_EXIS.getMessage(),detno));
+                }
+                //删除中间表
+                subledgerMapper.deleteByPrimaryKey(verification.getVc_code(),verification.getVc_kind(),BaseContextHolder.getCompanyId());
+
+                //从表删除
+                verificationdetMapper.deleteByParentPrimaryKey(id);
+                verificationdetailMapper.deleteByParentPrimaryKey(id);
+                //主表删除
+                verificationMapper.deleteByPrimaryKey(id);
+
+                DocBaseDTO baseDTO = new DocBaseDTO();
+                baseDTO.setId(id);
+                baseDTO.setCode(verification.getVc_code());
+                baseDTO.setName(BillCodeSeq.VERIFICATION.getName());
+                //日志
+                messageLogService.delete(baseDTO);
+            }else{
+                throw new BizException(500, BizExceptionCode.DELETE_NOT_EXIS.getMessage());
             }
-            //删除中间表
-            subledgerMapper.deleteByPrimaryKey(verification.getVc_code(),verification.getVc_kind());
-
-            //从表删除
-            verificationdetMapper.deleteByParentPrimaryKey(id);
-            verificationdetailMapper.deleteByParentPrimaryKey(id);
-            //主表删除
-            verificationMapper.deleteByPrimaryKey(id);
-
-            String code = verificationMapper.selectCodeById(id);
-            DocBaseDTO baseDTO = new DocBaseDTO();
-            baseDTO.setId(id);
-            baseDTO.setCode(code);
-            baseDTO.setName(BillCodeSeq.VERIFICATION.getName());
-            //日志
-            messageLogService.delete(baseDTO);
         }
     }
 
@@ -401,9 +404,9 @@ public class VerificationServiceImpl extends CommonBaseServiceImpl<VerificationM
      *
      * @param detno
      */
-    private boolean checkSetAcount(Integer detno){
+    private boolean checkSetAcount(int detno){
         boolean isSetAcount = false;
-        int count = verificationMapper.validateSetAcount(detno);
+        int count = verificationMapper.validateSetAcount(detno,BaseContextHolder.getCompanyId());
         if(count>0){
             isSetAcount = true;
         }
@@ -469,13 +472,17 @@ public class VerificationServiceImpl extends CommonBaseServiceImpl<VerificationM
             List<VerificationdetDTO> items1 = formData.getItems1();
             //获取从表2
             List<VerificationdetailDTO> items2 = formData.getItems2();
-            for(VerificationdetDTO det : items1){
-                Double nowbalanceDet = det.getVd_nowbalance()==null?new Double(0):det.getVd_nowbalance();
-                updateAuditSubledeger(det.getVd_slid(),nowbalanceDet);
+            if(items1!=null){
+                for(VerificationdetDTO det : items1){
+                    Double nowbalanceDet = det.getVd_nowbalance()==null?new Double(0):det.getVd_nowbalance();
+                    updateAuditSubledeger(det.getVd_slid(),nowbalanceDet);
+                }
             }
-            for(VerificationdetailDTO detail : items2){
-                Double nowbalanceDet = detail.getVcd_nowbalance()==null?new Double(0):detail.getVcd_nowbalance();
-                updateAuditSubledeger(detail.getVcd_slid(),nowbalanceDet);
+            if(items2!=null){
+                for(VerificationdetailDTO detail : items2){
+                    Double nowbalanceDet = detail.getVcd_nowbalance()==null?new Double(0):detail.getVcd_nowbalance();
+                    updateAuditSubledeger(detail.getVcd_slid(),nowbalanceDet);
+                }
             }
         }
         baseDTO.setId(id);

+ 23 - 0
applications/money/money-server/src/main/resources/config/application-docker-prod.yml

@@ -0,0 +1,23 @@
+eureka:
+  instance:
+    hostname: saas-money-server
+    prefer-ip-address: false
+  client:
+    serviceUrl:
+      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@saas-eureka-server:8500/eureka/
+spring:
+  rabbitmq:
+    host: 10.10.100.103
+    port: 5672
+    virtual-host: docker
+    username: saas
+    password: select123***
+  datasource:
+    url: jdbc:mysql://10.10.100.18:3306/saas_biz?characterEncoding=utf-8&useSSL=false
+    username: saas
+    password: select111***
+  redis:
+    host: 10.10.100.173
+    port: 6379
+logging:
+  destination: 10.10.100.160:5000

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

@@ -107,9 +107,10 @@
         from banksubledger
         where bl_id = #{bl_id,jdbcType=INTEGER}
     </select>
-    <delete id="deleteByPrimaryKey" parameterType="java.lang.String">
+    <delete id="deleteByPrimaryKey">
     delete from banksubledger
     where bl_id = #{code,jdbcType=VARCHAR} and bl_kind = #{kind, jdbcType=VARCHAR}
+    and companyid = #{companyid}
   </delete>
     <delete id="deleteByExample" parameterType="com.usoftchina.saas.money.po.BanksubledgerExample">
         delete from banksubledger

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

@@ -37,9 +37,10 @@
     from subledger
     where sl_id = #{sl_id,jdbcType=INTEGER}
   </select>
-  <delete id="deleteByPrimaryKey" parameterType="java.lang.String" >
+  <delete id="deleteByPrimaryKey" >
     delete from subledger
     where sl_code = #{code,jdbcType=VARCHAR} and sl_kind = #{kind, jdbcType=VARCHAR}
+    and companyid = #{companyid}
   </delete>
   <insert id="insert" parameterType="com.usoftchina.saas.money.po.Subledger" >
     insert into subledger (sl_id, sl_code, sl_kind, 

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

@@ -645,8 +645,9 @@
     select vc_code from Verification where vc_id = #{id} and IFNULL(vc_statuscode,'UNAUDITED')='UNAUDITED'
   </select>
 
-  <select id="validateSetAcount" parameterType="long" resultType="java.lang.String">
-    select count(1) from periodsdetail where pd_detno = #{detno} and IFNULL(pd_status,0)=0
+  <select id="validateSetAcount" resultType="java.lang.Integer">
+    select count(1) from periodsdetail where pd_detno = #{detno} and IFNULL(pd_status,0)=99
+    and companyid= #{companyid}
   </select>
   <select id="checkStatus" resultType="int">
     select count(1) from Verification where ifnull(vc_statuscode,'')='AUDITED' and vc_id= #{id,jdbcType=INTEGER}

+ 5 - 2
applications/purchase/purchase-server/src/main/resources/application.yml

@@ -47,7 +47,7 @@ eureka:
   client:
     registryFetchIntervalSeconds: 5
     serviceUrl:
-      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@localhost:8500/eureka/
+      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@192.168.0.181:8510/eureka/
 management:
   endpoints:
     web:
@@ -70,4 +70,7 @@ mybatis:
   type-aliases-package: com.usoftchina.saas.purchase.po
   mapper-locations: classpath:mapper/*.xml
 auth:
-  public-key: auth/pub.key
+  public-key: auth/pub.key
+ribbon:
+  ReadTimeout: 6000
+  ConnectTimeout: 2000

+ 20 - 0
applications/purchase/purchase-server/src/main/resources/config/application-docker-prod.yml

@@ -0,0 +1,20 @@
+eureka:
+  instance:
+    hostname: saas-purchase-server
+    prefer-ip-address: false
+  client:
+    serviceUrl:
+      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@saas-eureka-server:8500/eureka/
+spring:
+  rabbitmq:
+    host: 10.10.100.103
+    port: 5672
+    virtual-host: docker
+    username: saas
+    password: select123***
+  datasource:
+    url: jdbc:mysql://10.10.100.18:3306/saas_biz?characterEncoding=utf-8&useSSL=false
+    username: saas
+    password: select111***
+logging:
+  destination: 10.10.100.160:5000

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

@@ -16,7 +16,6 @@
         <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" />

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

@@ -16,7 +16,6 @@
     <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" />
@@ -44,7 +43,7 @@
 
   <sql id="Base_Column_List" >
     pu_id, pu_code, pu_date, pu_vendid, PU_VENDCODE, PU_VENDNAME, PU_BUYERID, PU_BUYERCODE, 
-    PU_BUYERNAME, PU_DELIVERY, PU_TAXTOTAL, PU_TOTAL, PU_REMARK, PU_TOTALUPPER, PU_INDATE, 
+    PU_BUYERNAME, PU_DELIVERY, PU_TAXTOTAL, PU_TOTAL, PU_REMARK, PU_TOTALUPPER,
     PU_PRINTSTATUS, PU_PRINTSTATUSCODE, PU_ACCEPTSTATUSCODE, PU_ACCEPTSTATUS, PU_STATUSCODE, 
     PU_STATUS, companyid, updaterId,updaterName,updateTime,creatorid,creatorName,createtime, pu_text1, pu_text2, pu_text3, pu_text4,
     pu_text5,pu_auditman,pu_auditdate
@@ -309,9 +308,6 @@
       <if test="pu_totalupper != null" >
         PU_TOTALUPPER = #{pu_totalupper,jdbcType=VARCHAR},
       </if>
-      <if test="createTime != null" >
-        PU_INDATE = #{createTime,jdbcType=TIMESTAMP},
-      </if>
       <if test="pu_printstatus != null" >
         PU_PRINTSTATUS = #{pu_printstatus,jdbcType=VARCHAR},
       </if>
@@ -378,7 +374,6 @@
       PU_TOTAL = #{pu_total,jdbcType=DOUBLE},
       PU_REMARK = #{pu_remark,jdbcType=VARCHAR},
       PU_TOTALUPPER = #{pu_totalupper,jdbcType=VARCHAR},
-      PU_INDATE = #{createTime,jdbcType=TIMESTAMP},
       PU_PRINTSTATUS = #{pu_printstatus,jdbcType=VARCHAR},
       PU_PRINTSTATUSCODE = #{pu_printstatuscode,jdbcType=VARCHAR},
       PU_ACCEPTSTATUSCODE = #{pu_acceptstatuscode,jdbcType=VARCHAR},

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

@@ -583,8 +583,8 @@ public class SaleServiceImpl implements SaleService{
             purchaseDetail.setPd_saledetno(detail.getSd_detno());
             purchaseDetail.setPd_saleid(sale.getId());
             purchaseDetail.setPd_taxrate(taxRate);
-            purchaseDetail.setPd_taxprice(Price*(1+taxRate/100));
-            purchaseDetail.setPd_taxtotal((Price*(1+taxRate/100))*qty);
+            purchaseDetail.setPd_taxprice(Price*(1-taxRate/100));
+            purchaseDetail.setPd_taxtotal((Price*(1-taxRate/100))*qty);
             purchaseDetail.setCompanyId(BaseContextHolder.getCompanyId());
             purchaseDetail.setCreatorId(BaseContextHolder.getUserId());
             purchaseDetail.setCreateTime(new Date());
@@ -601,7 +601,7 @@ public class SaleServiceImpl implements SaleService{
 
         DocBaseDTO log = new DocBaseDTO(sale.getId(),sale.getSa_code(),BillCodeSeq.SALE.getCaller());
         messageLogService.customizeLog(log, Operation.TURNPURCHASE);
-        return log;
+        return baseDTO;
     }
 
     //更新最新销售总额

+ 20 - 0
applications/sale/sale-server/src/main/resources/config/application-docker-prod.yml

@@ -0,0 +1,20 @@
+eureka:
+  instance:
+    hostname: saas-sale-server
+    prefer-ip-address: false
+  client:
+    serviceUrl:
+      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@saas-eureka-server:8500/eureka/
+spring:
+  rabbitmq:
+    host: 10.10.100.103
+    port: 5672
+    virtual-host: docker
+    username: saas
+    password: select123***
+  datasource:
+    url: jdbc:mysql://10.10.100.18:3306/saas_biz?characterEncoding=utf-8&useSSL=false
+    username: saas
+    password: select111***
+logging:
+  destination: 10.10.100.160:5000

+ 0 - 6
applications/storage/storage-dto/src/main/java/com/usoftchina/saas/storage/po/Make.java

@@ -36,12 +36,6 @@ public class Make extends CommonBaseEntity implements Serializable {
 
     private String ma_whname;
 
-    private Date ma_recorddate;
-
-    private Integer ma_recordid;
-
-    private String ma_recorder;
-
     private Double ma_price;
 
     private Double ma_total;

+ 4 - 1
applications/storage/storage-server/src/main/resources/application.yml

@@ -70,4 +70,7 @@ mybatis:
   type-aliases-package: com.usoftchina.saas.storage.entities
   mapper-locations: classpath:mapper/*.xml
 auth:
-  public-key: auth/pub.key
+  public-key: auth/pub.key
+ribbon:
+  ReadTimeout: 6000
+  ConnectTimeout: 2000

+ 20 - 0
applications/storage/storage-server/src/main/resources/config/application-docker-prod.yml

@@ -0,0 +1,20 @@
+eureka:
+  instance:
+    hostname: saas-storage-server
+    prefer-ip-address: false
+  client:
+    serviceUrl:
+      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@saas-eureka-server:8500/eureka/
+spring:
+  rabbitmq:
+    host: 10.10.100.103
+    port: 5672
+    virtual-host: docker
+    username: saas
+    password: select123***
+  datasource:
+    url: jdbc:mysql://10.10.100.18:3306/saas_biz?characterEncoding=utf-8&useSSL=false
+    username: saas
+    password: select111***
+logging:
+  destination: 10.10.100.160:5000

+ 3 - 52
applications/storage/storage-server/src/main/resources/mapper/MakeMapper.xml

@@ -17,9 +17,6 @@
     <result column="ma_whid" property="ma_whid" jdbcType="INTEGER" />
     <result column="ma_whcode" property="ma_whcode" jdbcType="VARCHAR" />
     <result column="ma_whname" property="ma_whname" jdbcType="VARCHAR" />
-    <result column="ma_recorddate" property="createTime" jdbcType="TIMESTAMP" />
-    <result column="ma_recordid" property="ma_recordid" jdbcType="INTEGER" />
-    <result column="ma_recorder" property="ma_recorder" jdbcType="VARCHAR" />
     <result column="ma_price" property="ma_price" jdbcType="DOUBLE" />
     <result column="ma_total" property="ma_total" jdbcType="DOUBLE" />
     <result column="ma_auditman" property="ma_auditman" jdbcType="DOUBLE" />
@@ -40,10 +37,6 @@
 
 
 
-
-
-
-
   <resultMap id="ResultMapWithBLOBs" type="com.usoftchina.saas.storage.po.ProdInOut">
     <id column="pi_id" jdbcType="INTEGER" property="id" />
     <result column="pi_inoutno" jdbcType="VARCHAR" property="pi_inoutno" />
@@ -86,15 +79,9 @@
   </resultMap>
 
 
-
-
-
-
-
   <sql id="Base_Column_List" >
     ma_id, ma_code, ma_status, ma_statuscode, ma_type, ma_prodid, ma_prodcode, ma_proddetail, 
-    ma_prodspec, ma_version, ma_produnit, ma_qty, ma_whid, ma_whcode, ma_whname, ma_recorddate,
-    ma_recordid, ma_recorder, ma_price, ma_total,ma_auditman,ma_auditdate, companyId, updaterId,updaterName,updateTime,creatorid,creatorName,createtime, ma_text1,
+    ma_prodspec, ma_version, ma_produnit, ma_qty, ma_whid, ma_whcode, ma_whname,ma_price, ma_total,ma_auditman,ma_auditdate, companyId, updaterId,updaterName,updateTime,creatorid,creatorName,createtime, ma_text1,
     ma_text2, ma_text3, ma_text4, ma_text5
   </sql>
   <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
@@ -115,8 +102,7 @@
       ma_statuscode, ma_type, ma_prodid, 
       ma_prodcode, ma_proddetail, ma_prodspec, 
       ma_version, ma_produnit, ma_qty, 
-      ma_whid, ma_whcode, ma_whname, ma_recorddate,
-      ma_recordid, ma_recorder, ma_price, 
+      ma_whid, ma_whcode, ma_whname, ma_price,
       ma_total, ma_auditman,ma_auditdate,companyId, updaterId,
       updateTime, ma_text1, ma_text2, 
       ma_text3, ma_text4, ma_text5
@@ -125,8 +111,7 @@
       #{ma_statuscode,jdbcType=VARCHAR}, #{ma_type,jdbcType=VARCHAR}, #{ma_prodid,jdbcType=INTEGER}, 
       #{ma_prodcode,jdbcType=VARCHAR}, #{ma_proddetail,jdbcType=VARCHAR}, #{ma_prodspec,jdbcType=VARCHAR}, 
       #{ma_version,jdbcType=VARCHAR}, #{ma_produnit,jdbcType=VARCHAR}, #{ma_qty,jdbcType=DOUBLE}, 
-      #{ma_whid,jdbcType=INTEGER}, #{ma_whcode,jdbcType=VARCHAR}, #{ma_whname,jdbcType=VARCHAR}, #{ma_recorddate,jdbcType=TIMESTAMP},
-      #{ma_recordid,jdbcType=INTEGER}, #{ma_recorder,jdbcType=VARCHAR}, #{ma_price,jdbcType=DOUBLE}, 
+      #{ma_whid,jdbcType=INTEGER}, #{ma_whcode,jdbcType=VARCHAR}, #{ma_whname,jdbcType=VARCHAR}, #{ma_price,jdbcType=DOUBLE},
       #{ma_total,jdbcType=DOUBLE}, #{ma_auditman,jdbcType=VARCHAR},#{ma_auditdate.jdbcType=TIMESTAMP},#{companyId,jdbcType=INTEGER}, #{updaterId,jdbcType=INTEGER},
       #{updateTime,jdbcType=TIMESTAMP}, #{ma_text1,jdbcType=VARCHAR}, #{ma_text2,jdbcType=VARCHAR}, 
       #{ma_text3,jdbcType=VARCHAR}, #{ma_text4,jdbcType=VARCHAR}, #{ma_text5,jdbcType=VARCHAR}
@@ -181,15 +166,6 @@
       <if test="ma_whname != null">
         ma_whname,
       </if>
-      <if test="ma_recorddate != null">
-        ma_recorddate,
-      </if>
-      <if test="ma_recordid != null">
-        ma_recordid,
-      </if>
-      <if test="ma_recorder != null">
-        ma_recorder,
-      </if>
       <if test="ma_price != null">
         ma_price,
       </if>
@@ -283,15 +259,6 @@
       <if test="ma_whname != null">
         #{ma_whname,jdbcType=VARCHAR},
       </if>
-      <if test="ma_recorddate != null">
-        #{ma_recorddate,jdbcType=TIMESTAMP},
-      </if>
-      <if test="ma_recordid != null">
-        #{ma_recordid,jdbcType=INTEGER},
-      </if>
-      <if test="ma_recorder != null">
-        #{ma_recorder,jdbcType=VARCHAR},
-      </if>
       <if test="ma_price != null">
         #{ma_price,jdbcType=DOUBLE},
       </if>
@@ -387,15 +354,6 @@
       <if test="ma_whname != null" >
         ma_whname = #{ma_whname,jdbcType=VARCHAR},
       </if>
-      <if test="ma_recorddate != null" >
-        ma_recorddate = #{ma_recorddate,jdbcType=TIMESTAMP},
-      </if>
-      <if test="ma_recordid != null" >
-        ma_recordid = #{ma_recordid,jdbcType=INTEGER},
-      </if>
-      <if test="ma_recorder != null" >
-        ma_recorder = #{ma_recorder,jdbcType=VARCHAR},
-      </if>
       <if test="ma_price != null" >
         ma_price = #{ma_price,jdbcType=DOUBLE},
       </if>
@@ -408,9 +366,6 @@
       <if test="ma_auditdate !=null">
         ma_auditdate =  #{ma_auditdate,jdbcType=TIMESTAMP},
       </if>
-
-
-
       <if test="companyId != null" >
         companyId = #{companyId,jdbcType=INTEGER},
       </if>
@@ -454,14 +409,10 @@
       ma_whid = #{ma_whid,jdbcType=INTEGER},
       ma_whcode = #{ma_whcode,jdbcType=VARCHAR},
       ma_whname = #{ma_whname,jdbcType=VARCHAR},
-      ma_recorddate = #{ma_recorddate,jdbcType=TIMESTAMP},
-      ma_recordid = #{ma_recordid,jdbcType=INTEGER},
-      ma_recorder = #{ma_recorder,jdbcType=VARCHAR},
       ma_price = #{ma_price,jdbcType=DOUBLE},
       ma_total = #{ma_total,jdbcType=DOUBLE},
       ma_auditman = #{ma_auditman,jdbcType=VARCHAR},
       ma_auditdate = #{ma_auditdate,jdbcType=TIMESTAMP},
-
       companyId = #{companyId,jdbcType=INTEGER},
       updaterId = #{updaterId,jdbcType=INTEGER},
       updateTime = #{updateTime,jdbcType=TIMESTAMP},

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

@@ -150,9 +150,9 @@
       <if test="mm_whcode != null" >
         #{mm_whcode,jdbcType=VARCHAR},
       </if>
-        <if test="mm_whname != null" >
-            #{mm_whname,jdbcType=VARCHAR},
-        </if>
+      <if test="mm_whname != null" >
+          #{mm_whname,jdbcType=VARCHAR},
+      </if>
       <if test="mm_price != null" >
         #{mm_price,jdbcType=DOUBLE},
       </if>
@@ -203,9 +203,9 @@
       <if test="mm_whcode != null" >
         mm_whcode = #{mm_whcode,jdbcType=VARCHAR},
       </if>
-        <if test="mm_whname != null" >
-            mm_whname = #{mm_whname,jdbcType=VARCHAR},
-        </if>
+      <if test="mm_whname != null" >
+          mm_whname = #{mm_whname,jdbcType=VARCHAR},
+      </if>
       <if test="mm_price != null" >
         mm_price = #{mm_price,jdbcType=DOUBLE},
       </if>
@@ -303,9 +303,9 @@
         <if test="item.mm_whcode != null" >
           mm_whcode = #{item.mm_whcode,jdbcType=VARCHAR},
         </if>
-          <if test="item.mm_whname != null" >
-              mm_whname = #{item.mm_whname,jdbcType=VARCHAR},
-          </if>
+        <if test="item.mm_whname != null" >
+            mm_whname = #{item.mm_whname,jdbcType=VARCHAR},
+        </if>
         <if test="item.mm_price != null" >
           mm_price = #{item.mm_price,jdbcType=DOUBLE},
         </if>

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

@@ -145,9 +145,13 @@ public class AccountController {
         return Result.success(ssoUserApi.checkMobile(mobile));
     }
 
+    @GetMapping("/checkEmail")
+    public Result checkEmail(@RequestParam("email") String email){
+        return Result.success(accountService.checkEmail(email));
+    }
+
     /**
      * 修改
-     *
      * @param accountUpdateDTO
      * @return
      */

+ 7 - 0
base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/mapper/AccountCompanyMapper.java

@@ -4,6 +4,7 @@ import com.usoftchina.saas.account.dto.CompanyRspDTO;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author yingp
@@ -66,4 +67,10 @@ public interface AccountCompanyMapper {
      * @return
      */
     boolean bindDefault(@Param("accountId") Long accountId, @Param("companyId") Long companyId);
+
+    /**
+     * 账套数据初始化
+     * @param map
+     */
+    void initData(Map<String, Object> map);
 }

+ 8 - 0
base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/mapper/AccountMapper.java

@@ -105,4 +105,12 @@ public interface AccountMapper {
      * @param enabled
      */
     void updateEnabled(@Param("id") Long id, @Param("enabled") Boolean enabled);
+
+    /**
+     * 校验email是否已存在
+     * @param email
+     * @param companyId
+     * @return
+     */
+    int checkEmail(@Param("email") String email, @Param("companyId") Long companyId);
 }

+ 7 - 0
base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/mapper/RoleResourceMapper.java

@@ -75,6 +75,13 @@ public interface RoleResourceMapper {
      */
     List<OtherPower> selectOthersPower();
 
+    /**
+     * 通过角色ID查询拥友的其他权限
+     * @param id
+     * @return
+     */
+    List<OtherPower> selectOthersPowerByRoleId(Long id);
+
     /**
      * 批量插入
      * @param roleResourceList

+ 7 - 0
base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/service/AccountService.java

@@ -178,4 +178,11 @@ public interface AccountService {
      * @param accountId
      */
     void clearCache(Long accountId);
+
+    /**
+     * 校验email是否已存在
+     * @param email
+     * @return
+     */
+    boolean checkEmail(String email);
 }

+ 11 - 1
base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/service/impl/AccountCenterServiceImpl.java

@@ -73,12 +73,22 @@ public class AccountCenterServiceImpl implements AccountCenterService {
         if ("0".equals(type)) {
             String result = ssoUserSpaceApi.registerLogin(company.getName(), company.getBusinessCode(), Long.parseLong(accountRegDTO.getUu()));
         }
+        //c.插入 账户公司 映射
         accountCompanyMapper.insert(accountId, company.getId());
         //2.更新账户信息
         Account account = BeanMapper.map(accountRegDTO, Account.class);
-
         account.setId(accountId);
+        account.setEnabled(true);
         accountService.updateByPrimaryKeySelective(account);
+
+        //调用存储过程, 对新开账套数据初始化
+        Map<String, Object> map = new HashMap<String, Object>();
+        map.put("fromCompany", 2);
+        map.put("newCompany", company.getId());
+        map.put("accountId", accountId);
+        map.put("result", null);
+        accountCompanyMapper.initData(map);
+
         return null;
     }
 

+ 6 - 0
base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/service/impl/AccountServiceImpl.java

@@ -198,4 +198,10 @@ public class AccountServiceImpl implements AccountService {
             AccountCache.uu(account.getUu()).hdel();
         }
     }
+
+    @Override
+    public boolean checkEmail(String email){
+        return accountMapper.checkEmail(email, BaseContextHolder.getCompanyId()) > 0;
+    }
+
 }

+ 26 - 3
base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/service/impl/RoleServiceImpl.java

@@ -94,6 +94,7 @@ public class RoleServiceImpl extends CommonBaseServiceImpl<RoleMapper, Role> imp
         List<Map<String, Object>> classifyList = roleResourceMapper.selectClassifyByRoleId(id);
         List<PowerInfo> powerInfoList = roleResourceMapper.selectPowerInfo();
         List<OtherPower> otherPowerList = roleResourceMapper.selectOthersPower();
+        List<OtherPower> hasOtherPowerList = roleResourceMapper.selectOthersPowerByRoleId(id);
 
         for (PowerInfo powerInfo : powerInfoList){
             PowerDTO powerDTO = new PowerDTO();
@@ -103,6 +104,7 @@ public class RoleServiceImpl extends CommonBaseServiceImpl<RoleMapper, Role> imp
             powerDTO.setModuleId(powerInfo.getModuleId());
             //赋值默认权限,在权限列表中的资源默认置为false
             setPowerValue(powerDTO, powerInfo.getClassify(), false);
+            setDefaultOtherPower(powerDTO, powerDTO.getGroupId(), id, otherPowerList);
             //赋值权限
             for (Map<String, Object> map : classifyList){
                 if (powerInfo.getGrougId().equals(map.get("group_id"))){
@@ -111,7 +113,7 @@ public class RoleServiceImpl extends CommonBaseServiceImpl<RoleMapper, Role> imp
                     setPowerValue(powerDTO, classify, true);
                 }
                 //设置其他权限
-                setOtherPower(powerDTO, powerInfo.getGrougId(), id, otherPowerList);
+                setOtherPower(powerDTO, hasOtherPowerList);
             }
             powerDTOList.add(powerDTO);
         }
@@ -164,10 +166,17 @@ public class RoleServiceImpl extends CommonBaseServiceImpl<RoleMapper, Role> imp
         return true;
     }
 
-    private void setOtherPower(PowerDTO powerDTO, Long groupId, Long roleId, List<OtherPower> otherPowerList) {
+    /**
+     * 设置其他默认权限,用于生成设置按钮
+     * @param powerDTO
+     * @param groupId
+     * @param roleId
+     * @param otherPowerList
+     */
+    private void setDefaultOtherPower(PowerDTO powerDTO, Long groupId, Long roleId, List<OtherPower> otherPowerList){
         List<OtherPower> otherPowers = new ArrayList<OtherPower>();
         for (OtherPower otherPower : otherPowerList){
-            if (groupId.equals(otherPower.getGroupId()) && roleId.equals(otherPower.getRoleId())){
+            if (groupId.equals(otherPower.getGroupId())){
                 otherPowers.add(otherPower);
             }
         }
@@ -175,6 +184,20 @@ public class RoleServiceImpl extends CommonBaseServiceImpl<RoleMapper, Role> imp
         powerDTO.setOther(otherPowerDTOList);
     }
 
+    private void setOtherPower(PowerDTO powerDTO, List<OtherPower> otherPowerList) {
+        List<OtherPowerDTO> otherPowers = powerDTO.getOther();
+        if (!CollectionUtils.isEmpty(otherPowers)) {
+            for (OtherPower otherPower : otherPowerList) {
+                for (OtherPowerDTO otherPowerDTO : otherPowers) {
+                    if (otherPowerDTO.getResourceId().equals(otherPower.getResourceId())) {
+                        otherPowerDTO.setChecked(otherPower.isChecked());
+                    }
+                }
+            }
+        }
+        powerDTO.setOther(otherPowers);
+    }
+
     private void setPowerValue(PowerDTO powerDTO, String classify , boolean status) {
         String[] array = classify.split(",");
         for(int i = 0; i < array.length; i++){

+ 25 - 0
base-servers/account/account-server/src/main/resources/config/application-docker-prod.yml

@@ -0,0 +1,25 @@
+eureka:
+  instance:
+    hostname: saas-account-server
+    prefer-ip-address: false
+  client:
+    serviceUrl:
+      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@saas-eureka-server:8500/eureka/
+spring:
+  rabbitmq:
+    host: 10.10.100.103
+    port: 5672
+    virtual-host: docker
+    username: saas
+    password: select123***
+  datasource:
+    url: jdbc:mysql://10.10.100.18:3306/saas_account?characterEncoding=utf-8&useSSL=false
+    username: saas
+    password: select111***
+  redis:
+    host: 10.10.100.173
+    port: 6379
+logging:
+  destination: 10.10.100.160:5000
+sso:
+  base-url: https://sso.ubtob.com

+ 12 - 0
base-servers/account/account-server/src/main/resources/mapper/AccountCompanyMapper.xml

@@ -27,4 +27,16 @@
     <update id="bindDefault" >
         UPDATE AC_ACCOUNT_COMPANY SET IS_DEFAULT = 1 WHERE ACCOUNT_ID = #{accountId} AND COMPANY_ID = #{companyId}
     </update>
+
+    <parameterMap id="initParamMap" type="java.util.Map">
+        <parameter property="fromCompany" jdbcType="VARCHAR" mode="IN" />
+        <parameter property="newCompany" jdbcType="VARCHAR" mode="IN" />
+        <parameter property="accountId" jdbcType="INTEGER" mode="IN" />
+        <parameter property="result" jdbcType="VARCHAR" mode="OUT" />
+    </parameterMap>
+
+    <select id="initData" parameterMap="initParamMap" statementType="CALLABLE">
+        CALL COMPANY_INSTALL(?, ?, ?, ?)
+    </select>
+
 </mapper>

+ 4 - 0
base-servers/account/account-server/src/main/resources/mapper/AccountMapper.xml

@@ -202,4 +202,8 @@
     <update id="updateEnabled">
         update ac_account set enabled=#{enabled,jdbcType=BOOLEAN} where id=#{id,jdbcType=BIGINT}
     </update>
+    <select id="checkEmail" resultType="int">
+        SELECT COUNT(*) FROM AC_ACCOUNT AA LEFT JOIN AC_ACCOUNT_COMPANY AAC ON AAC.ACCOUNT_ID = AA.ID
+        WHERE AAC.COMPANY_ID = #{companyId} WHERE AA.EMAIL = #{email};
+    </select>
 </mapper>

+ 6 - 2
base-servers/account/account-server/src/main/resources/mapper/RoleResourceMapper.xml

@@ -48,10 +48,14 @@
         <result column="role_id" property="roleId" jdbcType="BIGINT" />
     </resultMap>
     <select id="selectOthersPower" resultMap="OtherPowerResultMap">
-      SELECT name,id,group_id,role_id,CASE WHEN ROLE_ID IS NULL THEN false ELSE true end checked FROM AC_RESOURCE
-      LEFT JOIN ac_role_resource ON ID = RESOURCE_ID
+      SELECT name,id,group_id FROM AC_RESOURCE
       WHERE CLASSIFY='OTHER'
     </select>
+    <select id="selectOthersPowerByRoleId" resultMap="OtherPowerResultMap">
+        SELECT name,id,group_id,role_id,CASE WHEN ROLE_ID IS NULL THEN false ELSE true end checked FROM AC_RESOURCE
+        LEFT JOIN ac_role_resource ON ID = RESOURCE_ID
+        WHERE CLASSIFY='OTHER' and role_id = #{id};
+    </select>
     <insert id="batchInsert" parameterType="java.util.List">
         INSERT INTO AC_ROLE_RESOURCE(ROLE_ID, RESOURCE_ID, COMPANY_ID, APP_ID)
         VALUES

+ 9 - 0
base-servers/admin-server/src/main/resources/config/application-docker-prod.yml

@@ -0,0 +1,9 @@
+eureka:
+  instance:
+    hostname: saas-admin-server
+    prefer-ip-address: false
+  client:
+    serviceUrl:
+      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@saas-eureka-server:8500/eureka/
+logging:
+  destination: 10.10.100.160:5000

+ 38 - 4
base-servers/auth/auth-server/src/main/java/com/usoftchina/saas/auth/controller/AuthController.java

@@ -6,6 +6,7 @@ import com.usoftchina.saas.account.constant.AccountType;
 import com.usoftchina.saas.account.dto.AccountCopyDTO;
 import com.usoftchina.saas.account.dto.AccountDTO;
 import com.usoftchina.saas.account.dto.AccountUpdateDTO;
+import com.usoftchina.saas.account.dto.CompanyBaseDTO;
 import com.usoftchina.saas.auth.common.cookie.CookieInfo;
 import com.usoftchina.saas.auth.common.jwt.JwtHelper;
 import com.usoftchina.saas.auth.common.jwt.JwtInfo;
@@ -14,6 +15,7 @@ import com.usoftchina.saas.auth.dto.AuthDTO;
 import com.usoftchina.saas.auth.dto.AuthorizeLogDTO;
 import com.usoftchina.saas.auth.dto.TokenDTO;
 import com.usoftchina.saas.auth.po.AuthorizeLog;
+import com.usoftchina.saas.auth.po.VirtualAuthorizeLog;
 import com.usoftchina.saas.auth.service.AuthorizeCountService;
 import com.usoftchina.saas.auth.service.AuthorizeLogService;
 import com.usoftchina.saas.base.Result;
@@ -23,10 +25,7 @@ import com.usoftchina.saas.page.PageDefault;
 import com.usoftchina.saas.page.PageRequest;
 import com.usoftchina.saas.server.web.ServletUtils;
 import com.usoftchina.saas.socket.api.SocketMessageApi;
-import com.usoftchina.saas.utils.BeanMapper;
-import com.usoftchina.saas.utils.CollectionUtils;
-import com.usoftchina.saas.utils.JsonUtils;
-import com.usoftchina.saas.utils.StringUtils;
+import com.usoftchina.saas.utils.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -36,6 +35,9 @@ import org.springframework.web.bind.annotation.*;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
 
 /**
  * @author yingp
@@ -117,6 +119,38 @@ public class AuthController {
         return Result.error(result.getCode(), result.getMessage());
     }
 
+
+    @PostMapping("/virtual/authorize/{mobile}")
+    public Result<AuthDTO> virtualAuthorize(HttpServletRequest request, @PathVariable("mobile") String mobile) {
+        //构造虚拟account,生成token
+        String randomNum = DateUtils.format(new Date(), "hhmmss");
+        AccountDTO accountDTO = new AccountDTO();
+        accountDTO.setId(-99999L);
+        accountDTO.setUsername("virtual" + randomNum);
+        accountDTO.setRealname("游客" + randomNum);
+        accountDTO.setMobile(mobile);
+        accountDTO.setType(0);
+        //公司信息
+        List<CompanyBaseDTO> companies = new ArrayList<CompanyBaseDTO>();
+        CompanyBaseDTO companyBaseDTO = new CompanyBaseDTO();
+        companyBaseDTO.setId(2L);
+        companyBaseDTO.setName("演示账套");
+
+        companies.add(companyBaseDTO);
+        accountDTO.setCompanies(companies);
+
+        Long companyId = 2L;            //演示账套companyId  :  2
+        String appId = "trade-app";     //App_ID
+        JwtInfo info = new JwtInfo(appId, companyId, accountDTO.getId(), accountDTO.getUsername(), accountDTO.getRealname());
+        JwtToken jwtToken = JwtHelper.generateToken(info, privateKeyPath, expire);
+        TokenDTO tokenDTO = BeanMapper.map(jwtToken, TokenDTO.class);
+        // 登录日志
+        authorizeLogService.saveVirtual(VirtualAuthorizeLog.from(request)
+                .setMobile(Long.parseLong(accountDTO.getMobile()))
+                .setAppId(appId).build());
+        return Result.success(new AuthDTO(tokenDTO, accountDTO));
+    }
+
     /**
      * 账户中心登录时jsonp回调
      *

+ 8 - 0
base-servers/auth/auth-server/src/main/java/com/usoftchina/saas/auth/mapper/AuthorizeLogMapper.java

@@ -1,6 +1,7 @@
 package com.usoftchina.saas.auth.mapper;
 
 import com.usoftchina.saas.auth.po.AuthorizeLog;
+import com.usoftchina.saas.auth.po.VirtualAuthorizeLog;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -26,4 +27,11 @@ public interface AuthorizeLogMapper {
      * @return
      */
     List<AuthorizeLog> selectByAppIdAndAccountId(@Param("appId") String appId, @Param("accountId") Long accountId);
+
+    /**
+     * 保存虚拟登陆的LOG
+     * @param virtualAuthorizeLog
+     * @return
+     */
+    int insertVirtual(VirtualAuthorizeLog virtualAuthorizeLog);
 }

+ 117 - 0
base-servers/auth/auth-server/src/main/java/com/usoftchina/saas/auth/po/VirtualAuthorizeLog.java

@@ -0,0 +1,117 @@
+package com.usoftchina.saas.auth.po;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author chenw
+ * @date 2018/11/26
+ */
+public class VirtualAuthorizeLog implements Serializable{
+    private Long id;
+    private Long mobile;
+    private String clientIp;
+    private String userAgent;
+    private Date loginTime;
+    private String appId;
+
+    public VirtualAuthorizeLog() {
+    }
+
+    public VirtualAuthorizeLog(Long mobile, String clientIp, String userAgent, String appId) {
+        this.mobile = mobile;
+        this.clientIp = clientIp;
+        this.userAgent = userAgent;
+        this.loginTime = new Date();
+        this.appId = appId;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getMobile() {
+        return mobile;
+    }
+
+    public void setMobile(Long mobile) {
+        this.mobile = mobile;
+    }
+
+    public String getClientIp() {
+        return clientIp;
+    }
+
+    public void setClientIp(String clientIp) {
+        this.clientIp = clientIp;
+    }
+
+    public String getUserAgent() {
+        return userAgent;
+    }
+
+    public void setUserAgent(String userAgent) {
+        this.userAgent = userAgent;
+    }
+
+    public Date getLoginTime() {
+        return loginTime;
+    }
+
+    public void setLoginTime(Date loginTime) {
+        this.loginTime = loginTime;
+    }
+
+    public String getAppId() {
+        return appId;
+    }
+
+    public void setAppId(String appId) {
+        this.appId = appId;
+    }
+
+    public static Builder from(HttpServletRequest request) {
+        return new Builder(request);
+    }
+
+    public static class Builder {
+        private Long mobile;
+        private String clientIp;
+        private String userAgent;
+        private String appId;
+
+        public Builder(HttpServletRequest request) {
+            this.clientIp = request.getRemoteAddr();
+            this.userAgent = request.getHeader("User-Agent");
+        }
+
+        public Builder setMobile(Long mobile) {
+            this.mobile = mobile;
+            return this;
+        }
+
+        public Builder setClientIp(String clientIp) {
+            this.clientIp = clientIp;
+            return this;
+        }
+
+        public Builder setUserAgent(String userAgent) {
+            this.userAgent = userAgent;
+            return this;
+        }
+
+        public Builder setAppId(String appId) {
+            this.appId = appId;
+            return this;
+        }
+
+        public VirtualAuthorizeLog build() {
+            return new VirtualAuthorizeLog(mobile, clientIp, userAgent, appId);
+        }
+    }
+}

+ 8 - 0
base-servers/auth/auth-server/src/main/java/com/usoftchina/saas/auth/service/AuthorizeLogService.java

@@ -3,6 +3,7 @@ package com.usoftchina.saas.auth.service;
 import com.github.pagehelper.PageInfo;
 import com.usoftchina.saas.auth.dto.AuthorizeLogDTO;
 import com.usoftchina.saas.auth.po.AuthorizeLog;
+import com.usoftchina.saas.auth.po.VirtualAuthorizeLog;
 import com.usoftchina.saas.page.PageRequest;
 
 /**
@@ -25,4 +26,11 @@ public interface AuthorizeLogService {
      * @return
      */
     PageInfo<AuthorizeLogDTO> findByPage(PageRequest page);
+
+    /**
+     * 保存虚拟账户登录LOG
+     * @param virtualAuthorizeLog
+     * @return
+     */
+    boolean saveVirtual(VirtualAuthorizeLog virtualAuthorizeLog);
 }

+ 6 - 0
base-servers/auth/auth-server/src/main/java/com/usoftchina/saas/auth/service/impl/AuthorizeLogServiceImpl.java

@@ -5,6 +5,7 @@ import com.github.pagehelper.PageInfo;
 import com.usoftchina.saas.auth.dto.AuthorizeLogDTO;
 import com.usoftchina.saas.auth.mapper.AuthorizeLogMapper;
 import com.usoftchina.saas.auth.po.AuthorizeLog;
+import com.usoftchina.saas.auth.po.VirtualAuthorizeLog;
 import com.usoftchina.saas.auth.service.AuthorizeLogService;
 import com.usoftchina.saas.context.BaseContextHolder;
 import com.usoftchina.saas.page.PageRequest;
@@ -39,4 +40,9 @@ public class AuthorizeLogServiceImpl implements AuthorizeLogService{
         );
         return new PageInfo<>(BeanMapper.mapList(logs, AuthorizeLogDTO.class));
     }
+
+    @Override
+    public boolean saveVirtual(VirtualAuthorizeLog virtualAuthorizeLog) {
+        return authorizeLogMapper.insertVirtual(virtualAuthorizeLog) > 0;
+    }
 }

+ 26 - 0
base-servers/auth/auth-server/src/main/resources/config/application-docker-prod.yml

@@ -0,0 +1,26 @@
+eureka:
+  instance:
+    hostname: saas-auth-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
+spring:
+  rabbitmq:
+    host: 10.10.100.103
+    port: 5672
+    virtual-host: docker
+    username: saas
+    password: select123***
+  datasource:
+    url: jdbc:mysql://10.10.100.18:3306/saas_auth?characterEncoding=utf-8&useSSL=false
+    username: saas
+    password: select111***
+  redis:
+    host: 10.10.100.173
+    port: 6379
+logging:
+  destination: 10.10.100.160:5000

+ 5 - 0
base-servers/auth/auth-server/src/main/resources/mapper/AuthorizeLogMapper.xml

@@ -18,4 +18,9 @@
         select * from au_authorize_log where app_id=#{appId} and account_id=#{accountId}
         order by login_time desc
     </select>
+    <insert id="insertVirtual" parameterType="com.usoftchina.saas.auth.po.VirtualAuthorizeLog">
+        insert into au_virtual_authorize_log(app_id,mobile,client_ip,user_agent,login_time)
+        values (#{appId,jdbcType=VARCHAR}, #{mobile,jdbcType=BIGINT}, #{clientIp,jdbcType=VARCHAR},
+        #{userAgent,jdbcType=VARCHAR}, #{loginTime,jdbcType=TIMESTAMP})
+    </insert>
 </mapper>

+ 7 - 0
base-servers/eureka-server/src/main/resources/config/application-docker-prod.yml

@@ -0,0 +1,7 @@
+eureka:
+  instance:
+    hostname: saas-eureka-server
+server:
+  port: 8500
+logging:
+  destination: 10.10.100.160:5000

+ 1 - 1
base-servers/file/file-server/src/main/java/com/usoftchina/saas/file/controller/FileController.java

@@ -199,7 +199,7 @@ public class FileController {
 
     @ApiOperation(value = "查看子文件")
     @GetMapping(value = "/list")
-    public Result<List<FileInfoDTO>> listFiles(@RequestParam("folderId") Long folderId) {
+    public Result<List<FileInfoDTO>> listFiles(@RequestParam(value = "folderId", required = false) Long folderId) {
         List<FileInfo> files = fileService.findByFolderId(checkFolder(folderId).getId());
         return Result.success(BeanMapper.mapList(files, FileInfoDTO.class));
     }

+ 26 - 0
base-servers/file/file-server/src/main/resources/config/application-docker-prod.yml

@@ -0,0 +1,26 @@
+eureka:
+  instance:
+    hostname: saas-file-server
+    prefer-ip-address: false
+  client:
+    serviceUrl:
+      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@saas-eureka-server:8500/eureka/
+spring:
+  rabbitmq:
+    host: 10.10.100.103
+    port: 5672
+    virtual-host: docker
+    username: saas
+    password: select123***
+  datasource:
+    url: jdbc:mysql://10.10.100.18:3306/saas_file?characterEncoding=utf-8&useSSL=false
+    username: saas
+    password: select111***
+  redis:
+    host: 10.10.100.173
+    port: 6379
+fdfs:
+  tracker-list:
+    - 10.10.100.200:22122
+logging:
+  destination: 10.10.100.160:5000

+ 5 - 3
base-servers/file/file-server/src/test/java/com/usoftchina/saas/file/controller/FileControllerTest.java

@@ -3,6 +3,7 @@ package com.usoftchina.saas.file.controller;
 import com.usoftchina.saas.base.Result;
 import com.usoftchina.saas.file.dto.FileInfoDTO;
 import com.usoftchina.saas.file.dto.FolderDTO;
+import com.usoftchina.saas.file.dto.FolderSaveDTO;
 import com.usoftchina.saas.file.util.RandomTextFile;
 import com.usoftchina.saas.test.BaseControllerTest;
 import org.apache.commons.lang.RandomStringUtils;
@@ -28,9 +29,10 @@ public class FileControllerTest extends BaseControllerTest {
     public static Long folder_1_2_1;
 
     private FolderDTO newFolder(Long folderId, String name) throws Exception{
-        MvcResult mvcResult = mockMvc.perform(post("/folder")
-                .param("folderId", String.valueOf(folderId))
-                .param("name", name))
+        FolderSaveDTO folderSaveDTO = new FolderSaveDTO();
+        folderSaveDTO.setFolderId(folderId);
+        folderSaveDTO.setName(name);
+        MvcResult mvcResult = mockMvc.perform(requestBody("/folder", folderSaveDTO))
                 .andExpect(isSuccess())
                 .andReturn();
         Result<FolderDTO> result = result(mvcResult, FolderDTO.class);

+ 8 - 5
base-servers/gateway-server/src/main/java/com/usoftchina/saas/gateway/config/AuthFilter.java

@@ -52,12 +52,15 @@ public class AuthFilter implements GlobalFilter, Ordered {
                 BaseContextHolder.setCompanyId(jwt.getCompanyId());
                 BaseContextHolder.setUserName(jwt.getRealName());
                 BaseContextHolder.setToken(token);
-                AccountDTO accountDTO = AccountCache.current().getAccount();
-                if (null == accountDTO) {
-                    throw new BizException(ExceptionCode.USER_NOT_EXIST);
+                if (jwt.getUserId() != -99999) {    //非虚拟用户登录时
+                    AccountDTO accountDTO = AccountCache.current().getAccount();
+                    if (null == accountDTO) {
+                        throw new BizException(ExceptionCode.USER_NOT_EXIST);
+                    }
+                    // 鉴别角色权限
+                    checkPermission(exchange.getRequest(), jwt, accountDTO);
                 }
-                // 鉴别角色权限
-                checkPermission(exchange.getRequest(), jwt, accountDTO);
+
             }
             return chain.filter(exchange);
         } finally {

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

@@ -179,6 +179,7 @@ auth:
   public-key: auth/pub.key
   ignores:
     - /api/auth/authorize
+    - /api/auth/virtual/authorize/**
     - /api/auth/sso/callback/**
     - /api/account/account/register
     - /api/auth/info

+ 19 - 0
base-servers/gateway-server/src/main/resources/config/application-docker-prod.yml

@@ -0,0 +1,19 @@
+eureka:
+  instance:
+    hostname: saas-gateway-server
+    prefer-ip-address: false
+  client:
+    serviceUrl:
+      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@saas-eureka-server:8500/eureka/
+spring:
+  rabbitmq:
+    host: 10.10.100.103
+    port: 5672
+    virtual-host: docker
+    username: saas
+    password: select123***
+  redis:
+    host: 10.10.100.173
+    port: 6379
+logging:
+  destination: 10.10.100.160:5000

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

@@ -0,0 +1,23 @@
+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:
+    host: 10.10.100.103
+    port: 5672
+    virtual-host: docker
+    username: saas
+    password: select123***
+  datasource:
+    url: jdbc:mysql://10.10.100.18:3306/saas_mail?characterEncoding=utf-8&useSSL=false
+    username: saas
+    password: select111***
+  redis:
+    host: 10.10.100.173
+    port: 6379
+logging:
+  destination: 10.10.100.160:5000

+ 19 - 0
base-servers/socket/socket-server/src/main/resources/config/application-docker-prod.yml

@@ -0,0 +1,19 @@
+eureka:
+  instance:
+    hostname: saas-socket-server
+    prefer-ip-address: false
+  client:
+    serviceUrl:
+      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@saas-eureka-server:8500/eureka/
+spring:
+  rabbitmq:
+    host: 10.10.100.103
+    port: 5672
+    virtual-host: docker
+    username: saas
+    password: select123***
+  redis:
+    host: 10.10.100.173
+    port: 6379
+logging:
+  destination: 10.10.100.160:5000

+ 19 - 0
base-servers/ui-server/src/main/resources/config/application-docker-prod.yml

@@ -0,0 +1,19 @@
+eureka:
+  instance:
+    hostname: saas-ui-server
+    prefer-ip-address: false
+  client:
+    serviceUrl:
+      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@saas-eureka-server:8500/eureka/
+spring:
+  rabbitmq:
+    host: 10.10.100.103
+    port: 5672
+    virtual-host: docker
+    username: saas
+    password: select123***
+  data:
+    mongodb:
+      uri: mongodb://10.10.100.123:27017/saas_ui
+logging:
+  destination: 10.10.100.160:5000

+ 13 - 0
base-servers/zipkin-server/src/main/resources/config/application-docker-prod.yml

@@ -0,0 +1,13 @@
+eureka:
+  instance:
+    hostname: saas-zipkin-server
+    prefer-ip-address: false
+  client:
+    serviceUrl:
+      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@saas-eureka-server:8500/eureka/
+zipkin:
+  collector:
+    rabbitmq:
+      uri: amqp://saas:select123***@10.10.100.103:5672/docker
+logging:
+  destination: 10.10.100.160:5000

BIN
frontend/saas-portal-web/build/logo.png


+ 0 - 3
frontend/saas-portal-web/src/App.vue

@@ -1,17 +1,14 @@
 <template>
   <div id="app">
-    <!-- <headers></headers> -->
     <router-view/>
     <footers></footers>
   </div>
 </template>
 <script>
-// import Headers from './components/header/header.vue';
 import footers from './components/footer/footer.vue';
 export default {
   name: 'App',
   components: {
-      // Headers,
       footers
   },
 }

BIN
frontend/saas-portal-web/src/assets/logo.png


+ 71 - 43
frontend/saas-portal-web/src/components/conenter/addgongsi.vue

@@ -26,15 +26,14 @@
                             </select>
                         </li>
                         <li style="height:60px;">
-                            <span class="qy-biaoti">公司地址</span>
-                            <div class="addbiaoqian">
-                                <v-distpicker @province= 'qyprovince'
-                                              @city= 'qycity'
-                                              @area= 'qyarea'
-                                >
-                                </v-distpicker>
-                                <input ref="address" class="qy-xiangxi" type="text" placeholder="输入企业详细地址">
+                            <span class="qy-biaoti left">公司地址</span>
+                            <div class="addbiaoqian" style="float: left;margin: 0;">
+                                <!-- <v-distpicker @province= 'qyprovince' @city= 'qycity' @area= 'qyarea'></v-distpicker> -->
+                                <v-distpicker @selected= 'selected'></v-distpicker>
+                                <input ref="address" @change="address" class="qy-xiangxi" type="text" placeholder="输入企业详细地址">
+                                
                             </div>
+                            <span ref="ress" style="color:red;margin-top: 40px;display: inline-block;"></span>
                         </li>
                     </ul>
                 </div>
@@ -73,7 +72,12 @@ import VDistpicker from 'v-distpicker'
                 area:'',//区
                 qymingzi: false,//企业名是否注册
                 Email: '',
-                mytoken: JSON.parse(localStorage.getItem('app-state-session'))//本地储存的用户信息
+                mytoken: JSON.parse(localStorage.getItem('app-state-session')),//本地储存的用户信息
+                // reg: new RegExp("[`~!@#$^&*()=+-|{}':;',\\[\\].<>/?~!@#¥……&*()——|{}【】‘;:”“'。,、?]"),
+                reg: new RegExp(/[\@\#\$\%\&\*!\¥]/),
+                isaddress: false,//公司地址验证
+                isname: false,//姓名验证
+                isspaceName: false,//公司名验证
             }
         },
         components:{
@@ -90,42 +94,68 @@ import VDistpicker from 'v-distpicker'
             },
             //测试企业名称
             spaceName(){
-                let qyname = this.$refs.qyname.value;//公司名字
+                let qyname = this.$refs.qyname.value.replace(/\s+/g, "");//公司名字过滤空格
                 if(qyname == ''){
                     this.$refs.qyno.innerHTML = '企业名不能为空';
                 } else {
-                    this.$refs.qyno.innerHTML = '';
-                    let token = this.mytoken.token;
-                    this.$ajax({
-                        url: this.$url.api+"/api/account/accountCenter/checkSpaceName"+`?spaceName=${qyname}`,
-                        method :'get',
-                        headers: {
-                            "Authorization":token
-                        }
-                    })
-                    .then(res=>{
-                        if (res.data.data.success) {
-                            this.qymingzi = true;
-                        } else {
-                            this.$refs.qyno.innerHTML = '企业已注册';
-                            this.qymingzi = false
-                        }
-                    })
-                    .catch(err=>{
-                        console.log("请求错误",err);
-                    })
+                    if (this.reg.test(qyname)) {
+                        this.$refs.qyno.innerHTML = '包含非法字符';
+                        this.isspaceName = false;
+                    } else {
+                        this.$refs.qyno.innerHTML = '';
+                        this.isspaceName = true;
+                        let token = this.mytoken.token;
+                        this.$ajax({
+                            url: this.$url.api+"/api/account/accountCenter/checkSpaceName"+`?spaceName=${qyname}`,
+                            method :'get',
+                            headers: {
+                                "Authorization":token
+                            }
+                        })
+                        .then(res=>{
+                            if (res.data.data.success) {
+                                this.qymingzi = true;
+                            } else {
+                                this.$refs.qyno.innerHTML = '企业已注册';
+                                this.qymingzi = false
+                            }
+                        })
+                        .catch(err=>{
+                            // console.log("请求错误",err);
+                        })
+                    }
                 }
             },
             //验证个人姓名
             yzusername(){
-                let name = this.$refs.name.value;//个人姓名
+                let name = this.$refs.name.value.replace(/\s+/g, "");//姓名过滤空格
                 if (name == '') {
                     this.$refs.usname.innerHTML = '姓名不能为空'
                 } else {
-                    this.$refs.usname.innerHTML = ''
+                    if (this.reg.test(name)) {
+                        this.$refs.usname.innerHTML = '包含非法字符'
+                        this.isname = false
+                    } else {
+                        this.$refs.usname.innerHTML = ''
+                        this.isname = true
+                    }
+                }
+            },
+            //验证公司详细地址
+            address(){
+                let address = this.$refs.address.value.replace(/\s+/g, "");//过滤空格
+                if (address == '') {
+                    this.$refs.ress.innerHTML = '地址不能为空'
+                } else {
+                    if (this.reg.test(address)) {
+                        this.$refs.ress.innerHTML = '包含非法字符'
+                        this.isaddress = false
+                    } else {
+                        this.$refs.ress.innerHTML = ''
+                        this.isaddress = true
+                    }
                 }
             },
-            
             email(){
                 let reg = new RegExp("^[a-z0-9A-Z]+[- | a-z0-9A-Z . _]+@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-z]{2,}$"); 
                 let email = this.$refs.email.value;//邮箱
@@ -134,14 +164,13 @@ import VDistpicker from 'v-distpicker'
                 } else {
                     this.Email = ''
                 }
-
             },
             //保存
             Preservation(){
-                let qyname = this.$refs.qyname.value;//公司名字
+                let qyname = this.$refs.qyname.value.replace(/\s+/g, "");//公司名字
                 let qyindustry = this.$refs.qyindustry.value;//所属行业
-                let address = this.province+this.city+this.area+this.$refs.address.value;//公司详细地址
-                let name = this.$refs.name.value;//个人姓名
+                let address = this.province+this.city+this.area+this.$refs.address.value.replace(/\s+/g, "");//公司详细地址
+                let name = this.$refs.name.value.replace(/\s+/g, "");//个人姓名
                 let email = this.$refs.email.value;//邮箱
                 let mytoken = JSON.parse(localStorage.getItem('app-state-session'));
                 let token = String(mytoken.token);
@@ -149,7 +178,7 @@ import VDistpicker from 'v-distpicker'
                 let mobile = mytoken.account.mobile;//手机号
                 let company = {'name':qyname,'address':address};
                 let account = {'realname':name,'email':email,'mobile':mobile, 'uu':uu}
-                if (name != '' && qyname != '' && this.qymingzi) {
+                if (name != '' && qyname != '' && this.qymingzi && this.isaddress && this.isname && this.isspaceName) {
                     this.$ajax({
                         url: this.$url.api+"/api/account/accountCenter/companyAccount/save",//http://192.168.253.31:8560
                         method: 'post',
@@ -163,19 +192,18 @@ import VDistpicker from 'v-distpicker'
                         }
                     })
                     .then(res=>{
-                        console.log("请求成功",res)
+                        // console.log("请求成功",res)
                         document.documentElement.scrollTop = 0;
-                        // this.$router.push({name:'company', params:{company:company,account:account}});
                         this.$router.push({name:'company'})
                     })
                     .catch(err=>{
-                        console.log("请求失败",err)
+                        // console.log("请求失败",err)
                     })
                 } else {
-                    this.$refs.tjtishi.innerHTML = '企业名称或姓名不能为空'
+                    this.$refs.tjtishi.innerHTML = '企业名称或姓名不能为空或包含有非法字符'
                     setTimeout(() => {
                         this.$refs.tjtishi.innerHTML = ''
-                    }, 2000);
+                    }, 3000);
                 }
                 
             },

+ 3 - 7
frontend/saas-portal-web/src/components/conenter/company.vue

@@ -1,6 +1,5 @@
 <template>
   <div>
-    <!-- <iframe hidden :src="setTokenPage"></iframe> -->
     <!-- 遮罩 -->
     <div class="zhezhao" v-if="issetDefault || isOpensaas || isNoopen"></div>
     <!-- 设置默认弹窗 -->
@@ -121,7 +120,6 @@
         mounted(){
             let mytoken = JSON.parse(localStorage.getItem('app-state-session'));
             let token = String(mytoken.token);
-            // console.log(mytoken.account)
             //企业列表
             this.$ajax({
                     url: this.$url.api+"/api/account/accountCenter/company/list",
@@ -154,7 +152,7 @@
                     // console.log(res.data.data)
                 })
                 .catch(err=>{
-                    console.log("请求失败",err)
+                    // console.log("请求失败",err)
                 })
             this.boxheight();
         },
@@ -177,7 +175,6 @@
                     },
                     headers: {
                         "Authorization":token,
-                        // "Content-Type":'application/x-www-form-urlencoded'
                     }
                 })
                 .then(res=>{
@@ -186,7 +183,7 @@
                     this.$router.go(0);
                 })
                 .catch(err=>{
-                    console.log('请求失败',err);
+                    // console.log('请求失败',err);
                 });
                 
             },
@@ -211,7 +208,7 @@
                     window.location.href = this.$url.web
                 })
                 .catch(err=>{
-                    console.log('请求失败',err)
+                    // console.log('请求失败',err)
                 })
             
             },
@@ -275,7 +272,6 @@
             //查看企业详情
             getEnterpriseInfo(d){
                 document.documentElement.scrollTop = 0;
-                // this.$router.push({path:'/details',query:{content:d}});
                 this.$router.push({path:'/details'});
                 window.sessionStorage.setItem('content',JSON.stringify(d))
             },

+ 7 - 9
frontend/saas-portal-web/src/components/conenter/enterprise.vue

@@ -20,9 +20,9 @@
                 <ul id="nav" class="nav navbar-nav menu">
                     <li><router-link to="/home"><a href="#"><span style="color: white">首页</span></a></router-link></li>
                     <li><a href="https://uas.usoftchina.com/about" target="_blank"><span>关于我们</span></a></li>
-                    <li>
+                    <li style="margin-left:30px">
                         <span style="color:#fff;font-size: 16px;">
-                            <img style="width: 24px;" src="/static/img/assets/denglu3x.png" alt="">
+                            <img style="width: 20px;" src="/static/img/assets/denglu3x.png" alt="">
                             {{mytoken.realname}}
                         </span>
                         <a href=""><span @click="loginout">【退出】</span></a>
@@ -124,8 +124,7 @@ import Session from '@/utils/session'
             }
         },
         mounted(){
-            console.log(window.frames[window.frames.length - 1])
-            console.log(window.frames.length)
+
         },
         methods: {
             // tab切换
@@ -144,9 +143,8 @@ import Session from '@/utils/session'
 </script>
 
 <style scoped>
-.navbar-inverse {
-    /* background-color: rgba(0, 0, 0, 0.77);
-    height: 70px;
-    line-height: 70px; */
-}
+    .div {
+        padding-top: 100px;
+        background: #FDFDFD;
+    }
 </style>

+ 16 - 18
frontend/saas-portal-web/src/components/conenter/home.vue

@@ -1,10 +1,5 @@
 <template>
     <div>
-      <div id="preloader" style="display:none">
-        <div class="loder-box">
-          <div class="battery"></div>
-        </div>
-      </div>
 		<div id="navigation" class="navbar-inverse navbar-fixed-top animated-header">
         <div class="container">
             <div class="navbar-header">
@@ -31,7 +26,7 @@
             <li><a href="#service"><span>功能</span></a></li>
             <!-- <li><a href="#prototype"><span>帮助中心</span></a></li> -->
             <li><a href="https://uas.usoftchina.com/about" target="_blank"><span>关于我们</span></a></li>
-            <li class="login" v-if="!account" style="margin-left: 20px;">
+            <li class="login" v-if="!account" style="margin-left: 30px;">
               <span @click="login"><img src="/static/img/assets/denglu3x.png" alt="">登录  &nbsp;</span>
               <span @click="register"><img src="/static/img/assets/zhuce3x.png" alt="">注册</span>
             </li>
@@ -66,14 +61,14 @@
       <div class="tiyan" v-if="isexperience">
         <img @click="Closeexperience" class="tc-on ty-out" src="/static/img/qiye/x.png" alt="" />
         <div><img class="ty-logo" src="/static/img/assets/dalogo@2x.png" alt=""></div>
-        <div><p class="ty-logotxt">欢迎你访问U企云服</p></div>
-        <div class="ty-title"><span>填写手机号后,即刻体验电子行业贸易版所有功能</span></div>
+        <!-- <div><p class="ty-logotxt">欢迎你访问U企云服</p></div> -->
+        <!-- <div class="ty-title"><span>填写手机号后,即刻体验电子行业贸易版所有功能</span></div> -->
         <div class="ty-phone over">
           <div class="left ty-input">
             <span><img style="margin: 6px 8px 10px 15px;" src="/static/img/assets/phone.png" alt=""></span>
             <input ref="typhone" type="text" placeholder="请输入您的11位手机号">
           </div>
-          <div class="left" style="margin-left: 8px;"><button @click="experience1">立即试用</button></div>
+          <div class="left" style="margin-left: 8px;"><button @click="experience1">立即体验</button></div>
         </div>
         <div style="text-align: left;">
           <span class="Caution" ref="Caution"></span>
@@ -308,7 +303,7 @@
 <script>
   import {subscribe, disconnect} from '@/api/socket'
   import Session from '@/utils/session'
-import { setTimeout } from 'timers';
+  import { setTimeout } from 'timers'
 
   export default {
     data() {
@@ -319,7 +314,7 @@ import { setTimeout } from 'timers';
         account: null,
         isexperience: false,
         arr: ["操作文档","常见手册"],
-        Nowindex: 0
+        Nowindex: 0,
       }
     },
     mounted() {
@@ -413,12 +408,15 @@ import { setTimeout } from 'timers';
         let reg = new RegExp('^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|(147))\\d{8}$')
         if (phone == '') {
           this.$refs.Caution.innerHTML = '号码不能为空'
+          setTimeout(()=>{
+            this.$refs.Caution.innerHTML = ''
+          },3000)
         } else {
           if (!reg.test(phone)) {
-            this.$refs.Caution.innerHTML = '号码格式错误'
-            // setTimeout(()=>{
-            //   this.$refs.Caution.innerHTML = ''
-            // },2000)
+            this.$refs.Caution.innerHTML = '请输入正确的手机号码'
+            setTimeout(()=>{
+              this.$refs.Caution.innerHTML = ''
+            },3000)
           } else {
             this.$refs.Caution.innerHTML = ''
             this.$ajax({
@@ -470,9 +468,9 @@ import { setTimeout } from 'timers';
   top: 50%;
   left: 50%;
 	width: 640px;
-	height: 320px;
+	height: 283px;
 	margin-left: -320px;
-  margin-top: -160px;
+  margin-top: -141px;
   z-index: 10001;
   background: white;
   padding: 24px;
@@ -485,7 +483,7 @@ import { setTimeout } from 'timers';
 }
 .ty-logo {
   width: 140px;
-  margin: 15px 0 10px 13px;
+  margin: 15px 0 50px 13px;
 }
 .ty-logotxt {
   font-family: PingFangSC-Regular;

+ 1 - 3
frontend/saas-portal-web/src/components/conenter/qiyexiangxi.vue

@@ -9,7 +9,6 @@
                 <div class="tc-conent"><img src="/static/img/qiye/buneng kaitong@1x.png" alt=""></div>
                 <div class="tc-text">
                 <p>您不是管理员不能修改企业信息</p>
-                <!-- <p>不能再继续开通服务</p> -->
                 </div>
             </div>
         </div>
@@ -96,7 +95,6 @@
         data(){
             return {
                 xiugai:true,
-                // content: this.$route.query.content,
                 content: JSON.parse(window.sessionStorage.getItem("content")),
                 Email: '',
                 mytoken: JSON.parse(localStorage.getItem('app-state-session')),//本地储存的用户信息
@@ -172,7 +170,7 @@
                     // this.isTipsmail = true;
                     setTimeout(()=>{
                         this.$refs.Tips.innerHTML= ""
-                    },2000)
+                    },3000)
                 }
             },
             //返回

+ 0 - 55
frontend/saas-portal-web/src/components/header/header.vue

@@ -1,55 +0,0 @@
-<template>
-    <div>
-        <!-- 页面加载loding -->
-        <!-- <div id="preloader">
-            <div class="loder-box">
-            	<div class="battery"></div>
-            </div>
-		</div> -->
-        <div id="navigation" class="navbar-inverse navbar-fixed-top animated-header">
-        <div class="container">
-            <div class="navbar-header">
-                <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
-                    <span class="sr-only">Toggle navigation</span>
-                    <span class="icon-bar"></span>
-                    <span class="icon-bar"></span>
-                    <span class="icon-bar"></span>
-                </button>
-                <h1 class="navbar-brand">
-                    <a href="#">
-                        <img class="logo-img" src="../../../static/img/assets/dalogo3x.png" alt="">
-                    </a>
-                </h1>
-            </div>
-            <div class="collapse navbar-collapse navbar-right" role="navigation">
-                <ul id="nav" class="nav navbar-nav menu">
-                    <li><a href="#"><span>首页</span></a></li>
-                    <!-- <li @click= "home"><router-link to="/home"><a href="#"><span>首页</span></a></router-link></li> -->
-                    <!-- <li><a href="#feature"><span>特色</span></a></li> -->
-                    <li @click= "home"><router-link to="/enterprise"><a href="#"><span>特色</span></a></router-link></li>
-                    <li><a href="#service"><span>功能</span></a></li>
-                    <li><a href="#prototype"><span>帮助中心</span></a></li>
-                    <li><a href="#prototype"><span>联系我们</span></a></li>
-                    <li class="login">
-                        <span class="btn1"><img src="../../../static/img/assets/denglu3x.png" alt="">登录  &nbsp;</span>
-                        <span class="register"><img src="../../../static/img/assets/zhuce3x.png" alt="">注册</span>
-                    </li>
-                </ul>
-            </div>
-        </div>
-        </div>
-    </div>
-</template>
-<script>
-    export default {
-        methods:{
-            home(){
-                document.documentElement.scrollTop = 0;
-            }
-        }
-    }
-</script>
-
-<style>
-
-</style>

+ 0 - 2
frontend/saas-portal-web/src/main.js

@@ -1,5 +1,3 @@
-// The Vue build version to load with the `import` command
-// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
 
 import Vue from 'vue'
 import App from './App'

+ 0 - 4
frontend/saas-portal-web/static/css/gongsi.css

@@ -1,7 +1,3 @@
-.div {
-    padding-top: 100px;
-    background: #FDFDFD;
-}
 .xs:hover {
     cursor:pointer;
     border-bottom: 1px solid #2868c8;

+ 2 - 47
frontend/saas-portal-web/static/css/main.css

@@ -1,14 +1,3 @@
-/**
-*
-* ---------------------------------------------------------------------------
-*
-* Template : Blue - A One-Page HTML Portfolio/Business Template
-* Author : Muhammad Morshd
-* Author URI : http://morshed.im
-*
-* ---------------------------------------------------------------------------
-*
-*/
 
 /* =================================== */
 /*	Basic Style
@@ -79,8 +68,7 @@ main > section {
     background-color: #0aa6bd;
 }
 .logo-img {
-    width: 123px;
-    height: 50px;
+    width: 120px;
     margin-top: -4px;
 }
 /* 遮罩 */
@@ -95,9 +83,6 @@ main > section {
     z-index: 10000;
 }
 /* 登录弹窗 */
-/* input {
-    outline: none;
-} */
 .tishi {
     font-size: 12px;
     color: #FF6A1A;
@@ -283,7 +268,7 @@ main > section {
    margin: 0 15px;
 }
 .login img,.profile img {
-    width: 24px;
+    width: 20px;
     margin-right: 5px;
 }
 .login > span:hover,.profile > span:hover{
@@ -325,30 +310,9 @@ main > section {
     position: absolute;
     top: 76%;
     left: 7%;
-    /* z-index: 5; */
-    /* width: 468px;
-    height: 300px; */
-}
-.sy-dianzi {
-    width: 100%;
-    height: 50px;
-}
-.sy-mb {
-    margin-bottom: 25px;
-}
-.sy-mb img{
-    width: 100px;
-    height: 36px;
-}
-.sy-mbimg2 {
-    width: 150px !important;
-}
-.sy-mb>img:nth-child(2) {
-    margin-left: 15px;
 }
 .my-tiyan {
     background: #5172DD;
-    /* box-shadow: 0 0 19px 0 rgba(137,143,164,0.63); */
     border-radius: 4px;
     width: 100px;
     height: 36px;
@@ -357,15 +321,6 @@ main > section {
     color: #FFFFFF;
     border: 0;
 }
-.chrw {
-    width: 486px;
-    height: 508px;
-}
-.sy-img {
-    position: absolute;
-    top: 100px;
-    right: 130px;
-}
 /* 特色 .......................................*/
 .ts-worp {
     width: 100%;

+ 0 - 9
frontend/saas-portal-web/static/js/mains.js

@@ -13,20 +13,15 @@ jQuery(window).load(function(){
 /* ========================================================================= */
 
 $(function() {
-
     var Page = (function() {
-
         var $navArrows = $( '#nav-arrows' ),
             $nav = $( '#nav-dots > span' ),
             slitslider = $( '#slider' ).slitslider( {
                 onBeforeChange : function( slide, pos ) {
-
                     $nav.removeClass( 'nav-dot-current' );
                     $nav.eq( pos ).addClass( 'nav-dot-current' );
-
                 }
             } ),
-
             init = function() {
                 initEvents();
             },
@@ -36,7 +31,6 @@ $(function() {
                     slitslider.next();
                     return false;
                 } );
-
                 $navArrows.children( ':first' ).on( 'click', function() {
                     slitslider.previous();
                     return false;
@@ -59,7 +53,6 @@ $(function() {
 });
 
 
-
 $(document).ready(function(){
     /* ========================================================================= */
     /*  Portfolio
@@ -135,8 +128,6 @@ $(document).ready(function(){
     //     $('#home-slider, #slider, .sl-slider, .sl-content-wrapper').css('height',slideHeight);
     // });
 	
-	
-	
 	$("#works, #testimonial").owlCarousel({	 
 		navigation : true,
 		pagination : false,

+ 10 - 0
frontend/saas-web/app/Application.scss

@@ -163,6 +163,16 @@ body.launching {
   }
 }
 
+.x-main-master{
+  .x-btn-wrap{
+    .x-btn-button{
+      .x-btn-inner{
+        color:#999 !important;
+      }
+    }
+  }
+}
+
 .x-keyboard-mode .x-btn-focus.x-btn-default-toolbar-small {
   background: inherit;
   opacity: 1;

+ 4 - 2
frontend/saas-web/app/view/core/chart/ChartBase.js

@@ -10,8 +10,6 @@ Ext.define('saas.view.core.chart.ChartBase', {
 
     layout: 'fit',
 
-    cls: 'quick-graph-panel shadow',
-
     defaults: {
         width: '100%'
     },
@@ -19,6 +17,10 @@ Ext.define('saas.view.core.chart.ChartBase', {
     initComponent: function() {
         var me = this;
 
+        Ext.apply(me, {
+            cls: 'quick-graph-panel ' + (me.cls || '')
+        });
+
         me.callParent(arguments);
     }
 });

+ 30 - 0
frontend/saas-web/app/view/core/chart/ChartBase.scss

@@ -0,0 +1,30 @@
+.quick-graph-panel {
+
+    .x-panel-header-default {
+        background-color: #fff;
+        border: none;
+        padding: 0;
+        margin-top: 20px;
+
+        .x-panel-header-title-default {
+            .x-title-text {
+
+                font-size: 14px;
+                color: #485465;
+                letter-spacing: -0.07px;
+                padding-left: 15px;
+
+                &:before {
+                    content: ' ';
+                    position: absolute;
+                    width: 9px;
+                    height: 9px;
+                    background: #2C82BE;
+                    // border-radius: 50%;
+                    left: 0px;
+                    top: 5px;
+                }
+            }
+        }
+    } 
+}

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

@@ -61,7 +61,7 @@ Ext.define('saas.view.core.dbfind.types.VendorDbfindTrigger', {
             var format = '0.' + xr.join();
             return Ext.util.Format.number(v, format);
         }
-    }, {
+    },{
         text: "结算天数",
         dataIndex: "ve_promisedays",
         width: 110,

+ 14 - 10
frontend/saas-web/app/view/core/query/QueryFormPanel.js

@@ -24,7 +24,7 @@ Ext.define('saas.view.core.query.QueryFormPanel', {
 
     dockedItems: [{
         width:140,
-        height: 40,
+        height: 70,
         xtype: 'toolbar',
         dock: 'right',
         items: [{
@@ -32,23 +32,23 @@ Ext.define('saas.view.core.query.QueryFormPanel', {
             xtype: 'buttongroup',
             cls:'x-query-buttongroup',
             items:[{
-                height:24,
-                width:50,
+                height:32,
+                width:70,
                 style:'min-width: 0px;min-height: 0px;',
                 xtype: 'button',
                 name:'query',
                 text: '查询',
                 handler: 'onQuery',
             },{
-                height:24,
-                style:'margin-left: 2px;min-width: 0px;min-height: 0px;border-color: #fff;background-color: #fff; height: 24px;width: 36px;margin-top: -4px;',
+                style:'min-width: 0px;min-height: 0px;border-color: #fff;background-color: #fff;padding: 0px;margin-top: -1px;margin-left: -2px;',
                 xtype: 'button',
-                iconCls:'x-fa fa-caret-square-o-down',
+                iconCls:'x-btn-show',
                 handler: 'showMore',
                 name:'showMore',
                 tooltip:'更多',
                 listeners:{
                     afterrender:function(b){
+                        var count = window.innerHeight - 110>=800?2:1;
                         var columnWidthCount = 0;
                         var items = b.ownerCt.ownerCt.ownerCt.items.items;
                         Ext.each(items, function(item, index){
@@ -57,7 +57,7 @@ Ext.define('saas.view.core.query.QueryFormPanel', {
                             }
                         });
                         columnWidthCount = Math.ceil(columnWidthCount);
-                        if(columnWidthCount<=1){
+                        if(columnWidthCount<=count){
                             b.hide();
                         }
                     }
@@ -65,17 +65,21 @@ Ext.define('saas.view.core.query.QueryFormPanel', {
             },{
                 name:'hideMore',
                 hidden:true,
-                height:24,
                 tooltip:'隐藏',
-                style:'margin-left: 2px;min-width: 0px;min-height: 0px;border-color: #fff;background-color: #fff; height: 24px;width: 36px;margin-top: -4px;',
+                style:'min-width: 0px;min-height: 0px;border-color: #fff;background-color: #fff;padding: 0px;margin-top: -1px;margin-left: -2px;',
                 xtype: 'button',
-                iconCls:'x-fa fa-caret-square-o-up',
+                iconCls:'x-btn-hide',
                 handler: 'hideMore'
             }]
         },'->']
     }],
 
     listeners: {
+        boxReady:function(form){
+            if(window.innerHeight - 110 >= 800){
+                form.setHeight(112);
+            }
+        },
         beforerender: function(form) {
             // var fiels = form.getForm().getFields();
             // fiels.each(function(f) {

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

@@ -59,6 +59,27 @@ Ext.define('saas.view.core.query.QueryGridPanel', {
         }
 
         Ext.apply(me, {
+            actions: {
+                copy: {
+                    iconCls: 'x-fa fa-copy',
+                    text: '复制单元格',
+                    handler: function() {
+                        me.onCopy(me.selectedData);
+                    }
+                }
+            },
+            viewConfig: {
+                deferEmptyText: false,
+                emptyText: '无数据',
+                listeners: {
+                    itemcontextmenu: function(view, rec, node, index, e) {
+                        e.stopEvent();
+                        me.getContextMenu().show().setLocalXY(e.getXY());
+                        me.selectedData = e.target.innerText;
+                        return false;
+                    }
+                }
+            },
             columns: me.initColumns(),
             store: Ext.create('Ext.data.Store', {
                 fields: me.getFields(),
@@ -420,5 +441,30 @@ Ext.define('saas.view.core.query.QueryGridPanel', {
                 }
             });
 		return data;
-    } 
+    },
+
+    getContextMenu: function() {
+        var me = this;
+
+        return me.contextMenu || (me.contextMenu = me.add({
+            xtype: 'menu',
+            items: [
+                // Actions can be converted into MenuItems
+                '@copy',
+            ]
+        }));
+    },
+
+    onCopy: function(text) {
+		var target = Ext.DomHelper.append(document.body, {
+			tag: 'textarea',
+			style: 'opacity: 0;position: absolute;top: -10000px;right: 0;',
+			html: text
+		});
+		target.focus();
+		target.select();
+	    document.execCommand('Copy');
+	    target.blur();
+	    document.body.removeChild(target);
+	},
 });

+ 20 - 5
frontend/saas-web/app/view/core/query/QueryPanel.scss

@@ -19,9 +19,9 @@
                                 padding: 6px 0 16px 8px;
 
                                 .x-box-inner {
-                                    height: 36px !important;
+                                    height: 46px !important;
                                     background: #FFFFFF;
-        
+                                    margin-top: -4px;
                                 }
                             }
                         }
@@ -58,7 +58,22 @@
     .x-btn-group-body-default-framed .x-table-layout{
         border-spacing: 2px !important;
     }
-    .x-btn-default-toolbar-small .x-btn-inner-default-toolbar-small{
-        height:24px !important;
-    }
+}
+
+.x-btn-show{
+    height: 32px;
+    width: 32px !important;
+    margin-top: 0px;
+    background: url(../../../../resources/images/default/show.png) 0 0 no-repeat; 
+    background-size: 32px 32px;
+    background-position: center;
+}
+
+.x-btn-hide{
+    height: 32px;
+    width: 32px !important;
+    margin-top: 0px;
+    background: url(../../../../resources/images/default/hide.png) 0 0 no-repeat; 
+    background-size: 32px 32px;
+    background-position: center;
 }

+ 4 - 2
frontend/saas-web/app/view/core/query/QueryPanelController.js

@@ -34,7 +34,8 @@ Ext.define('saas.view.core.query.QueryPanelController', {
             }
         });
         columnWidthCount = Math.ceil(columnWidthCount);
-        if(columnWidthCount>1){
+        var count = window.innerHeight - 110>=800?2:1;
+        if(columnWidthCount>count){
             //展开
             queryForm.animate({dynamic: true, duration: 500, to: {height: (24+42*columnWidthCount)+'px'}})
             queryForm.dockedItems.items[0].down('[name=showMore]').hide();
@@ -48,7 +49,8 @@ Ext.define('saas.view.core.query.QueryPanelController', {
         queryPanel = me.getView(),
         queryForm = queryPanel.down('core-query-queryformpanel');
         //收缩
-        queryForm.animate({dynamic: true, duration: 500, to: {height: '56px'}})
+        var count = window.innerHeight - 110>=800?2:1;
+        queryForm.animate({dynamic: true, duration: 500, to: {height: count*56 + 'px'}})
         queryForm.dockedItems.items[0].down('[name=hideMore]').hide();
         queryForm.dockedItems.items[0].down('[name=showMore]').show();
         var b = queryForm.dockedItems.items[0].down('[name=query]');

+ 67 - 16
frontend/saas-web/app/view/core/report/ReportPanel.js

@@ -151,6 +151,27 @@ Ext.define('saas.view.core.report.ReportPanel', {
                     displayInfo: true,
                     store: store
                 }],
+                actions: {
+                    copy: {
+                        iconCls: 'x-fa fa-copy',
+                        text: '复制单元格',
+                        handler: function() {
+                            me.onCopy(me.selectedData);
+                        }
+                    }
+                },
+                viewConfig: {
+                    deferEmptyText: false,
+                    emptyText: '无数据',
+                    listeners: {
+                        itemcontextmenu: function(view, rec, node, index, e) {
+                            e.stopEvent();
+                            me.getContextMenu().show().setLocalXY(e.getXY());
+                            me.selectedData = e.target.innerText;
+                            return false;
+                        }
+                    }
+                },
             }]
         });
 
@@ -250,13 +271,15 @@ Ext.define('saas.view.core.report.ReportPanel', {
                             value: defaultCondition
                         });
                     }
-                    Ext.apply(store.proxy.extraParams, {
+
+                    var params = me.applyParams({
                         number: store.exportNumber?store.exportNumber:op._page,
                         size: store.exportPageSize?store.exportPageSize:store.pageSize,
                         mode: 'DETAIL',
                         condition: JSON.stringify(condition),
                         calculateFields: JSON.stringify(summarys)
                     });
+                    Ext.apply(store.proxy.extraParams, params);
     
                 }
             }
@@ -349,25 +372,23 @@ Ext.define('saas.view.core.report.ReportPanel', {
                 });
             }
             // 设置model绑定
-            if(!ignore) {
-                if(bind) {
-                    if(!Ext.isString(bind)) {
-                        bind = name;
-                        Ext.apply(bind, {
-                            value: '{form.' + bind + '}'
-                        });
-                    }else {
-                        bind = name;
-                        item.bind = '{form.' + bind + '}';
-                    }
+            if(bind) {
+                if(!Ext.isString(bind)) {
+                    bind = name;
+                    Ext.apply(bind, {
+                        value: '{form.' + bind + '}'
+                    });
                 }else {
                     bind = name;
                     item.bind = '{form.' + bind + '}';
                 }
-                // 设置默认值
-                if(defaultValue) {
-                    viewModel.set('form.' + bind, defaultValue);
-                }
+            }else {
+                bind = name;
+                item.bind = '{form.' + bind + '}';
+            }
+            // 设置默认值
+            if(defaultValue) {
+                viewModel.set('form.' + bind, defaultValue);
             }
         });
 
@@ -477,4 +498,34 @@ Ext.define('saas.view.core.report.ReportPanel', {
 
         return conditionValue;
     },
+
+    applyParams: function(p) {
+        return p;
+    },
+
+    getContextMenu: function() {
+        var me = this,
+        grid = me.items.items[1];
+
+        return grid.contextMenu || (grid.contextMenu = grid.add({
+            xtype: 'menu',
+            items: [
+                // Actions can be converted into MenuItems
+                '@copy',
+            ]
+        }));
+    },
+
+    onCopy: function(text) {
+		var target = Ext.DomHelper.append(document.body, {
+			tag: 'textarea',
+			style: 'opacity: 0;position: absolute;top: -10000px;right: 0;',
+			html: text
+		});
+		target.focus();
+		target.select();
+	    document.execCommand('Copy');
+	    target.blur();
+	    document.body.removeChild(target);
+	},
 });

+ 6 - 5
frontend/saas-web/app/view/document/kind/ChildForm.js

@@ -278,8 +278,9 @@ Ext.define('KitchenSink.view.binding.ChildForm', {
                 listeners:{
                     blur:function(f,a,b,c){
                         var form = f.ownerCt;
-                        form.setLoading(true);
-                        if(f.value&&f.value!=''&&f.isValid()){
+                        if(f.value&&f.value!=''&&f.isValid()&&f._lastCheckValue!=f.value){
+                            form.setLoading(true);
+                            f._lastCheckValue = f.value
                             Ext.Ajax.request({
                                 url: '/api/account/account/checkMobile?mobile='+f.value,
                                 method: 'GET',
@@ -291,10 +292,10 @@ Ext.define('KitchenSink.view.binding.ChildForm', {
                                     form.setLoading(false);
                                     var localJson = Ext.decode(response.responseText);
                                     if(localJson.success){
-                                        if(!localJson.data.hasRegister){
-                                            saas.util.BaseUtil.showSuccessToast('校验成功:手机号未被注册');
+                                        if(localJson.data.hasRegister){
+                                            saas.util.BaseUtil.showSuccessToast('校验成功:手机号已在优软云注册');
                                         }else{
-                                            saas.util.BaseUtil.showErrorToast('校验失败:手机号已被注册');
+                                            saas.util.BaseUtil.showErrorToast('校验失败:手机号未在优软云注册');
                                             f.setValue('');
                                         }
                                     }else{

+ 0 - 2
frontend/saas-web/app/view/home/Home.js

@@ -40,7 +40,6 @@ Ext.define('saas.view.home.Home', {
         // title: '2018年11月经营分析',
         latyout: 'responsivecolumn',
         defaults: {
-            cls: 'x-home-chart',
             margin: '0 0 0 14',
             userCls: 'big-33 small-50',
         },
@@ -60,7 +59,6 @@ Ext.define('saas.view.home.Home', {
             marginBottom: '0'
         },
         defaults: {
-            cls: 'x-home-chart',
             margin: '0 0 0 14',
             userCls: 'big-33 small-50',
         },

+ 1 - 1
frontend/saas-web/app/view/home/Home.scss

@@ -132,7 +132,7 @@ $unaudit-purc-container-color: dynamic(#e91e63);
     }
 }
 
-.x-home-chart {
+.quick-graph-panel {
     box-shadow: none;
 
     .x-panel-header-default {

+ 3 - 0
frontend/saas-web/app/view/home/HomeModel.js

@@ -7,6 +7,9 @@ Ext.define('saas.view.home.HomeModel', {
         month_purchase_amount: '0', // 本月采购合计
         month_in: '0', // 本月收入合计
         month_out: '0', // 本月支出合计
+
+        insetPadding: '12 0 0 0', // 图表insetPadding
+        maxBarWidth: 20, // 最大柱宽
     },
 
     stores: {

+ 29 - 16
frontend/saas-web/app/view/home/charts/MonthIO.js

@@ -3,35 +3,46 @@ Ext.define('saas.view.home.charts.MonthIO', {
     xtype: 'month-io',
     id: 'month_io',
 
+    bind: {
+        title: '本月收入支出额(万元)<div style="text-align: right;"><span style="font-weight:bold;">收入:{month_in}</span><span style="font-weight:bold;margin-left: 10px;">支出:{month_out}</span></div>'
+    },
+
     initComponent: function () {
         var me = this;
 
         Ext.apply(me, {
             items: [{
                 xtype: 'cartesian',
-                insetPadding: '28 0 0 0',
                 colors: [
                     '#2C82BE',
                     '#82CCFF'
                 ],
                 bind: {
-                    captions: {
-                        title: {
-                            text: '本月收入支出额(万元)\n收入:{month_in}\t支出:{month_out}',
-                            style: {
-                                'font-size': '14px',
-                                'color': '#485465',
-                                'letter-spacing': '-0.07px'
-                            },
-                            align: 'left'
-                        },
-                    },
+                    // captions: {
+                    //     title: {
+                    //         text: '收入:{month_in}\t支出:{month_out}',
+                    //         style: {
+                    //             'color': '#485465',
+                    //             'letter-spacing': '-0.07px'
+                    //         },
+                    //         align: 'left'
+                    //     },
+                    // },
+                    insetPadding: '{insetPadding}',
                     store: '{month_io}'
                 },
                 // legend: {
                 //     type: 'sprite',
                 //     docked: 'bottom'
                 // },
+                legend: {
+                    type: 'dom',
+                    docked: 'top',
+                    padding: 0,
+                    bodyPadding: 0,
+                    border: 0,
+                    cls: 'x-monthio-legend'
+                },
                 axes: [{
                     type: 'numeric',
                     position: 'left',
@@ -71,10 +82,12 @@ Ext.define('saas.view.home.charts.MonthIO', {
                     xField: 'x',
                     yField: ['main', 'other'],
                     stacked: true,
-                    style: {
-                        lineWidth: 0,
-                        strokeStyle: 'transparent',
-                        maxBarWidth: 50,
+                    bind: {
+                        style: {
+                            lineWidth: 0,
+                            strokeStyle: 'transparent',
+                            maxBarWidth: '{maxBarWidth}',
+                        },
                     },
                     tooltip: {
                         trackMouse: true,

+ 25 - 0
frontend/saas-web/app/view/home/charts/MonthIO.scss

@@ -0,0 +1,25 @@
+.quick-graph-panel .x-panel-header-default .x-panel-header-title-default > .x-title-text-default {
+    display: grid;
+    grid-template-columns: 1fr 1fr;
+}
+
+.x-monthio-legend {
+
+    .x-legend-inner {
+        padding: 0;
+
+        .x-legend-container {
+
+            .x-legend-item {
+                border: none !important;
+                outline: none !important;
+                text-align: left;
+
+                .x-legend-item-marker {
+                    box-shadow: none;
+                    border-radius: 50%;
+                }
+            }
+        }
+    }
+}

+ 11 - 14
frontend/saas-web/app/view/home/charts/MonthPurchase.js

@@ -4,27 +4,22 @@ Ext.define('saas.view.home.charts.MonthPurchase', {
 
     id: 'month-purchase',
 
+    bind: {
+        title: '本月采购额(万元):{month_purchase_amount}'
+    },
+
     initComponent: function() {
         var me = this;
 
         Ext.apply(me, {
             items: [{
                 xtype: 'cartesian',
-                insetPadding: '28 0 0 0',
                 colors: [
                     '#34BAF6'
                 ],
                 bind: {
+                    insetPadding: '{insetPadding}',
                     store: '{month_purchase}',
-                    captions: {
-                        title: {
-                            text: '本月采购额(万元):{month_purchase_amount}',
-                            align: 'left',
-                            style: {
-                                'color': '#485465',
-                            },
-                        }
-                    },
                 },
                 axes: [{
                     type: 'category',
@@ -64,10 +59,12 @@ Ext.define('saas.view.home.charts.MonthPurchase', {
                     type: 'bar',
                     xField: 'x',
                     yField: ['y'],
-                    style: {
-                        lineWidth: 0,
-                        strokeStyle: 'transparent',
-                        maxBarWidth: 50,
+                    bind: {
+                        style: {
+                            lineWidth: 0,
+                            strokeStyle: 'transparent',
+                            maxBarWidth: '{maxBarWidth}',
+                        },
                     },
                     tooltip: {
                         trackMouse: true,

+ 4 - 11
frontend/saas-web/app/view/home/charts/MonthSale.js

@@ -4,6 +4,10 @@ Ext.define('saas.view.home.charts.MonthSale', {
 
     id: 'month_sale',
 
+    bind: {
+        title: '本月销售额(万元):{month_sale_amount}'
+    },
+
     initComponent: function() {
         var me = this;
 
@@ -13,17 +17,6 @@ Ext.define('saas.view.home.charts.MonthSale', {
                 width: '100%',
                 height: '100%',
                 bind: {
-                    captions: {
-                        title: {
-                            text: '本月销售额(万元):{month_sale_amount}',
-                            style: {
-                                'font-size': '14px',
-                                'color': '#485465',
-                                'letter-spacing': '-0.07px'
-                            },
-                            align: 'left'
-                        }
-                    },
                     store: '{month_sale}',
                 },
                 colors: [

+ 11 - 16
frontend/saas-web/app/view/home/charts/PurchaseTrend.js

@@ -4,28 +4,21 @@ Ext.define('saas.view.home.charts.PurchaseTrend', {
 
     id: 'purchase_trend',
 
+    bind: {
+        title: '近六月采购趋势图'
+    },
+
     initComponent: function() {
         var me = this;
 
         Ext.apply(me, {
             items: [{
                 xtype: 'cartesian',
-                insetPadding: '28 0 0 0',
                 colors: [
                     '#34BAF6'
                 ],
                 bind: {
-                    captions: {
-                        title: {
-                            text: '近六月采购趋势图',
-                            style: {
-                                'font-size': '14px',
-                                'color': '#485465',
-                                'letter-spacing': '-0.07px'
-                            },
-                            align: 'left'
-                        }
-                    },
+                    insetPadding: '{insetPadding}',
                     store: '{purchase_trend}',
                 },
                 axes: [{
@@ -78,10 +71,12 @@ Ext.define('saas.view.home.charts.PurchaseTrend', {
                     //     fontSize: '12px',
                     //     strokeStyle: '#fff',
                     // },
-                    style: {
-                        lineWidth: 0,
-                        strokeStyle: 'transparent',
-                        maxBarWidth: 30,
+                    bind: {
+                        style: {
+                            lineWidth: 0,
+                            strokeStyle: 'transparent',
+                            maxBarWidth: '{maxBarWidth}',
+                        },
                     },
                 }]
             }]

Некоторые файлы не были показаны из-за большого количества измененных файлов