Explorar el Código

Merge remote-tracking branch 'origin/dev' into dev

# Conflicts:
#	frontend/saas-web/app/view/viewport/ViewportController.js
yingp hace 7 años
padre
commit
2ce7cbbf44
Se han modificado 100 ficheros con 1004 adiciones y 312 borrados
  1. 4 0
      applications/commons/commons-api/pom.xml
  2. 1 1
      applications/commons/commons-api/src/main/java/com/usoftchina/saas/commons/api/MaxnumberService.java
  3. 21 0
      applications/commons/commons-api/src/main/java/com/usoftchina/saas/commons/api/MaxnumberServiceFallback.java
  4. 19 0
      applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/dto/BaseFormDTO.java
  5. 8 1
      applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/exception/BizExceptionCode.java
  6. 10 0
      applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/po/JasperResult.java
  7. 4 0
      applications/commons/commons-server/pom.xml
  8. 2 0
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/CommonsApplication.java
  9. 1 1
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/impl/CommonServiceImpl.java
  10. 7 1
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/impl/JasperReportServiceImpl.java
  11. 1 5
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/impl/MaxnumberServiceImpl.java
  12. 1 0
      applications/commons/commons-server/src/main/resources/i18n/messages_zh_CN.properties
  13. 4 0
      applications/document/document-dto/pom.xml
  14. 2 1
      applications/document/document-dto/src/main/java/com.usoftchina.saas.document.dto/CustomerFormDTO.java
  15. 2 1
      applications/document/document-dto/src/main/java/com.usoftchina.saas.document.dto/ProductListDTO.java
  16. 2 1
      applications/document/document-dto/src/main/java/com.usoftchina.saas.document.dto/VendorListDTO.java
  17. 1 1
      applications/document/document-dto/src/main/java/com/usoftchina/saas/document/entities/Product.java
  18. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/DocumentApplication.java
  19. 3 3
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/BanksubledgerMapper.java
  20. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/ProductDetailMapper.java
  21. 8 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/ProductMapper.java
  22. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/ProductbrandMapper.java
  23. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/ProducttypeMapper.java
  24. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/ProductunitMapper.java
  25. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/ProductbrandService.java
  26. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/ProducttypeService.java
  27. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/ProductunitService.java
  28. 8 1
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/BomServiceImpl.java
  29. 7 1
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/CustomerServiceImpl.java
  30. 91 15
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/ProductServiceImpl.java
  31. 10 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/ProductbrandServiceImpl.java
  32. 10 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/ProducttypeServiceImpl.java
  33. 10 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/ProductunitServiceImpl.java
  34. 15 9
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/VendorServiceImpl.java
  35. 17 2
      applications/document/document-server/src/main/resources/application.yml
  36. 3 3
      applications/document/document-server/src/main/resources/mapper/BanksubledgerMapper.xml
  37. 3 0
      applications/document/document-server/src/main/resources/mapper/ProductDetailMapper.xml
  38. 12 0
      applications/document/document-server/src/main/resources/mapper/ProductMapper.xml
  39. 4 0
      applications/document/document-server/src/main/resources/mapper/ProductbrandMapper.xml
  40. 3 0
      applications/document/document-server/src/main/resources/mapper/ProducttypeMapper.xml
  41. 3 0
      applications/document/document-server/src/main/resources/mapper/ProductunitMapper.xml
  42. 2 2
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/mapper/BanksubledgerMapper.java
  43. 3 3
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/FundtransferServiceImpl.java
  44. 2 2
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/OthreceiptsServiceImpl.java
  45. 2 2
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/OthspendingsServiceImpl.java
  46. 2 0
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/PaybalanceServiceImpl.java
  47. 2 0
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/RecbalanceServiceImpl.java
  48. 1 1
      applications/money/money-server/src/main/resources/mapper/AcountbalanceViewMapper.xml
  49. 2 2
      applications/money/money-server/src/main/resources/mapper/BanksubledgerMapper.xml
  50. 0 4
      applications/money/money-server/src/main/resources/mapper/PaybalanceMapper.xml
  51. 0 4
      applications/money/money-server/src/main/resources/mapper/RecbalanceMapper.xml
  52. 2 1
      applications/purchase/purchase-dto/src/main/java/com/usoftchina/saas/purchase/dto/ProdInOutFormDTO.java
  53. 3 1
      applications/purchase/purchase-dto/src/main/java/com/usoftchina/saas/purchase/dto/PurchaseFormDTO.java
  54. 2 0
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/PurchaseApplication.java
  55. 4 0
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/po/report/PurchaseReportDetail.java
  56. 4 1
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/service/impl/ProdInOutServiceImpl.java
  57. 6 2
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/service/impl/PurchaseServiceImpl.java
  58. 14 2
      applications/purchase/purchase-server/src/main/resources/application.yml
  59. 4 1
      applications/purchase/purchase-server/src/main/resources/mapper/PurchaseReportMapper.xml
  60. 4 0
      applications/sale/sale-dto/pom.xml
  61. 2 1
      applications/sale/sale-dto/src/main/java/com/usoftchina/saas/sale/dto/ProdInOutFormDTO.java
  62. 4 8
      applications/sale/sale-dto/src/main/java/com/usoftchina/saas/sale/dto/SaleFormDTO.java
  63. 2 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/SaleApplication.java
  64. 2 2
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/mapper/ProdInOutMapper.java
  65. 6 2
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/po/SaleList.java
  66. 9 4
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/service/impl/ProdInOutServiceImpl.java
  67. 5 2
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/service/impl/SaleServiceImpl.java
  68. 14 2
      applications/sale/sale-server/src/main/resources/application.yml
  69. 2 2
      applications/sale/sale-server/src/main/resources/mapper/ProdInOutMapper.xml
  70. 4 2
      applications/sale/sale-server/src/main/resources/mapper/SaleListMapper.xml
  71. 9 0
      applications/storage/storage-server/src/main/java/com/usoftchina/saas/storage/service/impl/MakeServiceImpl.java
  72. 9 0
      base-servers/account/account-dto/src/main/java/com/usoftchina/saas/account/dto/CompanyRegDTO.java
  73. 11 0
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/controller/AccountCenterController.java
  74. 8 0
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/service/AccountCenterService.java
  75. 5 0
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/service/impl/AccountCenterServiceImpl.java
  76. 1 1
      base-servers/auth/auth-server/src/main/java/com/usoftchina/saas/auth/controller/AuthController.java
  77. 44 7
      frontend/saas-portal-web/package-lock.json
  78. 1 0
      frontend/saas-portal-web/package.json
  79. 20 7
      frontend/saas-portal-web/src/components/conenter/addenterprise.vue
  80. 135 24
      frontend/saas-portal-web/src/components/conenter/company.vue
  81. 3 5
      frontend/saas-portal-web/src/components/conenter/details.vue
  82. 147 15
      frontend/saas-portal-web/src/components/conenter/enterprise.vue
  83. 24 7
      frontend/saas-portal-web/src/components/conenter/home.vue
  84. 13 14
      frontend/saas-portal-web/src/components/footer/footer.vue
  85. 4 0
      frontend/saas-portal-web/src/pages/index/index.js
  86. 1 0
      frontend/saas-portal-web/src/pages/index/index.vue
  87. 0 25
      frontend/saas-portal-web/src/pages/remove-token/remove-token.html
  88. 0 0
      frontend/saas-portal-web/src/pages/remove-token/remove-token.js
  89. 0 15
      frontend/saas-portal-web/src/pages/remove-token/remove-token.vue
  90. 2 1
      frontend/saas-portal-web/src/store/index.js
  91. 111 47
      frontend/saas-portal-web/static/css/gongsi.css
  92. 9 30
      frontend/saas-portal-web/static/css/main.css
  93. BIN
      frontend/saas-portal-web/static/img/Fill 1.png
  94. BIN
      frontend/saas-portal-web/static/img/footer2x.png
  95. BIN
      frontend/saas-portal-web/static/img/moren2x.png
  96. BIN
      frontend/saas-portal-web/static/img/shezhi.png
  97. 11 6
      frontend/saas-web/app/util/BaseUtil.js
  98. 6 0
      frontend/saas-web/app/util/FormUtil.js
  99. 2 2
      frontend/saas-web/app/view/core/base/ImportWindow.js
  100. 6 6
      frontend/saas-web/app/view/core/dbfind/AddMultiDbfindGridPanel.js

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

@@ -24,5 +24,9 @@
             <groupId>com.usoftchina.saas</groupId>
             <artifactId>core</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
+        </dependency>
     </dependencies>
 </project>

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

@@ -9,7 +9,7 @@ import org.springframework.web.bind.annotation.RequestParam;
  * @Author: guq
  * @Date: 2018/10/20
  */
-@FeignClient("commons-server")
+@FeignClient(name = "commons-server", fallback = MaxnumberServiceFallback.class)
 public interface MaxnumberService {
     /**
      * @Description: 更新并获取最大编号

+ 21 - 0
applications/commons/commons-api/src/main/java/com/usoftchina/saas/commons/api/MaxnumberServiceFallback.java

@@ -0,0 +1,21 @@
+package com.usoftchina.saas.commons.api;
+
+import com.usoftchina.saas.base.Result;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author: guq
+ * @create: 2018-12-14 09:06
+ **/
+@Component
+public class MaxnumberServiceFallback implements MaxnumberService {
+    @Override
+    public Result<String> pushMaxnubmer(Integer count, String code, String caller) {
+        return Result.error("网络异常,请稍后重试!");
+    }
+
+    @Override
+    public Result<String> getMaxnumber(String caller, boolean update) {
+        return Result.error("网络异常,请稍后重试!");
+    }
+}

+ 19 - 0
applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/dto/BaseFormDTO.java

@@ -0,0 +1,19 @@
+package com.usoftchina.saas.commons.dto;
+
+/**
+ * @author: guq
+ * @create: 2018-12-13 20:43
+ **/
+public class BaseFormDTO {
+
+    //编号修改
+    private boolean codeModified;
+
+    public boolean isCodeModified() {
+        return codeModified;
+    }
+
+    public void setCodeModified(boolean codeModified) {
+        this.codeModified = codeModified;
+    }
+}

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

@@ -37,11 +37,18 @@ public enum BizExceptionCode implements BaseExceptionCode {
     BIZ_BANNED(79313, "只能禁用已开启的单据"),
     BIZ_ENABLE(79314, "只能开启已禁用的单据"),
     BIZ_NULLCALLER(79315, "该单据的定义不存在"),
+    BIZ_REPORT_NOCALLER(79316, "报表配置不存在"),
+    BIZ_REPORT_NOTCORRECT(79317, "导入数据无效"),
 
     NO_OPRATIONDATA(79400,"无可操作单据"),
     NULL_DATA(23232,"无数据"),
+    PRODUCT_HASSTOCK(79401, "当前物料库存大于0,不允许禁用"),
+    PRODUCT_EXISTS_PRODIO(79402, "存在未审核出入库单据使用了当前物料"),
+    PRODUCT_EXISTS_SALE(79403, "存在未关闭且状态非已出库销售订单使用了当前物料"),
+    PRODUCT_EXISTS_PURCHASE(79404, "存在未关闭且状态非已入库采购订单使用了当前物料"),
 
     BOM_SAVE(79401, "产品编号+版本号已存在"),
+    BOM_CODE_REPEAT(74002, "组合件和子件不允许相同"),
     REPEAT_NAME(79501, "名称重复"),
     REPEAT_CODE(79502, "编号重复"),
     REPEAT_CUSTOMERCODE(79503, "客户名称或编号重复"),
@@ -104,7 +111,7 @@ public enum BizExceptionCode implements BaseExceptionCode {
     DELETE_NOT_EXIS(74008,"删除失败,当前单据不存在!"),
     DOCUMENTS_AUDITED(74009,"存在已审核单据:%S"),
     DOCUMENTS_UNAUDITED(74010,"存在未审核单据:%S"),
-    BANK_AMOUNT_NOTENOUGHS(74011, "资金账户余额不足:%S"),
+    BANK_AMOUNT_NOTENOUGHS(74011, "审核失败!资金账户:%S 余额不足"),
 
     //反结账
     EARLY_USERING(74012, "期初余额被使用,无法反结账"),

+ 10 - 0
applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/po/JasperResult.java

@@ -9,10 +9,13 @@ import java.io.Serializable;
 public class JasperResult implements Serializable{
 
     private String printurl;
+
     private String reportName;
     private String title;
     private String whereCondition;
     private String printtype;
+    //数据库名称
+    private String userName;
 
     public String getPrinttype() {
         return printtype;
@@ -53,4 +56,11 @@ public class JasperResult implements Serializable{
     public void setWhereCondition(String whereCondition) {
         this.whereCondition = whereCondition;
     }
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
 }

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

@@ -75,6 +75,10 @@
             <groupId>org.apache.poi</groupId>
             <artifactId>poi-ooxml</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
+        </dependency>
     </dependencies>
 
     <build>

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

@@ -5,6 +5,7 @@ import com.usoftchina.saas.server.jdbc.EnableDynamicDataSource;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
 import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
 import org.springframework.cloud.openfeign.EnableFeignClients;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
@@ -20,6 +21,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
 @EnableFeignClients("com.usoftchina.saas")
 @MapperScan("com.usoftchina.saas.commons.mapper")
 @EnableAuthClient
+@EnableCircuitBreaker
 public class CommonsApplication {
     public static void main(String[] args) {
         SpringApplication.run(CommonsApplication.class, args);

+ 1 - 1
applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/impl/CommonServiceImpl.java

@@ -32,7 +32,7 @@ public class CommonServiceImpl implements CommonService {
         if (count > 0){
             result.setProduct(true);
         }
-        count = commonMapper.getCountProduct(companyId);
+        count = commonMapper.getCountCustomer(companyId);
         if (count > 0){
             result.setCustomer(true);
         }

+ 7 - 1
applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/impl/JasperReportServiceImpl.java

@@ -1,6 +1,7 @@
 package com.usoftchina.saas.commons.service.impl;
 
 import com.usoftchina.saas.commons.dto.DocBaseDTO;
+import com.usoftchina.saas.commons.exception.BizExceptionCode;
 import com.usoftchina.saas.commons.mapper.SysprintsetMapper;
 import com.usoftchina.saas.commons.po.Configs;
 import com.usoftchina.saas.commons.po.JasperResult;
@@ -27,6 +28,7 @@ import java.util.List;
 public class JasperReportServiceImpl implements JasperReportService{
 
     private static final String PRINTURLCODE = "printUrl";
+    private static final String USERNAME = "dataBase";
 
     @Autowired
     private SysprintsetMapper sysprintsetMapper;
@@ -56,11 +58,14 @@ public class JasperReportServiceImpl implements JasperReportService{
             printSet = sysprintsetMapper.selectSetByReportName(caller, reportName, companyId);
         }
         if (StringUtils.isEmpty(printSet)) {
-            return null;
+            throw new BizException(BizExceptionCode.BIZ_REPORT_NOCALLER);
         }
         //取打印地址
         Configs config = configsService.getConfigByCode(PRINTURLCODE);
         String printUrl = null != config ? config.getData() : "";
+        //取数据库名称
+        Configs db_config = configsService.getConfigByCode(USERNAME);
+        String db_username = null != db_config ? db_config.getData() : "";
         //打印限制 TODO
         //打印前执行方法
         if (!StringUtils.isEmpty(printSet.getHandlermethod())) {
@@ -85,6 +90,7 @@ public class JasperReportServiceImpl implements JasperReportService{
         result.setPrinturl(printUrl);
         result.setWhereCondition(condition);
         result.setPrinttype(StringUtils.isEmpty(printSet.getPrinttype()) ? "" : printSet.getPrinttype());
+        result.setUserName(db_username);
         return result;
 
     }

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

@@ -128,7 +128,7 @@ public class MaxnumberServiceImpl extends CommonBaseServiceImpl<MaxnumbersMapper
             if (count > 0) {
                 throw new BizException(BizExceptionCode.CODE_EXISTS);
             }
-            return  Result.success(rulecode);
+            return  Result.success(maxcode);
         }
         //与规则匹配的编号
         if (count > 0) {
@@ -142,10 +142,6 @@ public class MaxnumberServiceImpl extends CommonBaseServiceImpl<MaxnumbersMapper
             length = maxnumbers.getMn_number();
             Integer serialNum = praseSerialNum(maxcode, length);
             if (null != serialNum) {
-                /*detail.setMd_maxno(serialNum);
-                detail.setUpdaterId(userId);
-                detail.setUpdateTime(new Date());
-                maxnumbersdetailMapper.updateByPrimaryKeySelective(detail);*/
                 maxnumbersdetailMapper.updateMaxno(detail.getId(), serialNum, BaseContextHolder.getCompanyId());
             }
 

+ 1 - 0
applications/commons/commons-server/src/main/resources/i18n/messages_zh_CN.properties

@@ -2,6 +2,7 @@
 msg.detail=&nbsp;&nbsp;\u660e\u7ec6\u884c:
 msg.save=\u4fdd\u5b58\u64cd\u4f5c 
 msg.delete=\u5220\u9664\u64cd\u4f5c
+msg.deleteDetail=\u5220\u9664\u660e\u7ec6
 msg.update=\u4fee\u6539\u64cd\u4f5c
 msg.commit=\u63d0\u4ea4\u64cd\u4f5c
 msg.resCommit=\u53cd\u63d0\u4ea4\u64cd\u4f5c

+ 4 - 0
applications/document/document-dto/pom.xml

@@ -26,6 +26,10 @@
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.usoftchina.saas</groupId>
+            <artifactId>commons-dto</artifactId>
+        </dependency>
     </dependencies>
 
 </project>

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

@@ -1,5 +1,6 @@
 package com.usoftchina.saas.document.dto;
 
+import com.usoftchina.saas.commons.dto.BaseFormDTO;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -10,7 +11,7 @@ import java.util.List;
  * 2018-10-23 17:26.
  */
 @Data
-public class CustomerFormDTO implements Serializable {
+public class CustomerFormDTO extends BaseFormDTO implements Serializable {
 
     private CustomerDTO main;
     private List<CustomercontactDTO> items1;

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

@@ -1,12 +1,13 @@
 package com.usoftchina.saas.document.dto;
 
+import com.usoftchina.saas.commons.dto.BaseFormDTO;
 import com.usoftchina.saas.document.entities.Product;
 import com.usoftchina.saas.document.entities.ProductDetail;
 
 import java.io.Serializable;
 import java.util.List;
 
-public class ProductListDTO implements Serializable {
+public class ProductListDTO extends BaseFormDTO implements Serializable {
 
     private Product main;
     private List<ProductDetail> items;

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

@@ -1,12 +1,13 @@
 package com.usoftchina.saas.document.dto;
 
+import com.usoftchina.saas.commons.dto.BaseFormDTO;
 import com.usoftchina.saas.document.entities.Vendor;
 import com.usoftchina.saas.document.entities.Vendorcontact;
 
 import java.io.Serializable;
 import java.util.List;
 
-public class VendorListDTO implements Serializable {
+public class VendorListDTO extends BaseFormDTO implements Serializable {
 
     private Vendor main;
     private List<Vendorcontact> items;

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

@@ -14,7 +14,7 @@ public class Product extends CommonBaseEntity implements Serializable {
     private String pr_unit;
     private String pr_kind;
     private String pr_orispeccode;
-    private long pr_whid;
+    private Long pr_whid;
     private String pr_whcode;
     private String pr_whname;
     private Long pr_zxbzs;

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

@@ -7,6 +7,7 @@ import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
 import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.context.annotation.ComponentScan;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 
 @SpringBootApplication
@@ -16,6 +17,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
 @EnableFeignClients("com.usoftchina.saas")
 @MapperScan("com.usoftchina.saas.document.mapper")
 @EnableDynamicDataSource
+@ComponentScan(basePackages = {"com.usoftchina.saas"})
 public class DocumentApplication {
     public static void main(String[] args) {
         SpringApplication.run(DocumentApplication.class, args);

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

@@ -19,7 +19,7 @@ public interface BanksubledgerMapper extends CommonBaseMapper<Banksubledger> {
 //    Long insert(Banksubledger record);
 
     int insertSelective(Banksubledger record);
-    List<String> selectCode(String code);
+    List<String> selectCode(@Param("code") String code, @Param("companyid") Long companyid);
 
     Banksubledger selectByPrimaryKey(Integer bl_id);
 
@@ -28,6 +28,6 @@ public interface BanksubledgerMapper extends CommonBaseMapper<Banksubledger> {
     int updateByPrimaryKey(Banksubledger record);
 
     int updateBankcode(@Param("bk_thisamount") Double bk_thisamount, @Param("nowbalance") Double nowbalance,
-                       @Param("bankcode") String bankcode, @Param("symbol") String symbol);
-    Double selectThisamount(String bankcode);
+                       @Param("bankcode") String bankcode, @Param("symbol") String symbol, @Param("companyId") Long companyId);
+    Double selectThisamount(String bankcode, @Param("companyId") Long companyId);
 }

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

@@ -27,4 +27,6 @@ public interface ProductDetailMapper extends CommonBaseMapper<ProductDetail> {
     List<ProductDetail> selectByProdId(Long id);
 
     boolean deleteByProdId(Long id);
+
+    void updatePd_price(Long id);
 }

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

@@ -54,4 +54,12 @@ public interface ProductMapper extends CommonBaseMapper<Product> {
     List<ProductReserveCostDTO> selectReserveCostByIgnoreWarehouse(@Param("con") String con, @Param("companyId") Long companyId);
 
     String selectCalculateFields(@Param("fields") String fields, @Param("con") String con, @Param("companyId") Long companyId);
+
+    int selectStockById(Long id);
+
+    int selectProdIOCount(Long id);
+
+    int selectSale(Long id);
+
+    int selectPurchase(Long id);
 }

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

@@ -28,4 +28,6 @@ public interface ProductbrandMapper extends CommonBaseMapper<Productbrand> {
     List<Productbrand> selectAll(@Param("companyId") Long companyId);
 
     int getCountFromProduct(@Param("id") Long id, @Param("companyId") Long companyId);
+
+    Productbrand getComboByName(@Param("name") String name, @Param("companyId") Long companyId);
 }

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

@@ -27,4 +27,6 @@ public interface ProducttypeMapper extends CommonBaseMapper<Producttype> {
     List<Producttype> selectAll(@Param("companyId") Long companyId);
 
     int getCountFromProduct(@Param("id") Long id, @Param("companyId") Long companyId);
+
+    Producttype getTypeByName(@Param("name") String name, @Param("companyId") Long companyId);
 }

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

@@ -27,4 +27,6 @@ public interface ProductunitMapper extends CommonBaseMapper<Productunit> {
     List<Productunit> selectAll(@Param("companyId") Long companyId);
 
     int getCountFromProduct(@Param("id") Long id, @Param("companyId") Long companyId);
+
+    Productunit getComboByName(@Param("name") String name, @Param("companyId") Long companyId);
 }

+ 2 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/ProductbrandService.java

@@ -15,4 +15,6 @@ public interface ProductbrandService extends CommonBaseService<ProductbrandMappe
     List<Productbrand> selectAll();
 
     DocBaseDTO saveData(Productbrand productbrand);
+
+    Productbrand getComboByName(String name);
 }

+ 2 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/ProducttypeService.java

@@ -15,4 +15,6 @@ public interface ProducttypeService extends CommonBaseService<ProducttypeMapper,
     List<Producttype> selectAll();
 
     DocBaseDTO saveData(Producttype producttype);
+
+    Producttype getTypeByName(String name);
 }

+ 2 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/ProductunitService.java

@@ -15,4 +15,6 @@ public interface ProductunitService extends CommonBaseService<ProductunitMapper,
     List<Productunit> selectAll();
 
     DocBaseDTO saveData(Productunit productunit);
+
+    Productunit getComboByName(String name);
 }

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

@@ -50,11 +50,18 @@ public class BomServiceImpl extends CommonBaseServiceImpl<BomMapper, Bom> implem
         Bom bom = bomList.getMain();
         List<BomDetail> bomDetailList = bomList.getItems();
         DocBaseDTO docBaseDTO = null;
+        //校验组合件和子件不允许相同
+        if (bomDetailList.size() > 0){
+            for (BomDetail bomDetail : bomDetailList){
+                if (bom.getBo_mothercode().equals(bomDetail.getBd_soncode())){
+                    throw new BizException(BizExceptionCode.BOM_CODE_REPEAT);
+                }
+            }
+        }
         if(id == 0){
             //校验编号和版本 是否已存在
             int count = getMapper().validCodeAndVersionWhenInsert(bom.getBo_mothercode(), bom.getBo_version(), companyId);
             if(count == 0){
-//                String code = pushMaxnubmer(bom.getBo_mothercode(), bom.getId());
                 String code = bom.getBo_mothercode();
                 bom.setBo_mothercode(code);
                 bom.setBo_statuscode(Status.ENABLE.name());

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

@@ -159,7 +159,10 @@ public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, C
         }
         //编号校验
         cu_code = RegexpUtils.replaceSpecCharacter(cu_code);
-        cu_code = pushMaxnubmer(cu_code, cu_id);
+        //检测单号是否修改
+        if (data.isCodeModified()) {
+            cu_code = pushMaxnubmer(cu_code, cu_id);
+        }
         //单号赋值
         customer.setCu_code(cu_code);
         //新增
@@ -513,6 +516,9 @@ public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, C
                 int i = getMapper().validateCodeWhenInsert(code, companyId);
                 List<DataImportDetail> data = datas.get(code);
                 DataImportDetail main = dataImportMapper.selectMainBycode(code, id, companyId);
+                if (StringUtils.isEmpty(main)) {
+                    throw new BizException(BizExceptionCode.BIZ_REPORT_NOTCORRECT);
+                }
                 CustomerDTO customerDTO = JSONObject.parseObject(main.getDd_maindata(), CustomerDTO.class);
                 //验证业务员
                 if (!StringUtils.isEmpty(customerDTO.getCu_sellername())) {

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

@@ -26,8 +26,7 @@ import com.usoftchina.saas.document.mapper.DataImportMapper;
 import com.usoftchina.saas.document.mapper.ProductDetailMapper;
 import com.usoftchina.saas.document.mapper.ProductMapper;
 import com.usoftchina.saas.document.mapper.WarehouseMapper;
-import com.usoftchina.saas.document.service.ProductService;
-import com.usoftchina.saas.document.service.WarehouseService;
+import com.usoftchina.saas.document.service.*;
 import com.usoftchina.saas.exception.BizException;
 import com.usoftchina.saas.page.PageRequest;
 import com.usoftchina.saas.utils.CollectionUtils;
@@ -55,6 +54,12 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
     private DataImportMapper dataImportMapper;
     @Autowired
     private WarehouseMapper warehouseMapper;
+    @Autowired
+    private ProductbrandService productbrandService;
+    @Autowired
+    private ProductunitService productunitService;
+    @Autowired
+    private ProducttypeService producttypeService;
 
     @Override
     public PageInfo<ProductDTO> getProductsByCondition(PageRequest page, ListReqDTO listReqDTO) {
@@ -103,14 +108,17 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
 
         String prCode = product.getPr_code().trim().toUpperCase();
         prCode = RegexpUtils.replaceSpecCharacter(prCode);
-        String code = pushMaxnubmer(prCode, product.getId());
+        if (productListDTO.isCodeModified()) {
+            prCode = pushMaxnubmer(prCode, product.getId());
+        }
+
         if(product.getId() == 0){
             //保存
             product.setCompanyId(companyId);
             product.setCreatorId(userId);
             product.setCreateTime(new Date());
             product.setCreatorName(userName);
-            product.setPr_code(code);
+            product.setPr_code(prCode);
             //保存主表
             getMapper().insertSelective(product);
             //保存明细表数据
@@ -125,10 +133,11 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
 
                 productDetailMapper.batchInsert(productDetailList);
             }
+            productDetailMapper.updatePd_price(product.getId());
             //生成库存初始化数据并过账
             generateProdIOPost(product, productDetailList);
 
-            docBaseDTO = generateMsgObj(product.getId(), code);
+            docBaseDTO = generateMsgObj(product.getId(), prCode);
             //记录LOG
             messageLogService.save(docBaseDTO);
         }else{
@@ -186,7 +195,7 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
 
             product.setUpdaterId(BaseContextHolder.getUserId());
             product.setUpdateTime(new Date());
-            product.setPr_code(code);
+            product.setPr_code(prCode);
             getMapper().updateByPrimaryKeySelective(product);
             docBaseDTO = generateMsgObj(product.getId(), product.getPr_code());
             //记录LOG
@@ -336,16 +345,14 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
             if (!Status.ENABLE.getDisplay().equals(product.getPr_status())){
                 throw new BizException(BizExceptionCode.BIZ_BANNED);
             }
-            String code = getMapper().getCodeById(id);
-            product = new Product();
-            product.setId(id);
+            beforeClose(id);
             product.setPr_status(Status.BANNED.getDisplay());
             product.setPr_statuscode(Status.BANNED.name());
             product.setUpdaterId(BaseContextHolder.getUserId());
             product.setUpdateTime(new Date());
             getMapper().updateByPrimaryKeySelective(product);
             //记录LOG
-            docBaseDTO = generateMsgObj(id, code);
+            docBaseDTO = generateMsgObj(id, product.getPr_code());
             messageLogService.customizeLog(docBaseDTO, Operation.BANNED);
             return docBaseDTO;
         }else{
@@ -353,6 +360,33 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
         }
     }
 
+    /**
+     * 物料禁用前校验
+     * @param id
+     */
+    private void beforeClose(Long id){
+        //1.库存大于0
+        int count = getMapper().selectStockById(id);
+        if (count > 0){
+            throw new BizException(BizExceptionCode.PRODUCT_HASSTOCK);
+        }
+        //2.存在未审核出入库单据
+        count = getMapper().selectProdIOCount(id);
+        if (count > 0){
+            throw new BizException(BizExceptionCode.PRODUCT_EXISTS_PRODIO);
+        }
+        //3.存在未关闭且状态非已出库销售订单
+        count = getMapper().selectSale(id);
+        if (count > 0){
+            throw new BizException(BizExceptionCode.PRODUCT_EXISTS_SALE);
+        }
+        //4.存在未关闭且状态非已入库采购订单
+        count = getMapper().selectPurchase(id);
+        if (count > 0){
+            throw new BizException(BizExceptionCode.PRODUCT_EXISTS_PURCHASE);
+        }
+    }
+
     @Override
     public DocBaseDTO open(Long id) {
         DocBaseDTO docBaseDTO = null;
@@ -365,7 +399,6 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
             if (!Status.BANNED.getDisplay().equals(product.getPr_status())){
                 throw new BizException(BizExceptionCode.BIZ_ENABLE);
             }else{
-                product.setId(id);
                 product.setPr_statuscode(Status.ENABLE.name());
                 product.setPr_status(Status.ENABLE.getDisplay());
                 product.setUpdaterId(BaseContextHolder.getUserId());
@@ -415,8 +448,15 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
         validProductOperation(id, BizExceptionCode.BIZ_RELDELETE_DELETEPROD);
         //校验是否存在关联单据
         validEnableDel(id);
-
         String code = getMapper().getCodeById(id);
+
+        //找到原始单据,反过账并删除
+        String inoutCode = getMapper().selectProdIOCode(code, BaseContextHolder.getCompanyId(), "库存初始化");
+        if (!StringUtils.isEmpty(inoutCode)) {
+            post(inoutCode, "反过账");
+            getMapper().deleteProdIODetailByCode(inoutCode, BaseContextHolder.getCompanyId());
+            getMapper().deleteProdIOByCode(inoutCode, BaseContextHolder.getCompanyId());
+        }
         productDetailMapper.deleteByProdId(id);
         getMapper().deleteByPrimaryKey(id);
         DocBaseDTO docBaseDTO = generateMsgObj(id, code);
@@ -573,25 +613,61 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
         if (!CollectionUtils.isEmpty(details)) {
             Map<String, List<DataImportDetail>> datas = CollectionUtils.groupBy(details, DataImportDetail::getDd_codevalue);
             Integer detno = null;
+            String brand = null;
+            String unit = null;
+            String kind = null;
             for (String code : datas.keySet()) {
                 listDTO = new ProductListDTO();
                 List<ProductDetail> productDetails = new ArrayList<>();
                 int i = getMapper().validateCodeWhenInsert(code, companyId);
                 List<DataImportDetail> data = datas.get(code);
                 DataImportDetail main = dataImportMapper.selectMainBycode(code, id, companyId);
+                //数据验证
+                if (StringUtils.isEmpty(main)) {
+                    throw new BizException(BizExceptionCode.BIZ_REPORT_NOTCORRECT);
+                }
                 Product product = JSONObject.parseObject(main.getDd_maindata(), Product.class);
                 Warehouse warehouse = null;
                 //验证仓库
                 if (!StringUtils.isEmpty(product.getPr_whcode())) {
                     warehouse = warehouseMapper.selectWareHouse(product.getPr_whcode(), companyId);
                     if (null == warehouse) {
-                        err.append("物料编号为: " + product.getPr_code() + " 的物料仓库: "+ product.getPr_whname() +" 在系统中不存在,请确认数据是否正确");
+                        err.append("物料编号为: " + product.getPr_code() + " 的物料仓库: "+ product.getPr_whname() +" 在系统中不存在");
                         break;
                     }
                     product.setPr_whid(warehouse.getId());
-                    product.setPr_status(Status.ENABLE.getDisplay());
-                    product.setPr_statuscode(Status.ENABLE.name());
+                    product.setPr_whname(warehouse.getWh_description());
+                }
+                //验证品牌
+                brand = product.getPr_brand();
+                if (!StringUtils.isEmpty(brand)) {
+                    Productbrand pr_brand = productbrandService.getComboByName(brand);
+                    if (null == pr_brand) {
+                        err.append("物料编号为: " + product.getPr_code() + " 的品牌: "+ product.getPr_brand() +" 在系统中不存在");
+                        break;
+                    }
                 }
+                //验证单位
+                unit = product.getPr_unit();
+                if (!StringUtils.isEmpty(unit)) {
+                    Productunit pr_unit = productunitService.getComboByName(unit);
+                    if (null == pr_unit) {
+                        err.append("物料编号为: " + product.getPr_code() + " 的单位: "+ product.getPr_unit() +" 在系统中不存在");
+                        break;
+                    }
+                }
+                //验证类型
+                kind = product.getPr_kind();
+                if (!StringUtils.isEmpty(kind)) {
+                    Producttype pr_kind = producttypeService.getTypeByName(kind);
+                    if (null == pr_kind) {
+                        err.append("物料编号为: " + product.getPr_code() + " 的类型: "+ product.getPr_kind() +" 在系统中不存在");
+                        break;
+                    }
+                }
+                product.setPr_status(Status.ENABLE.getDisplay());
+                product.setPr_statuscode(Status.ENABLE.name());
+
                 //编号不存在
                 if (i == 0) {
                     product.setId(0l);

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

@@ -10,6 +10,7 @@ import com.usoftchina.saas.document.entities.Productbrand;
 import com.usoftchina.saas.document.mapper.ProductbrandMapper;
 import com.usoftchina.saas.document.service.ProductbrandService;
 import com.usoftchina.saas.exception.BizException;
+import com.usoftchina.saas.utils.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -55,6 +56,15 @@ public class ProductbrandServiceImpl extends CommonBaseServiceImpl<ProductbrandM
         return docBaseDTO;
     }
 
+    @Override
+    public Productbrand getComboByName(String name) {
+        if (StringUtils.isEmpty(name)) {
+            return null;
+        }
+        Productbrand brand = productbrandMapper.getComboByName(name, BaseContextHolder.getCompanyId());
+        return brand;
+    }
+
     @Override
     public boolean removeByPrimaryKey(Long id){
         if (id == null || id < 0){

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

@@ -10,6 +10,7 @@ import com.usoftchina.saas.document.entities.Producttype;
 import com.usoftchina.saas.document.mapper.ProducttypeMapper;
 import com.usoftchina.saas.document.service.ProducttypeService;
 import com.usoftchina.saas.exception.BizException;
+import com.usoftchina.saas.utils.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -57,6 +58,15 @@ public class ProducttypeServiceImpl extends CommonBaseServiceImpl<ProducttypeMap
         return docBaseDTO;
     }
 
+    @Override
+    public Producttype getTypeByName(String name) {
+        if (StringUtils.isEmpty(name)) {
+            return null;
+        }
+        Producttype type = producttypeMapper.getTypeByName(name, BaseContextHolder.getCompanyId());
+        return type;
+    }
+
     /**
      * 删除
      * @param id

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

@@ -10,6 +10,7 @@ import com.usoftchina.saas.document.entities.Productunit;
 import com.usoftchina.saas.document.mapper.ProductunitMapper;
 import com.usoftchina.saas.document.service.ProductunitService;
 import com.usoftchina.saas.exception.BizException;
+import com.usoftchina.saas.utils.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -50,6 +51,15 @@ public class ProductunitServiceImpl extends CommonBaseServiceImpl<ProductunitMap
         return docBaseDTO;
     }
 
+    @Override
+    public Productunit getComboByName(String name) {
+        if (StringUtils.isEmpty(name)) {
+            return null;
+        }
+        Productunit unit = getMapper().getComboByName(name, BaseContextHolder.getCompanyId());
+        return unit;
+    }
+
     @Override
     public boolean removeByPrimaryKey(Long id){
         if(id != null && id > 0){

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

@@ -142,9 +142,12 @@ public class VendorServiceImpl extends CommonBaseServiceImpl<VendorMapper, Vendo
             YM = beginDate;
         }
         ve_code = RegexpUtils.replaceSpecCharacter(ve_code);
-        String code = pushMaxnubmer(ve_code, main.getId());
+        if (vendorListDTO.isCodeModified()) {
+            ve_code = pushMaxnubmer(ve_code, main.getId());
+        }
+        //String code = pushMaxnubmer(ve_code, main.getId());
         if(main.getId() == 0){
-            int count = getMapper().getCountByCode(code, companyId);
+            int count = getMapper().getCountByCode(ve_code, companyId);
             if(count > 0){
                 throw new BizException(BizExceptionCode.REPEAT_CODE);
             }
@@ -153,7 +156,7 @@ public class VendorServiceImpl extends CommonBaseServiceImpl<VendorMapper, Vendo
                 throw new BizException(BizExceptionCode.REPEAT_NAME);
             }
             //保存主表信息
-            main.setVe_code(code);
+            main.setVe_code(ve_code);
             //更新应付款余额
             Double beginapamount = main.getVe_beginapamount()==null ? new Double(0):main.getVe_beginapamount();
             Double beginprepayamount = main.getVe_beginprepayamount()==null ? new Double(0):main.getVe_beginprepayamount();
@@ -177,14 +180,14 @@ public class VendorServiceImpl extends CommonBaseServiceImpl<VendorMapper, Vendo
                 vendorcontactMapper.batchInsert(items);
             }
             //记录LOG
-            messageLogService.save(generateMsgObj(mainId, code));
+            messageLogService.save(generateMsgObj(mainId, ve_code));
         }else{
-            main.setVe_code(code);
+            main.setVe_code(ve_code);
             Long mainId = main.getId();
             Vendor oldVendor = getMapper().selectByPrimaryKey(main.getId());
 
-            int count = getMapper().getCountByCode(code, companyId);
-            if (!code.equals(oldVendor.getVe_code())){
+            int count = getMapper().getCountByCode(ve_code, companyId);
+            if (!ve_code.equals(oldVendor.getVe_code())){
                 if (count > 0){
                     throw new BizException(BizExceptionCode.REPEAT_CODE);
                 }
@@ -251,7 +254,7 @@ public class VendorServiceImpl extends CommonBaseServiceImpl<VendorMapper, Vendo
                 }
             }
             //记录LOG
-            messageLogService.update(generateMsgObj(main.getId(), code));
+            messageLogService.update(generateMsgObj(main.getId(), ve_code));
         }
 
         //更新应收款余额
@@ -293,7 +296,7 @@ public class VendorServiceImpl extends CommonBaseServiceImpl<VendorMapper, Vendo
             subledgerMapper.insertSelective(subledger);
         }
 
-        return generateMsgObj(main.getId(), code);
+        return generateMsgObj(main.getId(), ve_code);
     }
 
     /**
@@ -453,6 +456,9 @@ public class VendorServiceImpl extends CommonBaseServiceImpl<VendorMapper, Vendo
                 int i = getMapper().validateCodeWhenInsert(code, companyId);
                 List<DataImportDetail> data = datas.get(code);
                 DataImportDetail main = dataImportMapper.selectMainBycode(code, id, companyId);
+                if (StringUtils.isEmpty(main)) {
+                    throw new BizException(BizExceptionCode.BIZ_REPORT_NOTCORRECT);
+                }
                 Vendor vendor = JSONObject.parseObject(main.getDd_maindata(), Vendor.class);
                 vendor.setVe_status(Status.ENABLE.getDisplay());
                 vendor.setVe_statuscode(Status.ENABLE.name());

+ 17 - 2
applications/document/document-server/src/main/resources/application.yml

@@ -75,5 +75,20 @@ mybatis:
 auth:
   public-key: auth/pub.key
 ribbon:
-  ReadTimeout: 6000
-  ConnectTimeout: 6000
+  ReadTimeout: 5000
+  ConnectTimeout: 5000
+feign:
+  hystrix:
+    enabled: true
+hystrix:
+    command:
+        default:
+            execution:
+              timeout:
+                enabled: true
+              isolation:
+                    thread:
+                        timeoutInMilliseconds: 4000
+logging:
+  level:
+     com.usoftchina.saas.document.mapper: debug

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

@@ -348,18 +348,18 @@
     <select id="selectCode" parameterType="java.lang.String" resultType="java.lang.String">
         select bl_code
         from banksubledger
-        where bl_code = #{bl_code,jdbcType=VARCHAR}
+        where bl_code = #{bl_code,jdbcType=VARCHAR} and companyId = #{companyid}
     </select>
 
     <update id="updateBankcode">
     update bankinformation
     set bk_thisamount = (IFNULL(#{bk_thisamount,jdbcType=DOUBLE},0) ${symbol} #{nowbalance})
-    where bk_bankcode = #{bankcode,jdbcType=VARCHAR}
+    where bk_bankcode = #{bankcode,jdbcType=VARCHAR} and companyId = #{companyId}
   </update>
 
     <select id="selectThisamount" resultType="java.lang.Double" parameterType="java.lang.String">
    select bk_thisamount from bankinformation
-    where bk_bankcode = #{bankcode,jdbcType=VARCHAR}
+    where bk_bankcode = #{bankcode,jdbcType=VARCHAR} and companyId = #{companyId}
   </select>
 
 </mapper>

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

@@ -336,4 +336,7 @@
     <delete id="deleteByProdId" >
         DELETE FROM PRODUCTDETAIL WHERE PD_PRODID=#{id}
     </delete>
+    <update id="updatePd_price" parameterType="long">
+        update productdetail set pd_amount=round(pd_num*pd_price,2) where pd_piid=#{id};
+    </update>
 </mapper>

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

@@ -934,5 +934,17 @@
     <select id="selectIdByCode" resultType="long">
         select pr_id from product where pr_code=#{code} and companyId=#{companyId}
     </select>
+    <select id="selectStockById" resultType="int">
+        SELECT COUNT(*) FROM PRODUCTONHAND WHERE PO_PRODID = #{id}
+    </select>
+    <select id="selectProdIOCount" resultType="int">
+        SELECT COUNT(*) FROM PRODIODETAIL WHERE PD_STATUS != 99 AND PD_PRODID = #{id}
+    </select>
+    <select id="selectSale" resultType="int">
+        SELECT COUNT(*) FROM SALE LEFT JOIN SALEDETAIL ON SA_ID = SD_SAID WHERE SA_SENDSTATUS != '已出库' AND SA_SENDSTATUS != '已关闭' AND IFNULL(SD_PRODID,0) = #{id}
+    </select>
+    <select id="selectPurchase" resultType="int">
+        SELECT COUNT(*) FROM PURCHASE LEFT JOIN PURCHASEDETAIL ON PU_ID = PD_PUID WHERE PU_ACCEPTSTATUS != '已出库' AND PU_ACCEPTSTATUSCODE != '已关闭' AND IFNULL(PD_PRODID,0) = #{id}
+    </select>
 </mapper>
 

+ 4 - 0
applications/document/document-server/src/main/resources/mapper/ProductbrandMapper.xml

@@ -134,4 +134,8 @@
     <select id="getCountFromProduct" resultType="int">
         SELECT COUNT(*) FROM PRODUCT WHERE PR_BRAND = (SELECT PB_NAME FROM PRODUCTBRAND WHERE PB_ID = #{id}) AND companyId = #{companyId}
     </select>
+
+  <select id="getComboByName" resultMap="BaseResultMap">
+    select * from PRODUCTBRAND where pb_name = #{name} and companyId = #{companyId}
+  </select>
 </mapper>

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

@@ -133,4 +133,7 @@
     <select id="getCountFromProduct" resultType="int">
         SELECT COUNT(*) FROM PRODUCT WHERE PR_KIND = (SELECT PT_NAME FROM PRODUCTTYPE WHERE PT_ID = #{id}) AND companyId=#{companyId}
     </select>
+  <select id="getTypeByName" resultMap="BaseResultMap">
+    select * from PRODUCTTYPE where pt_name=#{name} and companyId=#{companyId}
+  </select>
 </mapper>

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

@@ -125,4 +125,7 @@
     <select id="getCountFromProduct" resultType="int">
         SELECT COUNT(*) FROM PRODUCT WHERE PR_UNIT = (SELECT PU_NAME FROM PRODUCTUNIT WHERE PU_ID = #{id}) AND companyId = #{companyId}
     </select>
+  <select id="getComboByName" resultMap="BaseResultMap">
+    select * from PRODUCTUNIT where pu_name=#{name} and companyId = #{companyId}
+  </select>
 </mapper>

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

@@ -22,7 +22,7 @@ public interface BanksubledgerMapper extends CommonBaseMapper<Banksubledger> {
 //    Long insert(Banksubledger record);
 
     int insertSelective(Banksubledger record);
-    List<String> selectCode(String code);
+    List<String> selectCode(@Param("code") String code, @Param("companyid") Long companyid);
 
     List<Banksubledger> selectByExample(BanksubledgerExample example);
 
@@ -37,7 +37,7 @@ public interface BanksubledgerMapper extends CommonBaseMapper<Banksubledger> {
     int updateByPrimaryKey(Banksubledger record);
 
     int updateBankcode(@Param("bk_thisamount") Double bk_thisamount, @Param("nowbalance") Double nowbalance,
-                       @Param("bankcode") String bankcode, @Param("symbol") String symbol);
+                       @Param("bankcode") String bankcode, @Param("symbol") String symbol, @Param("companyId") Long companyId);
     Double selectThisamount(@Param("bankcode") String bankcode, @Param("companyId") Long companyId);
 
 

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

@@ -220,9 +220,9 @@ public class FundtransferServiceImpl extends CommonBaseServiceImpl<FundtransferM
             Double amount = banksubledgerMapper.selectThisamount(fundtransferdetail.getFtd_bankcode(), BaseContextHolder.getCompanyId());
             Double inamount = banksubledgerMapper.selectThisamount(fundtransferdetail.getFtd_inbankcode(), BaseContextHolder.getCompanyId());
             banksubledgerMapper.updateBankcode(amount, fundtransferdetail.getFtd_nowbalance(),
-                    fundtransferdetail.getFtd_bankcode(), "+");
+                    fundtransferdetail.getFtd_bankcode(), "+", BaseContextHolder.getCompanyId());
             banksubledgerMapper.updateBankcode(inamount, fundtransferdetail.getFtd_nowbalance(),
-                    fundtransferdetail.getFtd_bankcode(), "-");
+                    fundtransferdetail.getFtd_bankcode(), "-", BaseContextHolder.getCompanyId());
 
             //资金账号表
             int bk_id = fundtransferdetail.getFtd_bankid();
@@ -418,7 +418,7 @@ public class FundtransferServiceImpl extends CommonBaseServiceImpl<FundtransferM
             banksubledger.setBl_spending(fundtransferdetail.getFtd_nowbalance());
             banksubledger.setBl_remark(fundtransferdetail.getFtd_remark());
             banksubledger.setBl_orderamount(fundtransferdetail.getFtd_nowbalance() * -1);
-            if (banksubledgerMapper.selectCode(banksubledger.getBl_code()) == null){
+            if (banksubledgerMapper.selectCode(banksubledger.getBl_code(), BaseContextHolder.getCompanyId()) == null){
                 banksubledgerMapper.insertSelective(banksubledger);
             }else {
                 banksubledgerMapper.updateByPrimaryKeySelective(banksubledger);

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

@@ -127,7 +127,7 @@ public class OthreceiptsServiceImpl extends CommonBaseServiceImpl<OthreceiptsMap
         while (isList.hasNext()){
             Othreceiptsdetail othreceiptsdetail = (Othreceiptsdetail) isList.next();
             banksubledgerMapper.updateBankcode(amount, othreceiptsdetail.getOrd_nowbalance(),
-                    othreceipts.getOr_bankcode(), "+");
+                    othreceipts.getOr_bankcode(), "+", companyId);
 
         }
 
@@ -226,7 +226,7 @@ public class OthreceiptsServiceImpl extends CommonBaseServiceImpl<OthreceiptsMap
         while (isList.hasNext()){
             Othreceiptsdetail othreceiptsdetail = (Othreceiptsdetail) isList.next();
             banksubledgerMapper.updateBankcode(amount, othreceiptsdetail.getOrd_nowbalance(),
-                    othreceipts.getOr_bankcode(), "-");
+                    othreceipts.getOr_bankcode(), "-", BaseContextHolder.getCompanyId());
         }
 
         //资金账号表

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

@@ -167,7 +167,7 @@ public class OthspendingsServiceImpl extends CommonBaseServiceImpl<OthspendingsM
         while (isList.hasNext()){
             Othspendingsdetail othspendingsdetail = (Othspendingsdetail) isList.next();
             banksubledgerMapper.updateBankcode(amount, othspendingsdetail.getOsd_nowbalance(),
-                    othspendings.getOs_bankcode(), "+");
+                    othspendings.getOs_bankcode(), "+", BaseContextHolder.getCompanyId());
         }
 
         //资金账号表
@@ -261,7 +261,7 @@ public class OthspendingsServiceImpl extends CommonBaseServiceImpl<OthspendingsM
         while (isList.hasNext()){
             Othspendingsdetail othspendingsdetail = (Othspendingsdetail) isList.next();
             banksubledgerMapper.updateBankcode(amount, othspendingsdetail.getOsd_nowbalance(),
-                    othspendings.getOs_bankcode(), "-");
+                    othspendings.getOs_bankcode(), "-", BaseContextHolder.getCompanyId());
         }
 
         //资金账号表

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

@@ -220,6 +220,8 @@ public class PaybalanceServiceImpl extends CommonBaseServiceImpl<PaybalanceMappe
         updatePay.setId(pay.getMain().getId());
         updatePay.setPb_pdamount(amountTotal);
         updatePay.setPb_pbdamount(amountTotal2);
+        updatePay.setPb_auditdate(new Date());
+        updatePay.setPb_auditman(BaseContextHolder.getUserName());
         paybalanceMapper.updateByPrimaryKeySelective(updatePay);
         //updateByPrimaryKeySelective
         /**

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

@@ -264,6 +264,8 @@ public class RecbalanceServiceImpl extends CommonBaseServiceImpl<RecbalanceMappe
         updateRay.setId(rec.getMain().getId());
         updateRay.setRb_rdamount(amountTotal);
         updateRay.setRb_rbdamount(amountTotal2);
+        updateRay.setRb_auditdate(new Date());
+        updateRay.setRb_auditman(BaseContextHolder.getUserName());
         recbalanceMapper.updateByPrimaryKeySelective(updateRay);
         /**
          * 更新客户资料

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

@@ -27,7 +27,7 @@
         and  companyId = #{companyId}
       </if>
     </where>
-    order by bankname asc, date desc, bankid desc
+    order by bankname asc, date desc
   </select>
 
   <select id="selectCalculateFields" resultType="string">

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

@@ -434,13 +434,13 @@
     <select id="selectCode" parameterType="java.lang.String" resultType="java.lang.String">
         select bl_code
         from banksubledger
-        where bl_code = #{bl_code,jdbcType=VARCHAR}
+        where bl_code = #{bl_code,jdbcType=VARCHAR} and companyId = #{companyid}
     </select>
 
     <update id="updateBankcode">
     update bankinformation
     set bk_thisamount = (IFNULL(#{bk_thisamount,jdbcType=DOUBLE},0) ${symbol} #{nowbalance})
-    where bk_bankcode = #{bankcode,jdbcType=VARCHAR}
+    where bk_bankcode = #{bankcode,jdbcType=VARCHAR} and companyId = #{companyId}
   </update>
 
     <select id="selectThisamount" resultType="java.lang.Double">

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

@@ -385,12 +385,8 @@
       <if test="pb_text5 != null">
         pb_text5 = #{pb_text5,jdbcType=VARCHAR},
       </if>
-      <if test="pb_auditman !=null">
         pb_auditman = #{pb_auditman,jdbcType=VARCHAR},
-      </if>
-      <if test="pb_auditdate !=null">
         pb_auditdate = #{pb_auditdate,jdbcType=TIMESTAMP}
-      </if>
     </set>
     where pb_id = #{id,jdbcType=INTEGER}
   </update>

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

@@ -537,12 +537,8 @@
       <if test="rb_text5 != null">
         rb_text5 = #{rb_text5,jdbcType=VARCHAR},
       </if>
-      <if test="rb_auditman !=null">
         rb_auditman = #{rb_auditman,jdbcType=VARCHAR},
-      </if>
-    <if test="rb_auditdate !=null">
       rb_auditdate = #{rb_auditdate,jdbcType=TIMESTAMP}
-    </if>
     </set>
     where rb_id = #{id,jdbcType=INTEGER}
   </update>

+ 2 - 1
applications/purchase/purchase-dto/src/main/java/com/usoftchina/saas/purchase/dto/ProdInOutFormDTO.java

@@ -1,5 +1,6 @@
 package com.usoftchina.saas.purchase.dto;
 
+import com.usoftchina.saas.commons.dto.BaseFormDTO;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -10,7 +11,7 @@ import java.util.List;
  * 2018-10-17 13:45.
  */
 @Data
-public class ProdInOutFormDTO implements Serializable {
+public class ProdInOutFormDTO extends BaseFormDTO implements Serializable {
 
     private ProdInOutDTO main;
     private List<ProdIODetailDTO> items;

+ 3 - 1
applications/purchase/purchase-dto/src/main/java/com/usoftchina/saas/purchase/dto/PurchaseFormDTO.java

@@ -1,5 +1,7 @@
 package com.usoftchina.saas.purchase.dto;
 
+import com.usoftchina.saas.commons.dto.BaseFormDTO;
+
 import java.io.Serializable;
 import java.util.List;
 
@@ -9,7 +11,7 @@ import java.util.List;
  * @author yingp
  * @date 2018/10/9
  */
-public class PurchaseFormDTO implements Serializable{
+public class PurchaseFormDTO extends BaseFormDTO implements Serializable{
     private PurchaseDTO main;
     private List<PurchaseDetailDTO> items;
 

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

@@ -7,6 +7,7 @@ import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
 import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.context.annotation.ComponentScan;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
 
 /**
@@ -20,6 +21,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
 @EnableAuthClient
 @MapperScan("com.usoftchina.saas.purchase.mapper")
 @EnableDynamicDataSource
+@ComponentScan(basePackages = {"com.usoftchina.saas"})
 public class PurchaseApplication {
     public static void main(String[] args) {
         SpringApplication.run(PurchaseApplication.class, args);

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

@@ -97,6 +97,10 @@ public class PurchaseReportDetail extends CommonBaseEntity implements Serializab
 
     private Double pd_acceptqty;
 
+    private Double pd_pdacceptqty;
+
+    private Double pd_pdaccepttotal;
+
     private Date pd_delivery;
 
     private String pd_salecode;

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

@@ -153,7 +153,10 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
         baseDTO.setCode(pi_inoutno);
         baseDTO.setId(pi_id);
         baseDTO.setName(pi_class);
-        pi_inoutno = pushMaxnubmer(baseDTO);
+        //检测单号是否更改
+        if (formdata.isCodeModified()) {
+            pi_inoutno = pushMaxnubmer(baseDTO);
+        }
         prodInOut.setPi_inoutno(pi_inoutno);
         prodInOut.setPi_prstatus(Status.PAYNONE.getDisplay());
         prodInOut.setPi_prstatuscode(Status.PAYNONE.name());

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

@@ -122,8 +122,12 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
         String pu_code = main.getPu_code();
         Purchase purchase = BeanMapper.map(main, Purchase.class);
 
-        //编号校验
-        pu_code = pushMaxnubmer(pu_code, pu_id);
+        //检测编号是否修改
+        if (formdata.isCodeModified()) {
+            //编号校验
+            pu_code = pushMaxnubmer(pu_code, pu_id);
+        }
+
         //单号赋值
         purchase.setPu_code(pu_code);
         //判断更新与保存动作

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

@@ -75,5 +75,17 @@ mybatis:
 auth:
   public-key: auth/pub.key
 ribbon:
-  ReadTimeout: 6000
-  ConnectTimeout: 6000
+  ReadTimeout: 5000
+  ConnectTimeout: 5000
+feign:
+  hystrix:
+    enabled: true
+hystrix:
+    command:
+        default:
+            execution:
+              timeout:
+                enabled: true
+              isolation:
+                    thread:
+                        timeoutInMilliseconds: 4000

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

@@ -60,6 +60,8 @@
     <result column="PD_TOTAL" property="pd_total" jdbcType="DOUBLE" />
     <result column="PD_TAXTOTAL" property="pd_taxtotal" jdbcType="DOUBLE" />
     <result column="PD_ACCEPTQTY" property="pd_acceptqty" jdbcType="DOUBLE" />
+    <result column="pd_pdacceptqty" property="pd_pdacceptqty" jdbcType="DOUBLE" />
+    <result column="pd_pdaccepttotal" property="pd_pdaccepttotal" jdbcType="DOUBLE" />
     <result column="PD_DELIVERY" property="pd_delivery" jdbcType="TIMESTAMP" />
     <result column="PD_SALECODE" property="pd_salecode" jdbcType="VARCHAR" />
     <result column="PD_SALEDETNO" property="pd_saledetno" jdbcType="INTEGER" />
@@ -112,7 +114,7 @@
   </select>
 
   <select id="selectDetailByCondition"  resultMap="ListMap">
-    select  *,ifnull(purchasedetail.PD_ACCEPTQTY,0)*ifnull(purchasedetail.PD_PRICE,0) pd_accepttotal  from purchase left join purchasedetail on pu_id=pd_puid
+    select  * from purchase left join purchasedetail on pu_id=pd_puid
     left join product on pd_prodid=pr_id
     <where>
       <if test="con != null">
@@ -121,6 +123,7 @@
       <if test="companyId != null">
         and   purchase.companyId = #{companyId}
       </if>
+      and pu_statuscode='AUDITED'
     </where>  order by pu_date desc
   </select>
 

+ 4 - 0
applications/sale/sale-dto/pom.xml

@@ -28,5 +28,9 @@
             <groupId>com.usoftchina.saas</groupId>
             <artifactId>document-dto</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.usoftchina.saas</groupId>
+            <artifactId>commons-dto</artifactId>
+        </dependency>
     </dependencies>
 </project>

+ 2 - 1
applications/sale/sale-dto/src/main/java/com/usoftchina/saas/sale/dto/ProdInOutFormDTO.java

@@ -1,5 +1,6 @@
 package com.usoftchina.saas.sale.dto;
 
+import com.usoftchina.saas.commons.dto.BaseFormDTO;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -10,7 +11,7 @@ import java.util.List;
  * 2018-10-23
  */
 @Data
-public class ProdInOutFormDTO implements Serializable {
+public class ProdInOutFormDTO extends BaseFormDTO implements Serializable {
 
     private ProdInOutDTO main;
     private List<ProdIODetailDTO> items;

+ 4 - 8
applications/sale/sale-dto/src/main/java/com/usoftchina/saas/sale/dto/SaleFormDTO.java

@@ -1,12 +1,15 @@
 package com.usoftchina.saas.sale.dto;
 
+import com.usoftchina.saas.commons.dto.BaseFormDTO;
+
+import java.io.Serializable;
 import java.util.List;
 
 /**
  * @author: guq
  * @create: 2018-10-23 11:03
  **/
-public class SaleFormDTO {
+public class SaleFormDTO  extends BaseFormDTO implements Serializable {
     private SaleDTO main;
     private List<SaleDetailDTO> items;
 
@@ -26,11 +29,4 @@ public class SaleFormDTO {
         this.items = items;
     }
 
-    @Override
-    public String toString() {
-        return "PurchaseFormDTO{" +
-                "main=" + main +
-                ", items=" + items +
-                '}';
-    }
 }

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

@@ -7,6 +7,7 @@ import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
 import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.context.annotation.ComponentScan;
 
 
 /**
@@ -19,6 +20,7 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
 @EnableFeignClients("com.usoftchina.saas")
 @EnableAuthClient
 @EnableDynamicDataSource
+@ComponentScan(basePackages = {"com.usoftchina.saas"})
 public class SaleApplication  {
     public static void main(String[] args) {
         SpringApplication.run(SaleApplication.class, args);

+ 2 - 2
applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/mapper/ProdInOutMapper.java

@@ -26,9 +26,9 @@ public interface ProdInOutMapper extends CommonBaseMapper<ProdInOut> {
 
     String selectCodeById(Long pi_id);
 
-    int validateCodeWhenInsert(@Param("code") String code,@Param("pi_class") String pi_class );
+    int validateCodeWhenInsert(@Param("code") String code, @Param("companyId") Long companyId);
 
-    int validateCodeWhenUpdate(@Param("code") String code,@Param("id") Long id );
+    int validateCodeWhenUpdate(@Param("code") String code, @Param("id") Long id, @Param("companyId") Long companyId);
 
     String validateUnAudit(Long id);
 

+ 6 - 2
applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/po/SaleList.java

@@ -49,7 +49,7 @@ public class SaleList implements Serializable {
 
     private Integer updaterId;
 
-    private Date updatetime;
+    private Date updateTime;
 
     private String sa_text1;
 
@@ -61,7 +61,7 @@ public class SaleList implements Serializable {
 
     private String sa_text5;
 
-    private String creatorname;
+    private String creatorName;
 
     private String sa_auditman;
 
@@ -95,6 +95,10 @@ public class SaleList implements Serializable {
 
     private Double sd_sendqty;
 
+    private Double sd_pdsendqty;
+
+    private Double sd_pdsendqtytotal;
+
     private Double sd_pdqty;
 
     private String sd_remark;

+ 9 - 4
applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/service/impl/ProdInOutServiceImpl.java

@@ -103,8 +103,12 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
         baseDTO.setName(pi_class);
         baseDTO.setId(pi_id);
         baseDTO.setCode(pi_inoutno);
-        //编号获取
-        pi_inoutno = pushMaxnubmer(baseDTO);
+        //检测编号是否修改
+        if (formdata.isCodeModified()) {
+            //编号获取
+            pi_inoutno = pushMaxnubmer(baseDTO);
+        }
+
         prodInOut.setPi_inoutno(pi_inoutno);
         prodInOut.setPi_class(main.getPi_class());
         prodInOut.setPi_said(main.getPi_said());
@@ -629,13 +633,14 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
         String code = baseDTO.getCode();
         Long id = baseDTO.getId();
         String pi_class = baseDTO.getName();
+        Long companyId = BaseContextHolder.getCompanyId();
         if (null == code) {
             throw new BizException(BizExceptionCode.NULL_CODE);
         }
         String billCode = null;
         synchronized (ProdInOutServiceImpl.class) {
-            Integer count = "0".equals(String.valueOf(id)) ? prodInOutMapper.validateCodeWhenInsert(code,pi_class) :
-                    prodInOutMapper.validateCodeWhenUpdate(code, id);
+            Integer count = "0".equals(String.valueOf(id)) ? prodInOutMapper.validateCodeWhenInsert(code, companyId) :
+                    prodInOutMapper.validateCodeWhenUpdate(code, id, companyId);
             String caller = "出货单".equals(pi_class) ? BillCodeSeq.SALEOUT.getCaller() : BillCodeSeq.SALEIN.getCaller();
            /* if(pi_class.equals("出货单")){
                 caller = BillCodeSeq.SALEOUT.getCaller();

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

@@ -117,8 +117,11 @@ public class SaleServiceImpl implements SaleService{
         sale.setSa_sendstatus(Status.UNTURNOUT.getDisplay());
         sale.setSa_sendstatuscode(Status.UNTURNOUT.name());
 
-        //编号校验
-        sa_code = pushMaxnubmer(sa_code, sa_id);
+        //检测编号是否改动
+        if (formdata.isCodeModified()) {
+            //编号校验
+            sa_code = pushMaxnubmer(sa_code, sa_id);
+        }
         //单号赋值
         sale.setSa_code(sa_code);
         //判断更新与保存动作

+ 14 - 2
applications/sale/sale-server/src/main/resources/application.yml

@@ -73,5 +73,17 @@ mybatis:
 auth:
   public-key: auth/pub.key
 ribbon:
-  ReadTimeout: 6000
-  ConnectTimeout: 6000
+  ReadTimeout: 5000
+  ConnectTimeout: 5000
+feign:
+  hystrix:
+    enabled: true
+hystrix:
+    command:
+        default:
+            execution:
+              timeout:
+                enabled: true
+              isolation:
+                    thread:
+                        timeoutInMilliseconds: 4000

+ 2 - 2
applications/sale/sale-server/src/main/resources/mapper/ProdInOutMapper.xml

@@ -512,10 +512,10 @@
     select pi_inoutno from prodinout where pi_id=#{id}
   </select>
   <select id="validateCodeWhenInsert"  resultType="int">
-    select count(1) from prodinout where pi_inoutno = #{code} and pi_class = #{pi_class}
+    select count(1) from prodinout where pi_inoutno = #{code} and companyId = #{companyId}
   </select>
   <select id="validateCodeWhenUpdate" resultType="int" >
-    select count(1) from prodinout where pi_inoutno = #{code} and pi_id != #{id}
+    select count(1) from prodinout where pi_inoutno = #{code} and pi_id != #{id} and companyId = #{companyId}
   </select>
   <select id="validateUnAudit" parameterType="long" resultType="java.lang.String">
     select pi_inoutno from prodinout where pi_id = #{id} and IFNULL(pi_statuscode,' ')!='AUDITED'

+ 4 - 2
applications/sale/sale-server/src/main/resources/mapper/SaleListMapper.xml

@@ -17,11 +17,11 @@
         <result column="sa_sendstatus" property="sa_sendstatus" jdbcType="VARCHAR" />
         <result column="sa_printstatus" property="sa_printstatus" jdbcType="VARCHAR" />
         <result column="sa_printstatuscode" property="sa_printstatuscode" jdbcType="VARCHAR" />
-        <result column="creatorname" property="creatorname" jdbcType="VARCHAR" />
+        <result column="creatorName" property="creatorName" jdbcType="VARCHAR" />
         <result column="sa_auditman" property="sa_auditman" jdbcType="VARCHAR" />
         <result column="companyid" property="companyid" jdbcType="INTEGER" />
         <result column="updaterId" property="updaterId" jdbcType="INTEGER" />
-        <result column="updatetime" property="updatetime" jdbcType="TIMESTAMP" />
+        <result column="updatetime" property="updateTime" jdbcType="TIMESTAMP" />
         <result column="sa_date" property="sa_date" jdbcType="TIMESTAMP" />
         <result column="sa_text1" property="sa_text1" jdbcType="VARCHAR" />
         <result column="sa_text2" property="sa_text2" jdbcType="VARCHAR" />
@@ -43,6 +43,8 @@
         <result column="sd_nettotal" property="sd_nettotal" jdbcType="DOUBLE" />
         <result column="sd_delivery" property="sd_delivery" jdbcType="TIMESTAMP" />
         <result column="sd_sendqty" property="sd_sendqty" jdbcType="DOUBLE" />
+        <result column="sd_pdsendqty" property="sd_pdsendqty" jdbcType="DOUBLE" />
+        <result column="sd_pdsendqtytotal" property="sd_pdsendqtytotal" jdbcType="DOUBLE" />
         <result column="sd_yqty" property="sd_yqty" jdbcType="DOUBLE" />
         <result column="sd_pdqty" property="sd_pdqty" jdbcType="DOUBLE" />
         <result column="sd_remark" property="sd_remark" jdbcType="VARCHAR" />

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

@@ -98,6 +98,15 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
         List<MakeMaterial> makeMaterialList = makeListDTO.getItems();
         String code = pushMaxnubmer(make.getMa_code(), make.getId());
         DocBaseDTO docBaseDTO = null;
+        //校验组合件和子件不允许相同
+        if (makeMaterialList.size() > 0){
+            for (MakeMaterial makeMaterial : makeMaterialList){
+                if (make.getMa_prodcode().equals(makeMaterial.getMm_prodcode())){
+                    throw new BizException(BizExceptionCode.BOM_CODE_REPEAT);
+                }
+            }
+        }
+
         if(make.getId() == 0){
             //保存主表
             make.setCompanyId(BaseContextHolder.getCompanyId());

+ 9 - 0
base-servers/account/account-dto/src/main/java/com/usoftchina/saas/account/dto/CompanyRegDTO.java

@@ -25,6 +25,15 @@ public class CompanyRegDTO implements Serializable{
     private String fax;
     private String signet;      //电子章
     private String type;        //所属行业
+    private String dcName;      //数据中心
+
+    public String getDcName() {
+        return dcName;
+    }
+
+    public void setDcName(String dcName) {
+        this.dcName = dcName;
+    }
 
     public String getType() {
         return type;

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

@@ -59,6 +59,17 @@ public class AccountCenterController {
         return Result.success();
     }
 
+    /**
+     * 解绑默认企业
+     * @param bindCompanyDTO
+     * @return
+     */
+    @PostMapping("/unBind/defaultCompany")
+    public Result unBindDefaultCompany(@RequestBody BindCompanyDTO bindCompanyDTO){
+        accountCenterService.unBindDefaultCompany(bindCompanyDTO.getCompanyId(), bindCompanyDTO.getAccountId());
+        return Result.success();
+    }
+
     /**
      * 校验企业名称时候已在账户中心注册过
      * @param spaceName

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

@@ -39,4 +39,12 @@ public interface AccountCenterService {
      * @return
      */
     boolean bindDefaultCompany(Long companyId, Long accountId);
+
+    /**
+     * 解绑默认企业
+     * @param companyId
+     * @param accountId
+     * @return
+     */
+    boolean unBindDefaultCompany(Long companyId, Long accountId);
 }

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

@@ -186,4 +186,9 @@ public class AccountCenterServiceImpl implements AccountCenterService {
         return true;
     }
 
+    @Override
+    public boolean unBindDefaultCompany(Long companyId, Long accountId) {
+        accountCompanyMapper.unBindDefault(accountId);
+        return true;
+    }
 }

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

@@ -279,7 +279,7 @@ public class AuthController {
         copyDTO.setUsername(info.getMobile());
         copyDTO.setPassword(info.getPassword());
         copyDTO.setSalt(info.getSalt());
-        copyDTO.setEmail(info.getEmail());
+        copyDTO.setEmail(StringUtils.isEmpty(info.getEmail()) ? null : info.getEmail());
         copyDTO.setMobile(info.getMobile());
         copyDTO.setRealname(info.getVipName());
         copyDTO.setType(AccountType.ADMIN.getType());

+ 44 - 7
frontend/saas-portal-web/package-lock.json

@@ -688,6 +688,14 @@
       "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==",
       "dev": true
     },
+    "async-validator": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-1.8.5.tgz",
+      "integrity": "sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA==",
+      "requires": {
+        "babel-runtime": "6.x"
+      }
+    },
     "asynckit": {
       "version": "0.4.0",
       "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
@@ -985,8 +993,7 @@
     "babel-helper-vue-jsx-merge-props": {
       "version": "2.0.3",
       "resolved": "https://registry.npmjs.org/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz",
-      "integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg==",
-      "dev": true
+      "integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg=="
     },
     "babel-helpers": {
       "version": "6.24.1",
@@ -1612,7 +1619,6 @@
       "version": "6.26.0",
       "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
       "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
-      "dev": true,
       "requires": {
         "core-js": "^2.4.0",
         "regenerator-runtime": "^0.11.0"
@@ -2798,8 +2804,7 @@
     "core-js": {
       "version": "2.5.7",
       "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
-      "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
-      "dev": true
+      "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw=="
     },
     "core-util-is": {
       "version": "1.0.2",
@@ -3334,6 +3339,11 @@
       "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
       "dev": true
     },
+    "deepmerge": {
+      "version": "1.5.2",
+      "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz",
+      "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ=="
+    },
     "default-require-extensions": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz",
@@ -3713,6 +3723,19 @@
       "integrity": "sha512-IYhbzJYOopiTaNWMBp7RjbecUBsbnbDneOP86f3qvS0G0xfzwNSvMJpTrvi5/Y1gU7tg2NAgeg8a8rCYvW9Whw==",
       "dev": true
     },
+    "element-ui": {
+      "version": "2.4.11",
+      "resolved": "https://registry.npmjs.org/element-ui/-/element-ui-2.4.11.tgz",
+      "integrity": "sha512-RtgK0t840NAFTajGMWvylzZRSX1EkZ7V4YgAoBxhv4TtkeMscLuk/IdYOzPdlQq6IN0byx1YVBxCX+u4yYkGvw==",
+      "requires": {
+        "async-validator": "~1.8.1",
+        "babel-helper-vue-jsx-merge-props": "^2.0.0",
+        "deepmerge": "^1.2.0",
+        "normalize-wheel": "^1.0.1",
+        "resize-observer-polyfill": "^1.5.0",
+        "throttle-debounce": "^1.0.1"
+      }
+    },
     "elliptic": {
       "version": "6.4.1",
       "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz",
@@ -7772,6 +7795,11 @@
         "sort-keys": "^1.0.0"
       }
     },
+    "normalize-wheel": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/normalize-wheel/-/normalize-wheel-1.0.1.tgz",
+      "integrity": "sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU="
+    },
     "npm-run-path": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
@@ -11115,8 +11143,7 @@
     "regenerator-runtime": {
       "version": "0.11.1",
       "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
-      "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
-      "dev": true
+      "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
     },
     "regenerator-transform": {
       "version": "0.10.1",
@@ -11300,6 +11327,11 @@
       "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
       "dev": true
     },
+    "resize-observer-polyfill": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
+      "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg=="
+    },
     "resolve": {
       "version": "1.1.7",
       "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
@@ -12539,6 +12571,11 @@
       "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=",
       "dev": true
     },
+    "throttle-debounce": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-1.1.0.tgz",
+      "integrity": "sha512-XH8UiPCQcWNuk2LYePibW/4qL97+ZQ1AN3FNXwZRBNPPowo/NRU5fAlDCSNBJIYCKbioZfuYtMhG4quqoJhVzg=="
+    },
     "through2": {
       "version": "2.0.5",
       "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",

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

@@ -16,6 +16,7 @@
   },
   "dependencies": {
     "axios": "^0.18.0",
+    "element-ui": "^2.4.11",
     "v-distpicker": "^1.0.20",
     "vue": "^2.5.2",
     "vue-router": "^3.0.1",

+ 20 - 7
frontend/saas-portal-web/src/components/conenter/addenterprise.vue

@@ -9,7 +9,7 @@
             <div class="gs-worp qy-worp tj-up">
                 <div class="qy-title" style="position: relative;">
                     <span>完善企业信息</span>
-                    <div class="qy-anniu">
+                    <div class="qy-anniu" style="position: absolute;top: 0;right: 20px;margin-top: 0;">
                         <span @click= "Preservation" class="qy-xiugai dianji" style="left: -2px">保存</span>
                         <span @click= "tjquxiao" class="qy-quxiao xs">取消</span>
                     </div>
@@ -48,7 +48,8 @@
                             <span class="qy-biaoti left"><span class="xingxing">*</span>公司地址</span>
                             <div class="addbiaoqian">
                                 <!-- <v-distpicker @province= 'qyprovince' @city= 'qycity' @area= 'qyarea'></v-distpicker> -->
-                                <v-distpicker @selected= 'selected' province="广东省" city="广州市" area="荔湾区" placeholders= '{}'></v-distpicker>
+                                <!-- <v-distpicker @selected= 'selected' province="广东省" city="广州市" area="荔湾区" :placeholders= 'placeholder'></v-distpicker> -->
+                                <v-distpicker @selected= 'selected' @province= 'qyprovince' :placeholders= 'placeholder'></v-distpicker>
                                 <input ref="address" @change="address" :disabled="disabled" class="qy-xiangxi" type="text" placeholder="输入企业详细地址">
                                 
                             </div>
@@ -104,7 +105,12 @@ import { setTimeout } from 'timers';
                 isemail: true,//验证邮箱
                 disabled: true,
                 isadd: false,//添加成功弹窗
-                placeholder:{province:"省", city:"市", area:"区"}
+                placeholder:{province:"省", city:"市", area:"区"},
+                placeholde:{province:"", city:"", area:""},
+                tab:[
+                    {name:'创建新企业'},
+                    {name:'加入企业'},
+                ]
             }
         },
         components:{
@@ -204,6 +210,7 @@ import { setTimeout } from 'timers';
             },
             //保存
             Preservation(){
+                this.listLoading = true
                 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.replace(/\s+/g, "");//公司详细地址
@@ -247,15 +254,16 @@ import { setTimeout } from 'timers';
                             .then(res=>{
                                 let id = res.data.data;
                                 let logoUrl = null;
-                                let name = qyname;
-                                let addenterprise = {'id':id, 'logoUrl': logoUrl, 'name': name};
+                                let addenterprise = {'id':id, 'logoUrl': logoUrl, 'name': qyname};
                                 let session = JSON.parse(window.localStorage.getItem('app-state-session'));
                                 session.account.companies.push(addenterprise);
+                                session.account.realname = name;
                                 Session.set(session);
                                 this.isadd = true;
                                 setTimeout(()=>{
                                     document.documentElement.scrollTop = 0;
-                                    this.$router.push({name:'company'})
+                                    // this.$router.push({name:'company'})
+                                    this.$router.push({path: '/enterprise'})
                                 },1000)
                             })
                             this.$refs.tjtishi.innerHTML = '';
@@ -286,6 +294,7 @@ import { setTimeout } from 'timers';
                         break;
                     }
                 }
+                this.listLoading = false
             },
             remotxt(){
                 setTimeout(()=>{
@@ -299,6 +308,9 @@ import { setTimeout } from 'timers';
                 this.area = data.area.value;
                 this.disabled= false
             },
+            qyprovince(){
+                this.placeholder = this.placeholde
+            },
         }
     }
 </script>
@@ -340,7 +352,8 @@ import { setTimeout } from 'timers';
     height: 30px;
 }
 .addbiaoqian>>>.distpicker-address-wrapper {
-    width: 110%
+    width: 130%;
+    margin-bottom: 10px;
 }
 .qy-Tips {
     margin: 0;

+ 135 - 24
frontend/saas-portal-web/src/components/conenter/company.vue

@@ -56,32 +56,54 @@
       </div>
     </div>
 
-        <div class="gs-qiyebox" ref="qiyebox" :class="isheigh ? 'heigh' : ''">
+        <div class="gs-qiyebox over" ref="qiyebox" :class="isheigh ? 'heigh' : ''">
+            <div class="gs-xiangqing dotted">
+                <router-link to="/addenterprise">
+                    <div class="gs-tianja" @click= "addEnterprise">
+                        <img src="/static/img/Fill 1.png" alt="">
+                        <p>添加企业</p>
+                    </div>
+                </router-link>
+            </div>
             <!-- 点击查看企业详情 -->
-            <div v-for="(d , i) in arr " :key="i" class="gs-xiangqing xs">
-                <div class="left gs-xqleft" @click= "getEnterpriseInfo(d)">
-                    <div class="gs-lefttext">
-                        <p class="gs-qynema"><span>企业名称:</span>{{d.name}}</p>
-                        <p v-if= "d.saas_" ><span>saas服务管理员:</span>{{d.admin}}</p>
-                        <p v-if= "d.time"><span>开通日期:</span>{{d.time}}</p>
+            <div v-for="(d , i) in arr " :key="i" class="gs-xiangqing">
+                <!-- 上 -->
+                <div class="gs-shang">
+                    <div class="gs-morentop" :class= "{gsqiye:nowindex == (i+1)}">
+                        <span v-if = "d.default_" @click="hideDefaultWin(i)" class="gs-btn2 xs">取消默认</span>
+                        <span v-else @click="showDefaultWin(i)" class="gs-btn2 xs">设为默认</span>
                     </div>
+                    <img @click.stop @mouseenter="setismoren" @click="setmoren(i)" class="shezhi xs" src="/static/img/shezhi.png" alt="设置">
+                    <img v-if = "d.default_" class="gs-morenimg" src="/static/img/moren2x.png" alt="">
                 </div>
-                <div class="right gs-xqright">
-                    <div class="gs-border">
-                        <span v-if= "d.saas_" class="gs-btn1 dianji" @click="selectServe(d.id)">进入服务</span>
-                        <span v-else @click="showOpenServeWin(d.id , i)" class="gs-btn1 kaitong xs">开通服务</span>
-                    </div>
-                    <div>
-                        <span v-if = "d.default_" class="gs-btn2 gs-btn3">默认企业</span>
+                <!-- 中 -->
+                <div class="gs-xqleft">
+                    <p class="gs-qynema xs" @click= "getEnterpriseInfo(d)">{{d.name}}</p>
+                    <!-- <img @mouseenter="setismoren" @click="setmoren(i)" class="shezhi xs" src="/static/img/shezhi.png" alt="设置"> -->
+                    <!-- <div class="gs-morentop" :class= "{gsqiye:nowindex == (i+1)}">
+                        <span v-if = "d.default_" @click="hideDefaultWin(i)" class="gs-btn2 xs">取消默认</span>
                         <span v-else @click="showDefaultWin(i)" class="gs-btn2 xs">设为默认</span>
+                    </div> -->
+                </div>
+                <!-- 下 -->
+                <div class="gs-xqright over">
+                    <div v-if= "d.saas_" class="gs-xqright-left left" style="margin-top: 5%;" @click.stop >
+                        <!-- <p class="saasfuwu"><span>SaaS服务</span></p> -->
+                        <!-- <p v-if= "d.saas_"  class="saasgengduo xs">
+                            <span @mouseenter="setissaasxiangxi" @click="gengduo(i)">更多 ></span>
+                        </p> -->
+                        <!-- <div class="saasxiangxi" :class= "{gssaasxiangxi:nowindex2 == (i+1)}"> -->
+                            <p><span>saas管理员:</span>{{d.admin}}</p>
+                            <p><span>联系方式:</span>{{d.adminMobile}}</p>
+                            <!-- <p><span>开通日期:</span></p> -->
+                        <!-- </div> -->
+                    </div>
+                    <div class="gs-border gs-xqright-right right">
+                        <span v-if= "d.saas_" class="gs-btn1 xs" @click="selectServe(d.id)">进入服务</span>
+                        <span v-else @click="showOpenServeWin(d.id , i)" class="gs-btn1 kaitong xs">开通服务</span>
                     </div>
                 </div>
             </div>
-            <div class="gs-xiangqing dotted">
-                <p class="gs-tianja">
-                    <span @click= "addEnterprise"><router-link to="/addenterprise">+添加企业</router-link></span>
-                </p>
-            </div>
         </div>
       </div>
 </template>
@@ -105,13 +127,21 @@
                 arr: [],//企业列表信息
                 isheigh:false,//是否添加默认高度
                 admin: '',
-                adminMobile: ''
+                adminMobile: '',
+                ismoren:true,
+                issaasxiangxi:true,
             }
         },
         computed :{
             setTokenPage() {
                 return this.$url.web + '/set-token.html'
-            }
+            },
+            nowindex() {
+                return this.$store.state.ismoren
+            },
+            nowindex2() {
+                return this.$store.state.issaasxiangxi
+            },
         },
         watch:{
             arr:function(){
@@ -152,7 +182,6 @@
                         }
                     }
                     this.$store.commit('Loginfalse')
-                    this.$store.state.email = res.data.data.spaces[0].adminEmail
                 })
                 .catch(err=>{
                     // console.log("请求失败",err)
@@ -187,10 +216,28 @@
                     this.isDefault = false;
                     this.$router.go(0);
                 })
+            },
+            // 取消默认企业
+            hideDefaultWin(i){
+                let token = this.mytoken.token;
+                this.$ajax({
+                    url: this.$url.api+'/api/account/accountCenter/unBind/defaultCompany',
+                    method: 'post',
+                    data:{
+                        companyId: this.arr[i].id,
+                        accountId: this.mytoken.account.id
+                    },
+                    headers: {
+                        "Authorization":token,
+                    }
+                })
+                .then(res=>{
+                    // console.log('请求成功',res);
+                    this.$router.go(0);
+                })
                 .catch(err=>{
                     // console.log('请求失败',err);
                 });
-                
             },
             //进入服务
             selectServe(id){
@@ -245,7 +292,6 @@
                 let uu = this.arr[i].uu;
                 let company = {'name':qyname,'address':address};
                 let account = {'realname':name,'email':email,'mobile':mobile, 'uu':uu}
-                // let id = this.saasid;
                 this.$ajax({
                     url: this.$url.api+"/api/account/accountCenter/companyAccount/save",
                     method: 'post',
@@ -306,6 +352,30 @@
                 this.isNoopen = false;
                 this.isokopensaas = false
             },
+            // 弹出设置
+            setmoren(i){
+                if (this.ismoren) {
+                    this.$store.state.ismoren = i+1
+                } else {
+                    this.$store.state.ismoren = ''
+                }
+                this.ismoren = !this.ismoren
+            },
+            // 弹出更多
+            gengduo(i){
+                if (this.issaasxiangxi) {
+                    this.$store.state.issaasxiangxi = i+1
+                } else {
+                    this.$store.state.issaasxiangxi = ''
+                }
+                this.issaasxiangxi = !this.issaasxiangxi
+            },
+            setismoren(){
+                this.ismoren = true
+            },
+            setissaasxiangxi(){
+                this.issaasxiangxi = true
+            },
             //没有内容也要有一定的高度
             boxheight(){
                 let H = this.$refs.qiyebox.offsetHeight;
@@ -323,4 +393,45 @@
 .heigh {
     height: 500px;
 }
+.gs-xqright {
+    -webkit-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    -khtml-user-select: none;
+    user-select: none;
+}
+.shezhi {
+    /* margin-left: 92%;
+    margin-top: 23%; */
+}
+.gs-morentop {
+    position: absolute;
+    margin-top: 20px;
+    /* right: 11px; */
+    left: 5px;
+    display: none;
+}
+.saasfuwu {
+    font-size: 16px;
+    color: #677897;
+}
+.saasgengduo {
+    font-family: PingFangSC-Regular;
+    font-size: 12px;
+    color: #1E88F5;
+    letter-spacing: 0;
+}
+.saasxiangxi {
+    display: none;
+    position: absolute;
+    background: #F8FBFF;
+    border: 1px solid #1E88F5;
+    border-radius: 4px;
+    padding: 10px;
+    font-size: 14px;
+    color: #1E88F5 !important;
+}
+.gssaasxiangxi {
+    display: block;
+}
 </style>

+ 3 - 5
frontend/saas-portal-web/src/components/conenter/details.vue

@@ -35,7 +35,7 @@
             <div class="gs-worp qy-worp" style="width: 100%">
                 <div class="qy-title" style="position: relative;">
                     <span>企业基本信息</span>
-                    <div class="qy-anniu">
+                    <div class="qy-anniu" style="position: absolute;top: 0;right: 20px;margin-top: 0;">
                         <span @click= "baocunxiugai" class="qy-xiugai dianji" style="left: 0">保存</span>
                         <span @click= "quxiaoxiugai" class="qy-quxiao xs">取消</span>
                     </div>
@@ -162,10 +162,9 @@
             // 保存修改
             baocunxiugai(){
                 let qyindustry = this.$refs.qyindustry.value;//所属行业
-                if (this.isemail && qyindustry!='') {
+                if (this.isemail) {
                     let email = this.$refs.email.value;
                     let qyname = this.content.name;//公司名字
-                    // let qyindustry = this.$refs.qyindustry.value;//所属行业
                     let address = this.content.address;//公司详细地址
                     let companyId = this.content.id;
                     let name = this.content.realname;//名字
@@ -197,7 +196,7 @@
                         // console.log("请求失败",err)
                     })
                 } else {
-                    this.$refs.Tips.innerHTML= "请填写正确的邮箱或选择行业"
+                    this.$refs.Tips.innerHTML= "请填写正确的邮箱"
                     // this.isTipsmail = true;
                     setTimeout(()=>{
                         this.$refs.Tips.innerHTML= ""
@@ -206,7 +205,6 @@
             },
             //返回
             gobick(){
-                // this.$router.go(-1) 
                 this.$router.push({name:'company'});
             }
         }

+ 147 - 15
frontend/saas-portal-web/src/components/conenter/enterprise.vue

@@ -1,5 +1,5 @@
 <template>
-    <div class="div">
+    <div class="div" @click="onshezhi">
         <div id="navigation" class="navbar-inverse navbar-fixed-top animated-header">
         <div class="container">
             <div class="navbar-header">
@@ -19,10 +19,10 @@
                 <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 style="margin-left:30px;    margin-top: 13px;    cursor: pointer;">
+                    <li style="margin-left:30px;margin-top: 13px;cursor: pointer;">
                         <span style="color:#fff;font-size: 16px;">
                             <img style="width: 20px;" src="/static/img/assets/denglu3x.png" alt="">
-                            {{mytoken.realname}}
+                            {{mytoken.realname || mytoken.username}}
                         </span>
                         <span style="color:#fff;" @click="loginout">【退出】</span>
                     </li>
@@ -48,7 +48,7 @@
                 </div>
     <!-- 个人信息------------------------------------------------------------------- -->
                 <div :class= "{gsqiye:nowindex == 1}">
-                    <div class="over gr-worp" style="margin-bottom: 30px;">
+                    <div v-if="ismodifyname" class="over gr-worp" style="margin-bottom: 30px;">
                         <div class="left gr-left">
                             <img src="/static/img/qiye/yonghu@2x.png" alt="">
                         </div>
@@ -57,7 +57,7 @@
                                 <li>
                                     <span>姓名</span>
                                     <span>{{mytoken.realname}}</span>
-                                    <!-- <input type="text" :value="mytoken.realname"> -->
+                                    <button class="modifyname dianji" @click="modify">修改</button>
                                 </li>
                                 <li>
                                     <span>UU号</span><span>{{mytoken.uu}}</span>
@@ -71,6 +71,34 @@
                             </ul>
                         </div>
                     </div>
+                    <!-- 修改页面 -->
+                    <div v-else class="over gr-worp" style="margin-bottom: 30px;">
+                        <div class="left gr-left">
+                            <img src="/static/img/qiye/yonghu@2x.png" alt="">
+                        </div>
+                        <div class="left gr-right" style="margin-bottom: 30px;">
+                            <ul>
+                                <li>
+                                    <span><span class="xinghao" style="width:5px">*</span>姓名</span>
+                                    <input @change="regname" class="realname" type="text" ref="realname" :value="mytoken.realname">
+                                    <p class="usname" ref="usname"></p>
+                                </li>
+                                <li>
+                                    <span>UU号</span><span>{{mytoken.uu}}</span>
+                                </li>
+                                <li>
+                                    <span>邮箱</span><span>{{mytoken.email}}</span>
+                                </li>
+                                <li>
+                                    <span>手机号</span><span>{{mytoken.mobile}}</span>
+                                </li>
+                                <li>
+                                    <button class="baocun dianji" @click="Preservation">保存</button>
+                                    <button class="qy-quxiao quxiao" @click="cancel">取消</button>
+                                </li>
+                            </ul>
+                        </div>
+                    </div>
                 </div>
     <!-- 安全信息----------------------------------------------------------------------------- -->
 
@@ -90,8 +118,11 @@
                         </div>
                     </div>
                 </div>
+    <!-- 消息 ------------------------------------------------------------------>
+                <div :class="{gsqiye:nowindex == 3}">
+                    我是消息页面
+                </div>
             </div>
-            
         </div>
     </div>
 </template>
@@ -106,10 +137,14 @@ import { setTimeout } from 'timers';
                 tianjiaqiye: true,//添加企业切换
                 mytoken: JSON.parse(localStorage.getItem('app-state-session')).account,//本地储存的用户信息
                 mobile: null,
+                ismodifyname:true,
+                isname:true,//姓名验证
+                reg: new RegExp(/[\@\#\$\%\&\*!\¥]/),//非法字符
                 tab: [
                     {name: '企业信息'},
                     {name: '个人信息'},
-                    {name: '安全信息'},
+                    {name: '安全设置'},
+                    // {name: '消息'},
                     ],
             }
         },
@@ -142,17 +177,114 @@ import { setTimeout } from 'timers';
             //修改手机号
             changphone(){
                 window.location.href = this.$url.sso+'/validation/phoneValidation?returnURL='+this.$url.web+'&appId=sp'
-            }
+            },
+            //修改姓名
+            modify(){
+                this.ismodifyname = false
+            },
+            //取消修改姓名
+            cancel(){
+                this.ismodifyname = true
+            },
+            regname(){
+                let name = this.$refs.realname.value.replace(/\s+/g, "");
+                if (name == '') {
+                    this.$refs.usname.innerHTML = '个人姓名不能为空'
+                    this.isname = false
+                } else {
+                    this.isname = true
+                    if (this.reg.test(name)) {
+                        this.$refs.usname.innerHTML = '不能包含非法字符'
+                        this.isname = false
+                    } else {
+                        this.$refs.usname.innerHTML = ''
+                        this.isname = true
+                    }
+                }
+            },
+            // 保存修改姓名
+            Preservation(){
+                if (this.isname) {
+                    let name = this.$refs.realname.value.replace(/\s+/g, "");
+                    let id = this.mytoken.id;
+                    let token = JSON.parse(localStorage.getItem('app-state-session')).token;
+                    this.$ajax({
+                        url: this.$url.api+"/api/account/account/update",
+                        method :'post',
+                        data: {
+                            id:id,
+                            realname:name
+                        },
+                        headers: {
+                            "Authorization":token
+                        }
+                    })
+                    .then(res=>{
+                        if (res.data.success) {
+                            this.$router.go(0)
+                        }
+                    })
+                    .catch(err=>{
+                        // console.log("请求错误",err);
+                    })
+                }
+            },
+            onshezhi(){
+                this.$store.state.ismoren = '';
+                this.$store.state.issaasxiangxi = ''
+            },
         },
     }
 </script>
 
 <style scoped>
-    .div {
-        padding-top: 100px;
-        background: #FDFDFD;
-    }
-    .gsqiye div:last-child {
-        margin-bottom: 100px;
-    }
+.div {
+    padding-top: 100px;
+    background: #FDFDFD;
+}
+.gsqiye div:last-child {
+    margin-bottom: 100px;
+}
+.modifyname {
+    margin-left: 80px;
+    font-family: PingFangSC-Regular;
+    font-size: 14px;
+    color: #FFFFFF;
+    letter-spacing: 0.25px;
+    text-align: center;
+    padding: 5px 20px;
+    background: #1E88F5;
+    border-radius: 2px;
+    border: 0
+}
+.baocun {
+    font-family: PingFangSC-Regular;
+    font-size: 14px;
+    color: #FFFFFF;
+    letter-spacing: 0.25px;
+    text-align: center;
+    padding: 5px 26px;
+    background: #1E88F5;
+    border-radius: 2px;
+    border: 0
+}
+.quxiao {
+    padding: 5px 26px;
+    margin-left: 30px
+}
+.realname {
+    margin-left: -5px;
+    padding-left: 5px;
+}
+.usname {
+    height: 0px;
+    margin-left: 85px;
+    color: red;
+    font-size: 12px;
+}
+.xinghao {
+    float: left;
+    margin-left: -10px;
+    color: red;
+}
 </style>

+ 24 - 7
frontend/saas-portal-web/src/components/conenter/home.vue

@@ -34,7 +34,7 @@
 								<span id="user-info">{{account.realname || account.username}}</span>
 							</span>
               <span @click="loginout">【退出】</span>    |
-              <router-link to="/enterprise"><a href="#"><span style="color: white">账户中心</span></a></router-link>
+              <router-link to="/enterprise"><a><span @click="home" style="color: white">账户中心</span></a></router-link>
             </li>
           </ul>
         </div>
@@ -269,11 +269,27 @@
         withCredentials:true
       })
       .then(res=>{
-        const data=res.data.data,session = data.token, account = data.account
-        account.companies = account.companies || []
-        session.account = account
-        Session.set(session);
-        this.account = Session.getAccount();
+        const data=res.data.data;
+        if(data&&data!=null){
+          const session = data.token, account = data.account
+          account.companies = account.companies || []
+          session.account = account
+          Session.set(session);
+          this.account = Session.getAccount();
+          //有企业信息时 第一次访问页面 跳转企业列表
+          if(account.companies.length>0){
+            //监听访问首页的次数
+            if(!localStorage.VisitCount){
+              localStorage.VisitCount = '1'
+            }else{
+              localStorage.VisitCount = (Number(localStorage.VisitCount) + 1 ) + ''
+            }
+            if(localStorage.VisitCount=='1'){
+              const me = this || _this;
+              me.$router.push({path: '/enterprise'})
+            }
+          }
+        }
       })
     },
     mounted() {
@@ -312,8 +328,9 @@
           Session.set(session)
           const frame = window.frames[window.frames.length - 1]
           window.addEventListener('message', () => {
-           if(me.isLogin){
+           if(me.isLogin || me.isRegister){
             me.isLogin = false
+            me.isRegister = false
             if (!account.companyId) {
               // 添加企业
               me.$router.push({path: '/enterprise'})

+ 13 - 14
frontend/saas-portal-web/src/components/footer/footer.vue

@@ -11,28 +11,27 @@
 					</div>
 					<div class="link">
 						<ul>
-							<li><span>常用链接</span></li>
-							<li><a href="https://uas.usoftchina.com/" target="_blank">UAS官网</a></li>
-							<li><a href="https://www.usoftchina.com/" target="_blank">U软云</a></li>
-							<li><a href="http://www.yitoa.com/" target="_blank">英唐官网</a></li>
+							<li><span>产品</span></li>
+							<li><a href="#">U企云服</a></li>
+							<li><a href="https://mall.usoftchina.com/" target="_blank">U软商城</a></li>
+							<li><a href="https://fin.yitoa-fintech.com/" target="_blank">U智融</a></li>
+							<li><a href="https://zb.usoftchina.com/" target="_blank">闯客网</a></li>
 						</ul>
 						<ul>
 							<li><span>帮助中心</span></li>
 							<li><a @click="problem">常见问题</a></li>
-							<li><a href="#">操作手册</a></li>
+							<li><a class="no-link">操作手册</a></li>
 						</ul>
 						<ul>
-							<li><span>公司</span></li>
-							<li><a href="https://uas.usoftchina.com/about" target="_blank">关于我们</a></li>
-							<li><a >企业文化</a></li>
-							<li><a >联系我们</a></li>
+							<li><span>常用链接</span></li>
+							<li><a href="https://uas.usoftchina.com/" target="_blank">UAS官网</a></li>
+							<li><a href="https://www.usoftchina.com/" target="_blank">优软云</a></li>
+							<li><a href="http://www.yitoa.com/" target="_blank">英唐官网</a></li>
 						</ul>
 						<ul>
-							<li><span>产品</span></li>
-							<li><a href="#">U企云服</a></li>
-							<li><a href="https://mall.usoftchina.com/" target="_blank">优软商城</a></li>
-							<li><a href="https://fin.yitoa-fintech.com/" target="_blank">优智融</a></li>
-							<li><a href="https://zb.usoftchina.com/" target="_blank">闯客网</a></li>
+							<li><span>公司</span></li>
+							<li><a href="https://uas.usoftchina.com/about" target="_blank">关于我们</a></li>
+							<li><a class="no-link">联系我们</a></li>
 						</ul>
 					</div>
 					

+ 4 - 0
frontend/saas-portal-web/src/pages/index/index.js

@@ -4,6 +4,10 @@ import App from './index.vue'
 import router from '../../router'
 import Axios from 'axios'
 import store from '../../store'
+import ElementUI from 'element-ui';
+import 'element-ui/lib/theme-chalk/index.css';
+
+Vue.use(ElementUI);
 
 Axios.defaults.withCredentials=true;
 Axios.interceptors.request.use(function (config) {

+ 1 - 0
frontend/saas-portal-web/src/pages/index/index.vue

@@ -36,6 +36,7 @@ export default {
   bottom: 0;
   background: rgba(0, 0, 0, 0.7);
   text-align: center;
+  z-index: 990;
 }
 .loadingtxt {
   position: absolute;

+ 0 - 25
frontend/saas-portal-web/src/pages/remove-token/remove-token.html

@@ -1,25 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="UTF-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1.0">
-    <meta http-equiv="X-UA-Compatible" content="ie=edge">
-    <title>Document</title>
-</head>
-<body>
-    <div id="app">hello</div>
-    <script>
-        // iframe接收消息
-        window.addEventListener('message', function(e) {
-            if (e.data == 'removeToken') {
-                if (e.source != window.parent) {
-                    return;
-                }
-                var storeKey = 'app-state-session';
-                localStorage.removeItem(storeKey);
-                window.parent.postMessage("success", "*");
-            }
-        });
-    </script>
-</body>
-</html>

+ 0 - 0
frontend/saas-portal-web/src/pages/remove-token/remove-token.js


+ 0 - 15
frontend/saas-portal-web/src/pages/remove-token/remove-token.vue

@@ -1,15 +0,0 @@
-<template>
-    <div>
-
-    </div>
-</template>
-
-<script>
-    export default {
-        
-    }
-</script>
-
-<style scoped>
-
-</style>

+ 2 - 1
frontend/saas-portal-web/src/store/index.js

@@ -4,10 +4,11 @@ Vue.use(Vuex)
 
 export default new Vuex.Store({
     state:{
-        email:'',
         isAutoLogin: false,
         isproblem: '',//常见问题
         isloading:false,
+        ismoren:'',
+        issaasxiangxi:''
     },
     mutations:{
          Logintrue(state) {

+ 111 - 47
frontend/saas-portal-web/static/css/gongsi.css

@@ -1,7 +1,5 @@
 .xs:hover {
     cursor:pointer;
-    /* border-bottom: 1px solid #2868c8; */
-    /* box-shadow: 1px 1px 1px #ccc; */
 }
 .dianji:hover{
     border-bottom: 1px solid #2868c8;
@@ -101,88 +99,111 @@
     display: block !important;
     margin-top: 70px;
 }
+.gs-qiyebox {
+    width: 150%;
+    margin-left: -22%;
+}
 .gs-xiangqing {
-    height: 112px;
+    height: 240px;
     background: #FFFFFF;
     border: 1px solid rgba(30,136,245,0.32);
     box-shadow: 0 20px 60px 8px #F4F8FC;
     border-radius: 4px;
     overflow: hidden;
-    margin-bottom: 24px;
+    width: 22%;
+    float: left;
+    margin: 0px 27px 27px 0px;
 }
 .gs-qynema {
     font-weight: 600;
+    color: #243A52;
+    letter-spacing: 0;
+    font-size: 18px;
 }
 .dotted {
     border: 1px dashed rgba(30,136,245,0.32);
-    line-height: 112px;
+    text-align: center;
+    position: relative;
 }
 .gs-tianja {
-    padding: 0 80px;
     font-family: PingFangSC-Medium;
     color: #BDBEBE;
     letter-spacing: 0.25px;
+    position: absolute;
+    top: 50%;
+    left: 50%;
+    transform: translate(-50%, -50%);
 }
-.gs-tianja span:hover {
-    border: 1px dashed #ccc;
-    padding: 6px 20px;
-    cursor:pointer;
-}
-.gs-xqleft {
+.gs-tianja img {
     width: 70%;
-    height: 100%;
+}
+.gs-shang {
+    height: 25%;
+    padding: 10px;
     position: relative;
 }
-.gs-lefttext {
+.gs-shang span {
+    font-size: 12px;
+    color: #9EA8B2;
+    letter-spacing: 0;
+    text-align: center;
+    line-height: 30px;
+}
+.gs-morenimg {
+    width: 20%;
     position: absolute;
-    top: 50%;
-    left: 50%;
-    width: 70%;
-    margin-left: 30%;
-    height: 50%;
-    transform: translate(-100%,-50%);
+    top: 0;
+    right: 0;
+}
+.gs-xqleft {
+    height: 40%;
+    position: relative;
+    padding: 0px 10px;
+    text-align: center;
 }
 .gs-xqright {
-    width: 30%;
-    height: 100%;
-    overflow: hidden;
+    height: 35%;
+    background: #F4F9FE;
+    padding: 10px;
 }
 .gs-xqright div {
-    float: left;
-    width: 50%;
-    text-align: center;
-    line-height: 90px;
-    margin-top: 10px;
+    text-align: left;
+}
+.gs-xqright div p{
+    font-size: 12px;
+    letter-spacing: 0;
 }
 .gs-border {
-    border-right: 1px solid #B7D9FB;
+    margin-top: 8%;
 }
+
 .gs-btn1 {
-    padding: 5px 20px;
-    background: #1E88F5;
-    border-radius: 2px;
+    padding: 5px;
+    background: #4EC66B;;
+    border-radius: 4px;
     color: white;
 }
 .kaitong {
-    background: #F2F9FF;
-    border: 1px solid #1E88F5;
-    border-radius: 2px;
-    color: #1E88F5;
+    background: #1E88F5;
+    border-radius: 4px;
+    color: white;
 }
 .gs-btn2 {
     font-family: PingFangSC-Regular;
     font-size: 14px;
-    padding: 5px 20px;
+    padding: 2px 8px;
     color: #1E88F5;
+    background: #F8FBFF;
     border: 1px solid #1E88F5;
-    border-radius: 2px;
-    letter-spacing: 0.25px;
+    border-radius: 4px;
 }
-.gs-btn3 {
-    border: 0
+.gs-btn2:hover {
+    color: #ffffff;
+    background: #1E88F5;
 }
 
 
+
 /* 添加企业信息-------------------------------------------------------- */
 .qy-quxiao {
     background: #FFFFFF;
@@ -198,9 +219,9 @@
     color: red;
 }
 .qy-anniu {
-    position: absolute;
-    top: 0;
-    right: 40px;
+    margin-left: 56%;
+    margin-top: 30px;
+    margin-bottom: 45px;
 }
 .qy-conent input {
     border: 1px solid #1E88F5;
@@ -224,14 +245,11 @@
 }
 .addbiaoqian {
     width: 59%;
-    /* float: right;
-    margin-right: 102px; */
     float: left;
     margin-left: 4px;
 }
 .qy-xiangxi {
     width: 100% !important;
-    margin-top: 10px;
     font-size: 12px;
     padding-left: 10px;
 }
@@ -322,6 +340,17 @@
     font-size: 16px;
     font-weight: 600;
 }
+.qy-title>ul{
+    margin: 0;
+    padding: 0;
+    width: 100%;
+}
+.qy-title>ul>li{
+    margin: 0;
+    padding: 0;
+    width: 50%;
+    text-align: center;
+}
 .qy-xiugai {
     font-family: PingFangSC-Regular;
     font-size: 14px;
@@ -356,4 +385,39 @@
     background: #1E88F5;
     border-radius: 2px;
     margin-right: 8px;
+}
+.jr-conent {
+    padding: 60px 30px 30px 30px;
+    text-align: center;
+}
+.jr-conent input {
+    width: 30%;
+    padding-left: 10px;
+    border: 0;
+    border-bottom: 1px solid #BDBEBE;
+}
+.lookup {
+    width: 40%;
+    background: #FFFFFF;
+    border: 1px solid #1E88F5;
+    border-radius: 2px;
+    margin-left: 5%;
+    position: absolute;
+    /* display: none; */
+    margin-top: -20px;
+    z-index: 1;
+    text-align: left;
+}
+.lookup > ul {
+    padding: 20px;
+}
+.lookup > ul > li {
+    margin-bottom: 10px;
+} 
+.lookup > ul > li span{
+    width: 15%;
+    display: inline-block;
+} 
+.saasguanli {
+    width: 18% !important;
 }

+ 9 - 30
frontend/saas-portal-web/static/css/main.css

@@ -40,8 +40,11 @@ h1, h2, h3, h4, h5, h6,
 p {
     font-size: 15px;
 }
+li {
+    list-style: none;
+}
 main > section {
-    padding: 70px 0;
+    /* padding: 70px 0; */
 }
 
 .btn {
@@ -330,7 +333,8 @@ main > section {
 
 .footer{
     width: 100%;
-    background: #383838;
+    background-image: url(../img/footer2x.png);
+    background-size: 100%;
 }
 .db-text {
     background: white;
@@ -373,7 +377,7 @@ main > section {
 }
 .footer-section ul>li:hover a{
     text-decoration: underline ;
-    color: #e41f2b;
+    color: #1E88F5;
 }
 .footer-section ul>li:hover a.no-link{
     text-decoration: none;
@@ -433,43 +437,18 @@ main > section {
 
 .friend-link{
     height: 100px;
-    background: #000;
+    background: #14152D;
     width: 100%;
     line-height: 100px;
     text-align: center;
 }
 .friend-link span {
-    opacity: 0.56;
     font-family: PingFangSC-Regular;
     font-size: 16px;
-    color: #FFFFFF;
+    color: #7C93AD;
     letter-spacing: 0;
     text-align: center;
 }
-.friend-link ul{
-    overflow: hidden;
-    list-style: none ;
-    width: 80%;
-    margin: 0 auto;
-    padding: 0 15px;
-}
-.friend-link ul li{
-    float: left;
-}
-.friend-link ul li span{
-    font-size: 14px;
-    color: #FFFFFF;
-}
-.friend-link ul li a{
-    display: inline-block;
-    margin-right: 20px;
-    font-size: 14px;
-    color: #FFFFFF;
-}
-.friend-link ul li a:hover{
-    text-decoration: underline ;
-    color: #e41f2b;
-}
 
 .section-title p {
     color: #444;

BIN
frontend/saas-portal-web/static/img/Fill 1.png


BIN
frontend/saas-portal-web/static/img/footer2x.png


BIN
frontend/saas-portal-web/static/img/moren2x.png


BIN
frontend/saas-portal-web/static/img/shezhi.png


+ 11 - 6
frontend/saas-web/app/util/BaseUtil.js

@@ -86,11 +86,17 @@ Ext.define('saas.util.BaseUtil', {
          * @param message: 内容
          * @return : Promise
          */
-        showConfirm: function (title, message) {
+        showConfirm: function (title, message, config) {
             return new Ext.Promise(function (resolve, reject) {
-                Ext.MessageBox.confirm(title, message, function (buttonId) {
-                    return resolve(buttonId);
-                });
+                Ext.MessageBox.show(Ext.Object.merge({
+                    title: title,
+                    msg: message,
+                    buttons: Ext.Msg.YESNO,
+                    icon: Ext.Msg.QUESTION,
+                    fn: function (buttonId) {
+                        return resolve(buttonId);
+                    }
+                }, config));
             })
         },
 
@@ -157,13 +163,12 @@ Ext.define('saas.util.BaseUtil', {
                         if (res.success) {
                             return resolve(res);
                         } else {
-                            console.error('server request failure with code ' + res.code + '.');
                             console.error('failure message: ' + res.message);
                             return reject(res);
                         }
                     },
                     failure: function (response, opts) {
-                        console.error('server-side failure with status code ' + response);
+                        console.error('server-side failure.', response);
                         return reject(response);
                     }
                 });

+ 6 - 0
frontend/saas-web/app/util/FormUtil.js

@@ -178,6 +178,11 @@ Ext.define('saas.util.FormUtil', {
                         model:item.storeModel,
                         data: [],
                         listeners: {
+                            datachanged: function(s, eOpts) {
+                                var g = form.query('detailGridField')[index];
+                                g.fireEvent('datachanged', g, s, eOpts);
+                            },
+                            // 为新增行设置默认值
                             add: function(store, records, index, eOpts) {
                                 Ext.Array.each(records, function(r) {
                                     for(k in defaultValueColumns) {
@@ -286,6 +291,7 @@ Ext.define('saas.util.FormUtil', {
                         form.fireEvent('load', form, formData);
                     }
                 }).catch(function(res) {
+                    form.clearDirty();
                     saas.util.BaseUtil.showErrorToast(res.message);
                     form.setLoading(false);
                 })

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

@@ -178,7 +178,7 @@ Ext.define('saas.view.core.base.ImportWindow', {
                             var caller = b.ownerCt.ownerCt.ownerCt.ownerCt.caller;
                             //获取模版
                             var serverOptions = Ext.manifest.server;
-                            window.location.href = (serverOptions.basePath.http?serverOptions.basePath.http:serverOptions.basePath) + '/api/commons/excel/import/templet?caller='+caller;
+                            window.location.href = (serverOptions.basePath.https?serverOptions.basePath.https:serverOptions.basePath) + '/api/commons/excel/import/templet?caller='+caller;
                         }
                     }
                 },{
@@ -229,7 +229,7 @@ Ext.define('saas.view.core.base.ImportWindow', {
                             //导入权限校验
                             var hasPower = false;
                             Ext.Ajax.request({
-                                url: 'http://192.168.253.41:8560/api/commons/'+form.ownerCt.caller+'/import',
+                                url: '/api/commons/'+form.ownerCt.caller+'/import',
                                 async:false,
                                 method: 'GET',
                                 success: function(response, opts) {

+ 6 - 6
frontend/saas-web/app/view/core/dbfind/AddMultiDbfindGridPanel.js

@@ -191,7 +191,7 @@ Ext.define('saas.view.core.dbfind.AddMultiDbfindGridPanel', {
                     store: me.store,
                     items:[{
                         xtype:'checkbox',
-                        id:'showSelectRecord',
+                        name:'showSelectRecord',
                         boxLabel:'已选中数据',
                         handler:function(b){
                             var grid = me;
@@ -227,7 +227,7 @@ Ext.define('saas.view.core.dbfind.AddMultiDbfindGridPanel', {
                         }
                     }],
                     moveFirst: function() {
-                        if(Ext.getCmp('showSelectRecord').checked==false){
+                        if(me.down('[name=showSelectRecord]').checked==false){
                             if (this.fireEvent('beforechange', this, 1) !== false) {
                                 this.store.loadPage(1);
                                 this.ownerCt.selModel.noChange = true;
@@ -243,7 +243,7 @@ Ext.define('saas.view.core.dbfind.AddMultiDbfindGridPanel', {
                         var me = this,
                             store = me.store,
                             prev = store.currentPage - 1;
-                        if(Ext.getCmp('showSelectRecord').checked==false){
+                        if(me.down('[name=showSelectRecord]').checked==false){
                             if (prev > 0) {
                                 if (me.fireEvent('beforechange', me, prev) !== false) {
                                     store.previousPage();
@@ -262,7 +262,7 @@ Ext.define('saas.view.core.dbfind.AddMultiDbfindGridPanel', {
                             store = me.store,
                             total = me.getPageData().pageCount,
                             next = store.currentPage + 1;
-                        if(Ext.getCmp('showSelectRecord').checked==false){
+                        if(me.down('[name=showSelectRecord]').checked==false){
                             if (next <= total) {
                                 if (me.fireEvent('beforechange', me, next) !== false) {
                                     store.nextPage();
@@ -279,7 +279,7 @@ Ext.define('saas.view.core.dbfind.AddMultiDbfindGridPanel', {
                     moveLast: function() {
                         var me = this,
                             last = me.getPageData().pageCount;
-                        if(Ext.getCmp('showSelectRecord').checked==false){
+                        if(me.down('[name=showSelectRecord]').checked==false){
                             if (me.fireEvent('beforechange', me, last) !== false) {
                                 me.store.loadPage(last);
                                 this.ownerCt.selModel.noChange = true;
@@ -295,7 +295,7 @@ Ext.define('saas.view.core.dbfind.AddMultiDbfindGridPanel', {
                         var me = this,
                             store = me.store,
                             current = store.currentPage;
-                        if(Ext.getCmp('showSelectRecord').checked==false){
+                        if(me.down('[name=showSelectRecord]').checked==false){
                             if (me.fireEvent('beforechange', me, current) !== false) {
                                 store.loadPage(current);
                                 this.ownerCt.selModel.noChange = true;

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio