Jelajahi Sumber

Merge branch 'master' of http://47.100.37.243:10191/wutt/manHourHousekeeper into master

# Conflicts:
#	fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/FinanceExcludeProjectServiceImpl.java
seyason 5 bulan lalu
induk
melakukan
32c9bcc98c
27 mengubah file dengan 1919 tambahan dan 31366 penghapusan
  1. 4 176
      fhKeeper/formulahousekeeper/ArticleOperation/log/article.log
  2. 1483 31022
      fhKeeper/formulahousekeeper/management-crm/crm.log
  3. 15 5
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/controller/BusinessOpportunityController.java
  4. 4 3
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/entity/BusinessOpportunity.java
  5. 28 14
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/BusinessOpportunityServiceImpl.java
  6. 7 4
      fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/ContactsServiceImpl.java
  7. 10 14
      fhKeeper/formulahousekeeper/management-crm/src/main/resources/mapper/BusinessOpportunityMapper.xml
  8. 0 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/AuthRedirectController.java
  9. 35 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ContractBonusDetailController.java
  10. 96 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/ContractBonusDetail.java
  11. 10 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/bo/TransBonusData.java
  12. 19 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/vo/ImportBonusTemplateVO.java
  13. 7 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ContractBonusDetailMapper.java
  14. 10 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ContractBonusDetailService.java
  15. 57 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ContractBonusDetailServiceImpl.java
  16. 3 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/FinanceExcludeProjectServiceImpl.java
  17. 29 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/PrivateDeployUrlGenerator.java
  18. 37 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/converter/ExcelTemplateTransUtil.java
  19. 29 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/converter/StringExcelConverter.java
  20. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/application.yml
  21. 6 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ContractBonusDetailMapper.xml
  22. 10 10
      fhKeeper/formulahousekeeper/timesheet/config/index.js
  23. 0 45
      fhKeeper/formulahousekeeper/timesheet/src/common/js/appidConfiguration.js
  24. 3 7
      fhKeeper/formulahousekeeper/timesheet/src/views/Login.vue
  25. 0 45
      fhKeeper/formulahousekeeper/timesheet_h5/src/utils/appidConfiguration.js
  26. 6 8
      fhKeeper/formulahousekeeper/timesheet_h5/src/views/login/index.vue
  27. 10 10
      fhKeeper/formulahousekeeper/timesheet_h5/vue.config.js

+ 4 - 176
fhKeeper/formulahousekeeper/ArticleOperation/log/article.log

@@ -1,176 +1,4 @@
-2024-11-12 14:32:51.481 [main] ERROR o.s.b.SpringApplication - [reportFailure,818] - Application run failed
-org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length = 1
-	at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:218)
-	at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:176)
-	at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:171)
-	at org.yaml.snakeyaml.reader.StreamReader.peek(StreamReader.java:126)
-	at org.yaml.snakeyaml.scanner.ScannerImpl.scanToNextToken(ScannerImpl.java:1218)
-	at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:329)
-	at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:251)
-	at org.yaml.snakeyaml.parser.ParserImpl$ParseImplicitDocumentStart.produce(ParserImpl.java:214)
-	at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:166)
-	at org.yaml.snakeyaml.parser.ParserImpl.checkEvent(ParserImpl.java:156)
-	at org.yaml.snakeyaml.composer.Composer.checkNode(Composer.java:93)
-	at org.yaml.snakeyaml.constructor.BaseConstructor.checkData(BaseConstructor.java:124)
-	at org.yaml.snakeyaml.Yaml$1.hasNext(Yaml.java:509)
-	at org.springframework.beans.factory.config.YamlProcessor.process(YamlProcessor.java:199)
-	at org.springframework.beans.factory.config.YamlProcessor.process(YamlProcessor.java:166)
-	at org.springframework.boot.env.OriginTrackedYamlLoader.load(OriginTrackedYamlLoader.java:88)
-	at org.springframework.boot.env.YamlPropertySourceLoader.load(YamlPropertySourceLoader.java:50)
-	at org.springframework.boot.context.config.StandardConfigDataLoader.load(StandardConfigDataLoader.java:54)
-	at org.springframework.boot.context.config.StandardConfigDataLoader.load(StandardConfigDataLoader.java:36)
-	at org.springframework.boot.context.config.ConfigDataLoaders.load(ConfigDataLoaders.java:108)
-	at org.springframework.boot.context.config.ConfigDataImporter.load(ConfigDataImporter.java:132)
-	at org.springframework.boot.context.config.ConfigDataImporter.resolveAndLoad(ConfigDataImporter.java:87)
-	at org.springframework.boot.context.config.ConfigDataEnvironmentContributors.withProcessedImports(ConfigDataEnvironmentContributors.java:116)
-	at org.springframework.boot.context.config.ConfigDataEnvironment.processInitial(ConfigDataEnvironment.java:240)
-	at org.springframework.boot.context.config.ConfigDataEnvironment.processAndApply(ConfigDataEnvironment.java:227)
-	at org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessor.postProcessEnvironment(ConfigDataEnvironmentPostProcessor.java:102)
-	at org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessor.postProcessEnvironment(ConfigDataEnvironmentPostProcessor.java:94)
-	at org.springframework.boot.env.EnvironmentPostProcessorApplicationListener.onApplicationEnvironmentPreparedEvent(EnvironmentPostProcessorApplicationListener.java:102)
-	at org.springframework.boot.env.EnvironmentPostProcessorApplicationListener.onApplicationEvent(EnvironmentPostProcessorApplicationListener.java:87)
-	at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:178)
-	at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:171)
-	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:145)
-	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:133)
-	at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:85)
-	at org.springframework.boot.SpringApplicationRunListeners.lambda$environmentPrepared$2(SpringApplicationRunListeners.java:66)
-	at org.springframework.boot.SpringApplicationRunListeners$$Lambda$37/1452442375.accept(Unknown Source)
-	at java.util.ArrayList.forEach(ArrayList.java:1249)
-	at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:120)
-	at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:114)
-	at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:65)
-	at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:344)
-	at org.springframework.boot.SpringApplication.run(SpringApplication.java:302)
-	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1300)
-	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1289)
-	at com.my.bigevent.BigEventApplication.main(BigEventApplication.java:12)
-Caused by: java.nio.charset.MalformedInputException: Input length = 1
-	at java.nio.charset.CoderResult.throwException(CoderResult.java:281)
-	at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:339)
-	at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
-	at java.io.InputStreamReader.read(InputStreamReader.java:184)
-	at org.yaml.snakeyaml.reader.UnicodeReader.read(UnicodeReader.java:125)
-	at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:183)
-	... 44 common frames omitted
-2024-11-12 14:34:08.746 [main] ERROR o.s.b.SpringApplication - [reportFailure,818] - Application run failed
-org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length = 1
-	at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:218)
-	at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:176)
-	at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:171)
-	at org.yaml.snakeyaml.reader.StreamReader.peek(StreamReader.java:126)
-	at org.yaml.snakeyaml.scanner.ScannerImpl.scanToNextToken(ScannerImpl.java:1218)
-	at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:329)
-	at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:251)
-	at org.yaml.snakeyaml.parser.ParserImpl$ParseImplicitDocumentStart.produce(ParserImpl.java:214)
-	at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:166)
-	at org.yaml.snakeyaml.parser.ParserImpl.checkEvent(ParserImpl.java:156)
-	at org.yaml.snakeyaml.composer.Composer.checkNode(Composer.java:93)
-	at org.yaml.snakeyaml.constructor.BaseConstructor.checkData(BaseConstructor.java:124)
-	at org.yaml.snakeyaml.Yaml$1.hasNext(Yaml.java:509)
-	at org.springframework.beans.factory.config.YamlProcessor.process(YamlProcessor.java:199)
-	at org.springframework.beans.factory.config.YamlProcessor.process(YamlProcessor.java:166)
-	at org.springframework.boot.env.OriginTrackedYamlLoader.load(OriginTrackedYamlLoader.java:88)
-	at org.springframework.boot.env.YamlPropertySourceLoader.load(YamlPropertySourceLoader.java:50)
-	at org.springframework.boot.context.config.StandardConfigDataLoader.load(StandardConfigDataLoader.java:54)
-	at org.springframework.boot.context.config.StandardConfigDataLoader.load(StandardConfigDataLoader.java:36)
-	at org.springframework.boot.context.config.ConfigDataLoaders.load(ConfigDataLoaders.java:108)
-	at org.springframework.boot.context.config.ConfigDataImporter.load(ConfigDataImporter.java:132)
-	at org.springframework.boot.context.config.ConfigDataImporter.resolveAndLoad(ConfigDataImporter.java:87)
-	at org.springframework.boot.context.config.ConfigDataEnvironmentContributors.withProcessedImports(ConfigDataEnvironmentContributors.java:116)
-	at org.springframework.boot.context.config.ConfigDataEnvironment.processInitial(ConfigDataEnvironment.java:240)
-	at org.springframework.boot.context.config.ConfigDataEnvironment.processAndApply(ConfigDataEnvironment.java:227)
-	at org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessor.postProcessEnvironment(ConfigDataEnvironmentPostProcessor.java:102)
-	at org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessor.postProcessEnvironment(ConfigDataEnvironmentPostProcessor.java:94)
-	at org.springframework.boot.env.EnvironmentPostProcessorApplicationListener.onApplicationEnvironmentPreparedEvent(EnvironmentPostProcessorApplicationListener.java:102)
-	at org.springframework.boot.env.EnvironmentPostProcessorApplicationListener.onApplicationEvent(EnvironmentPostProcessorApplicationListener.java:87)
-	at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:178)
-	at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:171)
-	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:145)
-	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:133)
-	at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:85)
-	at org.springframework.boot.SpringApplicationRunListeners.lambda$environmentPrepared$2(SpringApplicationRunListeners.java:66)
-	at org.springframework.boot.SpringApplicationRunListeners$$Lambda$37/1452442375.accept(Unknown Source)
-	at java.util.ArrayList.forEach(ArrayList.java:1249)
-	at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:120)
-	at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:114)
-	at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:65)
-	at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:344)
-	at org.springframework.boot.SpringApplication.run(SpringApplication.java:302)
-	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1300)
-	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1289)
-	at com.my.bigevent.BigEventApplication.main(BigEventApplication.java:12)
-Caused by: java.nio.charset.MalformedInputException: Input length = 1
-	at java.nio.charset.CoderResult.throwException(CoderResult.java:281)
-	at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:339)
-	at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
-	at java.io.InputStreamReader.read(InputStreamReader.java:184)
-	at org.yaml.snakeyaml.reader.UnicodeReader.read(UnicodeReader.java:125)
-	at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:183)
-	... 44 common frames omitted
-2024-11-12 14:34:32.513 [main] ERROR o.s.b.SpringApplication - [reportFailure,818] - Application run failed
-org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length = 1
-	at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:218)
-	at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:176)
-	at org.yaml.snakeyaml.reader.StreamReader.ensureEnoughData(StreamReader.java:171)
-	at org.yaml.snakeyaml.reader.StreamReader.peek(StreamReader.java:126)
-	at org.yaml.snakeyaml.scanner.ScannerImpl.scanToNextToken(ScannerImpl.java:1218)
-	at org.yaml.snakeyaml.scanner.ScannerImpl.fetchMoreTokens(ScannerImpl.java:329)
-	at org.yaml.snakeyaml.scanner.ScannerImpl.checkToken(ScannerImpl.java:251)
-	at org.yaml.snakeyaml.parser.ParserImpl$ParseImplicitDocumentStart.produce(ParserImpl.java:214)
-	at org.yaml.snakeyaml.parser.ParserImpl.peekEvent(ParserImpl.java:166)
-	at org.yaml.snakeyaml.parser.ParserImpl.checkEvent(ParserImpl.java:156)
-	at org.yaml.snakeyaml.composer.Composer.checkNode(Composer.java:93)
-	at org.yaml.snakeyaml.constructor.BaseConstructor.checkData(BaseConstructor.java:124)
-	at org.yaml.snakeyaml.Yaml$1.hasNext(Yaml.java:509)
-	at org.springframework.beans.factory.config.YamlProcessor.process(YamlProcessor.java:199)
-	at org.springframework.beans.factory.config.YamlProcessor.process(YamlProcessor.java:166)
-	at org.springframework.boot.env.OriginTrackedYamlLoader.load(OriginTrackedYamlLoader.java:88)
-	at org.springframework.boot.env.YamlPropertySourceLoader.load(YamlPropertySourceLoader.java:50)
-	at org.springframework.boot.context.config.StandardConfigDataLoader.load(StandardConfigDataLoader.java:54)
-	at org.springframework.boot.context.config.StandardConfigDataLoader.load(StandardConfigDataLoader.java:36)
-	at org.springframework.boot.context.config.ConfigDataLoaders.load(ConfigDataLoaders.java:108)
-	at org.springframework.boot.context.config.ConfigDataImporter.load(ConfigDataImporter.java:132)
-	at org.springframework.boot.context.config.ConfigDataImporter.resolveAndLoad(ConfigDataImporter.java:87)
-	at org.springframework.boot.context.config.ConfigDataEnvironmentContributors.withProcessedImports(ConfigDataEnvironmentContributors.java:116)
-	at org.springframework.boot.context.config.ConfigDataEnvironment.processInitial(ConfigDataEnvironment.java:240)
-	at org.springframework.boot.context.config.ConfigDataEnvironment.processAndApply(ConfigDataEnvironment.java:227)
-	at org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessor.postProcessEnvironment(ConfigDataEnvironmentPostProcessor.java:102)
-	at org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessor.postProcessEnvironment(ConfigDataEnvironmentPostProcessor.java:94)
-	at org.springframework.boot.env.EnvironmentPostProcessorApplicationListener.onApplicationEnvironmentPreparedEvent(EnvironmentPostProcessorApplicationListener.java:102)
-	at org.springframework.boot.env.EnvironmentPostProcessorApplicationListener.onApplicationEvent(EnvironmentPostProcessorApplicationListener.java:87)
-	at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:178)
-	at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:171)
-	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:145)
-	at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:133)
-	at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:85)
-	at org.springframework.boot.SpringApplicationRunListeners.lambda$environmentPrepared$2(SpringApplicationRunListeners.java:66)
-	at org.springframework.boot.SpringApplicationRunListeners$$Lambda$37/1667148529.accept(Unknown Source)
-	at java.util.ArrayList.forEach(ArrayList.java:1249)
-	at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:120)
-	at org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:114)
-	at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:65)
-	at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:344)
-	at org.springframework.boot.SpringApplication.run(SpringApplication.java:302)
-	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1300)
-	at org.springframework.boot.SpringApplication.run(SpringApplication.java:1289)
-	at com.my.bigevent.BigEventApplication.main(BigEventApplication.java:12)
-Caused by: java.nio.charset.MalformedInputException: Input length = 1
-	at java.nio.charset.CoderResult.throwException(CoderResult.java:281)
-	at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:339)
-	at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
-	at java.io.InputStreamReader.read(InputStreamReader.java:184)
-	at org.yaml.snakeyaml.reader.UnicodeReader.read(UnicodeReader.java:125)
-	at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:183)
-	... 44 common frames omitted
-2024-11-12 14:34:52.557 [background-preinit] INFO  o.h.v.i.util.Version - [<clinit>,21] - HV000001: Hibernate Validator 6.2.5.Final
-2024-11-12 14:34:52.560 [main] INFO  c.m.b.BigEventApplication - [logStarting,55] - Starting BigEventApplication using Java 1.8.0_45 on Yurk with PID 29304 (D:\WorkSpeace\manHourHousekeeper\fhKeeper\formulahousekeeper\ArticleOperation\target\classes started by 123 in D:\WorkSpeace\manHourHousekeeper\fhKeeper\formulahousekeeper\ArticleOperation)
-2024-11-12 14:34:52.561 [main] INFO  c.m.b.BigEventApplication - [logStartupProfileInfo,632] - No active profile set, falling back to 1 default profile: "default"
-2024-11-12 14:34:53.152 [main] ERROR o.a.c.c.AprLifecycleListener - [log,173] - An incompatible version [1.1.32] of the Apache Tomcat Native library is installed, while Tomcat requires version [1.2.14]
-2024-11-12 14:34:53.285 [main] INFO  o.a.c.h.Http11NioProtocol - [log,173] - Initializing ProtocolHandler ["http-nio-8091"]
-2024-11-12 14:34:53.286 [main] INFO  o.a.c.c.StandardService - [log,173] - Starting service [Tomcat]
-2024-11-12 14:34:53.286 [main] INFO  o.a.c.c.StandardEngine - [log,173] - Starting Servlet engine: [Apache Tomcat/9.0.83]
-2024-11-12 14:34:53.404 [main] INFO  o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring embedded WebApplicationContext
-2024-11-12 14:34:53.849 [main] INFO  o.a.c.h.Http11NioProtocol - [log,173] - Starting ProtocolHandler ["http-nio-8091"]
-2024-11-12 14:34:53.866 [main] INFO  c.m.b.BigEventApplication - [logStarted,61] - Started BigEventApplication in 1.554 seconds (JVM running for 2.339)
-2024-11-12 14:35:03.671 [http-nio-8091-exec-1] INFO  o.a.c.c.C.[.[.[/] - [log,173] - Initializing Spring DispatcherServlet 'dispatcherServlet'
+2024-11-14 19:33:31.163 [main] INFO  c.m.b.BigEventApplicationTests - [logStarting,55] - Starting BigEventApplicationTests using Java 1.8.0_181 on DESKTOP-0TSN311 with PID 48660 (started by seya in C:\gitproject\manHourHousekeeper\fhKeeper\formulahousekeeper\ArticleOperation)
+2024-11-14 19:33:31.173 [main] INFO  c.m.b.BigEventApplicationTests - [logStartupProfileInfo,632] - No active profile set, falling back to 1 default profile: "default"
+2024-11-14 19:33:31.184 [background-preinit] INFO  o.h.v.i.util.Version - [<clinit>,21] - HV000001: Hibernate Validator 6.2.5.Final
+2024-11-14 19:33:33.948 [main] INFO  c.m.b.BigEventApplicationTests - [logStarted,61] - Started BigEventApplicationTests in 3.171 seconds (JVM running for 4.433)

File diff ditekan karena terlalu besar
+ 1483 - 31022
fhKeeper/formulahousekeeper/management-crm/crm.log


+ 15 - 5
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/controller/BusinessOpportunityController.java

@@ -12,6 +12,7 @@ import com.management.platform.mapper.*;
 import com.management.platform.service.*;
 import com.management.platform.service.impl.ExcelExportServiceImpl;
 import com.management.platform.util.HttpRespMsg;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -24,6 +25,8 @@ import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -153,11 +156,11 @@ public class BusinessOpportunityController {
                     value = String.valueOf(aClass.getMethod("getCustomerName").invoke(data));
                 }
                 if(model.equals("expectedTransactionDate")){
-                    Date date = (Date) aClass.getMethod("getExpectedTransactionDate").invoke(data);
+                    LocalDate date = (LocalDate) aClass.getMethod("getExpectedTransactionDate").invoke(data);
                     // 如果日期不为空,格式化日期
                     if (date != null) {
-                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
-                        value = sdf.format(date);
+                        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd");
+                        value = date.format(formatter);
                     } else {
                         value = "";
                 }                }
@@ -268,7 +271,14 @@ public class BusinessOpportunityController {
     public Object claim(BusinessOpportunity bo, HttpServletRequest request) {
         User user = userMapper.selectById(request.getHeader("Token"));
         HttpRespMsg msg = new HttpRespMsg();
-        msg.setMsg("操作成功");
+        String[] strings = bo.getIds().split(",");
+        for (String id : strings) {
+            BusinessOpportunity opportunity = boMapper.selectById(id);
+            if (StringUtils.isEmpty(opportunity.getInchargerId())){
+                msg.setError("商机:"+opportunity.getName()+"未被认领不能转移");
+                return msg;
+            }
+        }
         bOservice.getAndTransfer(bo, user);
         return msg;
     }
@@ -425,7 +435,7 @@ public class BusinessOpportunityController {
 
         List<HashMap<String, Object>> mapList = new ArrayList<>();
         for (Stage stage : stageList) {
-            List<BusinessOpportunity> collect = list.stream().filter(l -> l.getStageId() != null && l.getStageId().equals(stage.getId())).collect(Collectors.toList());
+            List<BusinessOpportunity> collect = list.stream().filter(l -> l.getStageId() != null && l.getStageId().equals(stage.getId())&& l.getSeq()!=null).collect(Collectors.toList());
             collect=collect.stream().sorted(Comparator.comparing(BusinessOpportunity::getSeq)).collect(Collectors.toList());
             HashMap<String, Object> map = new HashMap<>();
             map.put("id", stage.getId());

+ 4 - 3
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/entity/BusinessOpportunity.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import java.math.BigDecimal;
 import com.baomidou.mybatisplus.annotation.TableField;
 import java.io.Serializable;
+import java.time.LocalDate;
 import java.util.Date;
 import java.util.List;
 
@@ -80,9 +81,9 @@ public class BusinessOpportunity extends Model<BusinessOpportunity> {
      * 预计成交日期
      */
     @TableField("expected_transaction_date")
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date expectedTransactionDate;
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate expectedTransactionDate;
 
     /**
      * 商机阶段

+ 28 - 14
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/BusinessOpportunityServiceImpl.java

@@ -40,8 +40,11 @@ import java.math.BigDecimal;
 import java.net.URLEncoder;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.time.ZoneId;
+import java.time.ZonedDateTime;
 import java.util.*;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 
 
@@ -613,32 +616,28 @@ public class BusinessOpportunityServiceImpl extends ServiceImpl<BusinessOpportun
                     }else if(modelName.equals("contactsId")){
                         if(!StringUtils.isEmpty(cell.getStringCellValue())){
                             Optional<Contacts> first = contacts.stream().filter(s -> s.getName().equals(cell.getStringCellValue())).findFirst();
-                            product.setContactsId(first.get().getId());
+                            product.setContactsId(first.map(Contacts::getId).orElse(null));
                         }
                     }else if(modelName.equals("customerId")){
                         if(!StringUtils.isEmpty(cell.getStringCellValue())){
                             Optional<Custom> first = customs.stream().filter(s -> s.getCustomName().equals(cell.getStringCellValue())).findFirst();
-                            product.setCustomerId(first.get().getId());
+                            product.setCustomerId(first.map(Custom::getId).orElse(null));
                         }
                     }else if(modelName.equals("expectedTransactionDate")){
                         if(cell != null && cell.getCellTypeEnum() != CellType.BLANK){
                             if(!org.apache.commons.lang3.StringUtils.isEmpty(cell.getStringCellValue())){
                                 try {
-                                    // 假设 cell 是一个代表 Excel 单元格的对象
-                                    String dateString = cell.getStringCellValue();
+                                    int count = Integer.parseInt(cell.getStringCellValue());
+                                    // Excel中的日期序列号的基准日期是1900年1月1日
+                                    LocalDate baseDate = LocalDate.of(1900, 1, 1);
+                                    LocalDate date = baseDate.plusDays(count - 2);
 
-                                    // 定义日期格式
-                                    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
-
-                                    // 解析字符串为 Date 类型
-                                    Date parsedDate = dateFormat.parse(dateString);
-
-                                    // 设置到对象中
-                                    product.setExpectedTransactionDate(parsedDate);
+                                    // 将 ZonedDateTime 转换为 Date
+                                    product.setExpectedTransactionDate(date);
 
                                 } catch (Exception e) {
-                                    System.out.println("日期时间格式不正确, 应该是yyyy/MM/dd");
-                                    msg.setError("日期时间格式不正确, 应该是yyyy/MM/dd");
+                                    System.out.println("日期时间格式不正确,应该是yyyy/MM/dd" );
+                                    msg.setError("日期时间格式不正确,应该是yyyy/MM/dd");
                                     return msg;
                                 }
                             }
@@ -655,6 +654,21 @@ public class BusinessOpportunityServiceImpl extends ServiceImpl<BusinessOpportun
                 importProductList.add(product);
             }
             if(importProductList.size()>0){
+                List<Integer> stageIds = importProductList.stream().map(BusinessOpportunity::getStageId).filter(Objects::nonNull).distinct().collect(Collectors.toList());
+                for (Integer stageId : stageIds) {
+                    List<BusinessOpportunity> list = bOMapper.selectList(new QueryWrapper<BusinessOpportunity>().eq("stage_id", stageId).eq("is_delete", 0).orderByDesc("seq").last(" limit 1"));
+                    AtomicInteger seq = new AtomicInteger(0); // 使用 AtomicInteger
+                    if (!list.isEmpty()){
+                        seq.set(list.get(0).getSeq());
+                    }
+                    importProductList.forEach(l->{
+                        if (l.getStageId().equals(stageId)){
+                            seq.incrementAndGet();
+                            l.setSeq(seq.get());
+                        }
+                    });
+                }
+
                 if(!saveOrUpdateBatch(importProductList)){
                     msg.setError("验证失败,请检验数据格式是否正确");
                     return msg;

+ 7 - 4
fhKeeper/formulahousekeeper/management-crm/src/main/java/com/management/platform/service/impl/ContactsServiceImpl.java

@@ -744,7 +744,8 @@ public class ContactsServiceImpl extends ServiceImpl<ContactsMapper, Contacts> i
                 Integer contactsId = businessOpportunity.getContactsId();
                 mgs.setData(contactsMapper.selectList(new QueryWrapper<Contacts>()
                         .eq("company_id",user.getCompanyId())
-                        .eq("id",contactsId)));
+                        .eq("id",contactsId)
+                        .eq("is_delete",0)));
             }
         }else if(salesId!=null){
             //要找销售订单对应的客户,然后再找客户对应的联系人
@@ -755,16 +756,18 @@ public class ContactsServiceImpl extends ServiceImpl<ContactsMapper, Contacts> i
                 Integer contactsId = salesOrder.getCustomId();
                 mgs.setData(contactsMapper.selectList(new QueryWrapper<Contacts>()
                         .eq("company_id",user.getCompanyId())
-                        .eq("custom_id",contactsId)));
+                        .eq("custom_id",contactsId)
+                        .eq("is_delete",0)));
             }
 
         }
         else if (customerId!=null){
             mgs.setData(contactsMapper.selectList(new QueryWrapper<Contacts>()
                     .eq("company_id",user.getCompanyId())
-                    .eq("custom_id",customerId)));
+                    .eq("custom_id",customerId)
+                    .eq("is_delete",0)));
         }else
-            mgs.setData(contactsMapper.selectList(new QueryWrapper<Contacts>().eq("company_id",user.getCompanyId())));
+            mgs.setData(contactsMapper.selectList(new QueryWrapper<Contacts>().eq("company_id",user.getCompanyId()).eq("is_delete",0)));
         return mgs;
     }
 

+ 10 - 14
fhKeeper/formulahousekeeper/management-crm/src/main/resources/mapper/BusinessOpportunityMapper.xml

@@ -39,8 +39,7 @@
         (select custom_name from custom where id = customer_id) customerName,
         (select `name` from contacts where id = contacts_id) contactsName,
         (select `name` from `user` where id = incharger_id) inchargerName,
-        (select `name` from `user` where id = creator_id) creatorName,
-        (SELECT sum(total) from business_product WHERE business_id = id) total
+        (select `name` from `user` where id = creator_id) creatorName
         from business_opportunity
         where company_id = #{companyId}
         and is_delete = #{isDelete}
@@ -63,7 +62,7 @@
             and stage_id = #{stageId}
         </if>
         <if test="productId != null ">
-            and id in (select business_id from business_product where product_id = #{productId})
+            and id in (select business_id from business_item_product where product_id = #{productId})
         </if>
         ORDER BY id DESC
         <if test="pageIndex!=null and pageFrom !=null">
@@ -96,7 +95,7 @@
             and stage_id = #{stageId}
         </if>
         <if test="productId != null ">
-            and id in (select business_id from business_product where product_id = #{productId})
+            and id in (select business_id from business_item_product where product_id = #{productId})
         </if>
     </select>
     <select id="selectAllList1" resultType="com.management.platform.entity.BusinessOpportunity">
@@ -106,8 +105,7 @@
         (select custom_name from custom where id = customer_id) customerName,
         (select `name` from contacts where id = contacts_id) contactsName,
         (select `name` from `user` where id = incharger_id) inchargerName,
-        (select `name` from `user` where id = creator_id) creatorName,
-        (SELECT sum(total) from business_product WHERE business_id = id)
+        (select `name` from `user` where id = creator_id) creatorName
         from business_opportunity
         where company_id = #{bo.companyId}
         and is_delete = #{bo.isDelete}
@@ -133,7 +131,7 @@
             and stage_id = #{bo.stageId}
         </if>
         <if test="bo.productId != null ">
-            and id in (select business_id from business_product where product_id = #{bo.productId})
+            and id in (select business_id from business_item_product where product_id = #{bo.productId})
         </if>
         ORDER BY id DESC
         <if test="bo.pageIndex!=null and bo.pageFrom !=null">
@@ -168,7 +166,7 @@
             and stage_id = #{bo.stageId}
         </if>
         <if test="bo.productId != null ">
-            and id in (select business_id from business_product where product_id = #{bo.productId})
+            and id in (select business_id from business_item_product where product_id = #{bo.productId})
         </if>
     </select>
     <select id="selectAllList2" resultType="com.management.platform.entity.BusinessOpportunity">
@@ -178,8 +176,7 @@
         (select custom_name from custom where id = customer_id) customerName,
         (select `name` from contacts where id = contacts_id) contactsName,
         (select `name` from `user` where id = incharger_id) inchargerName,
-        (select `name` from `user` where id = creator_id) creatorName,
-        (SELECT sum(total) from business_product WHERE business_id = id)
+        (select `name` from `user` where id = creator_id) creatorName
         from business_opportunity
         where company_id = #{bo.companyId}
         and is_delete = #{bo.isDelete}
@@ -203,7 +200,7 @@
             and stage_id = #{bo.stageId}
         </if>
         <if test="bo.productId != null ">
-            and id in (select business_id from business_product where product_id =#{bo.productId})
+            and id in (select business_id from business_item_product where product_id =#{bo.productId})
         </if>
         ORDER BY id DESC
         <if test="bo.pageIndex!=null and bo.pageFrom !=null">
@@ -236,7 +233,7 @@
             and stage_id = #{bo.stageId}
         </if>
         <if test="bo.productId != null ">
-            and id in (select business_id from business_product where product_id = #{bo.productId})
+            and id in (select business_id from business_item_product where product_id = #{bo.productId})
         </if>
     </select>
     <select id="selectByIdToInfo" resultType="com.management.platform.entity.BusinessOpportunity">
@@ -245,8 +242,7 @@
                (select custom_name from custom where id = customer_id) customerName,
                (select `name` from contacts where id = contacts_id)    contactsName,
                (select `name` from `user` where id = incharger_id)      inchargerName,
-               (select `name` from `user` where id = creator_id)       creatorName,
-               (SELECT sum(total) from business_product WHERE business_id = id)
+               (select `name` from `user` where id = creator_id)       creatorName
         from business_opportunity
         where id = #{id}
     </select>

+ 0 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/AuthRedirectController.java

@@ -343,7 +343,6 @@ public class AuthRedirectController {
         ModelAndView modelAndView = new ModelAndView(
                 new RedirectView(redirecUrl), reqParam);
         reqParam.put("isPrivateCorpWX", 1);
-        System.out.println("跳转=="+redirecUrl);
         if (reqParam.containsKey("errorMsg")) {
             System.out.println(reqParam.get("errorMsg"));
         }

+ 35 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ContractBonusDetailController.java

@@ -0,0 +1,35 @@
+package com.management.platform.controller;
+
+import com.management.platform.service.ContractBonusDetailService;
+import com.management.platform.util.HttpRespMsg;
+import com.management.platform.util.MessageUtils;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+
+@RestController
+@RequestMapping("/contractBonusDetail")
+public class ContractBonusDetailController {
+    @Resource
+    private ContractBonusDetailService contractBonusDetailService;
+
+    @PostMapping("/transTemplateData")
+    public HttpRespMsg transTemplateData(Integer startDate, Integer endDate,
+           String bonusType, @RequestParam(value = "file") MultipartFile file) {
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        try {
+            contractBonusDetailService.transTemplateData(startDate,endDate,bonusType,file);
+        } catch (Exception e) {
+            e.printStackTrace();
+            httpRespMsg.setError(MessageUtils.message("other.error"));
+        }
+        return httpRespMsg;
+    }
+
+
+
+}

+ 96 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/ContractBonusDetail.java

@@ -0,0 +1,96 @@
+package com.management.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class ContractBonusDetail extends Model<ContractBonusDetail> {
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 主键id
+     */
+    @TableId("id")
+    private Long id;
+
+    /**
+     * 公司表外键
+     */
+    @TableField("company_id")
+    private String company_id;
+
+    /**
+     * 员工id
+     */
+    @TableField("user_id")
+    private String userId;
+
+    /**
+     * 所属合同主体[user表plate1]
+     */
+    @TableField("contract")
+    private String contract;
+
+    /**
+     * 项目id
+     */
+    @TableField("project_id")
+    private int projectId;
+
+    /**
+     * 奖金类型[中文]
+     */
+    @TableField("bonus_type")
+    private String bonusType;
+
+    /**
+     * 奖金金额
+     */
+    @TableField("bonus_value")
+    private BigDecimal bonusValue;
+
+    /**
+     * 总奖金金额
+     */
+    @TableField("total_bonus_value")
+    private BigDecimal totalBonusValue;
+
+    /**
+     * 年月 20240111
+     */
+    @TableField("ym")
+    private int ym;
+
+    /**
+     * 年 2024
+     */
+    @TableField("year")
+    private int year;
+
+    /**
+     * 月 08
+     */
+    @TableField("month")
+    private int month;
+
+    /**
+     * 创建人id
+     */
+    @TableField("create_by")
+    private String createBy;
+
+    /**
+     * 创建时间
+     */
+    @TableField("create_time")
+    private Date createTime;
+}

+ 10 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/bo/TransBonusData.java

@@ -0,0 +1,10 @@
+package com.management.platform.entity.bo;
+
+import lombok.Data;
+
+@Data
+public class TransBonusData {
+    private int startDate;
+    private int endDate;
+    private String bonusType;
+}

+ 19 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/vo/ImportBonusTemplateVO.java

@@ -0,0 +1,19 @@
+package com.management.platform.entity.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class ImportBonusTemplateVO {
+    /**员工工号*/
+    @ExcelProperty(value = "员工工号")
+    private String jobNumber;
+    /**员工姓名*/
+    @ExcelProperty(value = "员工姓名")
+    private String userName;
+    /**奖金金额*/
+    @ExcelProperty(value = "奖金金额")
+    private BigDecimal bonusValue;
+}

+ 7 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ContractBonusDetailMapper.java

@@ -0,0 +1,7 @@
+package com.management.platform.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.management.platform.entity.ContractBonusDetail;
+
+public interface ContractBonusDetailMapper extends BaseMapper<ContractBonusDetail> {
+}

+ 10 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ContractBonusDetailService.java

@@ -0,0 +1,10 @@
+package com.management.platform.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.management.platform.entity.ContractBonusDetail;
+import com.management.platform.util.HttpRespMsg;
+import org.springframework.web.multipart.MultipartFile;
+
+public interface ContractBonusDetailService extends IService<ContractBonusDetail> {
+    HttpRespMsg transTemplateData(Integer startDate, Integer endDate, String bonusType, MultipartFile file);
+}

+ 57 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ContractBonusDetailServiceImpl.java

@@ -0,0 +1,57 @@
+package com.management.platform.service.impl;
+
+import com.alibaba.excel.support.ExcelTypeEnum;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.management.platform.entity.ContractBonusDetail;
+import com.management.platform.entity.vo.ImportBonusTemplateVO;
+import com.management.platform.mapper.ContractBonusDetailMapper;
+import com.management.platform.mapper.ReportMapper;
+import com.management.platform.service.ContractBonusDetailService;
+import com.management.platform.util.HttpRespMsg;
+import com.management.platform.util.MessageUtils;
+import com.management.platform.util.converter.ExcelTemplateTransUtil;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.List;
+
+@Service
+public class ContractBonusDetailServiceImpl extends ServiceImpl<ContractBonusDetailMapper, ContractBonusDetail> implements ContractBonusDetailService {
+
+    @Resource
+    private ContractBonusDetailMapper contractBonusDetailMapper;
+
+    @Resource
+    private ReportMapper reportMapper;
+
+    @Override
+    public HttpRespMsg transTemplateData(Integer startDate, Integer endDate, String bonusType, MultipartFile file) {
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        //解析文件
+        InputStream inputStream = null;
+        try {
+            inputStream = file.getInputStream();
+            List<ImportBonusTemplateVO> importDataList = ExcelTemplateTransUtil
+                    .readExcelConverterObjectList(inputStream, ExcelTypeEnum.XLSX, ImportBonusTemplateVO.class);
+//        System.out.println("=========in==========");
+//        importDataList.forEach(System.out::println);
+
+            inputStream.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+            httpRespMsg.setError(MessageUtils.message(""));
+        }finally {
+            if(null != inputStream){
+                try {
+                    inputStream.close();
+                } catch (IOException ex) {
+                    ex.printStackTrace();
+                }
+            }
+        }
+        return httpRespMsg;
+    }
+}

+ 3 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/FinanceExcludeProjectServiceImpl.java

@@ -62,7 +62,9 @@ public class FinanceExcludeProjectServiceImpl extends ServiceImpl<FinanceExclude
                 .eq(Project::getCompanyId, user.getCompanyId()));
 
         List<FinanceExcludeProject> resList = financeExcludeProjectMapper
-                .selectList(new LambdaQueryWrapper<FinanceExcludeProject>().eq(FinanceExcludeProject::getUseYM,useYM).eq(FinanceExcludeProject::getCompanyId,user.getCompanyId()));
+                .selectList(new LambdaQueryWrapper<FinanceExcludeProject>()
+                        .eq(FinanceExcludeProject::getProjectId,user.getCompanyId())
+                        .eq(FinanceExcludeProject::getUseYM,useYM));
         if(projectCount == resList.size()){
             map.put("isAll",1);
         }else{

+ 29 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/PrivateDeployUrlGenerator.java

@@ -0,0 +1,29 @@
+package com.management.platform.util;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+
+/**
+ * 私有化部署的url生成器
+ */
+public class PrivateDeployUrlGenerator {
+    //企业微信私有化部署的url生成器;如果访问的网址带端口号,这里也带上传参
+    public static String generateCorpWXUrl(String corpId, String agentId, String redirectUrl) {
+        try {
+            if (redirectUrl.endsWith("/")) {
+                redirectUrl = redirectUrl.substring(0, redirectUrl.length()-1);
+            }
+            String redirectUrlEncoded = URLEncoder.encode(redirectUrl+"/api/corpInsideWXAuth", "UTF-8");
+            String url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid="+corpId
+                    +"&redirect_uri="+redirectUrlEncoded+"&response_type=code&scope=snsapi_base&state=0&agentid="+agentId+"#wechat_redirect";
+            return url;
+        } catch (UnsupportedEncodingException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public static void main(String[] args) {
+        //测试生成企业微信私有化部署的url,替换参数,生成的结果提供给客户,让客户配置到企业微信自建应用的【应用主页】上
+        System.out.println(generateCorpWXUrl("ww4e237fd6abb635af", "1000002", "http://worktime.ttkuaiban.com"));
+    }
+}

+ 37 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/converter/ExcelTemplateTransUtil.java

@@ -0,0 +1,37 @@
+package com.management.platform.util.converter;
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.support.ExcelTypeEnum;
+import org.springframework.lang.Nullable;
+
+import java.io.InputStream;
+import java.util.List;
+
+public class ExcelTemplateTransUtil {
+    public static <T> List<T> readExcelConverterObjectList(InputStream inputStream, ExcelTypeEnum excelTypeEnum, Class<T> classT){
+        return readExcelWithClassList(inputStream, excelTypeEnum, 1, classT);
+    }
+
+    /**
+     * 读取excel数据到数据对象
+     *
+     * @param inputStream 文件流
+     * @param excelTypeEnum 文件类型Excel的格式(XLS或XLSX)
+     * @param headLineNum 开始读取数据的行
+     * @param classT 转为对象的CLASS
+     * @param <T>
+     * @return
+     */
+    public static <T> List<T> readExcelWithClassList(InputStream inputStream, ExcelTypeEnum excelTypeEnum,
+                                                         @Nullable Integer headLineNum, Class<T> classT) {
+        if (headLineNum == null) {
+            headLineNum = 1;
+        }
+        return EasyExcel.read(inputStream).excelType(excelTypeEnum)
+                .registerConverter(new StringExcelConverter())
+                .head(classT)
+                .sheet()
+                .headRowNumber(headLineNum)
+                .doReadSync();
+    }
+}

+ 29 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/converter/StringExcelConverter.java

@@ -0,0 +1,29 @@
+package com.management.platform.util.converter;
+
+import com.alibaba.excel.converters.Converter;
+import com.alibaba.excel.enums.CellDataTypeEnum;
+import com.alibaba.excel.metadata.CellData;
+import com.alibaba.excel.metadata.GlobalConfiguration;
+import com.alibaba.excel.metadata.property.ExcelContentProperty;
+
+public class StringExcelConverter implements Converter<String> {
+    @Override
+    public Class supportJavaTypeKey() {
+        return String.class;
+    }
+
+    @Override
+    public CellDataTypeEnum supportExcelTypeKey() {
+        return CellDataTypeEnum.STRING;
+    }
+
+    @Override
+    public String convertToJavaData(CellData cellData, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        return cellData.getStringValue();
+    }
+
+    @Override
+    public CellData convertToExcelData(String value, ExcelContentProperty excelContentProperty, GlobalConfiguration globalConfiguration) throws Exception {
+        return new CellData(value);
+    }
+}

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/application.yml

@@ -15,7 +15,7 @@ spring:
       location: C:/upload/
   datasource:
     driver-class-name: com.mysql.cj.jdbc.Driver
-    url: jdbc:mysql://47.101.180.183:17089/man_hour_manager?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&useSSL=false
+    url: jdbc:mysql://47.101.180.183:17089/man_dev?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&useSSL=false
     username: root
     password: P011430@Huoshi*
 

+ 6 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ContractBonusDetailMapper.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.management.platform.mapper.ContractBonusDetailMapper">
+
+</mapper>

+ 10 - 10
fhKeeper/formulahousekeeper/timesheet/config/index.js

@@ -4,17 +4,17 @@ var path = require('path')
 // var ip = '47.101.180.183'
 // var ip = '47.100.37.243'
 // var ip = '192.168.10.2'
-var ip = '192.168.2.3' 
+// var ip = '192.168.2.3' 
 
-// var os = require('os'), ip = '', ifaces = os.networkInterfaces() // 获取本机ip
-// for (var i in ifaces) {
-//     for (var j in ifaces[i]) {
-//         var val = ifaces[i][j]
-//         if (val.family === 'IPv4' && val.address !== '127.0.0.1') {
-//             ip = val.address
-//         }
-//     }
-// }
+var os = require('os'), ip = '', ifaces = os.networkInterfaces() // 获取本机ip
+for (var i in ifaces) {
+    for (var j in ifaces[i]) {
+        var val = ifaces[i][j]
+        if (val.family === 'IPv4' && val.address !== '127.0.0.1') {
+            ip = val.address
+        }
+    }
+}
 // 1196735749
 module.exports = {
   build: {

+ 0 - 45
fhKeeper/formulahousekeeper/timesheet/src/common/js/appidConfiguration.js

@@ -1,45 +0,0 @@
-/**
- * 各个公司企业微信的配置, 根据域名来解析
- * @path 完整域名
- * @appId 企业微信的appId,针对私有化部署的情况appId就是corpId
- */
-const config = {
-  "worktime.ttkuaiban.com": {
-    // 工时管家
-    path: "https://worktime.ttkuaiban.com",
-    appId: "ww4e237fd6abb635af",
-    agentId: "",
-  },
-  "blue.blovelight.net": {
-    // 蓝光研发
-    path: "http://blue.blovelight.net:2021",
-    appId: "wwb12ec40df8c35139",
-    agentId: "1000075",
-  },
-  "privatewx.ttkuaiban.com": {
-    // 火石闪信-企业微信私有化
-    path: "http://privatewx.ttkuaiban.com",
-    appId: "wwf11426cf618e1703",
-    agentId: "1000069",
-  },
-};
-
-const fixedPath = `/api/corpWXAuth`; // 授权回调页面 (需要拼接)
-const fixedPathAgentId = `/api/corpInsideWXAuth`
-
-export function obtainCorrespondingConfigurationInformation() {
-  const hostname = window.location.hostname; // 获取域名和端口,(不包括http 和 https)
-  const row = config[hostname];
-  const agentId = row.agentId;
-  const appId = row.appId;
-  const tokenUrl = `${row.path}${fixedPath}`;
-  const tokenUrlAgentId = `${row.path}${fixedPathAgentId}`;
-  const authorizationCallback = agentId
-    ? `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appId}&redirect_uri=${encodeURI(tokenUrlAgentId)}&response_type=code&scope=snsapi_base&state=0&agentid=${agentId}#wechat_redirect`
-    : `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appId}&redirect_uri=${encodeURI(tokenUrl)}&response_type=code&scope=snsapi_base&state=1#wechat_redirect`;
-  return {
-    appId,
-    tokenUrl,
-    authorizationCallback,
-  };
-}

+ 3 - 7
fhKeeper/formulahousekeeper/timesheet/src/views/Login.vue

@@ -68,7 +68,6 @@
     import * as dd from 'dingtalk-jsapi';
     import "../permissions.js"
     import WxLogin from "../assets/js/wwLogin.js"
-    import { obtainCorrespondingConfigurationInformation } from '../common/js/appidConfiguration.js'
     export default {
         inject:['reloads'],
         data() {
@@ -361,12 +360,9 @@
             },
             tryAutoLogin() {
                 let href = window.location.href;
-                // var appId = "ww4e237fd6abb635af";//企业微信第三方的SUIT ID
-                // var url = "https://worktime.ttkuaiban.com/api/corpWXAuth";//授权回调页面
-                // var weixinUrl="https://open.weixin.qq.com/connect/oauth2/authorize?appid="+appId+"&redirect_uri="+encodeURI(url)+"&response_type=code&scope=snsapi_base&state=1#wechat_redirect";
-
-                const config = obtainCorrespondingConfigurationInformation()
-                var weixinUrl = config.authorizationCallback;
+                var appId = "ww4e237fd6abb635af";//企业微信第三方的SUIT ID
+                var url = "https://worktime.ttkuaiban.com/api/corpWXAuth";//授权回调页面
+                var weixinUrl="https://open.weixin.qq.com/connect/oauth2/authorize?appid="+appId+"&redirect_uri="+encodeURI(url)+"&response_type=code&scope=snsapi_base&state=1#wechat_redirect";
                 window.location.href = weixinUrl;
             },
             tryDingDingUrlRedirect() {

+ 0 - 45
fhKeeper/formulahousekeeper/timesheet_h5/src/utils/appidConfiguration.js

@@ -1,45 +0,0 @@
-/**
- * 各个公司企业微信的配置, 根据域名来解析
- * @path 完整域名
- * @appId 企业微信的appId,针对私有化部署的情况appId就是corpId
- */
-const config = {
-  "mobworktime.ttkuaiban.com": {
-    // 工时管家 
-    path: "http://mobworktime.ttkuaiban.com",
-    appId: "ww4e237fd6abb635af",
-    agentId: "",
-  },
-  "moblue.blovelight.net": {
-    // 蓝光研发 
-    path: "http://moblue.blovelight.net:2021",
-    appId: "wwb12ec40df8c35139",
-    agentId: "1000075",
-  },
-  "mobprivatewx.ttkuaiban.com": {
-    // 火石闪信-企业微信私有化 
-    path: "http://mobprivatewx.ttkuaiban.com",
-    appId: "wwf11426cf618e1703",
-    agentId: "1000069",
-  },
-};
-
-const fixedPath = `/api/corpWXAuth`; // 授权回调页面 (需要拼接)
-const fixedPathAgentId = `/api/corpInsideWXAuth`
-
-export function obtainCorrespondingConfigurationInformation() {
-  const hostname = window.location.hostname; // 获取域名和端口,(不包括http 和 https)
-  const row = config[hostname];
-  const agentId = row.agentId;
-  const appId = row.appId;
-  const tokenUrl = `${row.path}${fixedPath}`;
-  const tokenUrlAgentId = `${row.path}${fixedPathAgentId}`;
-  const authorizationCallback = agentId
-    ? `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appId}&redirect_uri=${encodeURI(tokenUrlAgentId)}&response_type=code&scope=snsapi_base&state=0&agentid=${agentId}#wechat_redirect`
-    : `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appId}&redirect_uri=${encodeURI(tokenUrl)}&response_type=code&scope=snsapi_base&state=1#wechat_redirect`;
-  return {
-    appId,
-    tokenUrl,
-    authorizationCallback,
-  };
-}

+ 6 - 8
fhKeeper/formulahousekeeper/timesheet_h5/src/views/login/index.vue

@@ -17,8 +17,7 @@
 
 <script>
     import { constants } from "crypto";
-    import * as dd from 'dingtalk-jsapi'; 
-    import { obtainCorrespondingConfigurationInformation } from '../../utils/appidConfiguration';
+    import * as dd from 'dingtalk-jsapi';
     export default {
         data() {
             return {
@@ -166,18 +165,17 @@
                 }
             },
             tryAutoLogin() {
-                const rowConfig = obtainCorrespondingConfigurationInformation()
                 var appId = "wx749c84daac654e1e";//工时管家公众号
                 var url = "http://mobworktime.ttkuaiban.com/api/wechat/loginByWXCode";//工时管家公众号授权回调页面
-                // if (this.isCorpWX) {
-                    // appId = "ww4e237fd6abb635af"; //企业微信第三方的SUIT ID
-                    // url = "http://worktime.ttkuaiban.com/api/corpWXAuth";//授权回调页面
-                // } 
+                if (this.isCorpWX) {
+                    appId = "ww4e237fd6abb635af"; //企业微信第三方的SUIT ID
+                    url = "http://worktime.ttkuaiban.com/api/corpWXAuth";//授权回调页面
+                } 
 
                 // var appId = "ww4e237fd6abb635af";//企业微信第三方的SUIT ID
                 // var url = "http://worktime.ttkuaiban.com/api/corpWXAuth";//授权回调页面
                 
-                var weixinUrl = this.isCorpWX ? rowConfig.authorizationCallback : "https://open.weixin.qq.com/connect/oauth2/authorize?appid="+appId+"&redirect_uri="+encodeURI(url)+"&response_type=code&scope=snsapi_base&state=0#wechat_redirect";
+                var weixinUrl = "https://open.weixin.qq.com/connect/oauth2/authorize?appid="+appId+"&redirect_uri="+encodeURI(url)+"&response_type=code&scope=snsapi_base&state=0#wechat_redirect";
                 window.location.href = weixinUrl;
             },
             tryDingDingUrlRedirect() {

+ 10 - 10
fhKeeper/formulahousekeeper/timesheet_h5/vue.config.js

@@ -5,19 +5,19 @@ const themePath = path.resolve(__dirname,'src/assets/style/theme.less');
 const Timestamp = new Date().getTime();
 
 // var ip = '47.101.180.183'
-var ip = '47.100.37.243'
+// var ip = '47.100.37.243'
 // var ip = '192.168.2.8'
 // var ip = '127.0.0.1'
 
-// var os = require('os'), ip = '', ifaces = os.networkInterfaces() // 获取本机ip
-// for (var i in ifaces) {
-//     for (var j in ifaces[i]) {
-//         var val = ifaces[i][j]
-//         if (val.family === 'IPv4' && val.address !== '127.0.0.1') {
-//             ip = val.address
-//         }
-//     }
-// }
+var os = require('os'), ip = '', ifaces = os.networkInterfaces() // 获取本机ip
+for (var i in ifaces) {
+    for (var j in ifaces[i]) {
+        var val = ifaces[i][j]
+        if (val.family === 'IPv4' && val.address !== '127.0.0.1') {
+            ip = val.address
+        }
+    }
+}
 
 module.exports = {
     runtimeCompiler: true,