소스 검색

Merge branch '1.0'

# Conflicts:
#	src/main/java/com/galaxis/manatee/task/ChuanyunProjectScheduledTask.java
verguenza 4 년 전
부모
커밋
ea31c524e1
100개의 변경된 파일3790개의 추가작업 그리고 607개의 파일을 삭제
  1. 17 0
      pom.xml
  2. 4 0
      src/main/java/com/galaxis/manatee/configuration/ManateeSecurity.java
  3. 32 0
      src/main/java/com/galaxis/manatee/constant/DingTalkConstant.java
  4. 30 0
      src/main/java/com/galaxis/manatee/controller/EquipmentController.java
  5. 95 0
      src/main/java/com/galaxis/manatee/controller/ExcelController.java
  6. 41 7
      src/main/java/com/galaxis/manatee/controller/GetController.java
  7. 9 0
      src/main/java/com/galaxis/manatee/controller/JwtAuthenticationFilter.java
  8. 9 0
      src/main/java/com/galaxis/manatee/controller/JwtAuthorizationFilter.java
  9. 33 0
      src/main/java/com/galaxis/manatee/controller/TestController.java
  10. 70 0
      src/main/java/com/galaxis/manatee/controller/U9WorkMessageController.java
  11. 7 7
      src/main/java/com/galaxis/manatee/controller/UserController.java
  12. 50 0
      src/main/java/com/galaxis/manatee/controller/WorkHourController.java
  13. 10 0
      src/main/java/com/galaxis/manatee/dao/ChuanyunAttachmentDao.java
  14. 12 0
      src/main/java/com/galaxis/manatee/dao/ChuanyunBusinessEntertainmentDao.java
  15. 1 0
      src/main/java/com/galaxis/manatee/dao/ChuanyunClientDao.java
  16. 2 0
      src/main/java/com/galaxis/manatee/dao/ChuanyunCompanyDao.java
  17. 1 1
      src/main/java/com/galaxis/manatee/dao/ChuanyunDayWorkAbcDao.java
  18. 16 0
      src/main/java/com/galaxis/manatee/dao/ChuanyunEquipmentInformDao.java
  19. 4 0
      src/main/java/com/galaxis/manatee/dao/ChuanyunGroupProjectDao.java
  20. 7 0
      src/main/java/com/galaxis/manatee/dao/ChuanyunMaterialDao.java
  21. 26 18
      src/main/java/com/galaxis/manatee/dao/ChuanyunMemberCostDao.java
  22. 10 0
      src/main/java/com/galaxis/manatee/dao/ChuanyunOperationInformationDao.java
  23. 11 0
      src/main/java/com/galaxis/manatee/dao/ChuanyunOutDepartmentDao.java
  24. 11 0
      src/main/java/com/galaxis/manatee/dao/ChuanyunProjectAttachmentDao.java
  25. 31 0
      src/main/java/com/galaxis/manatee/dao/ChuanyunProjectChangeDao.java
  26. 37 13
      src/main/java/com/galaxis/manatee/dao/ChuanyunProjectCostDao.java
  27. 1 1
      src/main/java/com/galaxis/manatee/dao/ChuanyunReimbursementAmountDao.java
  28. 14 2
      src/main/java/com/galaxis/manatee/dao/ChuanyunSelfCostDao.java
  29. 59 2
      src/main/java/com/galaxis/manatee/dao/ChuanyunSelfWorkHourDao.java
  30. 1 0
      src/main/java/com/galaxis/manatee/dao/ChuanyunSupplierDao.java
  31. 7 0
      src/main/java/com/galaxis/manatee/dao/ChuanyunUserDao.java
  32. 12 0
      src/main/java/com/galaxis/manatee/dao/ChuanyunUserDepartmentNameDao.java
  33. 116 12
      src/main/java/com/galaxis/manatee/dao/ChuanyunWeekMemberHourDao.java
  34. 82 1
      src/main/java/com/galaxis/manatee/dao/ChuanyunWorkHourDao.java
  35. 5 5
      src/main/java/com/galaxis/manatee/entity/User.java
  36. 35 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunAttachmentDO.java
  37. 68 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunAttachmentDetailDO.java
  38. 13 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunBudgetAmountDO.java
  39. 106 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunBusinessEntertainmentDO.java
  40. 11 4
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunDayWorkAbcDO.java
  41. 28 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunDevelopProjectDO.java
  42. 52 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunEquipmentDO.java
  43. 32 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunEquipmentInformDO.java
  44. 10 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunLogDO.java
  45. 27 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunManagerProjectDO.java
  46. 2 2
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunMaterialDO.java
  47. 3 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunMemberHourDO.java
  48. 52 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunOperationInformationDO.java
  49. 5 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunOutDepartmentDO.java
  50. 38 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunProductDO.java
  51. 36 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunProductLibraryDO.java
  52. 30 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunProductLibrarySpecificationsDO.java
  53. 54 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunProjectAttachmentDO.java
  54. 260 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunProjectChangeDO.java
  55. 0 2
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunProjectCostDO.java
  56. 6 1
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunProjectTotalCostDO.java
  57. 1 1
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunProjectTypeDO.java
  58. 25 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunPurContractDO.java
  59. 16 5
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunReimbursementDO.java
  60. 0 3
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunReimbursementDetailDO.java
  61. 28 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunSaleProjectDO.java
  62. 29 3
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunSelfWorkHourDO.java
  63. 42 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunU9DepartmentDO.java
  64. 9 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunUserCompanyDO.java
  65. 22 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunUserDepartmentNameDO.java
  66. 17 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunWeekMemberHourDO.java
  67. 2 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunWorkHourDO.java
  68. 30 14
      src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunDayWorkAbcDTO.java
  69. 16 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunDeviceConfigureDTO.java
  70. 14 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunDeviceConfigurePrimaryKey.java
  71. 15 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunDeviceDTO.java
  72. 2 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunLaborCostPrimaryKey.java
  73. 22 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunOperationInformationDTO.java
  74. 30 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunPurContractDTO.java
  75. 19 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunPurContractDetailDTO.java
  76. 14 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunPurContractDetailPrimaryKey.java
  77. 23 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunPurContractOfferDTO.java
  78. 15 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunPurContractOfferPrimaryKey.java
  79. 28 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunSalesCollectionDetailDTO.java
  80. 14 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunSalesCollectionDetailPrimaryKey.java
  81. 57 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunSalesContractDTO.java
  82. 26 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunSalesContractOfferDTO.java
  83. 15 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunSalesContractOfferPrimaryKey.java
  84. 34 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ExcelColumn.java
  85. 40 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/dto/MaterialDTO.java
  86. 18 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/dto/MaterialPrimaryKey.java
  87. 23 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/dto/U9Message.java
  88. 20 0
      src/main/java/com/galaxis/manatee/entity/chuanyun/dto/U9ResponseMessageDTO.java
  89. 83 4
      src/main/java/com/galaxis/manatee/manager/ClawFeign.java
  90. 20 2
      src/main/java/com/galaxis/manatee/service/ChuanyunService.java
  91. 141 16
      src/main/java/com/galaxis/manatee/service/DingTalkScheduledTask.java
  92. 202 0
      src/main/java/com/galaxis/manatee/service/LogCheckService.java
  93. 111 0
      src/main/java/com/galaxis/manatee/service/LogStandardService.java
  94. 123 0
      src/main/java/com/galaxis/manatee/service/ProjectMemberService.java
  95. 19 0
      src/main/java/com/galaxis/manatee/service/U9WorkMessageService.java
  96. 229 45
      src/main/java/com/galaxis/manatee/service/impl/ChuanyunServiceImpl.java
  97. 33 0
      src/main/java/com/galaxis/manatee/service/impl/U9WorkMessageServiceImpl.java
  98. 418 377
      src/main/java/com/galaxis/manatee/task/ChuanyunBasicDataScheduledTask.java
  99. 4 59
      src/main/java/com/galaxis/manatee/task/ChuanyunFinancialScheduledTask.java
  100. 0 0
      src/main/java/com/galaxis/manatee/task/ChuanyunHumanResourceScheduledTask.java

+ 17 - 0
pom.xml

@@ -40,6 +40,17 @@
         </dependency>
 
         <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi</artifactId>
+            <version>3.13</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.poi</groupId>
+            <artifactId>poi-ooxml</artifactId>
+            <version>3.13</version>
+        </dependency>
+
+        <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
             <optional>true</optional>
@@ -65,6 +76,12 @@
         </dependency>
 
         <dependency>
+            <groupId>com.alibaba</groupId>
+            <artifactId>fastjson</artifactId>
+            <version>1.2.37</version>
+        </dependency>
+
+        <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-test</artifactId>
             <scope>test</scope>

+ 4 - 0
src/main/java/com/galaxis/manatee/configuration/ManateeSecurity.java

@@ -39,7 +39,11 @@ public class ManateeSecurity extends WebSecurityConfigurerAdapter {
         http.cors().and().csrf().disable().authorizeRequests()
                 .antMatchers(HttpMethod.POST, SIGN_UP_URL).permitAll()
                 .antMatchers(HttpMethod.GET,GO_CONFIRM).permitAll()
+                .antMatchers(HttpMethod.POST,"/login").permitAll()
                 .antMatchers(HttpMethod.GET,"/test/**").permitAll()
+                .antMatchers(HttpMethod.POST,"/test/**").permitAll()
+                .antMatchers(HttpMethod.GET,"/u9workmessage/**").permitAll()
+                .antMatchers(HttpMethod.POST,"/u9workmessage/**").permitAll()
                 .antMatchers(HttpMethod.GET,"/ws/**").permitAll()
                 .antMatchers(HttpMethod.POST,"/ws/**").permitAll()
                 .anyRequest().authenticated()

+ 32 - 0
src/main/java/com/galaxis/manatee/constant/DingTalkConstant.java

@@ -22,6 +22,11 @@ public class DingTalkConstant {
     public static String DING_TALK_APP_KEY;
 
     /**
+     * 钉钉AgentId
+     */
+    public static Long DING_TALK_AGENTID;
+
+    /**
      * 钉钉appSecret
      */
     public static String DING_TALK_APP_SECRET;
@@ -41,6 +46,16 @@ public class DingTalkConstant {
      */
     public static String PROCESS_CODE_ASKFORLEAVE;
 
+    /**
+     * 项目实施变更
+     */
+    public static String PROCESS_CODE_PROJECT_CHANGE;
+
+    /**
+     * 业务招待申请
+     */
+    public static String PROCESS_CODE_BUSINESSENTERTAINMENT;
+
     @Value(value = "${dingTalk.appKey}")
     public void setDingTalkAppKey(String dingTalkAppKey) {
         DingTalkConstant.DING_TALK_APP_KEY = dingTalkAppKey;
@@ -65,4 +80,21 @@ public class DingTalkConstant {
     public  void setProcessCodeAskforleave(String askForLeave) {
         DingTalkConstant.PROCESS_CODE_ASKFORLEAVE = askForLeave;
     }
+
+    @Value(value = "${dingTalk.processCode.businessEntertainment}")
+    public  void setProcessCodeBusinessEntertainment(String businessEntertainment) {
+        DingTalkConstant.PROCESS_CODE_BUSINESSENTERTAINMENT = businessEntertainment;
+    }
+
+    @Value(value = "${dingTalk.processCode.projectChange}")
+    public void setProcessCodeProjectChange(String ProcessCodeProjectChange) {
+        DingTalkConstant.PROCESS_CODE_PROJECT_CHANGE = ProcessCodeProjectChange;
+    }
+
+
+    @Value(value = "${dingTalk.AgentId}")
+    public void setAgentId(Long agentId) {
+        DingTalkConstant.DING_TALK_AGENTID = agentId;
+    }
+
 }

+ 30 - 0
src/main/java/com/galaxis/manatee/controller/EquipmentController.java

@@ -0,0 +1,30 @@
+package com.galaxis.manatee.controller;
+
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunOperationInformationDO;
+import com.galaxis.manatee.service.ChuanyunService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@Slf4j
+@RestController
+@RequestMapping("/equipment")
+public class EquipmentController {
+
+    private final ChuanyunService chuanyunService;
+
+    public EquipmentController(ChuanyunService chuanyunService) {
+        this.chuanyunService = chuanyunService;
+    }
+
+    /**
+     * 更新小车信息
+     * @param chuanyunOperationInformationDO
+     */
+    @PostMapping("/updateEquipment")
+    public void updateEquipment(@RequestBody ChuanyunOperationInformationDO chuanyunOperationInformationDO){
+        chuanyunService.updateOperationInformation(chuanyunOperationInformationDO);
+    };
+}

+ 95 - 0
src/main/java/com/galaxis/manatee/controller/ExcelController.java

@@ -0,0 +1,95 @@
+package com.galaxis.manatee.controller;
+
+import com.galaxis.manatee.dao.ChuanyunProjectAttachmentDao;
+import com.galaxis.manatee.dao.ChuanyunUserDao;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunProjectAttachmentDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunUserDO;
+import com.galaxis.manatee.util.ExcelUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.OutputStream;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.util.List;
+
+@RestController
+@Slf4j
+public class ExcelController {
+
+    private final ChuanyunUserDao chuanyunUserDao;
+    private final ChuanyunProjectAttachmentDao chuanyunProjectAttachmentDao;
+
+    public ExcelController(ChuanyunUserDao chuanyunUserDao, ChuanyunProjectAttachmentDao chuanyunProjectAttachmentDao) {
+        this.chuanyunUserDao = chuanyunUserDao;
+        this.chuanyunProjectAttachmentDao = chuanyunProjectAttachmentDao;
+    }
+
+
+    @ResponseBody
+    @RequestMapping(value = "/test/exportExcel", method = RequestMethod.GET)
+    public void exportExcel(HttpServletRequest request, HttpServletResponse response) throws Exception {
+        List<ChuanyunProjectAttachmentDO> list = chuanyunProjectAttachmentDao.findAll();
+        String[] title = {"项目名称", "项目编号", "物料名称", "图片", "英文名","零件归属","数量","单位","未税单价","易耗件","系数","汇率","总价","备注"};
+        String filename = "testRecord.xls";
+        String sheetName = "sheet1";
+        String[][] content = new String[list.size()][20];
+        try {
+            for (int i = 0; i < list.size(); i++) {
+                content[i][0] = list.get(i).getProjectName();
+                content[i][1] = list.get(i).getProjectCode();
+                content[i][2] = list.get(i).getMaterialName();
+                content[i][3] = list.get(i).getEnclosureId();
+                content[i][4] = list.get(i).getEnglishName();
+                content[i][5] = list.get(i).getPartsOwnership();
+                content[i][6] = String.valueOf(list.get(i).getQty());
+                content[i][7] = list.get(i).getUnit();
+                content[i][8] = String.valueOf(list.get(i).getUnitPricewithoutTax());
+                content[i][9] = list.get(i).getConsumableParts();
+                content[i][10] = String.valueOf(list.get(i).getCoefficient());
+                content[i][11] = String.valueOf(list.get(i).getExchangeRate());
+                content[i][12] = String.valueOf(list.get(i).getTotalPrice());
+                content[i][13] = list.get(i).getRemarks();
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        HSSFWorkbook wb = ExcelUtils.getHSSFWorkbook(sheetName, title, content, null);
+        try {
+            // 响应到客户端
+            this.setResponseHeader(response, filename);
+            OutputStream os = response.getOutputStream();
+            wb.write(os);
+            os.flush();
+            os.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 向客户端发送响应流方法
+     *
+     * @param response
+     * @param fileName
+     */
+    public void setResponseHeader(HttpServletResponse response, String fileName) {
+        try {
+            try {
+                fileName = new String(fileName.getBytes(), "UTF-8");
+            } catch (UnsupportedEncodingException e) {
+                e.printStackTrace();
+            }
+            response.setContentType("application/vnd.ms-excel");
+            response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+    }
+}

+ 41 - 7
src/main/java/com/galaxis/manatee/controller/GetController.java

@@ -1,14 +1,21 @@
 package com.galaxis.manatee.controller;
 
 import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunCostCollectionDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunEquipmentDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunOperationInformationDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunProductDO;
 import com.galaxis.manatee.service.ChuanyunService;
 import com.galaxis.manatee.task.ChuanyunBasicDataScheduledTask;
 import com.galaxis.manatee.task.ChuanyunHumanResourceScheduledTask;
+import com.galaxis.manatee.util.ExcelUtils;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import net.sf.json.JSON;
+import net.sf.json.JSONObject;
 import org.springframework.http.ResponseEntity;
 import org.springframework.scheduling.annotation.Async;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.util.List;
 
@@ -19,6 +26,7 @@ import java.util.List;
  * @date 2020/6/7 10:26 上午
  */
 @RestController
+@Slf4j
 public class GetController {
 
     private final ChuanyunHumanResourceScheduledTask chuanyunHumanResourceScheduledTask;
@@ -126,12 +134,38 @@ public class GetController {
     }
 
     /**
-     * 将领导从特定项目中剔除
+     * 导入设备配置信息
+     * @param file
      */
-    @GetMapping("/test/deleteProjectMember")
-    public void deleteProjectMember() {
-        chuanyunService.deleteProjectMember();
+    @PostMapping("/test/import")
+    public void importEquipment(@RequestParam(value="uploadFile", required = false) MultipartFile file){
+        List<ChuanyunEquipmentDO> list = ExcelUtils.readExcel("", ChuanyunEquipmentDO.class, file);
+        chuanyunService.importEquipment(list);
     }
 
+    /**
+     * 导入产品库信息
+     * @param file
+     */
+    @PostMapping("/test/importproduct")
+    public void importProductLibrary(@RequestParam(value="uploadFile", required = false) MultipartFile file){
+        List<ChuanyunProductDO> list = ExcelUtils.readExcel("", ChuanyunProductDO.class, file);
+        chuanyunService.importProduct(list);
+    }
+
+    /**
+     * 更新小车信息
+     * @param chuanyunOperationInformationDO
+     */
+    @PostMapping("/test/updateEquipment")
+    public void updateEquipment(@RequestBody ChuanyunOperationInformationDO chuanyunOperationInformationDO){
+        chuanyunService.updateOperationInformation(chuanyunOperationInformationDO);
+    }
+
+//    @GetMapping("/test/updateMember")
+//    public void updateMember(){
+//        chuanyunBasicDataScheduledTask.chuanyunUpdateProjectMemberManually();
+//    }
+
 
 }

+ 9 - 0
src/main/java/com/galaxis/manatee/controller/JwtAuthenticationFilter.java

@@ -4,6 +4,8 @@ import com.auth0.jwt.JWT;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.galaxis.manatee.constant.SecurityConstant;
 import com.galaxis.manatee.entity.User;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
 import org.springframework.security.authentication.AuthenticationManager;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.core.Authentication;
@@ -61,4 +63,11 @@ public class JwtAuthenticationFilter extends UsernamePasswordAuthenticationFilte
                 .sign(HMAC512(SecurityConstant.SECRET.getBytes()));
         res.addHeader(SecurityConstant.HEADER_STRING, SecurityConstant.TOKEN_PREFIX + token);
     }
+
+    @Override
+    protected void unsuccessfulAuthentication(HttpServletRequest request, HttpServletResponse response, AuthenticationException failed) throws IOException {
+        response.setStatus(500);
+        response.getWriter().println("Login exception! Please check the username and password");
+    }
+
 }

+ 9 - 0
src/main/java/com/galaxis/manatee/controller/JwtAuthorizationFilter.java

@@ -14,7 +14,9 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Date;
 
+import static com.auth0.jwt.algorithms.Algorithm.HMAC512;
 import static com.galaxis.manatee.constant.SecurityConstant.HEADER_STRING;
 import static com.galaxis.manatee.constant.SecurityConstant.TOKEN_PREFIX;
 
@@ -43,6 +45,13 @@ public class JwtAuthorizationFilter extends BasicAuthenticationFilter {
         UsernamePasswordAuthenticationToken authentication = getAuthentication(req);
 
         SecurityContextHolder.getContext().setAuthentication(authentication);
+        //刷新token
+        String token = JWT.create()
+                .withSubject(authentication.getName())
+                .withExpiresAt(new Date(System.currentTimeMillis() + SecurityConstant.EXPIRATION_TIME))
+                .sign(HMAC512(SecurityConstant.SECRET.getBytes()));
+        res.addHeader(SecurityConstant.HEADER_STRING, SecurityConstant.TOKEN_PREFIX + token);
+
         chain.doFilter(req, res);
     }
 

+ 33 - 0
src/main/java/com/galaxis/manatee/controller/TestController.java

@@ -0,0 +1,33 @@
+package com.galaxis.manatee.controller;
+
+import lombok.Data;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author zcj
+ * @version 0.1
+ * @date 2020/10/27 11:39 上午
+ */
+@RestController
+public class TestController {
+
+
+    @GetMapping("/test/helloGet")
+    public String testGet(){
+        return "hello";
+    }
+
+    @PostMapping("/test/helloPost")
+    public String testPost(@RequestBody PostObject postObject){
+        return "hello";
+    }
+
+    @Data
+    class PostObject{
+        private String a;
+        private String b;
+    }
+}

+ 70 - 0
src/main/java/com/galaxis/manatee/controller/U9WorkMessageController.java

@@ -0,0 +1,70 @@
+package com.galaxis.manatee.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.dingtalk.api.DefaultDingTalkClient;
+import com.dingtalk.api.DingTalkClient;
+import com.dingtalk.api.request.OapiMessageCorpconversationAsyncsendV2Request;
+import com.dingtalk.api.response.OapiMessageCorpconversationAsyncsendV2Response;
+import com.galaxis.manatee.constant.DingTalkConstant;
+import com.galaxis.manatee.entity.chuanyun.dto.U9Message;
+import com.galaxis.manatee.entity.chuanyun.dto.U9ResponseMessageDTO;
+import com.galaxis.manatee.service.U9WorkMessageService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * created by IntelliJ IDEA.
+ * author: xuj
+ * date: 2020/9/15
+ */
+@RestController
+@Slf4j
+public class U9WorkMessageController {
+
+    @Autowired
+    private U9WorkMessageService u9WorkMessageService;
+
+    @PostMapping("/u9workmessage/send")
+    @ResponseBody
+    public String sendMessage(@RequestBody String userInfo) {
+        U9ResponseMessageDTO u9ResponseMessageDTO = new U9ResponseMessageDTO();
+        U9Message u9Msg = JSON.parseObject(userInfo, U9Message.class);
+        try {
+            String[] accounts = u9Msg.getUserCode().split(",");
+            List<String> requestIds = new ArrayList<String>();
+            if (accounts.length > 0) {
+                for (String accout : accounts) {
+                    String dingreqId = u9WorkMessageService.findByEmployeeNumber(accout).getDingTalkAccount();
+                    requestIds.add(dingreqId.substring(0, dingreqId.indexOf(".")));
+                }
+            }
+            DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2");
+            OapiMessageCorpconversationAsyncsendV2Request request = new OapiMessageCorpconversationAsyncsendV2Request();
+            request.setUseridList(String.join(",", requestIds));
+            request.setAgentId(DingTalkConstant.DING_TALK_AGENTID);
+            request.setToAllUser(false);
+
+            OapiMessageCorpconversationAsyncsendV2Request.Msg msg = new OapiMessageCorpconversationAsyncsendV2Request.Msg();
+            msg.setMsgtype("text");
+            msg.setText(new OapiMessageCorpconversationAsyncsendV2Request.Text());
+            msg.getText().setContent(u9Msg.getMsg());
+            request.setMsg(msg);
+            OapiMessageCorpconversationAsyncsendV2Response response = client.execute(request, DingTalkConstant.DING_TALK_TOKEN);
+            if (response.getErrcode() == 0) {
+                u9ResponseMessageDTO.setErrorCode(response.getErrcode());
+                u9ResponseMessageDTO.setDoCno(u9Msg.getDoCno());
+                log.info("发送消息成功!");
+                return JSON.toJSONString(u9ResponseMessageDTO);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.info("发送消息失败!");
+        }
+        u9ResponseMessageDTO.setErrorCode(1L);
+        return JSON.toJSONString(u9ResponseMessageDTO);
+     }
+
+}

+ 7 - 7
src/main/java/com/galaxis/manatee/controller/UserController.java

@@ -30,17 +30,17 @@ public class UserController {
     /**
      * 验证人手机号
      */
-    @Value(("${aliyun.access.mobile}"))
+//    @Value(("${aliyun.access.mobile}"))
     private String mobile;
     /**
      * 验证key的Id
      */
-    @Value(("${aliyun.access.key.id}"))
+//    @Value(("${aliyun.access.key.id}"))
     private String accessKeyId;
     /**
      * 验证key的secret
      */
-    @Value(("${aliyun.access.key.secret}"))
+//    @Value(("${aliyun.access.key.secret}"))
     private String accessKeySecret;
 
     public UserController(UserService userService, BCryptPasswordEncoder bCryptPasswordEncoder) {
@@ -78,11 +78,11 @@ public class UserController {
      */
     @PostMapping("/signUp")
     public ResponseEntity<String> signUp(@RequestBody User user) {
-        if(user.getConfirmCode()==null||!user.getConfirmCode().equals(confirmCode)){
-            return new ResponseEntity<>("验证码信息错误", HttpStatus.NON_AUTHORITATIVE_INFORMATION);
-        }
+//        if(user.getConfirmCode()==null||!user.getConfirmCode().equals(confirmCode)){
+//            return new ResponseEntity<>("验证码信息错误", HttpStatus.NON_AUTHORITATIVE_INFORMATION);
+//        }
         user.setPassword(bCryptPasswordEncoder.encode(user.getPassword()));
         userService.signUp(user);
         return new ResponseEntity<>(null, HttpStatus.OK);
     }
-}
+}

+ 50 - 0
src/main/java/com/galaxis/manatee/controller/WorkHourController.java

@@ -0,0 +1,50 @@
+package com.galaxis.manatee.controller;
+
+import com.galaxis.manatee.service.LogCheckService;
+import com.galaxis.manatee.task.WorkHourStatistics;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 日志工时controller
+ * @author zcj
+ * @version 0.1
+ * @date 2021/3/4 3:56 上午
+ */
+@RestController
+public class WorkHourController {
+
+    private final LogCheckService logCheckService;
+    private final WorkHourStatistics workHourStatistics;
+
+    public WorkHourController(LogCheckService logCheckService, WorkHourStatistics workHourStatistics) {
+        this.logCheckService = logCheckService;
+        this.workHourStatistics = workHourStatistics;
+    }
+
+    /**
+     * 检查工时不一致数据
+     * @param userId    用户Id
+     */
+    @GetMapping("/test/workHour/checkSelfWorkHour")
+    public void checkSelfWorkHour(@RequestParam("userId") String userId){
+        try {
+            logCheckService.checkDayWorkHour(userId);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+    }
+
+    /**
+     * 更新全部工时信息
+     * @return  固定字符串
+     */
+    @GetMapping("/test/workHour/updateWorkHour")
+    public String updateWorkHour(){
+        workHourStatistics.updateHour();
+        return "go ahead";
+    }
+
+
+}

+ 10 - 0
src/main/java/com/galaxis/manatee/dao/ChuanyunAttachmentDao.java

@@ -0,0 +1,10 @@
+package com.galaxis.manatee.dao;
+
+import com.galaxis.capsule.util.GalaxisRepository;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunAttachmentDO;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface ChuanyunAttachmentDao extends GalaxisRepository<ChuanyunAttachmentDO,String> {
+
+}

+ 12 - 0
src/main/java/com/galaxis/manatee/dao/ChuanyunBusinessEntertainmentDao.java

@@ -0,0 +1,12 @@
+package com.galaxis.manatee.dao;
+
+import com.galaxis.capsule.util.GalaxisRepository;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunBusinessEntertainmentDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunCompanyDO;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface ChuanyunBusinessEntertainmentDao extends GalaxisRepository<ChuanyunBusinessEntertainmentDO,String> {
+
+    ChuanyunBusinessEntertainmentDO findByBusinessId(String businessId);
+}

+ 1 - 0
src/main/java/com/galaxis/manatee/dao/ChuanyunClientDao.java

@@ -11,4 +11,5 @@ import org.springframework.stereotype.Repository;
  */
 @Repository
 public interface ChuanyunClientDao extends GalaxisRepository<ChuanyunClientDO,String> {
+    ChuanyunClientDO findByClientCode(String clientcode);
 }

+ 2 - 0
src/main/java/com/galaxis/manatee/dao/ChuanyunCompanyDao.java

@@ -18,4 +18,6 @@ public interface ChuanyunCompanyDao extends GalaxisRepository<ChuanyunCompanyDO,
      * @return
      */
     ChuanyunCompanyDO findByObjectId(String id);
+
+    ChuanyunCompanyDO findByCompanyName(String companyname);
 }

+ 1 - 1
src/main/java/com/galaxis/manatee/dao/ChuanyunDayWorkAbcDao.java

@@ -22,7 +22,7 @@ public interface ChuanyunDayWorkAbcDao extends GalaxisRepository<ChuanyunDayWork
 
     @Query(value = "select a.project_id as project_id,b.project_code,b.project_name,sum(a.standard_work_hour) as total_time from chuanyun_self_work_hour a " +
        "left join chuanyun_project b on a.project_id = b.object_id where  b.project_code is not null and b.project_name is not null group by a.project_id ",nativeQuery = true)
-    List<Map> queryDayWorkAbc();
+    List<Map<String,Object>> queryDayWorkAbc();
 
     @Query(value = " SELECT c.project_id,sum( c.standard_work_hour ) AS total_time,'' as object_id,'' as project_code,'' as project_name,'' as plan_time,'' as sell_time,'' as other_time from " +
             "( SELECT a.project_id,a.standard_work_hour, b.user_type FROM chuanyun_self_work_hour a LEFT JOIN chuanyun_user_company b ON a.user_id = b.user_id ) c "+

+ 16 - 0
src/main/java/com/galaxis/manatee/dao/ChuanyunEquipmentInformDao.java

@@ -0,0 +1,16 @@
+package com.galaxis.manatee.dao;
+
+import com.galaxis.capsule.util.GalaxisRepository;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunEquipmentInformDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunPayrollDO;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface ChuanyunEquipmentInformDao extends GalaxisRepository<ChuanyunEquipmentInformDO,String> {
+    /**
+     * 获取设备信息
+     * @param equipmentCode
+     * @return
+     */
+    ChuanyunEquipmentInformDO findByEquipmentCode(String equipmentCode);
+}

+ 4 - 0
src/main/java/com/galaxis/manatee/dao/ChuanyunGroupProjectDao.java

@@ -15,4 +15,8 @@ import org.springframework.stereotype.Repository;
 public interface ChuanyunGroupProjectDao extends GalaxisRepository<ChuanyunGroupProjectDO,String> {
 
     Page<ChuanyunGroupProjectDO> findAllByStatus(int status,Pageable pageable);
+
+    ChuanyunGroupProjectDO findByProjectCode(String projectCode);
+
+    ChuanyunGroupProjectDO findByObjectId(String objectId);
 }

+ 7 - 0
src/main/java/com/galaxis/manatee/dao/ChuanyunMaterialDao.java

@@ -30,6 +30,13 @@ public interface ChuanyunMaterialDao extends GalaxisRepository<ChuanyunMaterialD
     List<ChuanyunMaterialDO> findAllByCode(String code);
 
     /**
+     * 根据Id获取物料
+     * @param objectId
+     * @return
+     */
+    ChuanyunMaterialDO findByObjectId(String objectId);
+
+    /**
      * 根据物料编码和版本号获得物料对象
      * @param code  物料编码
      * @param version   版本

+ 26 - 18
src/main/java/com/galaxis/manatee/dao/ChuanyunMemberCostDao.java

@@ -3,7 +3,9 @@ package com.galaxis.manatee.dao;
 
 import com.galaxis.capsule.util.GalaxisRepository;
 import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunMemberCostDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunProjectCostDO;
 import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -19,34 +21,40 @@ public interface ChuanyunMemberCostDao extends GalaxisRepository<ChuanyunMemberC
      * 获取项目人员总工时总成本
      * @return
      */
-    @Query(value="SELECT chuanyun_self_cost.object_id," +
-            "SUM(chuanyun_self_cost.total_hour) AS total_hour," +
-            "SUM(chuanyun_self_cost.cost) AS cost," +
-            "chuanyun_self_cost.project_type," +
-            "chuanyun_self_cost.project_id," +
-            "chuanyun_self_cost.status," +
-            "chuanyun_self_cost.user_id," +
-            "chuanyun_self_cost.monthly_total_hour AS person_days"+
-            " FROM chuanyun_self_cost " +
-            "GROUP BY chuanyun_self_cost.project_id," +
-            "chuanyun_self_cost.status," +
-            "chuanyun_self_cost.user_id",
+    @Query(value="SELECT SUM(chuanyun_self_work_hour.standard_work_hour) AS total_hour,chuanyun_self_work_hour.user_id," +
+            "SUM(chuanyun_self_work_hour.standard_work_hour)/8 AS person_days,chuanyun_self_work_hour.project_id," +
+            "chuanyun_self_work_hour.project_type,chuanyun_self_work_hour.`status` ,chuanyun_self_work_hour.object_id \n" +
+            "FROM chuanyun_self_work_hour where project_id!='' GROUP BY chuanyun_self_work_hour.project_id,chuanyun_self_work_hour.user_id,chuanyun_self_work_hour.project_type," +
+            "chuanyun_self_work_hour.`status`",
             nativeQuery = true)
     List<ChuanyunMemberCostDO> getMemberCost();
 
     /**
+     * 获取审核中数据
+     * @param projectId
+     * @param projectType
+     * @param userId
+     * @return
+     */
+    @Query(value="SELECT SUM(chuanyun_self_work_hour.standard_work_hour) AS total_hour,chuanyun_self_work_hour.user_id," +
+            "SUM(chuanyun_self_work_hour.standard_work_hour)/8 AS person_days,chuanyun_self_work_hour.project_id," +
+            "chuanyun_self_work_hour.project_type,chuanyun_self_work_hour.`status` ,chuanyun_self_work_hour.object_id \n" +
+            "FROM chuanyun_self_work_hour  WHERE project_id=?1 AND project_type = ?2 AND user_id=?3 and `status`=2 " +
+            "GROUP BY chuanyun_self_work_hour.project_id,chuanyun_self_work_hour.user_id,chuanyun_self_work_hour.project_type," +
+            "chuanyun_self_work_hour.`status`",
+            nativeQuery = true)
+    ChuanyunMemberCostDO getProcessProjectMemberCost(@Param("projectId")String projectId, @Param("projectType")String projectType,@Param("userId")String userId);
+
+    /**
      * 根据项目ID和人员ID获取工时成本数据
      * @param userId    用户ID
      * @param projectId 项目Id
      * @param status    项目流程状态
      * @return  人员-项目工时
      */
-    ChuanyunMemberCostDO findByUserIdAndProjectIdAndStatus(String userId,String projectId,String status);
+    ChuanyunMemberCostDO findByUserIdAndProjectIdAndProjectTypeAndStatus(String userId,String projectId,String projectType,String status);
 
-    /**
-     * 删除审核中数据
-     * @param status
-     */
     @Transactional
-    void deleteAllByStatus(String status);
+    void deleteByProjectIdAndUserIdAndProjectTypeAndStatus(String projectId,String userId,String projectType,String status);
+
 }

+ 10 - 0
src/main/java/com/galaxis/manatee/dao/ChuanyunOperationInformationDao.java

@@ -0,0 +1,10 @@
+package com.galaxis.manatee.dao;
+
+import com.galaxis.capsule.util.GalaxisRepository;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunMonthLaborCostDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunOperationInformationDO;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface ChuanyunOperationInformationDao extends GalaxisRepository<ChuanyunOperationInformationDO,String> {
+}

+ 11 - 0
src/main/java/com/galaxis/manatee/dao/ChuanyunOutDepartmentDao.java

@@ -0,0 +1,11 @@
+package com.galaxis.manatee.dao;
+
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunOutDepartmentDO;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface ChuanyunOutDepartmentDao extends JpaRepository<ChuanyunOutDepartmentDO,String> {
+
+    ChuanyunOutDepartmentDO findByDepartment(String department);
+}

+ 11 - 0
src/main/java/com/galaxis/manatee/dao/ChuanyunProjectAttachmentDao.java

@@ -0,0 +1,11 @@
+package com.galaxis.manatee.dao;
+
+import com.galaxis.capsule.util.GalaxisRepository;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunAttachmentDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunProjectAttachmentDO;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface ChuanyunProjectAttachmentDao extends GalaxisRepository<ChuanyunProjectAttachmentDO,String> {
+
+}

+ 31 - 0
src/main/java/com/galaxis/manatee/dao/ChuanyunProjectChangeDao.java

@@ -0,0 +1,31 @@
+package com.galaxis.manatee.dao;
+
+import com.galaxis.capsule.util.GalaxisRepository;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunProjectChangeDO;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: xuj
+ * Date: 2020/7/24
+ */
+@Repository
+public interface ChuanyunProjectChangeDao extends GalaxisRepository<ChuanyunProjectChangeDO,String> {
+    /**
+     * SQL 查询是否存在项目实施变更信息,避免重复提交
+     * @param title
+     * @return
+     */
+    @Query(value = "SELECT * FROM CHUANYUN_PROJECT_CHANGE WHERE title = ?1", nativeQuery = true)
+    List<ChuanyunProjectChangeDO> findByTitleSQL(String title);
+
+    /**
+     * SQL 查询项目实施变更信息
+     * @return
+     */
+    @Query(value = "SELECT t.* FROM CHUANYUN_PROJECT_CHANGE t GROUP BY t.title", nativeQuery = true )
+    List<ChuanyunProjectChangeDO> findAllAskForLeave();
+}

+ 37 - 13
src/main/java/com/galaxis/manatee/dao/ChuanyunProjectCostDao.java

@@ -4,6 +4,7 @@ import com.galaxis.capsule.util.GalaxisRepository;
 import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunMemberCostDO;
 import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunProjectCostDO;
 import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -19,27 +20,50 @@ public interface ChuanyunProjectCostDao extends GalaxisRepository<ChuanyunProjec
      * 获取项目总工时成本
      * @return  项目总工时
      */
-    @Query(value="SELECT chuanyun_member_cost.object_id," +
-            "SUM(chuanyun_member_cost.cost) AS cost," +
-            "SUM(chuanyun_member_cost.total_hour) AS total_hour," +
-            "SUM(chuanyun_member_cost.person_days) AS person_days," +
-            "chuanyun_member_cost.project_type," +
-            "chuanyun_member_cost.status," +
-            "chuanyun_member_cost.project_id, " +
-            "chuanyun_member_cost.cost AS amount" +
-            " FROM chuanyun_member_cost " +
-            "GROUP BY chuanyun_member_cost.project_id,"+
-            "chuanyun_member_cost.status",
+    @Query(value="SELECT SUM(chuanyun_self_work_hour.standard_work_hour) AS total_hour," +
+            "SUM(chuanyun_self_work_hour.standard_work_hour)/8 AS person_days,chuanyun_self_work_hour.project_id," +
+            "chuanyun_self_work_hour.project_type,chuanyun_self_work_hour.`status` ,chuanyun_self_work_hour.object_id \n" +
+            "FROM chuanyun_self_work_hour where project_id!='' GROUP BY chuanyun_self_work_hour.project_id,chuanyun_self_work_hour.project_type," +
+            "chuanyun_self_work_hour.`status`",
             nativeQuery = true)
     List<ChuanyunProjectCostDO> getProjectCost();
 
+    @Query(value="SELECT SUM(chuanyun_self_work_hour.standard_work_hour) AS total_hour," +
+            "SUM(chuanyun_self_work_hour.standard_work_hour)/8 AS person_days,chuanyun_self_work_hour.project_id," +
+            "chuanyun_self_work_hour.project_type,chuanyun_self_work_hour.`status` ,chuanyun_self_work_hour.object_id \n" +
+            "FROM chuanyun_self_work_hour  WHERE project_id=?1 AND project_type = ?2 AND `status`=2 " +
+            "GROUP BY chuanyun_self_work_hour.project_id,chuanyun_self_work_hour.project_type," +
+            "chuanyun_self_work_hour.`status`",
+            nativeQuery = true)
+    ChuanyunProjectCostDO getProcessProjectCost(@Param("projectId")String projectId,@Param("projectType")String projectType);
+
+//
+//    @Query(value="SELECT\n" +
+//            "\tSUM(\n" +
+//            "\t\tchuanyun_self_cost_copy.total_hour\n" +
+//            "\t) AS total_hour,\n" +
+//            "\t SUM(\n" +
+//            "\t\tchuanyun_self_cost_copy.total_hour\n" +
+//            "\t) / 8 AS person_days,\n" +
+//            "\tchuanyun_self_cost_copy.project_id,\n" +
+//            "\tchuanyun_self_cost_copy.project_type,\n" +
+//            "\tchuanyun_self_cost_copy.object_id,\n" +
+//            "\tchuanyun_self_cost_copy.`status`\n" +
+//            "FROM\n" +
+//            "\tchuanyun_self_cost_copy\n" +
+//            "GROUP BY\n" +
+//            "\tchuanyun_self_cost_copy.project_id,\n" +
+//            "\tchuanyun_self_cost_copy.project_type,\n" +
+//            "\tchuanyun_self_cost_copy.`status`", nativeQuery = true)
+//    List<ChuanyunProjectCostDO> getHistoryProjectCost();
+
     /**
      * 根据项目号获取工时数据
      * @param projectId 项目Id
      * @return  项目工时对象
      */
-    ChuanyunProjectCostDO findByProjectId(String projectId);
+    ChuanyunProjectCostDO findByProjectIdAndProjectTypeAndStatus(String projectId,String projectType,String status);
 
     @Transactional
-    void deleteAllByStatus(String status);
+    void deleteByProjectIdAndProjectTypeAndStatus(String projectId,String projectType,String status);
 }

+ 1 - 1
src/main/java/com/galaxis/manatee/dao/ChuanyunReimbursementAmountDao.java

@@ -9,6 +9,6 @@ import org.springframework.stereotype.Repository;
 @Repository
 public interface ChuanyunReimbursementAmountDao extends GalaxisRepository<ChuanyunReimbursementAmountDO,String> {
 
-    @Query(value="SELECT SUM(chuanyun_reimbursement.amount) AS total_amount,chuanyun_reimbursement.object_id  FROM chuanyun_reimbursement WHERE chuanyun_reimbursement.group_project_id = ?",nativeQuery = true)
+    @Query(value="SELECT SUM(chuanyun_reimbursement.amount) AS total_amount,chuanyun_reimbursement.object_id  FROM chuanyun_reimbursement WHERE chuanyun_reimbursement.group_project_id = ? and chuanyun_reimbursement.status=1",nativeQuery = true)
     ChuanyunReimbursementAmountDO getAmount(String projectId);
 }

+ 14 - 2
src/main/java/com/galaxis/manatee/dao/ChuanyunSelfCostDao.java

@@ -3,6 +3,8 @@ package com.galaxis.manatee.dao;
 import com.galaxis.capsule.util.GalaxisRepository;
 import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunSelfCostDO;
 import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunSelfWorkHourDO;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
@@ -30,6 +32,15 @@ public interface ChuanyunSelfCostDao extends GalaxisRepository<ChuanyunSelfCostD
     List<ChuanyunSelfCostDO> getMemberCost();
 
     /**
+     * 获取最近一个月工时
+     * @param pagerequest
+     * @return
+     */
+    @Query(value="SELECT * FROM chuanyun_self_cost WHERE 1=1 AND DATE_FORMAT( chuanyun_self_cost.day_log_date, '%Y%m' ) > (DATE_FORMAT( CURDATE( ) , '%Y%m' )-2)"
+            ,countQuery="SELECT COUNT(1) FROM chuanyun_self_cost WHERE 1=1 AND DATE_FORMAT( chuanyun_self_cost.day_log_date, '%Y%m' ) = DATE_FORMAT( CURDATE( ) , '%Y%m' )",nativeQuery = true)
+    Page<ChuanyunSelfCostDO> getRecentlyMonthHour(PageRequest pagerequest);
+
+    /**
      * 根据用户ID和项目ID,日期获取工时成本数据
      * @param userId    用户Id
      * @param projectId 项目Id
@@ -40,6 +51,7 @@ public interface ChuanyunSelfCostDao extends GalaxisRepository<ChuanyunSelfCostD
     @Query(value="SELECT * FROM chuanyun_self_cost " +
             "WHERE user_id = ?1 " +
             "AND project_id = ?2 " +
-            "AND DATE_FORMAT(chuanyun_self_cost.day_log_date,'%Y-%m')=DATE_FORMAT(?3,'%Y-%m') AND status=?4",nativeQuery = true)
-    ChuanyunSelfCostDO getOldSelfDO(@Param("userId")String userId,@Param("projectId")String projectId,@Param("dayLogDate")String dayLogDate,String status);
+            "AND project_type=?3" +
+            " AND DATE_FORMAT(chuanyun_self_cost.day_log_date,'%Y-%m')=DATE_FORMAT(?4,'%Y-%m') AND status=?5",nativeQuery = true)
+    ChuanyunSelfCostDO getOldSelfDO(@Param("userId")String userId,@Param("projectId")String projectId,@Param("projectType") String projectType,@Param("dayLogDate")String dayLogDate,String status);
 }

+ 59 - 2
src/main/java/com/galaxis/manatee/dao/ChuanyunSelfWorkHourDao.java

@@ -4,10 +4,13 @@ package com.galaxis.manatee.dao;
 import com.galaxis.capsule.util.GalaxisRepository;
 import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunSelfWorkHourDO;
 import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunWorkHourDO;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 
+import java.awt.print.Pageable;
 import java.time.LocalDateTime;
 import java.util.List;
 
@@ -24,7 +27,22 @@ public interface ChuanyunSelfWorkHourDao extends GalaxisRepository<ChuanyunSelfW
      * @param dayLogDate    日志日期
      * @return  日工时记录
      */
-    ChuanyunSelfWorkHourDO findByUserIdAndAndProjectIdAndAndDayLogDate(String userId, String projectId, LocalDateTime dayLogDate);
+    ChuanyunSelfWorkHourDO findByUserIdAndAndProjectIdAndAndDayLogDateAndProjectType(String userId, String projectId, LocalDateTime dayLogDate,String projectType);
+
+    /**
+     * 根据userId获取工时数据
+     * @param userId
+     * @return
+     */
+    List<ChuanyunSelfWorkHourDO> findByUserId(String userId);
+
+    /**
+     * 根据用户id,日期获取工时
+     * @param userId
+     * @param dayLogDate
+     * @return
+     */
+    List<ChuanyunSelfWorkHourDO> findByUserIdAndDayLogDate(String userId,LocalDateTime dayLogDate);
 
     /**
      * 根据用户Id,项目Id,起止时间获取工时列表
@@ -35,7 +53,16 @@ public interface ChuanyunSelfWorkHourDao extends GalaxisRepository<ChuanyunSelfW
      * @param end       结束时间
      * @return  日工时列表
      */
-    List<ChuanyunSelfWorkHourDO> findAllByUserIdAndProjectIdAndStatusAndDayLogDateBetween(String userId,String projectId,String status,LocalDateTime start,LocalDateTime end);
+    List<ChuanyunSelfWorkHourDO> findAllByUserIdAndProjectIdAndProjectTypeAndStatusAndDayLogDateBetween(String userId,String projectId,String projectType,String status,LocalDateTime start,LocalDateTime end);
+
+    /**
+     * 获取最近一个月日工时
+     * @param pageable
+     * @return
+     */
+    @Query(value="SELECT * FROM chuanyun_self_work_hour WHERE DATE_SUB(CURDATE(), INTERVAL 1 MONTH) <= date(chuanyun_self_work_hour.day_log_date)\n",
+            countQuery="SELECT count(1) FROM chuanyun_self_work_hour WHERE DATE_SUB(CURDATE(), INTERVAL 1 MONTH) <= date(chuanyun_self_work_hour.day_log_date)\n",nativeQuery = true)
+    Page<ChuanyunSelfWorkHourDO> getRecentlyDayHour(PageRequest pageable);
 
     /**
      * 获取人员-项目-月度标准总工时
@@ -48,6 +75,8 @@ public interface ChuanyunSelfWorkHourDao extends GalaxisRepository<ChuanyunSelfW
             "chuanyun_self_work_hour.project_id," +
             "chuanyun_self_work_hour.project_type," +
             "chuanyun_self_work_hour.status," +
+            "chuanyun_self_work_hour.department_name," +
+            "chuanyun_self_work_hour.department_id," +
             "chuanyun_self_work_hour.object_id " +
             "FROM chuanyun_self_work_hour " +
             "WHERE chuanyun_self_work_hour.user_id=? " +
@@ -59,6 +88,32 @@ public interface ChuanyunSelfWorkHourDao extends GalaxisRepository<ChuanyunSelfW
             nativeQuery = true)
     List<ChuanyunSelfWorkHourDO> getMonthProjectHour(String userId);
 
+
+    /**
+     * 获取最近一个月工时
+     * @param userId
+     * @return
+     */
+    @Query(value="SELECT SUM(chuanyun_self_work_hour.standard_work_hour) AS standard_work_hour," +
+            "chuanyun_self_work_hour.day_log_date," +
+            "chuanyun_self_work_hour.user_id," +
+            "chuanyun_self_work_hour.project_id," +
+            "chuanyun_self_work_hour.project_type," +
+            "chuanyun_self_work_hour.status," +
+            "chuanyun_self_work_hour.department_id," +
+            "chuanyun_self_work_hour.department_name," +
+            "chuanyun_self_work_hour.object_id " +
+            "FROM chuanyun_self_work_hour " +
+            "WHERE chuanyun_self_work_hour.user_id=? " +
+            "AND DATE_SUB(CURDATE(), INTERVAL 2 MONTH) <= date(day_log_date) " +
+            "GROUP BY chuanyun_self_work_hour.user_id," +
+            "DATE_FORMAT(chuanyun_self_work_hour.day_log_date,'%Y-%m')," +
+            "chuanyun_self_work_hour.project_id," +
+            "chuanyun_self_work_hour.status," +
+            "chuanyun_self_work_hour.project_type",
+            nativeQuery = true)
+    List<ChuanyunSelfWorkHourDO> getMonthProjectHourRecently(String userId);
+
     /**
      * 获取人员月度标准工时汇总
      * @param userId    用户ID
@@ -72,6 +127,8 @@ public interface ChuanyunSelfWorkHourDao extends GalaxisRepository<ChuanyunSelfW
             "chuanyun_self_work_hour.status," +
             "chuanyun_self_work_hour.project_type," +
             "chuanyun_self_work_hour.project_id," +
+            "chuanyun_self_work_hour.department_id," +
+            "chuanyun_self_work_hour.department_name," +
             "chuanyun_self_work_hour.object_id "+
             "FROM chuanyun_self_work_hour " +
             "WHERE chuanyun_self_work_hour.user_id= ?1 " +

+ 1 - 0
src/main/java/com/galaxis/manatee/dao/ChuanyunSupplierDao.java

@@ -11,4 +11,5 @@ import org.springframework.stereotype.Repository;
  */
 @Repository
 public interface ChuanyunSupplierDao extends GalaxisRepository<ChuanyunSupplierDO,String> {
+    ChuanyunSupplierDO findBySupplierCode(String code);
 }

+ 7 - 0
src/main/java/com/galaxis/manatee/dao/ChuanyunUserDao.java

@@ -24,4 +24,11 @@ public interface ChuanyunUserDao extends GalaxisRepository<ChuanyunUserDO,String
      * @return  氚云对象
      */
     ChuanyunUserDO findByDingTalkAccountContaining(String dingTalkAccount);
+
+    /**
+     * 根据钉钉工号获取用户对象
+     * @param employeeNumber  钉钉工号
+     * @return 氚云对象
+     */
+    ChuanyunUserDO findByEmployeeNumber(String employeeNumber);
 }

+ 12 - 0
src/main/java/com/galaxis/manatee/dao/ChuanyunUserDepartmentNameDao.java

@@ -0,0 +1,12 @@
+package com.galaxis.manatee.dao;
+
+import com.galaxis.capsule.util.GalaxisRepository;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunSelfWorkHourDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunUserDepartmentNameDO;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface ChuanyunUserDepartmentNameDao extends GalaxisRepository<ChuanyunUserDepartmentNameDO,String> {
+
+    ChuanyunUserDepartmentNameDO findByUserName(String username);
+}

+ 116 - 12
src/main/java/com/galaxis/manatee/dao/ChuanyunWeekMemberHourDao.java

@@ -1,30 +1,37 @@
 package com.galaxis.manatee.dao;
 
 import com.galaxis.capsule.util.GalaxisRepository;
-import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunProjectCostDO;
 import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunWeekMemberHourDO;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
 import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 
+/**
+ * @author kxuan
+ */
 @Repository
-public interface ChuanyunWeekMemberHourDao extends GalaxisRepository<ChuanyunWeekMemberHourDO,String> {
+public interface ChuanyunWeekMemberHourDao extends GalaxisRepository<ChuanyunWeekMemberHourDO, String> {
 
     /**
      * 根据状态删除数据
-     * @param status    状态
-     * @return  删除条数
+     *
+     * @param status 状态
+     * @return 删除条数
      */
     @Transactional
     Integer deleteAllByStatus(String status);
 
     /**
      * 人员-项目-周度工时汇总
+     *
      * @return
      */
-    @Query(value="SELECT chuanyun_self_work_hour.object_id," +
+    @Query(value = "SELECT chuanyun_self_work_hour.object_id," +
             "DATE_FORMAT(day_log_date,'%Y') as year," +
             "WEEKOFYEAR(chuanyun_self_work_hour.day_log_date) AS week," +
             "project_id,user_id," +
@@ -32,20 +39,117 @@ public interface ChuanyunWeekMemberHourDao extends GalaxisRepository<ChuanyunWee
             "project_type," +
             "`status`" +
             "FROM chuanyun_self_work_hour " +
-            "WHERE project_id !='' " +
+            "WHERE project_id !='' and LENGTH(user_id) = CHAR_LENGTH(user_id)" +
             "GROUP BY chuanyun_self_work_hour.project_id," +
+            "chuanyun_self_work_hour.project_type," +
             "chuanyun_self_work_hour.user_id," +
             "DATE_FORMAT(day_log_date,'%Y')," +
             "WEEKOFYEAR(chuanyun_self_work_hour.day_log_date)," +
-            "chuanyun_self_work_hour.`status`",nativeQuery = true)
+            "chuanyun_self_work_hour.`status`", nativeQuery = true)
     List<ChuanyunWeekMemberHourDO> getWeekMemberHour();
 
     /**
-     * 项目人员周度是否存在
-     * @param projectId
-     * @param userId
-     * @param week
+     * 获取最近一个月周工时
+     *
      * @return
      */
-    ChuanyunWeekMemberHourDO findByProjectIdAndUserIdAndWeekAndStatusAndProjectTypeAndYear(String projectId,String userId,String week,String status,String projectType,String year);
+    @Query(value = "SELECT chuanyun_self_work_hour.object_id, " +
+            "LEFT(YEARWEEK(chuanyun_self_work_hour.day_log_date,1),4)as year, " +
+            "RIGHT(YEARWEEK(chuanyun_self_work_hour.day_log_date,1),2) AS week, " +
+            "project_id,user_id, " +
+            "SUM(standard_work_hour)AS standard_work_hour, " +
+            "project_type, " +
+            "`status` " +
+            "FROM chuanyun_self_work_hour  " +
+            "WHERE project_id !=''  " +
+            "AND YEARWEEK(chuanyun_self_work_hour.day_log_date,1)>=(YEARWEEK(NOW(),1)-4) " +
+            "GROUP BY chuanyun_self_work_hour.project_id, " +
+            "chuanyun_self_work_hour.project_type, " +
+            "chuanyun_self_work_hour.user_id, " +
+            "LEFT(YEARWEEK(chuanyun_self_work_hour.day_log_date,1),4), " +
+            "RIGHT(YEARWEEK(chuanyun_self_work_hour.day_log_date,1),2), " +
+            "chuanyun_self_work_hour.`status`", nativeQuery = true)
+    List<ChuanyunWeekMemberHourDO> getWeekMemberHourRecently();
+
+    /**
+     * 根据用户Id获取周工时列表
+     *
+     * @param userId 用户ID
+     * @return 周工时列表
+     */
+    @Query(value = "SELECT chuanyun_self_work_hour.object_id, " +
+            "LEFT(YEARWEEK(chuanyun_self_work_hour.day_log_date,1),4)as year, " +
+            "RIGHT(YEARWEEK(chuanyun_self_work_hour.day_log_date,1),2) AS week, " +
+            "project_id,user_id, " +
+            "SUM(standard_work_hour)AS standard_work_hour, " +
+            "project_type, " +
+            "`status` " +
+            "FROM chuanyun_self_work_hour  " +
+            "WHERE project_id !='' and user_id=?1 " +
+            "GROUP BY chuanyun_self_work_hour.project_id, " +
+            "chuanyun_self_work_hour.project_type, " +
+            "chuanyun_self_work_hour.user_id, " +
+            "LEFT(YEARWEEK(chuanyun_self_work_hour.day_log_date,1),4), " +
+            "RIGHT(YEARWEEK(chuanyun_self_work_hour.day_log_date,1),2), " +
+            "chuanyun_self_work_hour.`status`", nativeQuery = true)
+    List<ChuanyunWeekMemberHourDO> getWeekMemberHourByUserId(@Param("userId") String userId);
+
+    /**
+     * 获取最近一个月周工时
+     *
+     * @param pageRequest 分页查询条件
+     * @return
+     */
+    @Query(value = "SELECT * FROM chuanyun_week_member_hour WHERE 1=1 AND CONCAT(chuanyun_week_member_hour.`year`,chuanyun_week_member_hour.`week`)>=(YEARWEEK(NOW(),1)-4) ",
+            countQuery = "SELECT COUNT(1) FROM chuanyun_week_member_hour WHERE 1=1 AND CONCAT(chuanyun_week_member_hour.`year`,chuanyun_week_member_hour.`week`)>=(YEARWEEK(NOW(),1)-4) ", nativeQuery = true)
+    Page<ChuanyunWeekMemberHourDO> getRecentlyWeekHour(PageRequest pageRequest);
+
+    /**
+     * 判断是否有流程中数据
+     *
+     * @return
+     */
+    @Query(value = "SELECT chuanyun_self_work_hour.object_id," +
+            "DATE_FORMAT(day_log_date,'%Y') as year," +
+            "WEEKOFYEAR(chuanyun_self_work_hour.day_log_date) AS week," +
+            "project_id,user_id," +
+            "SUM(standard_work_hour)AS standard_work_hour," +
+            "project_type," +
+            "`status`" +
+            "FROM chuanyun_self_work_hour " +
+            "WHERE project_id=?1 and user_id=?2 and DATE_FORMAT(day_log_date,'%Y')=?3 and " +
+            "WEEKOFYEAR(chuanyun_self_work_hour.day_log_date)=?4 and status=2 and project_type=?5" +
+            " GROUP BY chuanyun_self_work_hour.project_id," +
+            "chuanyun_self_work_hour.project_type," +
+            "chuanyun_self_work_hour.user_id," +
+            "DATE_FORMAT(day_log_date,'%Y')," +
+            "WEEKOFYEAR(chuanyun_self_work_hour.day_log_date)," +
+            "chuanyun_self_work_hour.`status`", nativeQuery = true)
+    ChuanyunWeekMemberHourDO getProcessWeekHour(@Param("projectId") String projectId, @Param("userId") String userId, @Param("year") String year, @Param("week") String week, @Param("projectType") String projectType);
+
+    /**
+     * 查询项目人员周度是否存在
+     *
+     * @param projectId   项目Id
+     * @param userId      用户Id
+     * @param week        周数
+     * @param projectType 项目类型
+     * @param status      状态
+     * @param year        年份
+     * @return 周工时记录
+     */
+    ChuanyunWeekMemberHourDO findByProjectIdAndUserIdAndWeekAndStatusAndProjectTypeAndYear(String projectId, String userId, String week, String status, String projectType, String year);
+
+    /**
+     * 删除状态为审核中的数据
+     *
+     * @param status      状态
+     * @param year        年份
+     * @param projectType 项目类型
+     * @param userId      用户Id
+     * @param projectId   项目ID
+     * @param week        周数
+     */
+    @Transactional(rollbackFor = Exception.class)
+    void deleteByProjectIdAndUserIdAndYearAndWeekAndStatusAndProjectType(String projectId, String userId, String year, String week, String status, String projectType);
 }

+ 82 - 1
src/main/java/com/galaxis/manatee/dao/ChuanyunWorkHourDao.java

@@ -4,6 +4,7 @@ package com.galaxis.manatee.dao;
 import com.galaxis.capsule.util.GalaxisRepository;
 import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunWorkHourDO;
 import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 
 import java.time.LocalDateTime;
@@ -25,17 +26,67 @@ public interface ChuanyunWorkHourDao extends GalaxisRepository<ChuanyunWorkHourD
             "chuanyun_day_log.project_id," +
             "chuanyun_day_log.project_type," +
             "chuanyun_log.user_id," +
+            "chuanyun_log.department_name," +
             "chuanyun_log.status," +
             "chuanyun_day_log.day_log_date " +
             "FROM chuanyun_day_log "+
             "LEFT JOIN chuanyun_log ON chuanyun_day_log.parent_object_id = chuanyun_log.object_id " +
             " WHERE chuanyun_log.user_id = ? " +
+            " AND status!='3' " +
             " GROUP BY chuanyun_day_log.project_id," +
             "chuanyun_log.user_id," +
+            "chuanyun_day_log.project_type," +
+            "chuanyun_log.status," +
+            "chuanyun_day_log.day_log_date",
+            nativeQuery = true)
+    List<ChuanyunWorkHourDO> getSelfWorkHour(@Param("userId") String userId);
+
+
+    /**
+     * 获取离职人员每天每个项目工时
+     * @return
+     */
+    @Query(value="SELECT\n" +
+            "\tchuanyun_day_log.project_id,\n" +
+            "  chuanyun_day_log.project_type,\n" +
+            "chuanyun_log.department_name," +
+            "  chuanyun_log.user_id,\n" +
+            "  chuanyun_day_log.day_log_date,\n" +
+            "  chuanyun_day_log.hours_worked,\n" +
+            "  chuanyun_log.`status`,\n" +
+            "  chuanyun_day_log.object_id\n" +
+            "FROM\n" +
+            "\tchuanyun_log\n" +
+            "LEFT JOIN chuanyun_day_log ON chuanyun_log.object_id = chuanyun_day_log.parent_object_id\n" +
+            "WHERE\n" +
+            "\tLENGTH(chuanyun_log.user_id) != CHAR_LENGTH(chuanyun_log.user_id)\n" +
+            "  AND project_id!=''",nativeQuery = true)
+    List<ChuanyunWorkHourDO> getQuitSelfWorkHour();
+
+    /**
+     * 根据用户Id获取用户最近一个月日志明细,并按日期拍
+     * @param userId
+     * @return
+     */
+    @Query(value="SELECT chuanyun_day_log.object_id," +
+            "SUM(chuanyun_day_log.hours_worked) AS hours_worked," +
+            "chuanyun_day_log.project_id," +
+            "chuanyun_day_log.project_type," +
+            "chuanyun_log.user_id," +
+            "chuanyun_log.department_name," +
+            "chuanyun_log.status," +
+            "chuanyun_day_log.day_log_date " +
+            "FROM chuanyun_day_log "+
+            "LEFT JOIN chuanyun_log ON chuanyun_day_log.parent_object_id = chuanyun_log.object_id " +
+            " WHERE chuanyun_log.user_id = ? " +
+            "AND DATE_SUB(CURDATE(), INTERVAL 1 MONTH) <= date(chuanyun_day_log.day_log_date)" +
+            " GROUP BY chuanyun_day_log.project_id," +
+            "chuanyun_log.user_id," +
+            "chuanyun_day_log.project_type," +
             "chuanyun_log.status," +
             "chuanyun_day_log.day_log_date",
             nativeQuery = true)
-    List<ChuanyunWorkHourDO> getSelfWorkHour(String userId);
+    List<ChuanyunWorkHourDO> getSelfWorkHourRecently(String userId);
 
     /**
      * 根据用户ID和日期筛选工时数据
@@ -48,14 +99,44 @@ public interface ChuanyunWorkHourDao extends GalaxisRepository<ChuanyunWorkHourD
             "chuanyun_day_log.project_id," +
             "chuanyun_day_log.project_type," +
             "chuanyun_log.user_id," +
+            "chuanyun_log.department_name," +
             "chuanyun_log.status," +
             "chuanyun_day_log.day_log_date " +
             "FROM chuanyun_day_log "+
             "LEFT JOIN chuanyun_log ON chuanyun_day_log.parent_object_id = chuanyun_log.object_id " +
             "WHERE chuanyun_log.user_id = ? " +
             "AND chuanyun_day_log.day_log_date =? " +
+            "AND status!=3 " +
             "GROUP BY chuanyun_log.user_id," +
             "chuanyun_day_log.day_log_date",
             nativeQuery = true)
     ChuanyunWorkHourDO getDayWorkHour(String userId,LocalDateTime day);
+
+    /**
+     * 离职人员每天工时
+     * @param userId
+     * @param dayLogDate
+     * @return
+     */
+    @Query(value="SELECT\n" +
+            "\tchuanyun_day_log.project_id,\n" +
+            "\tchuanyun_day_log.project_type,\n" +
+            "\tchuanyun_log.user_id,\n" +
+            "chuanyun_log.department_name," +
+            "\tchuanyun_day_log.day_log_date,\n" +
+            "\tSUM(\n" +
+            "\t\tchuanyun_day_log.hours_worked\n" +
+            "\t) AS hours_worked,\n" +
+            "\tchuanyun_log.`status`,\n" +
+            "\tchuanyun_day_log.object_id\n" +
+            "FROM\n" +
+            "\tchuanyun_log\n" +
+            "LEFT JOIN chuanyun_day_log ON chuanyun_log.object_id = chuanyun_day_log.parent_object_id\n" +
+            "WHERE\n" +
+            "chuanyun_log.user_id = ?1 AND chuanyun_day_log.day_log_date=?2 \n" +
+            "GROUP BY\n" +
+            "\tchuanyun_log.user_id,\n" +
+            "\tchuanyun_day_log.day_log_date",nativeQuery = true)
+    ChuanyunWorkHourDO getQuitDayWorkHour(@Param("userId")String userId,@Param("dayLogDate")LocalDateTime dayLogDate);
+
 }

+ 5 - 5
src/main/java/com/galaxis/manatee/entity/User.java

@@ -32,10 +32,10 @@ public class User {
      */
     private String password;
 
-    /**
-     * 验证码
-     */
-    @Transient
-    private String confirmCode;
+//    /**
+//     * 验证码
+//     */
+//    @Transient
+//    private String confirmCode;
 
 }

+ 35 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunAttachmentDO.java

@@ -0,0 +1,35 @@
+package com.galaxis.manatee.entity.chuanyun.data.object;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.OneToMany;
+import java.util.List;
+
+@Slf4j
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Entity(name = "CHUANYUN_ATTACHMENT")
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ChuanyunAttachmentDO extends BasicDO{
+
+    /**
+     * 表名
+     */
+    public static final String SCHEMA_CODE ="D001789cea86f1498ff41609385ef7390053e56";
+
+    @JsonProperty("F0000001")
+    private String projectId;
+
+    @JsonProperty("F0000011")
+    private String projectCode;
+
+    @JsonProperty("D001789F04b79f0c4b174fa6b482dc624c8124ae")
+    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
+    List<ChuanyunAttachmentDetailDO> list;
+}

+ 68 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunAttachmentDetailDO.java

@@ -0,0 +1,68 @@
+package com.galaxis.manatee.entity.chuanyun.data.object;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.persistence.Entity;
+import java.math.BigDecimal;
+
+@Slf4j
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Entity(name = "CHUANYUN_ATTACHMENT_DETAIL")
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ChuanyunAttachmentDetailDO extends BasicSubDO{
+
+    /**
+     * 表名
+     */
+    public static final String SCHEMA_CODE ="D001789F04b79f0c4b174fa6b482dc624c8124ae";
+
+
+    @JsonProperty("F0000002")
+    private String materialCode;
+
+    @JsonProperty("F0000008")
+    private String photo;
+
+    @JsonProperty("F0000016")
+    private String materialName;
+
+    @JsonProperty("F0000009")
+    private String englishName;
+
+    @JsonProperty("F0000006")
+    private String PartsOwnership;
+
+    @JsonProperty("F0000003")
+    private BigDecimal qty;
+
+    @JsonProperty("F0000005")
+    private String unit;
+
+    @JsonProperty("F0000004")
+    private BigDecimal UnitPricewithoutTax;
+
+    @JsonProperty("F0000010")
+    private String consumableParts;
+
+    @JsonProperty("F0000007")
+    private String remarks;
+
+    @JsonProperty("F0000012")
+    private String enclosureId;
+
+    @JsonProperty("F0000013")
+    private BigDecimal coefficient;
+
+    @JsonProperty("F0000014")
+    private BigDecimal exchangeRate;
+
+    @JsonProperty("F0000015")
+    private BigDecimal totalPrice;
+
+
+}

+ 13 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunBudgetAmountDO.java

@@ -2,12 +2,17 @@ package com.galaxis.manatee.entity.chuanyun.data.object;
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.galaxis.manatee.util.ChuanyunLocalDateTimeDeserializer;
+import com.galaxis.manatee.util.ChuanyunLocalDateTimeSerializer;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.extern.slf4j.Slf4j;
 
 import javax.persistence.Entity;
 import java.math.BigDecimal;
+import java.time.LocalDateTime;
 
 @Slf4j
 @EqualsAndHashCode(callSuper = true)
@@ -40,6 +45,14 @@ public class ChuanyunBudgetAmountDO extends BasicDO{
     private BigDecimal budgetAmount;
 
     /**
+     * 默认日期(4月份)
+     */
+    @JsonProperty("F0000006")
+    @JsonSerialize(using = ChuanyunLocalDateTimeSerializer.class)
+    @JsonDeserialize(using = ChuanyunLocalDateTimeDeserializer.class)
+    private LocalDateTime date;
+
+    /**
      * 决算金额
      */
     @JsonProperty("F0000004")

+ 106 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunBusinessEntertainmentDO.java

@@ -0,0 +1,106 @@
+package com.galaxis.manatee.entity.chuanyun.data.object;
+
+import com.dingtalk.api.response.OapiProcessinstanceGetResponse;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.galaxis.manatee.util.ChuanyunLocalDateTimeDeserializer;
+import com.galaxis.manatee.util.ChuanyunLocalDateTimeSerializer;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.persistence.Entity;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.List;
+
+@Slf4j
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Entity(name = "CHUANYUN_BUSINESS_ENTERTAINMENT")
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ChuanyunBusinessEntertainmentDO extends BasicDO{
+
+    public static final String SCHEMA_CODE ="D001789c6ce232ed7ce475bba798026820c8991";
+
+    /**
+     * 劳动合同所属公司
+     */
+    @JsonProperty("F0000001")
+    private String company;
+
+    /**
+     * 申请人
+     */
+    @JsonProperty("F0000002")
+    private String applicant;
+
+    /**
+     * 部门
+     */
+    @JsonProperty("F0000003")
+    private String department;
+
+    /**
+     * 日期
+     */
+    @JsonProperty("F0000004")
+    @JsonSerialize(using = ChuanyunLocalDateTimeSerializer.class)
+    @JsonDeserialize(using = ChuanyunLocalDateTimeDeserializer.class)
+    private LocalDateTime datetime;
+
+    /**
+     * 招待事由
+     */
+    @JsonProperty("F0000005")
+    private String reason;
+
+    /**
+     * 招待总金额(元)
+     */
+    @JsonProperty("F0000006")
+    private BigDecimal totalamount;
+
+    /**
+     * 招待人数(含接待人员)
+     */
+    @JsonProperty("F0000007")
+    private String personcount;
+
+    /**
+     * 人均餐费
+     */
+    @JsonProperty("F0000008")
+    private BigDecimal averageamount;
+
+    /**
+     * 备注
+     */
+    @JsonProperty("F0000009")
+    private String remark;
+
+    @JsonProperty("F0000010")
+    private String businessId;
+
+    public static ChuanyunBusinessEntertainmentDO formBusinessEntertainmentDTO(List<OapiProcessinstanceGetResponse.FormComponentValueVo> list) {
+        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        ChuanyunBusinessEntertainmentDO chuanyunBusinessEntertainmentDO = new ChuanyunBusinessEntertainmentDO();
+        for (OapiProcessinstanceGetResponse.FormComponentValueVo formComponentValueVo : list){
+            switch (formComponentValueVo.getName()){
+                case "劳动合同所属公司" ->chuanyunBusinessEntertainmentDO.setCompany(formComponentValueVo.getValue());
+                case "申请人"->chuanyunBusinessEntertainmentDO.setApplicant(formComponentValueVo.getValue());
+                case "部门"->chuanyunBusinessEntertainmentDO.setDepartment(formComponentValueVo.getValue());
+                case "日期"->chuanyunBusinessEntertainmentDO.setDatetime(LocalDateTime.parse(formComponentValueVo.getValue()+":00", df));
+                case "招待事由"->chuanyunBusinessEntertainmentDO.setReason(formComponentValueVo.getValue());
+                case "招待总金额(元)"->chuanyunBusinessEntertainmentDO.setTotalamount(new BigDecimal(formComponentValueVo.getValue()));
+                case "招待人数(含接待人员)"->chuanyunBusinessEntertainmentDO.setPersoncount(formComponentValueVo.getValue());
+                case "人均餐费"->chuanyunBusinessEntertainmentDO.setAverageamount(new BigDecimal(formComponentValueVo.getValue()));
+                case "备注"->chuanyunBusinessEntertainmentDO.setRemark(formComponentValueVo.getValue());
+            }
+        }
+        return chuanyunBusinessEntertainmentDO;
+    }
+}

+ 11 - 4
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunDayWorkAbcDO.java

@@ -6,11 +6,9 @@ import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 import org.hibernate.annotations.GenericGenerator;
 
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
+import javax.persistence.*;
 import java.math.BigDecimal;
+import java.time.LocalDateTime;
 
 /**
  * Created by IntelliJ IDEA.
@@ -22,8 +20,11 @@ import java.math.BigDecimal;
 @Data
 @Entity(name = "CHUANYUN_DAY_WORK_ABC")
 @JsonIgnoreProperties(ignoreUnknown = true)
+@Table(indexes = {@Index(name="project_Id_Code_Name", columnList="projectId,projectCode,projectName", unique=false)})
 public class ChuanyunDayWorkAbcDO {
 
+    public static final String SCHEMA_CODE = "D00178923542f48b44a4c10a579e94f197b1f81";
+
     @Id
     @JsonProperty(value = "ObjectId")
     private String objectId;
@@ -47,6 +48,12 @@ public class ChuanyunDayWorkAbcDO {
     private String projectName;
 
     /**
+     * 每天工时
+     */
+    @JsonProperty("day_log_date")
+    private LocalDateTime dayLogDate;
+
+    /**
      * 总工时
      */
     @JsonProperty("total_time")

+ 28 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunDevelopProjectDO.java

@@ -0,0 +1,28 @@
+package com.galaxis.manatee.entity.chuanyun.data.object;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.persistence.Entity;
+
+@Slf4j
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Entity
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ChuanyunDevelopProjectDO extends BasicDO{
+
+    /**
+     * 表名
+     */
+    public static final String SCHEMA_CODE ="D001789RDProjectNo";
+
+    @JsonProperty("F0000001")
+    private String seqNo;
+
+    @JsonProperty("F0000002")
+    private String projectName;
+}

+ 52 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunEquipmentDO.java

@@ -0,0 +1,52 @@
+package com.galaxis.manatee.entity.chuanyun.data.object;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.galaxis.manatee.entity.chuanyun.dto.ExcelColumn;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.persistence.Entity;
+
+@Slf4j
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Entity(name = "CHUANYUN_EQUIPMENT")
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ChuanyunEquipmentDO extends BasicDO{
+
+
+    /**
+     * 表名
+     */
+    public static final String SCHEMA_CODE ="D001789784c1058ac774a7eba4459cc0c134ecd";
+
+    /**
+     * 设备编号
+     */
+    @ExcelColumn(value = "设备编号", col = 1)
+    @JsonProperty("F0000001")
+    private String equipmentCode;
+
+    /**
+     * 设备配置编号
+     */
+    @ExcelColumn(value = "设备配置编号", col = 2)
+    @JsonProperty("F0000002")
+    private String equipmentConfigureCode;
+
+    /**
+     * 设备配置属性
+     */
+    @ExcelColumn(value = "设备配置属性", col = 3)
+    @JsonProperty("F0000003")
+    private String equipmentConfigureAttribute;
+
+    /**
+     * 设备配置值
+     */
+    @ExcelColumn(value = "设备配置值", col = 4)
+    @JsonProperty("F0000004")
+    private String equipmentConfigureValue;
+}

+ 32 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunEquipmentInformDO.java

@@ -0,0 +1,32 @@
+package com.galaxis.manatee.entity.chuanyun.data.object;
+
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.persistence.Entity;
+
+@Slf4j
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Entity(name = "CHUANYUN_EQUIPMENT_INFORM")
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ChuanyunEquipmentInformDO extends BasicDO{
+
+    /**
+     * 表名
+     */
+    public static final String SCHEMA_CODE ="D001789b1361b805094469c983b94de0aa57881";
+
+    @JsonProperty("F0000001")
+    private String equipmentCode;
+
+    @JsonProperty("F0000002")
+    private String equipmentMaterielCode;
+
+    @JsonProperty("F0000003")
+    private String projectId;
+}

+ 10 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunLogDO.java

@@ -43,6 +43,9 @@ public class ChuanyunLogDO extends BasicDO{
      * 按天或按周
      */
     private String dayOrWeek;
+
+
+    private String departmentName;
     /**
      * 用户
      */
@@ -56,6 +59,13 @@ public class ChuanyunLogDO extends BasicDO{
     @DateTimeFormat(pattern = "yyyy/MM/dd HH:mm:ss")
     @JsonProperty("logDate")
     private LocalDateTime logDate;
+
+    /**
+     * 周数
+     */
+    @JsonProperty("weekNumber")
+    private int weekNumber;
+
     /**
      * 日期
      */

+ 27 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunManagerProjectDO.java

@@ -0,0 +1,27 @@
+package com.galaxis.manatee.entity.chuanyun.data.object;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.persistence.Entity;
+
+@Slf4j
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Entity
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ChuanyunManagerProjectDO extends BasicDO{
+    /**
+     * 表名
+     */
+    public static final String SCHEMA_CODE ="D001789ManagermentProjectNo";
+
+    @JsonProperty("SeqNo")
+    private String seqNo;
+
+    @JsonProperty("F0000002")
+    private String projectName;
+}

+ 2 - 2
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunMaterialDO.java

@@ -2,7 +2,7 @@ package com.galaxis.manatee.entity.chuanyun.data.object;
 
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.annotation.JsonProperty;
-import com.galaxis.capsule.dto.MaterialDTO;
+import com.galaxis.manatee.entity.chuanyun.dto.MaterialDTO;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.extern.slf4j.Slf4j;
@@ -89,7 +89,7 @@ public class ChuanyunMaterialDO extends BasicDO{
         BeanUtils.copyProperties(materialDTO, chuanyunMaterialDO);
         chuanyunMaterialDO.setObjectId(UUID.randomUUID().toString());
         chuanyunMaterialDO.setTitle(materialDTO.getName());
-        chuanyunMaterialDO.setName(materialDTO.getName()+"\t"+materialDTO.getCode());
+        chuanyunMaterialDO.setName(materialDTO.getName()+"\t"+materialDTO.getMaterialPrimaryKey().getCode());
         return chuanyunMaterialDO;
     }
 }

+ 3 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunMemberHourDO.java

@@ -15,6 +15,9 @@ import javax.persistence.Entity;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
+/**
+ * 氚云,开发-》项目每日工时统计
+ */
 @Slf4j
 @EqualsAndHashCode(callSuper = true)
 @Data

+ 52 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunOperationInformationDO.java

@@ -0,0 +1,52 @@
+package com.galaxis.manatee.entity.chuanyun.data.object;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.galaxis.manatee.util.ChuanyunLocalDateTimeDeserializer;
+import com.galaxis.manatee.util.ChuanyunLocalDateTimeSerializer;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.extern.slf4j.Slf4j;
+import org.hibernate.annotations.GenericGenerator;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import java.time.LocalDateTime;
+
+@Slf4j
+@Data
+@Entity(name = "CHUANYUN_OPERATION_INFORMATION")
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ChuanyunOperationInformationDO {
+
+    /**
+     * 表名
+     */
+    public static final String SCHEMA_CODE ="";
+
+    @Id
+    @GeneratedValue(generator = "idGeneratorChuanyunMemberCost")
+    @GenericGenerator(name ="idGeneratorChuanyunMemberCost" ,strategy="com.galaxis.capsule.util.GalaxisIdGenerator")
+    private Long objectId;
+
+    /**
+     * 小车编号
+     */
+    private String equipmentId;
+
+    /**
+     * 设备参数
+     */
+    private String equipmentParameter;
+
+    /**
+     * 设备值
+     */
+    private String equipmentValue;
+
+    @JsonSerialize(using = ChuanyunLocalDateTimeSerializer.class)
+    @JsonDeserialize(using = ChuanyunLocalDateTimeDeserializer.class)
+    private LocalDateTime createtime;
+}

+ 5 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunOutDepartmentDO.java

@@ -34,7 +34,12 @@ public class ChuanyunOutDepartmentDO extends BasicDO{
     @JsonProperty("F0000001Object")
     private ChuanyunObject departmentObject;
 
+    private String departmentId;
+
 
     @JsonProperty("F0000002")
     private String outDepartment;
+
+    @JsonProperty("F0000003")
+    private String departmentCode;
 }

+ 38 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunProductDO.java

@@ -0,0 +1,38 @@
+package com.galaxis.manatee.entity.chuanyun.data.object;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.galaxis.manatee.entity.chuanyun.dto.ExcelColumn;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.hibernate.annotations.GenericGenerator;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+
+@Slf4j
+@Data
+@Entity
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ChuanyunProductDO {
+
+    @Id
+    @GeneratedValue(generator = "idGeneratorUser")
+    @GenericGenerator(name ="idGeneratorUser" ,strategy="com.galaxis.capsule.util.GalaxisIdGenerator")
+    private Long objectId;
+
+    @ExcelColumn(value = "型号", col = 1)
+    private String productModel;
+
+    @ExcelColumn(value = "名称", col = 2)
+    private String specName;
+
+    @ExcelColumn(value = "参数", col = 3)
+    private String specValue;
+
+    private String specUnit;
+
+    @ExcelColumn(value = "备注", col = 4)
+    private String remark;
+}

+ 36 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunProductLibraryDO.java

@@ -0,0 +1,36 @@
+package com.galaxis.manatee.entity.chuanyun.data.object;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.OneToMany;
+import java.util.List;
+
+@Slf4j
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Entity(name = "CHUANYUN_PRODUCT_LIBRARY")
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ChuanyunProductLibraryDO extends BasicDO{
+
+    /**
+     * 表名
+     */
+    public static final String SCHEMA_CODE ="D001789f021f2654b5b47b3b824ff413bc61194";
+
+    @JsonProperty("F0000004")
+    private String productModel;
+
+    @JsonProperty("F0000010")
+    private String productType;
+
+    @JsonProperty("D001789F4d732f3541934286b97c21a1ea1e5398")
+    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true,fetch = FetchType.EAGER)
+    private List<ChuanyunProductLibrarySpecificationsDO> list;
+}

+ 30 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunProductLibrarySpecificationsDO.java

@@ -0,0 +1,30 @@
+package com.galaxis.manatee.entity.chuanyun.data.object;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.persistence.Entity;
+
+@Slf4j
+@Entity(name = "CHUANYUN_PRODUCT_LIBRARY_SPEC")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ChuanyunProductLibrarySpecificationsDO extends BasicSubDO{
+
+    @JsonProperty("F0000007")
+    private String specName;
+
+    @JsonProperty("F0000008")
+    private String specValue;
+
+    @JsonProperty("F0000009")
+    private String specUnit;
+
+    @JsonProperty("F0000013")
+    private String remark;
+
+}

+ 54 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunProjectAttachmentDO.java

@@ -0,0 +1,54 @@
+package com.galaxis.manatee.entity.chuanyun.data.object;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.hibernate.annotations.GenericGenerator;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import java.math.BigDecimal;
+
+@Slf4j
+@Data
+@Entity(name = "CHUANYUN_PROJECT_ATTACHMENT")
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ChuanyunProjectAttachmentDO {
+
+    @Id
+    @GeneratedValue(generator = "idGeneratorUser")
+    @GenericGenerator(name ="idGeneratorUser" ,strategy="com.galaxis.capsule.util.GalaxisIdGenerator")
+    private Long objectId;
+
+    private String projectName;
+
+    private String projectCode;
+
+    private String materialCode;
+
+    private String materialName;
+
+    private String enclosureId;
+
+    private String englishName;
+
+    private String PartsOwnership;
+
+    private BigDecimal qty;
+
+    private String unit;
+
+    private BigDecimal UnitPricewithoutTax;
+
+    private String consumableParts;
+
+    private String remarks;
+
+    private BigDecimal coefficient;
+
+    private BigDecimal exchangeRate;
+
+    private BigDecimal totalPrice;
+}

+ 260 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunProjectChangeDO.java

@@ -0,0 +1,260 @@
+package com.galaxis.manatee.entity.chuanyun.data.object;
+
+import com.dingtalk.api.response.OapiProcessinstanceGetResponse;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.extern.slf4j.Slf4j;
+import net.sf.json.JSONArray;
+import org.springframework.beans.BeanUtils;
+import javax.persistence.Entity;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.util.Date;
+import java.util.List;
+import java.util.UUID;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: xuj
+ * Date: 2020/7/23
+ * @author xuj
+ */
+@Slf4j
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Entity(name = "CHUANYUN_PROJECT_CHANGE")
+@JsonIgnoreProperties(ignoreUnknown = true)
+
+public class ChuanyunProjectChangeDO extends BasicDO {
+
+    /**
+     * 表名
+     */
+    public static final String SCHEMA_CODE ="D00178958e5a5f6ce9f4bf481d293ffa07d69ba";
+
+    /**
+     * 标题
+     */
+    @JsonProperty("F0000001")
+    private String title;
+
+    /**
+     * 抄送人
+     */
+    @JsonProperty("cc_userids")
+    private String ccUserids;
+
+    /**
+     * 操作
+     */
+    @JsonProperty("biz_action")
+    private String bizAction;
+
+    /**
+     * 创建时间
+     */
+    @JsonProperty("create_time")
+    private LocalDateTime createTime;
+
+    /**
+     * 结束时间
+     */
+    @JsonProperty("finish_time")
+    private LocalDateTime finishTime;
+
+    @JsonProperty("main_process_instance_id")
+    private String mainProcessInstanceId;
+
+    @JsonProperty("is_cancel")
+    private int isCancel;
+
+    /**
+     * 发起人userId
+     */
+    @JsonProperty("originator_userid")
+    private String originatorUserid;
+
+    /**
+     * 发起人姓名
+     */
+    @JsonProperty("originator_User_Name")
+    private String originatorUserName;
+
+    /**
+     * 发起部门id
+     */
+    @JsonProperty("originator_dept_id")
+    private String originatorDeptId;
+
+    /**
+     * 发起部门名称
+     */
+    @JsonProperty("originator_Dept_Name")
+    private String originatorDeptName;
+
+    /**
+     * 审批结果: 同意 和 不同意
+     */
+    @JsonProperty("F0000015")
+    private String approvalResult;
+
+    /**
+     * 审批实例业务编号
+     */
+    @JsonProperty("F0000014")
+    private String businessId;
+
+    /**
+     * 变更类型
+     */
+    @JsonProperty("F0000002")
+    private String changeType;
+
+    /**
+     * 项目名称
+     */
+    @JsonProperty("F0000003")
+    private String projectName;
+
+    /**
+     * 变更事项
+     */
+    @JsonProperty("F0000004")
+    private String changes;
+
+    /**
+     * 项目合同内容是否变更
+     */
+    @JsonProperty("F0000005")
+    private String projectContractContentIsChange;
+
+    /**
+     * 采购合同内容是否变更
+     */
+    @JsonProperty("F0000006")
+    private String procurementContractContentIsChange;
+
+    /**
+     * 变更方案要求完成日期
+     */
+    @JsonProperty("F0000007")
+    private String completeTime;
+
+    /**
+     * 变更涉及部门
+     */
+    @JsonProperty("F0000008")
+    private String changeInvolveDeptName;
+
+    @JsonProperty("F0000013")
+    private String result;
+
+    /**
+     * 变更内容描述
+     */
+    @JsonProperty("F0000010")
+    private String changeContentDescribe;
+
+    /**
+     * 变更影响描述
+     */
+    @JsonProperty("F0000011")
+    private String changeInfluenceDescribe;
+
+    /**
+     * 备注
+     */
+    @JsonProperty("F0000012")
+    private String remarks;
+
+    /**
+     * 申请人Id
+     */
+    @JsonProperty("F0000016")
+    private String projectChangeUserId;
+
+    /**
+     * 根据ProcessInstanceTopVo获得chuanyunProjectChangeDO
+     * @param processInstanceTopVo   传输数据
+     * @return  保存数据
+     */
+    public static ChuanyunProjectChangeDO fromProjectChangeDTO(OapiProcessinstanceGetResponse.ProcessInstanceTopVo processInstanceTopVo){
+        ChuanyunProjectChangeDO chuanyunProjectChangeDO = new ChuanyunProjectChangeDO();
+        chuanyunProjectChangeDO.setIsCancel(0);
+        if(processInstanceTopVo.getOperationRecords()!= null) {
+            if(processInstanceTopVo.getOperationRecords().get(0).getUserid().equals(processInstanceTopVo.getOperationRecords().get(processInstanceTopVo.getOperationRecords().size() -1).getUserid())
+                    && processInstanceTopVo.getOperationRecords().get(0).getUserid().equals(processInstanceTopVo.getOriginatorUserid())  ) {
+                if(processInstanceTopVo.getOperationRecords().get(0).getOperationType().equals("START_PROCESS_INSTANCE")
+                        && processInstanceTopVo.getOperationRecords().get(processInstanceTopVo.getOperationRecords().size() -1).getOperationType().equals("TERMINATE_PROCESS_INSTANCE")) {
+                    chuanyunProjectChangeDO.setIsCancel(1);
+                }
+            }
+        }
+        BeanUtils.copyProperties(processInstanceTopVo, chuanyunProjectChangeDO);
+        List<OapiProcessinstanceGetResponse.FormComponentValueVo> formComponentList = processInstanceTopVo.getFormComponentValues();
+        if(formComponentList != null && formComponentList.size() > 0) {
+            for (OapiProcessinstanceGetResponse.FormComponentValueVo formComponentValueVo : formComponentList) {
+                if ("变更类型".equals(formComponentValueVo.getName())) {
+                    chuanyunProjectChangeDO.setChangeType(formComponentValueVo.getValue());
+                }
+                if ("项目名称".equals(formComponentValueVo.getName())) {
+                    chuanyunProjectChangeDO.setProjectName(formComponentValueVo.getValue());
+                }
+                if ("涉及变更项".equals(formComponentValueVo.getName())) {
+                    chuanyunProjectChangeDO.setChanges(formComponentValueVo.getValue());
+                }
+                if ("销售合同内容是否变更".equals(formComponentValueVo.getName())) {
+                    chuanyunProjectChangeDO.setProjectContractContentIsChange(formComponentValueVo.getValue());
+                }
+                if ("采购合同内容是否变更".equals(formComponentValueVo.getName())) {
+                    chuanyunProjectChangeDO.setProcurementContractContentIsChange(formComponentValueVo.getValue());
+                }
+                if ("变更方案要求完成日期".equals(formComponentValueVo.getName())) {
+                    chuanyunProjectChangeDO.setCompleteTime(formComponentValueVo.getValue());
+                }
+                if ("变更涉及部门".equals(formComponentValueVo.getName())) {
+                    chuanyunProjectChangeDO.setChangeInvolveDeptName(formComponentValueVo.getValue());
+                }
+                if ("变更内容描述".equals(formComponentValueVo.getName())) {
+                    chuanyunProjectChangeDO.setChangeContentDescribe(formComponentValueVo.getValue());
+                }
+                if ("变更影响描述".equals(formComponentValueVo.getName())) {
+                    chuanyunProjectChangeDO.setChangeInfluenceDescribe(formComponentValueVo.getValue());
+                }
+                if ("备注".equals(formComponentValueVo.getName())) {
+                    chuanyunProjectChangeDO.setRemarks(formComponentValueVo.getValue());
+                }
+            }
+        }
+        String statusA = processInstanceTopVo.getStatus();
+        if ("COMPLETED".equals(processInstanceTopVo.getStatus())){
+            chuanyunProjectChangeDO.setStatus(1);
+            chuanyunProjectChangeDO.setApprovalResult("流程已结束");
+        }else if("RUNNING".equals(statusA)){
+            chuanyunProjectChangeDO.setStatus(2);
+            chuanyunProjectChangeDO.setApprovalResult("流程进行中");
+        }else if ("TERMINATED".equals(statusA)){
+            chuanyunProjectChangeDO.setStatus(3);
+            chuanyunProjectChangeDO.setApprovalResult("流程已作废");
+        }
+        Date cratedate = new Date();
+        LocalDateTime crateDateTime = LocalDateTime.now();
+        cratedate = processInstanceTopVo.getCreateTime();
+        crateDateTime = cratedate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
+        chuanyunProjectChangeDO.setCreateTime(crateDateTime);
+        Date finishdate = new Date();
+        LocalDateTime finishDateTime = LocalDateTime.now();
+        finishdate = processInstanceTopVo.getFinishTime();
+        if(finishdate != null) {
+            finishDateTime = finishdate.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
+            chuanyunProjectChangeDO.setFinishTime(finishDateTime);
+        }
+        chuanyunProjectChangeDO.setTitle(chuanyunProjectChangeDO.getCreateTime().toLocalDate() + " " + chuanyunProjectChangeDO.getTitle() + " " + chuanyunProjectChangeDO.getBusinessId());
+        chuanyunProjectChangeDO.setObjectId(UUID.randomUUID().toString());
+        return chuanyunProjectChangeDO;
+    }
+}

+ 0 - 2
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunProjectCostDO.java

@@ -39,9 +39,7 @@ public class ChuanyunProjectCostDO {
 
     private BigDecimal totalHour;
 
-    private BigDecimal cost;
 
     private BigDecimal personDays;
 
-    private BigDecimal amount;
 }

+ 6 - 1
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunProjectTotalCostDO.java

@@ -10,6 +10,11 @@ import lombok.extern.slf4j.Slf4j;
 import javax.persistence.Entity;
 import java.math.BigDecimal;
 
+/**
+ * 氚云-》开发应用-》项目工时汇总
+ * @author kxuan
+ *
+ */
 @Slf4j
 @EqualsAndHashCode(callSuper = true)
 @Data
@@ -20,7 +25,7 @@ public class ChuanyunProjectTotalCostDO extends BasicDO{
     /**
      * 表名
      */
-    public static final String SCHEMA_CODE ="D0017895783d9521d604a32bba65a287409ba9a";
+    public static final String SCHEMA_CODE ="D001789Sncj55ndcgpx1p2acy9tuimek7";
 
     /**
      * 项目ID

+ 1 - 1
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunProjectTypeDO.java

@@ -30,6 +30,6 @@ public class ChuanyunProjectTypeDO extends BasicDO{
     /**
      * 编码
      */
-    @JsonProperty("SeqNo")
+    @JsonProperty("F0000002")
     private String projectTypeCode;
 }

+ 25 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunPurContractDO.java

@@ -0,0 +1,25 @@
+package com.galaxis.manatee.entity.chuanyun.data.object;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.persistence.Entity;
+
+@Slf4j
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Entity(name = "CHUANYUN_PURCONTRACT")
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ChuanyunPurContractDO extends BasicDO{
+
+    public static final String SCHEMA_CODE ="D0017897b322a28f07249f2b8f082d176a64686";
+
+    @JsonProperty("F0000010")
+    private String contractCode;
+
+    @JsonProperty("F0000011")
+    private String contractName;
+}

+ 16 - 5
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunReimbursementDO.java

@@ -36,7 +36,6 @@ public class ChuanyunReimbursementDO extends BasicDO{
 
     /**
      * 公司编码
-     * TODO 根据beneficiaryId替换为公司编码  完成待验证
      *
      */
     private String reimburseUserCompanyCode;
@@ -80,7 +79,6 @@ public class ChuanyunReimbursementDO extends BasicDO{
 
     /**
      * 供应商编码
-     * TODO 根据supplierId转化为code
      */
     private String supplierCode;
 
@@ -104,13 +102,11 @@ public class ChuanyunReimbursementDO extends BasicDO{
 
     /**
      * 报销人工号
-     * TODO 根据reimburseUserId转化为code
      */
     private String reimburseUserCode;
 
     /**
      * 报销人成本中心编码
-     * TODO 从todo 从reimburseUserCompanyId获取
      */
     private String reimburseUserCostCode;
 
@@ -158,7 +154,6 @@ public class ChuanyunReimbursementDO extends BasicDO{
 
     /**
      * 受益公司银行账号
-     * TODO 根据beneficiaryId获得
      */
     private String beneficiaryBankAccount;
 
@@ -191,6 +186,22 @@ public class ChuanyunReimbursementDO extends BasicDO{
     private String outDepartment;
 
     /**
+     * 受益部门名称
+     */
+    @JsonProperty("F0000117")
+    private String benefitDepartmentName;
+
+
+    @JsonProperty("F0000087")
+    private String enclosure;
+
+    /**
+     * 受益部门编码
+     */
+    @JsonProperty("F0000123")
+    private String benefitDepartmentCode;
+
+    /**
      * 受益成本中心编码
      * todo 由beneficiaryCostId获得
      */

+ 0 - 3
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunReimbursementDetailDO.java

@@ -58,7 +58,6 @@ public class ChuanyunReimbursementDetailDO extends BasicSubDO{
 
     /**
      * 报销科目
-     * todo 从reimburseSubjectId获取
      */
     private String reimburseSubjectName;
 
@@ -71,7 +70,6 @@ public class ChuanyunReimbursementDetailDO extends BasicSubDO{
 
     /**
      * 公司编码
-     * TODO 根据父表beneficiaryId替换为公司编码
      */
     private String reimburseUserCompanyCode;
 
@@ -83,7 +81,6 @@ public class ChuanyunReimbursementDetailDO extends BasicSubDO{
 
     /**
      * 项目编码
-     * todo 根据父表获得
      */
     private String groupProjectCode;
     /**

+ 28 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunSaleProjectDO.java

@@ -0,0 +1,28 @@
+package com.galaxis.manatee.entity.chuanyun.data.object;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.persistence.Entity;
+
+@Slf4j
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Entity
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ChuanyunSaleProjectDO extends BasicDO{
+
+    /**
+     * 表名
+     */
+    public static final String SCHEMA_CODE ="D001789Sb95ajzudvc8qtmiqe29topk22";
+
+    @JsonProperty("F0000034")
+    private String seqNo;
+
+    @JsonProperty("F0000025")
+    private String projectName;
+}

+ 29 - 3
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunSelfWorkHourDO.java

@@ -4,15 +4,14 @@ package com.galaxis.manatee.entity.chuanyun.data.object;
 import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
 import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.galaxis.manatee.constant.ChuanYunConstant;
 import com.galaxis.manatee.util.ChuanyunLocalDateTimeDeserializer;
 import com.galaxis.manatee.util.ChuanyunLocalDateTimeSerializer;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 import org.hibernate.annotations.GenericGenerator;
 
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.Id;
+import javax.persistence.*;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
@@ -23,6 +22,7 @@ import java.time.LocalDateTime;
 @Data
 @Entity(name = "CHUANYUN_SELF_WORK_HOUR")
 @JsonIgnoreProperties(ignoreUnknown = true)
+@Table(indexes = {@Index(name="project_user_hour", columnList="projectId,userId,standardWorkHour", unique=false)})
 public class ChuanyunSelfWorkHourDO {
 
     @Id
@@ -36,6 +36,10 @@ public class ChuanyunSelfWorkHourDO {
 
     private String projectId;
 
+    private String departmentId;
+
+    private String departmentName;
+
     /**
      * 流程状态
      */
@@ -46,4 +50,26 @@ public class ChuanyunSelfWorkHourDO {
     private LocalDateTime dayLogDate;
 
     private BigDecimal standardWorkHour;
+
+    /**
+     * 根据ChuanyunWorkHourDO对象实例化ChuanyunSelfWorkHourDO对象
+     * @param projectType 由于日志原始数据可能出现项目类型错误的情况,需要单独为projectType赋值
+     * @param chuanyunWorkHourDO 从日志原始数据中统计出来的人员单日项目工时对象
+     * @return  更新了ChuanyunWorkHourDO对象中数据的ChuanyunSelfWorkHourDO对象
+     */
+    public static ChuanyunSelfWorkHourDO fromChuanyunWorkHourDO(ChuanyunWorkHourDO chuanyunWorkHourDO,String projectType){
+        ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO = new ChuanyunSelfWorkHourDO();
+        chuanyunSelfWorkHourDO.setStatus(chuanyunWorkHourDO.getStatus());
+        chuanyunSelfWorkHourDO.setDepartmentName(chuanyunWorkHourDO.getDepartmentName());
+        chuanyunSelfWorkHourDO.setUserId(chuanyunWorkHourDO.getUserId());
+        //2021年3月3日添加,使用ChuanyunGroupProject中实际的项目类型来替代日志中的项目类型,防止出现项目类型错误的情况
+        chuanyunSelfWorkHourDO.setProjectType(projectType);
+        if (ChuanYunConstant.PRODUCTION_PROJECT.equals(chuanyunWorkHourDO.getProjectType())) {
+            chuanyunSelfWorkHourDO.setProjectId(ChuanYunConstant.PRODUCTION_PROJECT_ID);
+        } else {
+            chuanyunSelfWorkHourDO.setProjectId(chuanyunWorkHourDO.getProjectId());
+        }
+        chuanyunSelfWorkHourDO.setDayLogDate(chuanyunWorkHourDO.getDayLogDate());
+        return chuanyunSelfWorkHourDO;
+    }
 }

+ 42 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunU9DepartmentDO.java

@@ -0,0 +1,42 @@
+package com.galaxis.manatee.entity.chuanyun.data.object;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.galaxis.capsule.bo.ChuanyunObject;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.persistence.Entity;
+import javax.persistence.Transient;
+
+@Slf4j
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Entity
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ChuanyunU9DepartmentDO extends BasicDO{
+
+    /**
+     * 表名
+     */
+    public static final String SCHEMA_CODE ="D001789Sb95ajzudvc8qtmiqe29topk22";
+
+    @JsonProperty("F0000025")
+    private String projectName;
+
+    @JsonProperty("F0000061")
+    private String actualDepartment;
+
+    @JsonProperty("F0000062")
+    private String departmentName;
+
+    @JsonProperty("F0000063")
+    private String departmentCode;
+
+    @Transient
+    @JsonProperty("F0000061Object")
+    private ChuanyunObject actualDepartmentObject;
+
+
+}

+ 9 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunUserCompanyDO.java

@@ -8,6 +8,8 @@ import lombok.EqualsAndHashCode;
 import lombok.extern.slf4j.Slf4j;
 
 import javax.persistence.Entity;
+import javax.persistence.Index;
+import javax.persistence.Table;
 import javax.persistence.Transient;
 
 /**
@@ -20,6 +22,7 @@ import javax.persistence.Transient;
 @Data
 @Entity(name = "CHUANYUN_USER_COMPANY")
 @JsonIgnoreProperties(ignoreUnknown = true)
+@Table(indexes = {@Index(name="user_Id_Type", columnList="userId,userType", unique=false)})
 public class ChuanyunUserCompanyDO extends BasicDO{
 
     /**
@@ -49,6 +52,12 @@ public class ChuanyunUserCompanyDO extends BasicDO{
     private String companyId;
 
     /**
+     * 所属BG
+     */
+    @JsonProperty("F0000015")
+    private String bg;
+
+    /**
      * 成本中心ID
      */
     @JsonProperty("F0000004")

+ 22 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunUserDepartmentNameDO.java

@@ -0,0 +1,22 @@
+package com.galaxis.manatee.entity.chuanyun.data.object;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+
+@Slf4j
+@Data
+@Entity(name = "CHUANYUN_USER_DEPARTMENT_NAME")
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ChuanyunUserDepartmentNameDO {
+
+    @Id
+    private int id;
+
+    private String userName;
+
+    private String departmentName;
+}

+ 17 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunWeekMemberHourDO.java

@@ -45,4 +45,21 @@ public class ChuanyunWeekMemberHourDO {
 
     private BigDecimal standardWorkHour;
 
+    /**
+     * 将一个ChuanyunWeekMemberHourDO对象的属性赋予另外一个ChuanyunWeekMemberHourDO对象,并返回该对象
+     * @param chuanyunWeekMemberHourDO  原来的ChuanyunWeekMemberHourDO对象
+     * @return  新的对象
+     */
+    public static ChuanyunWeekMemberHourDO fromChuanyunWeekMemberHourDO(ChuanyunWeekMemberHourDO chuanyunWeekMemberHourDO){
+        ChuanyunWeekMemberHourDO newChuanyunWeekMemberHourDO=new ChuanyunWeekMemberHourDO();
+        newChuanyunWeekMemberHourDO.setProjectId(chuanyunWeekMemberHourDO.getProjectId());
+        newChuanyunWeekMemberHourDO.setProjectType(chuanyunWeekMemberHourDO.getProjectType());
+        newChuanyunWeekMemberHourDO.setStandardWorkHour(chuanyunWeekMemberHourDO.getStandardWorkHour());
+        newChuanyunWeekMemberHourDO.setStatus(chuanyunWeekMemberHourDO.getStatus());
+        newChuanyunWeekMemberHourDO.setUserId(chuanyunWeekMemberHourDO.getUserId());
+        newChuanyunWeekMemberHourDO.setYear(chuanyunWeekMemberHourDO.getYear());
+        newChuanyunWeekMemberHourDO.setWeek(chuanyunWeekMemberHourDO.getWeek());
+        return newChuanyunWeekMemberHourDO;
+    }
+
 }

+ 2 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunWorkHourDO.java

@@ -35,6 +35,8 @@ public class ChuanyunWorkHourDO {
 
     private String projectId;
 
+    private String departmentName;
+
     /**
      * 流程状态
      */

+ 30 - 14
src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunDayWorkAbcDTO.java

@@ -1,7 +1,12 @@
 package com.galaxis.manatee.entity.chuanyun.dto;
 
 import com.fasterxml.jackson.annotation.JsonProperty;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunDayWorkAbcDO;
 import lombok.Data;
+import org.springframework.beans.BeanUtils;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
 
 /**
  * Created by IntelliJ IDEA.
@@ -11,26 +16,37 @@ import lombok.Data;
 @Data
 public class ChuanyunDayWorkAbcDTO {
 
-    @JsonProperty("project_id")
+    @JsonProperty("F0000008")
     private String projectId;
 
-//    @JsonProperty("project_code")
-//    private String projectCode;
-//
-//    @JsonProperty("project_name")
-//    private String projectName;
+    @JsonProperty("F0000001")
+    private String projectCode;
+
+    @JsonProperty("F0000002")
+    private String projectName;
+
+    @JsonProperty("F0000003")
+    private BigDecimal totalTime;
+
+    @JsonProperty("F0000004")
+    private BigDecimal planTime;
 
-    @JsonProperty("total_time")
-    private String totalTime;
+    @JsonProperty("F0000005")
+    private BigDecimal sellTime;
 
-    @JsonProperty("paln_time")
-    private String planTime;
+    @JsonProperty("F0000006")
+    private BigDecimal otherTime;
 
-    @JsonProperty("sell_time")
-    private String sellTime;
+    @JsonProperty("F0000007")
+    private String remark;
 
-    @JsonProperty("other_time")
-    private String otherTime;
+    @JsonProperty("F0000009")
+    private LocalDateTime dayLogDate;
 
+    public static ChuanyunDayWorkAbcDTO fromChuanyunDayWorkAbcDTO(ChuanyunDayWorkAbcDO chuanyunDayWorkAbcDO) {
+        ChuanyunDayWorkAbcDTO chuanyunDayWorkAbcDTO = new ChuanyunDayWorkAbcDTO();
+        BeanUtils.copyProperties(chuanyunDayWorkAbcDO, chuanyunDayWorkAbcDTO);
+        return chuanyunDayWorkAbcDTO;
+    }
 
 }

+ 16 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunDeviceConfigureDTO.java

@@ -0,0 +1,16 @@
+package com.galaxis.manatee.entity.chuanyun.dto;
+
+import lombok.Data;
+
+import javax.persistence.EmbeddedId;
+
+@Data
+public class ChuanyunDeviceConfigureDTO {
+
+    private ChuanyunDeviceConfigurePrimaryKey chuanyunDeviceConfigurePrimaryKey;
+
+    private String propertyname;
+
+    private String propertyvaluename;
+
+}

+ 14 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunDeviceConfigurePrimaryKey.java

@@ -0,0 +1,14 @@
+package com.galaxis.manatee.entity.chuanyun.dto;
+
+import lombok.Data;
+
+import javax.persistence.Embeddable;
+
+@Embeddable
+@Data
+public class ChuanyunDeviceConfigurePrimaryKey {
+
+    private String sncode;
+
+    private String linenum;
+}

+ 15 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunDeviceDTO.java

@@ -0,0 +1,15 @@
+package com.galaxis.manatee.entity.chuanyun.dto;
+
+import lombok.Data;
+
+import javax.persistence.Id;
+
+@Data
+public class ChuanyunDeviceDTO {
+
+    private String sncode;
+
+    private String itemcode;
+
+    private String projectcode;
+}

+ 2 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunLaborCostPrimaryKey.java

@@ -21,4 +21,6 @@ public class ChuanyunLaborCostPrimaryKey {
     @JsonSerialize(using = LocalDateTimeSerializer.class)
     @JsonDeserialize(using = LocalDateTimeDeserializer.class)
     protected LocalDateTime period;
+
+    protected String department;
 }

+ 22 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunOperationInformationDTO.java

@@ -0,0 +1,22 @@
+package com.galaxis.manatee.entity.chuanyun.dto;
+
+import lombok.Data;
+
+@Data
+public class ChuanyunOperationInformationDTO {
+
+    /**
+     * 小车编号
+     */
+    private String equipmentId;
+
+    /**
+     * 设备参数
+     */
+    private String equipmentParameter;
+
+    /**
+     * 设备值
+     */
+    private String equipmentValue;
+}

+ 30 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunPurContractDTO.java

@@ -0,0 +1,30 @@
+package com.galaxis.manatee.entity.chuanyun.dto;
+
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
+import lombok.Data;
+
+import javax.persistence.Id;
+import java.time.LocalDateTime;
+
+@Data
+public class ChuanyunPurContractDTO {
+
+    @Id
+    private String docno;
+
+    @JsonSerialize(using = LocalDateTimeSerializer.class)
+    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
+    private LocalDateTime businessdate;
+
+    private String orgname;
+
+    private String opername;
+
+    private String docname;
+
+    private String projectcode;
+
+}

+ 19 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunPurContractDetailDTO.java

@@ -0,0 +1,19 @@
+package com.galaxis.manatee.entity.chuanyun.dto;
+
+import lombok.Data;
+
+import javax.persistence.EmbeddedId;
+import java.math.BigDecimal;
+
+@Data
+public class ChuanyunPurContractDetailDTO {
+
+    @EmbeddedId
+    private ChuanyunSalesCollectionDetailPrimaryKey chuanyunSalesCollectionDetailPrimaryKey;
+
+    private String desnote;
+
+    private BigDecimal planaccount;
+
+    private BigDecimal planpercent;
+}

+ 14 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunPurContractDetailPrimaryKey.java

@@ -0,0 +1,14 @@
+package com.galaxis.manatee.entity.chuanyun.dto;
+
+import lombok.Data;
+
+import javax.persistence.Embeddable;
+
+@Embeddable
+@Data
+public class ChuanyunPurContractDetailPrimaryKey {
+
+    private String docno;
+
+    private String doclineno;
+}

+ 23 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunPurContractOfferDTO.java

@@ -0,0 +1,23 @@
+package com.galaxis.manatee.entity.chuanyun.dto;
+
+import lombok.Data;
+
+import javax.persistence.EmbeddedId;
+import java.math.BigDecimal;
+
+@Data
+public class ChuanyunPurContractOfferDTO {
+
+    @EmbeddedId
+    private ChuanyunPurContractOfferPrimaryKey chuanyunPurContractOfferPrimaryKey;
+
+    private String suppliername;
+
+    private String itemname;
+
+    private BigDecimal qty;
+
+    private BigDecimal taxrate;
+
+    private BigDecimal mny;
+}

+ 15 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunPurContractOfferPrimaryKey.java

@@ -0,0 +1,15 @@
+package com.galaxis.manatee.entity.chuanyun.dto;
+
+import lombok.Data;
+
+import javax.persistence.Embeddable;
+import java.io.Serializable;
+
+@Embeddable
+@Data
+public class ChuanyunPurContractOfferPrimaryKey implements Serializable {
+
+    private String docno;
+
+    private String doclineno;
+}

+ 28 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunSalesCollectionDetailDTO.java

@@ -0,0 +1,28 @@
+package com.galaxis.manatee.entity.chuanyun.dto;
+
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+public class ChuanyunSalesCollectionDetailDTO {
+
+    private ChuanyunSalesCollectionDetailPrimaryKey chuanyunSalesCollectionDetailPrimaryKey;
+
+    @JsonSerialize(using = LocalDateTimeSerializer.class)
+    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
+    private LocalDateTime plandate;
+
+    private BigDecimal planaccount;
+
+    private BigDecimal planpercent;
+
+    private String desnote;
+
+    private String accountnote;
+}

+ 14 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunSalesCollectionDetailPrimaryKey.java

@@ -0,0 +1,14 @@
+package com.galaxis.manatee.entity.chuanyun.dto;
+
+import lombok.Data;
+
+import javax.persistence.Embeddable;
+
+@Embeddable
+@Data
+public class ChuanyunSalesCollectionDetailPrimaryKey {
+
+    private String docno;
+
+    private String doclineno;
+}

+ 57 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunSalesContractDTO.java

@@ -0,0 +1,57 @@
+package com.galaxis.manatee.entity.chuanyun.dto;
+
+import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
+import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
+import lombok.Data;
+
+import javax.persistence.Id;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+public class ChuanyunSalesContractDTO {
+
+    private String docno;
+
+    @JsonSerialize(using = LocalDateTimeSerializer.class)
+    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
+    private LocalDateTime businessdate;
+
+    private String orgname;
+
+    private String createdby;
+
+    private String deptcode;
+
+    private String custname;
+
+    private String projectcode;
+
+    @JsonSerialize(using = LocalDateTimeSerializer.class)
+    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
+    private LocalDateTime receivedate;
+
+    private String contractname;
+
+    private String contracttype;
+
+    private String signaddress;
+
+    private String ownercust;
+
+    private String ownertrade;
+
+    private String businessfrom;
+
+    private String businesstype;
+
+    private String contractsubtype;
+
+    private String currencyname;
+
+    private BigDecimal netmoney;
+
+    private BigDecimal totalmoney;
+}

+ 26 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunSalesContractOfferDTO.java

@@ -0,0 +1,26 @@
+package com.galaxis.manatee.entity.chuanyun.dto;
+
+import lombok.Data;
+
+import javax.persistence.EmbeddedId;
+import java.math.BigDecimal;
+
+@Data
+public class ChuanyunSalesContractOfferDTO {
+
+    private ChuanyunSalesContractOfferPrimaryKey chuanyunSalesContractOfferPrimaryKey;
+
+    private String itemname;
+
+    private BigDecimal qty;
+
+    private BigDecimal orderprice;
+
+    private BigDecimal orderpricenotax;
+
+    private BigDecimal taxrate;
+
+    private BigDecimal netmoney;
+
+    private BigDecimal totalmoney;
+}

+ 15 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ChuanyunSalesContractOfferPrimaryKey.java

@@ -0,0 +1,15 @@
+package com.galaxis.manatee.entity.chuanyun.dto;
+
+import lombok.Data;
+
+import javax.persistence.Embeddable;
+import java.io.Serializable;
+
+@Embeddable
+@Data
+public class ChuanyunSalesContractOfferPrimaryKey implements Serializable {
+
+    private String docno;
+
+    private String doclineno;
+}

+ 34 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/dto/ExcelColumn.java

@@ -0,0 +1,34 @@
+package com.galaxis.manatee.entity.chuanyun.dto;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 自定义实体类所需要的bean(Excel属性标题、位置等)
+ *
+ * @author Lynch
+ *
+ */
+@Target({ElementType.FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface ExcelColumn {
+    /**
+     * Excel标题
+     *
+     * @return
+     * @author Lynch
+     */
+    String value() default "";
+
+    /**
+     * Excel从左往右排列位置
+     *
+     * @return
+     * @author Lynch
+     */
+    int col() default 0;
+}

+ 40 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/dto/MaterialDTO.java

@@ -0,0 +1,40 @@
+package com.galaxis.manatee.entity.chuanyun.dto;
+
+import lombok.Data;
+
+import javax.persistence.EmbeddedId;
+
+@Data
+public class MaterialDTO {
+
+
+    @EmbeddedId
+    private MaterialPrimaryKey materialPrimaryKey;
+
+    /**
+     * 品名
+     */
+    private String name;
+
+    /**
+     * 名称(标签)
+     */
+    private String label;
+
+    /**
+     * 品牌
+     */
+    private String brand;
+
+    /**
+     * 库存分类
+     */
+    private String type;
+
+    /**
+     * 形态属性
+     */
+    private String property;
+
+
+}

+ 18 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/dto/MaterialPrimaryKey.java

@@ -0,0 +1,18 @@
+package com.galaxis.manatee.entity.chuanyun.dto;
+
+import lombok.Data;
+
+import javax.persistence.Column;
+import javax.persistence.Embeddable;
+import java.io.Serializable;
+
+@Embeddable
+@Data
+public class MaterialPrimaryKey implements Serializable {
+
+    private String code;
+
+    private String version;
+
+    private String organizationCode;
+}

+ 23 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/dto/U9Message.java

@@ -0,0 +1,23 @@
+package com.galaxis.manatee.entity.chuanyun.dto;
+
+import lombok.Data;
+
+/**
+ * created by IntelliJ IDEA.
+ * author: xuj
+ * date: 2020/9/16
+ */
+@Data
+public class U9Message {
+
+    private Long agentId;
+
+    private String userCode;
+
+    private String msgType;
+
+    private String msg;
+
+    private String doCno;
+
+}

+ 20 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/dto/U9ResponseMessageDTO.java

@@ -0,0 +1,20 @@
+package com.galaxis.manatee.entity.chuanyun.dto;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * created by IntelliJ IDEA.
+ * author: xuj
+ * date: 2020/9/18
+ */
+@Data
+public class U9ResponseMessageDTO {
+
+    private Long errorCode;
+
+    private String doCno;
+
+    private LocalDateTime date;
+
+}

+ 83 - 4
src/main/java/com/galaxis/manatee/manager/ClawFeign.java

@@ -4,10 +4,8 @@ import com.galaxis.capsule.dto.*;
 import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunProjectCashFlowDO;
 import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunPurCostDO;
 import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunReimbursementDO;
-import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunLaborCostDTO;
-import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunProjectCashFlowDTO;
-import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunPurCostDTO;
-import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunSupplierDTO;
+import com.galaxis.manatee.entity.chuanyun.dto.*;
+import com.galaxis.manatee.entity.chuanyun.dto.MaterialDTO;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -15,6 +13,7 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -72,6 +71,86 @@ public interface ClawFeign {
     @GetMapping("/laborcost/findAllByParameters")
     PageDTO<ChuanyunLaborCostDTO> findChuanyunLaborCost(@RequestParam Map<String,String> map);
 
+    /**
+     * 查询设备配置信息
+     * @param map
+     * @return
+     */
+    @GetMapping("/deviceconfigure/findAllByParameters")
+    PageDTO<ChuanyunDeviceConfigureDTO> findChuanyunDeviceConfigure(@RequestParam Map<String,String> map);
+
+    /**
+     * 查询设备信息
+     * @param map
+     * @return
+     */
+    @GetMapping("/device/findAllByParameters")
+    PageDTO<ChuanyunDeviceDTO> findChuanyunDevice(@RequestParam Map<String,String> map);
+
+    /**
+     * 查询销售合同信息
+     * @param map
+     * @return
+     */
+    @GetMapping("/salescontract/findAllByParameters")
+    PageDTO<ChuanyunSalesContractDTO> findChuanyunSalesContract(@RequestParam Map<String,String> map);
+
+    /**
+     * 查询销售合同报价信息
+     * @param map
+     * @return
+     */
+    @GetMapping("/salescontractoffer/findAllByParameters")
+    PageDTO<ChuanyunSalesContractOfferDTO> findChuanyunSalesContractOffer(@RequestParam Map<String,String> map);
+
+    /**
+     * 查询销售合同回款明细
+     * @param map
+     * @return
+     */
+    @GetMapping("/salescollection/findAllByParameters")
+    PageDTO<ChuanyunSalesCollectionDetailDTO> findChuanyunSalesCollectionDetail(@RequestParam Map<String,String> map);
+
+    /**
+     * 查询采购合同管理
+     * @param map
+     * @return
+     */
+    @GetMapping("/purcontract/findAllByParameters")
+    PageDTO<ChuanyunPurContractDTO> findChuanyunPurContract(@RequestParam Map<String,String> map);
+
+    /**
+     * 根据合同号查询采购合同付款情况
+     * @param docno
+     * @return
+     */
+    @GetMapping("/purcontractdetail/findallbydocno")
+    List<ChuanyunPurContractDetailDTO> findPurContractDetailByDocno(@RequestParam String docno);
+
+    /**
+     * 根据合同号查询采购明细
+     * @param docno
+     * @return
+     */
+    @GetMapping("/purcontractoffer/findallbydocno")
+    List<ChuanyunPurContractOfferDTO> findPurContractOfferByDocno(@RequestParam String docno);
+
+    /**
+     * 根据合同号查询回款明细
+     * @param docno
+     * @return
+     */
+    @GetMapping("/salescollection/findallbydocno")
+    List<ChuanyunSalesCollectionDetailDTO> findCollectionByDocno(@RequestParam String docno);
+
+    /**
+     * 根据合同号查询报价
+     * @param docno
+     * @return
+     */
+    @GetMapping("/salescontractoffer/findallbydocno")
+    List<ChuanyunSalesContractOfferDTO> findAllByDocno(@RequestParam String docno);
+
 
     /**
      * 测试

+ 20 - 2
src/main/java/com/galaxis/manatee/service/ChuanyunService.java

@@ -1,6 +1,10 @@
 package com.galaxis.manatee.service;
 
 import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunCostCollectionDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunEquipmentDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunOperationInformationDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunProductDO;
+import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunOperationInformationDTO;
 import org.springframework.scheduling.annotation.Async;
 
 import java.util.List;
@@ -27,8 +31,22 @@ public interface ChuanyunService {
      */
     void updateChuanyunDept(String code);
 
+
     /**
-     * 将领导从特定项目中剔除
+     * 设备配置信息导入
      */
-    void deleteProjectMember();
+    void importEquipment(List<ChuanyunEquipmentDO> list);
+
+    /**
+     * 更新项目中受益部门名称
+     */
+    void updateU9Department();
+
+    /**
+     * 更新小车信息
+     */
+    void updateOperationInformation(ChuanyunOperationInformationDO chuanyunOperationInformationDO);
+
+    void importProduct(List<ChuanyunProductDO> list);
+
 }

+ 141 - 16
src/main/java/com/galaxis/manatee/service/DingTalkScheduledTask.java

@@ -6,9 +6,12 @@ import com.dingtalk.api.response.OapiProcessinstanceGetResponse;
 import com.dingtalk.api.response.OapiProcessinstanceListidsResponse;
 import com.galaxis.manatee.constant.DingTalkConstant;
 import com.galaxis.manatee.dao.ChuanyunAskForLeaveDao;
-import com.galaxis.manatee.dao.ChuanyunUserCompanyDao;
+import com.galaxis.manatee.dao.ChuanyunBusinessEntertainmentDao;
+import com.galaxis.manatee.dao.ChuanyunProjectChangeDao;
 import com.galaxis.manatee.dao.DingTalkProcessInstanceDao;
 import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunAskForLeaveDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunBusinessEntertainmentDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunProjectChangeDO;
 import com.galaxis.manatee.entity.ding.DingTalkProcessInstance;
 import com.taobao.api.ApiException;
 import lombok.extern.slf4j.Slf4j;
@@ -50,22 +53,17 @@ public class DingTalkScheduledTask {
      */
     private final ChuanyunAskForLeaveDao chuanyunAskForLeaveDao;
 
-    private final ChuanyunUserCompanyDao userCompanyDao;
+    private final ChuanyunBusinessEntertainmentDao chuanyunBusinessEntertainmentDao;
+    private final ChuanyunProjectChangeDao chuanyunProjectChangeDao;
 
-    public DingTalkScheduledTask(DingTalkClient processInstanceListIdsClient, DingTalkClient processInstanceClient,ChuanyunUserCompanyDao chuanyunUserDao,
-                                 ChuanyunAskForLeaveDao chuanyunAskForLeaveDao,DingTalkProcessInstanceDao dingTalkProcessInstanceDao) {
+    public DingTalkScheduledTask(DingTalkClient processInstanceListIdsClient, DingTalkClient processInstanceClient,
+                                 ChuanyunAskForLeaveDao chuanyunAskForLeaveDao, DingTalkProcessInstanceDao dingTalkProcessInstanceDao, ChuanyunBusinessEntertainmentDao chuanyunBusinessEntertainmentDao, ChuanyunProjectChangeDao chuanyunProjectChangeDao) {
         this.processInstanceListIdsClient = processInstanceListIdsClient;
         this.processInstanceClient = processInstanceClient;
         this.dingTalkProcessInstanceDao = dingTalkProcessInstanceDao;
         this.chuanyunAskForLeaveDao = chuanyunAskForLeaveDao;
-        this.userCompanyDao = chuanyunUserDao;
-    }
-
-    /**
-     * 每小时更新
-     */
-    @Scheduled(fixedDelay = 3600000L)
-    private void updateBusinessTripProcessInstance(){
+        this.chuanyunBusinessEntertainmentDao = chuanyunBusinessEntertainmentDao;
+        this.chuanyunProjectChangeDao = chuanyunProjectChangeDao;
     }
 
     /**
@@ -88,12 +86,85 @@ public class DingTalkScheduledTask {
          updateChuanyunAskForLeave(DingTalkConstant.PROCESS_CODE_ASKFORLEAVE);
     }
 
+    /**
+     * 业务招待申请更新
+     * @throws ApiException
+     */
+    @Scheduled(fixedDelay = 3600000L,initialDelay = 10000L)
+    void updateChuanyunBusinessEntertainmentProcessInstanceList() throws ApiException {
+        updateChuanyunBusinessEntertainment(DingTalkConstant.PROCESS_CODE_BUSINESSENTERTAINMENT);
+    }
+
+    /**
+     * 每个小时定期更新项目实施变更申请数据
+     */
+    @Scheduled(fixedDelay = 3600000L,initialDelay = 10000L)
+    void updateProjectChangeProcessInstanceIdList() throws ApiException {
+        updateChuanyunProjectChangeProcessInstanceIdList(DingTalkConstant.PROCESS_CODE_PROJECT_CHANGE);
+    }
+
+
+    private void updateChuanyunBusinessEntertainment(String businessTripProcessCode) throws ApiException {
+        var flag=true;
+        //单个请求
+        var oApiProcessInstanceListIdsRequest=new OapiProcessinstanceListidsRequest();
+        oApiProcessInstanceListIdsRequest.setProcessCode(businessTripProcessCode);
+        oApiProcessInstanceListIdsRequest.setStartTime(LocalDateTime.now().minusDays(90).toInstant(ZoneOffset.UTC).toEpochMilli());
+        oApiProcessInstanceListIdsRequest.setEndTime(LocalDateTime.now().toInstant(ZoneOffset.UTC).toEpochMilli());
+        oApiProcessInstanceListIdsRequest.setCursor(0L);
+        oApiProcessInstanceListIdsRequest.setSize(20L);
+        while(flag){
+            LocalDateTime start=LocalDateTime.now();
+            OapiProcessinstanceListidsResponse oapiProcessinstanceListidsResponse=processInstanceListIdsClient.execute(oApiProcessInstanceListIdsRequest,DingTalkConstant.DING_TALK_TOKEN);
+            List<ChuanyunBusinessEntertainmentDO> chuanyunBusinessEntertainmentDOS=new ArrayList<>();
+            if(oapiProcessinstanceListidsResponse.getErrcode()!=0){
+                log.info(oapiProcessinstanceListidsResponse.getErrmsg());
+                try {
+                    Thread.sleep(5000);
+                } catch (InterruptedException e) {
+                    log.error(e.getMessage());
+                }
+                continue;
+            }
+            //逐个请求
+            oapiProcessinstanceListidsResponse.getResult().getList().forEach(resultId->{
+                Optional<DingTalkProcessInstance> instance=dingTalkProcessInstanceDao.findById(resultId);
+                if(instance.isEmpty()){
+                    OapiProcessinstanceGetRequest request=new OapiProcessinstanceGetRequest();
+                    request.setProcessInstanceId(resultId);
+                    try {
+                        OapiProcessinstanceGetResponse oapiProcessinstanceGetResponse = processInstanceClient.execute(request, DingTalkConstant.DING_TALK_TOKEN);
+                        List<OapiProcessinstanceGetResponse.FormComponentValueVo> formComponentValueVoList = oapiProcessinstanceGetResponse.getProcessInstance().getFormComponentValues();
+                        ChuanyunBusinessEntertainmentDO chuanyunBusinessEntertainmentDO = ChuanyunBusinessEntertainmentDO.formBusinessEntertainmentDTO(formComponentValueVoList);
+                        chuanyunBusinessEntertainmentDO.setBusinessId(oapiProcessinstanceGetResponse.getProcessInstance().getBusinessId());
+                        chuanyunBusinessEntertainmentDO.setObjectId(UUID.randomUUID().toString());
+                        ChuanyunBusinessEntertainmentDO oldChuanyunBusinessEntertainmentDO = chuanyunBusinessEntertainmentDao.findByBusinessId(oapiProcessinstanceGetResponse.getProcessInstance().getBusinessId());
+                        if(oldChuanyunBusinessEntertainmentDO != null ) {
+                            chuanyunBusinessEntertainmentDao.deleteById(oldChuanyunBusinessEntertainmentDO.getObjectId());
+                        }
+                        chuanyunBusinessEntertainmentDOS.add(chuanyunBusinessEntertainmentDO);
+                    } catch (ApiException e) {
+                        e.printStackTrace();
+                    }
+                }
+            });
+
+            //保存id列表和实例列表,如果有更新的内容
+            chuanyunBusinessEntertainmentDao.saveAll(chuanyunBusinessEntertainmentDOS);
+            log.info(businessTripProcessCode+"下一个cursor为"+oapiProcessinstanceListidsResponse.getResult().getNextCursor()+"保存成功"+"耗时"+ ChronoUnit.SECONDS.between(start,LocalDateTime.now())+"秒");
+            flag=null!=oapiProcessinstanceListidsResponse.getResult().getNextCursor();
+            if (flag){
+                oApiProcessInstanceListIdsRequest.setCursor(oapiProcessinstanceListidsResponse.getResult().getNextCursor());
+            }
+        }
+    }
+
     private void updateChuanyunAskForLeave(String businessTripProcessCode) throws ApiException {
             var flag=true;
             //单个请求
             var oApiProcessInstanceListIdsRequest=new OapiProcessinstanceListidsRequest();
             oApiProcessInstanceListIdsRequest.setProcessCode(businessTripProcessCode);
-            oApiProcessInstanceListIdsRequest.setStartTime(LocalDateTime.of(2019,1,1,0,0).toInstant(ZoneOffset.UTC).toEpochMilli());
+            oApiProcessInstanceListIdsRequest.setStartTime(LocalDateTime.now().minusDays(90).toInstant(ZoneOffset.UTC).toEpochMilli());
             oApiProcessInstanceListIdsRequest.setEndTime(LocalDateTime.now().toInstant(ZoneOffset.UTC).toEpochMilli());
             oApiProcessInstanceListIdsRequest.setCursor(0L);
             oApiProcessInstanceListIdsRequest.setSize(20L);
@@ -113,7 +184,7 @@ public class DingTalkScheduledTask {
                 //逐个请求
                 oapiProcessinstanceListidsResponse.getResult().getList().forEach(resultId->{
                     Optional<DingTalkProcessInstance> instance=dingTalkProcessInstanceDao.findById(resultId);
-                    if(!instance.isPresent()){
+                    if(instance.isEmpty()){
                         OapiProcessinstanceGetRequest request=new OapiProcessinstanceGetRequest();
                         request.setProcessInstanceId(resultId);
                         try {
@@ -145,7 +216,7 @@ public class DingTalkScheduledTask {
         //单个请求
         var oApiProcessInstanceListIdsRequest=new OapiProcessinstanceListidsRequest();
         oApiProcessInstanceListIdsRequest.setProcessCode(businessTripProcessCode);
-        oApiProcessInstanceListIdsRequest.setStartTime(LocalDateTime.of(2019,1,1,0,0).toInstant(ZoneOffset.UTC).toEpochMilli());
+        oApiProcessInstanceListIdsRequest.setStartTime(LocalDateTime.now().minusDays(90).toInstant(ZoneOffset.UTC).toEpochMilli());
         oApiProcessInstanceListIdsRequest.setEndTime(LocalDateTime.now().toInstant(ZoneOffset.UTC).toEpochMilli());
         oApiProcessInstanceListIdsRequest.setCursor(0L);
         oApiProcessInstanceListIdsRequest.setSize(20L);
@@ -165,7 +236,7 @@ public class DingTalkScheduledTask {
             //逐个请求
             oapiProcessinstanceListidsResponse.getResult().getList().forEach(resultId->{
                 Optional<DingTalkProcessInstance> instance=dingTalkProcessInstanceDao.findById(resultId);
-                if(!instance.isPresent()){
+                if(instance.isEmpty()){
                     //&&instance.get()==null
                     //淘宝SDK方法
                     OapiProcessinstanceGetRequest request=new OapiProcessinstanceGetRequest();
@@ -191,4 +262,58 @@ public class DingTalkScheduledTask {
             }
         }
     }
+
+    private void updateChuanyunProjectChangeProcessInstanceIdList(String businessTripProcessCode) throws ApiException {
+        var flag=true;
+        //单个请求
+        var oApiProcessInstanceListIdsRequest=new OapiProcessinstanceListidsRequest();
+        oApiProcessInstanceListIdsRequest.setProcessCode(businessTripProcessCode);
+        oApiProcessInstanceListIdsRequest.setStartTime(LocalDateTime.now().minusDays(90).toInstant(ZoneOffset.UTC).toEpochMilli());
+        oApiProcessInstanceListIdsRequest.setEndTime(LocalDateTime.now().toInstant(ZoneOffset.UTC).toEpochMilli());
+        oApiProcessInstanceListIdsRequest.setCursor(0L);
+        oApiProcessInstanceListIdsRequest.setSize(20L);
+        while(flag){
+            LocalDateTime start=LocalDateTime.now();
+            OapiProcessinstanceListidsResponse oapiProcessinstanceListidsResponse=processInstanceListIdsClient.execute(oApiProcessInstanceListIdsRequest,DingTalkConstant.DING_TALK_TOKEN);
+            List<ChuanyunProjectChangeDO> chuanyunProjectChangeDOList=new ArrayList<>();
+            if(oapiProcessinstanceListidsResponse.getErrcode()!=0){
+                log.info(oapiProcessinstanceListidsResponse.getErrmsg());
+                try {
+                    Thread.sleep(5000);
+                } catch (InterruptedException e) {
+                    log.error(e.getMessage());
+                }
+                continue;
+            }
+            //逐个请求
+            oapiProcessinstanceListidsResponse.getResult().getList().forEach(resultId->{
+                Optional<DingTalkProcessInstance> instance=dingTalkProcessInstanceDao.findById(resultId);
+                if(instance.isEmpty()){
+                    //&&instance.get()==null
+                    //淘宝SDK方法
+                    OapiProcessinstanceGetRequest request=new OapiProcessinstanceGetRequest();
+                    request.setProcessInstanceId(resultId);
+                    try {
+                        OapiProcessinstanceGetResponse oapiProcessinstanceGetResponse = processInstanceClient.execute(request, DingTalkConstant.DING_TALK_TOKEN);
+                        ChuanyunProjectChangeDO chuanyunProjectChangeDO = ChuanyunProjectChangeDO.fromProjectChangeDTO(oapiProcessinstanceGetResponse.getProcessInstance());
+                        List<ChuanyunProjectChangeDO>   existsProjectChange = chuanyunProjectChangeDao.findByTitleSQL(chuanyunProjectChangeDO.getTitle());
+                        if(existsProjectChange != null && !existsProjectChange.isEmpty()) {
+                            chuanyunProjectChangeDao.deleteById(existsProjectChange.get(0).getObjectId());
+                        }
+                        chuanyunProjectChangeDOList.add(chuanyunProjectChangeDO);
+                    } catch (ApiException e) {
+                        e.printStackTrace();
+                    }
+                }
+            });
+
+            //保存id列表和实例列表
+            chuanyunProjectChangeDao.saveAll(chuanyunProjectChangeDOList);
+            log.info(businessTripProcessCode+"下一个cursor为"+oapiProcessinstanceListidsResponse.getResult().getNextCursor()+"保存成功"+"耗时"+ ChronoUnit.SECONDS.between(start,LocalDateTime.now())+"秒");
+            flag=null!=oapiProcessinstanceListidsResponse.getResult().getNextCursor();
+            if (flag){
+                oApiProcessInstanceListIdsRequest.setCursor(oapiProcessinstanceListidsResponse.getResult().getNextCursor());
+            }
+        }
+    }
 }

+ 202 - 0
src/main/java/com/galaxis/manatee/service/LogCheckService.java

@@ -0,0 +1,202 @@
+package com.galaxis.manatee.service;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.galaxis.manatee.dao.ChuanyunSelfWorkHourDao;
+import com.galaxis.manatee.dao.ChuanyunWorkHourDao;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunMemberHourDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunSelfWorkHourDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunWorkHourDO;
+import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunSaveDTO;
+import com.galaxis.manatee.entity.chuanyun.dto.Filter;
+import com.galaxis.manatee.manager.ChuanYunManager;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author zcj
+ * @version 0.1
+ * @date 2021/3/4 4:27 上午
+ */
+@Slf4j
+@Service
+public class LogCheckService {
+    private final ObjectMapper objectMapper = new ObjectMapper();
+    private final ChuanyunWorkHourDao chuanyunWorkHourDao;
+    private final ChuanyunSelfWorkHourDao chuanyunSelfWorkHourDao;
+    private final ChuanYunManager chuanYunManager;
+
+    public LogCheckService(ChuanyunWorkHourDao chuanyunWorkHourDao, ChuanyunSelfWorkHourDao chuanyunSelfWorkHourDao, ChuanYunManager chuanYunManager) {
+        this.chuanyunWorkHourDao = chuanyunWorkHourDao;
+        this.chuanyunSelfWorkHourDao = chuanyunSelfWorkHourDao;
+        this.chuanYunManager = chuanYunManager;
+    }
+
+    /**
+     * 根据当前userId核对以下内容:
+     * 日志原始数据每日各个项目工时信息(可使用ChuanyunWorkHourDao中方法进行查询),与系统中保存每日工时(ChuanyunSelfWorkHourDO)进行比较
+     * 完成核对后,删除数据库中多余的每周工时
+     * 完成核对后,删除氚云中中多余的每周工时
+     *
+     * @param userId 用户Id
+     * @throws Exception 用户Id为空异常
+     */
+    public void checkDayWorkHour(String userId) throws Exception {
+        if (StringUtils.isEmpty(userId)) {
+            throw new Exception("用户Id为空");
+        }
+        long start = System.currentTimeMillis();
+        log.info("开始核对日志原始工时与标准化工时");
+        //根据日志原始数据获取单个人的所有工时记录
+        List<ChuanyunWorkHourDO> chuanyunWorkHourList = chuanyunWorkHourDao.getSelfWorkHour(userId);
+        //根据标准化工时获取单个人的标准化工时记录
+        List<ChuanyunSelfWorkHourDO> chuanyunSelfWorkHourList = chuanyunSelfWorkHourDao.findByUserId(userId);
+        //删除多余每日工时
+        compareDayWorkHour(chuanyunWorkHourList, chuanyunSelfWorkHourList);
+        log.info("核对耗时" + (System.currentTimeMillis() - start) + "毫秒");
+    }
+
+    /**
+     * 根据当前userId核对以下内容:
+     * 标准化每日工时统计每周工时的结果(可使用ChuanyunWeekMemberHourDao中方法进行查询),与系统中保存每周工时(ChuanyunWeekMemberHourDO)进行比较
+     * 完成核对后,更新或删除数据库中多余的每周工时
+     * 完成核对后,更新或删除氚云中中多余的每周工时
+     *
+     * @param userId 用户Id
+     * @throws Exception 用户Id为空异常
+     */
+    public void checkWeekWorkHour(String userId) throws Exception {
+        //@TODO
+        //***
+        //@TODO
+        updateChuanyunWeekWorkHour();
+        updateManateeWeekWorkHour();
+    }
+
+    /**
+     * 根据当前userId核对以下内容:
+     * 标准化每日工时统计每月工时的结果(可用ChuanyunSelfWorkHourDao中的方法),与系统中保存每月工时(ChuanyunSelfCostDO)进行比较
+     * 完成核对后,更新或删除数据库中多余的每周工时
+     * 完成核对后,更新或删除氚云中中多余的每周工时
+     *
+     * @param userId 用户Id
+     * @throws Exception 用户Id为空异常
+     */
+    public void checkMonthWorkHour(String userId) throws Exception {
+        //@TODO
+        //***
+        //@TODO
+        updateChuanyunMonthWorkHour();
+        updateManateeMonthWorkHour();
+    }
+
+    /**
+     * 根据projectId核对一下内容:
+     * 每日工时统计的每个项目的总工时(可用ChuanyunProjectCostDao中方法),与系统中保存的每个项目工时进行比较
+     * 完成核对后,更新数据库中多余的每个项目工时
+     * 完成核对后,更新氚云中多余的每个项目工时
+     *
+     * @param projectId 项目ID
+     * @throws Exception 项目Id为空异常
+     */
+    public void checkProjectWorkHour(String projectId) throws Exception {
+        //@TODO
+        //***
+        //@TODO
+        updateChuanyunProjectWorkHour();
+        updateManateeProjectWorkHour();
+    }
+
+    /**
+     * 更新氚云每周工时数据
+     */
+    private void updateChuanyunWeekWorkHour() {
+        //@TODO
+    }
+
+    /**
+     * 更新Manatee数据库每周工时数据
+     */
+    private void updateManateeWeekWorkHour() {
+        //@TODO
+    }
+
+    /**
+     * 更新氚云每月工时数据
+     */
+    private void updateChuanyunMonthWorkHour() {
+        //@TODO
+    }
+
+    /**
+     * 更新Manatee数据库每月工时数据
+     */
+    private void updateManateeMonthWorkHour() {
+        //@TODO
+    }
+
+    /**
+     * 更新氚云每个项目时数据
+     */
+    private void updateChuanyunProjectWorkHour() {
+        //@TODO
+    }
+
+    /**
+     * 更新Manatee数据库每个项目工时数据
+     */
+    private void updateManateeProjectWorkHour() {
+        //@TODO
+    }
+
+    /**
+     * 删除多余每日工时
+     *
+     * @param chuanyunWorkHourList     日志原始工时
+     * @param chuanyunSelfWorkHourList 标准化工时列表
+     */
+    private void compareDayWorkHour(List<ChuanyunWorkHourDO> chuanyunWorkHourList, List<ChuanyunSelfWorkHourDO> chuanyunSelfWorkHourList) {
+        Map<String, Integer> map = new HashMap<>(64);
+        //判断人员项目每日工时数量书否有变动
+        if (chuanyunWorkHourList.size() != chuanyunSelfWorkHourList.size()) {
+            //如果有变动将
+            for (ChuanyunWorkHourDO chuanyunWorkHourDO : chuanyunWorkHourList) {
+                map.put(chuanyunWorkHourDO.getUserId() + chuanyunWorkHourDO.getProjectId() + chuanyunWorkHourDO.getDayLogDate(), 1);
+            }
+            //比较是否有撤回工时
+            for (ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO : chuanyunSelfWorkHourList) {
+                Integer count = map.get(chuanyunSelfWorkHourDO.getUserId() + chuanyunSelfWorkHourDO.getProjectId() + chuanyunSelfWorkHourDO.getDayLogDate());
+                if (count == null) {
+                    try {
+                        //删除数据库日工时
+                        chuanyunSelfWorkHourDao.delete(chuanyunSelfWorkHourDO);
+                        //删除氚云日工时
+                        List<String> matchers = new ArrayList<>();
+                        matchers.add("F0000001_2," + chuanyunSelfWorkHourDO.getProjectId());
+                        matchers.add("F0000002_2," + chuanyunSelfWorkHourDO.getUserId());
+                        matchers.add("F0000003_2," + chuanyunSelfWorkHourDO.getDayLogDate());
+                        var filter = Filter.instance(0, 1, true, "And", matchers);
+                        var chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunMemberHourDO.SCHEMA_CODE, filter);
+                        ChuanyunSaveDTO chuanyunSaveDTO;
+                        if (chuanyunFindAllResponse.getReturnData() != null) {
+                            List<ChuanyunMemberHourDO> result = objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>() {
+                            });
+                            chuanyunSaveDTO = chuanYunManager.delete(ChuanyunMemberHourDO.SCHEMA_CODE, result.get(0).getObjectId());
+                        }
+                        log.info(chuanyunSelfWorkHourDO.getUserId() + "删除" + chuanyunSelfWorkHourDO.getDayLogDate() + "位于" + chuanyunSelfWorkHourDO.getProjectId() + "工时");
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        log.error(e.getMessage());
+                    }
+                }
+            }
+        }
+    }
+
+}

+ 111 - 0
src/main/java/com/galaxis/manatee/service/LogStandardService.java

@@ -0,0 +1,111 @@
+package com.galaxis.manatee.service;
+
+import com.galaxis.manatee.constant.ChuanYunConstant;
+import com.galaxis.manatee.dao.ChuanyunGroupProjectDao;
+import com.galaxis.manatee.dao.ChuanyunSelfWorkHourDao;
+import com.galaxis.manatee.dao.ChuanyunWorkHourDao;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunSelfWorkHourDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunUserCompanyDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunWorkHourDO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.List;
+
+/**
+ * 更新日志中所用到的服务
+ *
+ * @author zcj
+ * @version 0.1
+ * @date 2021/3/4 1:54 上午
+ */
+@Slf4j
+@Service
+public class LogStandardService {
+    private final ChuanyunWorkHourDao chuanyunWorkHourDao;
+    private final ChuanyunSelfWorkHourDao chuanyunSelfWorkHourDao;
+    private final ChuanyunGroupProjectDao chuanyunGroupProjectDao;
+
+    public LogStandardService(ChuanyunWorkHourDao chuanyunWorkHourDao, ChuanyunSelfWorkHourDao chuanyunSelfWorkHourDao, ChuanyunGroupProjectDao chuanyunGroupProjectDao) {
+        this.chuanyunWorkHourDao = chuanyunWorkHourDao;
+        this.chuanyunSelfWorkHourDao = chuanyunSelfWorkHourDao;
+        this.chuanyunGroupProjectDao = chuanyunGroupProjectDao;
+    }
+
+    /**
+     * 员工单日、各个项目工时标准化,并保存
+     *
+     * @param isRecent              是否只标准化最近一个月的数据
+     * @param chuanyunUserCompanyDO 员工信息
+     */
+    public void standardHour(ChuanyunUserCompanyDO chuanyunUserCompanyDO, boolean isRecent) {
+        if (!StringUtils.isEmpty(chuanyunUserCompanyDO.getUserId())) {
+            //从日志原始数据中获取每人每个项目每天工时。
+            //由isRecent判断是否只获取最近30天的数据
+            List<ChuanyunWorkHourDO> selfList = isRecent ? chuanyunWorkHourDao.getSelfWorkHourRecently(chuanyunUserCompanyDO.getUserId()) : chuanyunWorkHourDao.getSelfWorkHour(chuanyunUserCompanyDO.getUserId());
+            //逐一将原始工时数据标准化后,更新到标准化工时表和氚云中
+            selfList.forEach(self -> {
+                try {
+                    //新建标准化工时对象,并将原始数据更新到此对象中,并计算标准化之后的工时
+                    ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO=this.fromChuanyunWorkHourDO(self);
+                    //查询系统中是否有重复的标准化工时数据,如果有重复的人、天、项目数据,将原数据删除后更新为最新的数据
+                    try{
+                        ChuanyunSelfWorkHourDO tmpChuanyunSelfWorkHourDO = chuanyunSelfWorkHourDao.findByUserIdAndAndProjectIdAndAndDayLogDateAndProjectType(chuanyunUserCompanyDO.getUserId(), ChuanYunConstant.PRODUCTION_PROJECT.equals(self.getProjectType()) ? ChuanYunConstant.PRODUCTION_PROJECT_ID : self.getProjectId(), self.getDayLogDate(), self.getProjectType());
+                        if (tmpChuanyunSelfWorkHourDO != null) {
+                            chuanyunSelfWorkHourDao.delete(tmpChuanyunSelfWorkHourDO);
+                        }
+                        chuanyunSelfWorkHourDao.save(chuanyunSelfWorkHourDO);
+                    }catch (Exception e){
+                        log.error(e.getMessage());
+                    }
+                } catch (Exception e) {
+                    log.error(e.getMessage());
+                    log.error("" + self);
+                    e.printStackTrace();
+                }
+            });
+        }else {
+            log.warn("用户信息中userId缺失");
+        }
+    }
+
+    /**
+     * 根据日志原始数据统计的每日每人工时获取工时标准化后的标准化对象
+     * @param chuanyunWorkHourDO    日志原始统计数据
+     * @return  工时标准化对象
+     */
+    private ChuanyunSelfWorkHourDO fromChuanyunWorkHourDO(ChuanyunWorkHourDO chuanyunWorkHourDO) throws Exception {
+        //由于日志原始工时可能存在项目类型不准确的情况,需要根据项目ID获取真实的项目类型
+        String projectType;
+        try {
+            var chuanyunGroupProject = chuanyunGroupProjectDao.findByObjectId(chuanyunWorkHourDO.getProjectId());
+            if (chuanyunGroupProject == null) {
+                throw new Exception("没有找到对应的项目");
+            }
+            //如果找到相应的项目,则使用项目实际的项目类型
+            projectType=chuanyunGroupProject.getProjectType();
+        } catch (Exception e) {
+            //没有找到对应项目,使用原项目类型
+            projectType=chuanyunWorkHourDO.getProjectType();
+        }
+        ChuanyunSelfWorkHourDO chuanyunSelfWorkHourDO = ChuanyunSelfWorkHourDO.fromChuanyunWorkHourDO(chuanyunWorkHourDO,projectType);
+        //获取每人每天总工时
+        ChuanyunWorkHourDO oneDayTotalHour = chuanyunWorkHourDao.getDayWorkHour(chuanyunWorkHourDO.getUserId(), chuanyunWorkHourDO.getDayLogDate());
+        //工时标准化
+        if (oneDayTotalHour != null) {
+            BigDecimal standard = new BigDecimal(8);
+            if (oneDayTotalHour.getHoursWorked().compareTo(standard) <= 0) {
+                chuanyunSelfWorkHourDO.setStandardWorkHour(chuanyunWorkHourDO.getHoursWorked());
+            } else {
+                BigDecimal personDays = (chuanyunWorkHourDO.getHoursWorked().divide(oneDayTotalHour.getHoursWorked(), 2, RoundingMode.HALF_UP)).multiply(standard);
+                chuanyunSelfWorkHourDO.setStandardWorkHour(personDays);
+            }
+        }else{
+            throw new Exception("获取每日总工时失败");
+        }
+        return chuanyunSelfWorkHourDO;
+    }
+}

+ 123 - 0
src/main/java/com/galaxis/manatee/service/ProjectMemberService.java

@@ -0,0 +1,123 @@
+package com.galaxis.manatee.service;
+
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.galaxis.manatee.dao.ChuanyunGroupProjectDao;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunDevelopProjectDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunGroupProjectDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunManagerProjectDO;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunSaleProjectDO;
+import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunFindAllBizDTO;
+import com.galaxis.manatee.entity.chuanyun.dto.Filter;
+import com.galaxis.manatee.manager.ChuanYunManager;
+import com.galaxis.manatee.task.ChuanyunBasicDataScheduledTask;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+@Service
+@Slf4j
+public class ProjectMemberService {
+
+    private final ChuanyunBasicDataScheduledTask chuanyunBasicDataScheduledTask;
+    private final ChuanYunManager chuanYunManager;
+    private final ChuanyunGroupProjectDao chuanyunGroupProjectDao;
+
+    public ProjectMemberService(ChuanyunBasicDataScheduledTask chuanyunBasicDataScheduledTask, ChuanYunManager chuanYunManager, ChuanyunGroupProjectDao chuanyunGroupProjectDao) {
+        this.chuanyunBasicDataScheduledTask = chuanyunBasicDataScheduledTask;
+        this.chuanYunManager = chuanYunManager;
+        this.chuanyunGroupProjectDao = chuanyunGroupProjectDao;
+    }
+
+    @Async
+    public void updateManagerMember(String param) throws InterruptedException {
+        TimeUnit.SECONDS.sleep(5);
+        log.info("同步管理项目组成员");
+        var objectMapper=new ObjectMapper();
+        param=param.substring(14,param.length()-2);
+        log.info(param);
+        boolean updateFlag=false;
+        while (!updateFlag){
+            var chuanyunFindResponse =  chuanYunManager.find(ChuanyunManagerProjectDO.SCHEMA_CODE,param);
+            ChuanyunManagerProjectDO chuanyunManagerProjectDO = objectMapper.convertValue(chuanyunFindResponse.getReturnData().getBizObject(), new TypeReference<>(){});
+            if (chuanyunManagerProjectDO!=null){
+                updateFlag=true;
+                try {
+                    List<String> matchers = new ArrayList<>();
+                    matchers.add("F0000002_2,"+chuanyunManagerProjectDO.getSeqNo());
+                    var filter= Filter.instance(0,1,true,"And",matchers);
+                    ChuanyunFindAllBizDTO<Object> chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunGroupProjectDO.SCHEMA_CODE,filter);
+                    if (chuanyunFindAllResponse.getReturnData()!=null){
+                        List<ChuanyunGroupProjectDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+                        log.info("集团项目"+result.get(0));
+                        chuanyunBasicDataScheduledTask.chuanyunUpdateProjectMemberManually(result.get(0));
+                    }
+                }catch (Exception e){
+                    e.printStackTrace();
+                    log.warn(e.getMessage());
+                }
+                log.info("管理项目更新项目组成员成功");
+            }
+        }
+    }
+
+    @Async
+    public void updateSaleMember(String param) throws InterruptedException {
+        TimeUnit.SECONDS.sleep(5);
+        log.info("同步销售项目组成员");
+        var objectMapper=new ObjectMapper();
+        param=param.substring(14,param.length()-2);
+        log.info(param);
+        boolean updateFlag=false;
+        while (!updateFlag){
+            try {
+                List<String> matchers = new ArrayList<>();
+                matchers.add("F0000002_2,"+param);
+                var filter= Filter.instance(0,1,true,"And",matchers);
+                ChuanyunFindAllBizDTO<Object> chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunGroupProjectDO.SCHEMA_CODE,filter);
+                if (chuanyunFindAllResponse.getReturnData()!=null){
+                    updateFlag=true;
+                    List<ChuanyunGroupProjectDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+                    log.info("集团项目"+result.get(0));
+                    chuanyunBasicDataScheduledTask.chuanyunUpdateProjectMemberManually(result.get(0));
+                    log.info("销售项目更新项目组成员成功");
+                }
+            }catch (Exception e){
+                e.printStackTrace();
+                log.warn(e.getMessage());
+            }
+        }
+    }
+
+    @Async
+    public void updateDevelopMember(String param) throws InterruptedException {
+        TimeUnit.SECONDS.sleep(5);
+        log.info("同步研发项目组成员");
+        var objectMapper=new ObjectMapper();
+        param=param.substring(14,param.length()-2);
+        log.info(param);
+        boolean updateFlag=false;
+        while (!updateFlag){
+            try {
+                List<String> matchers = new ArrayList<>();
+                matchers.add("F0000002_2,"+param);
+                var filter= Filter.instance(0,1,true,"And",matchers);
+                ChuanyunFindAllBizDTO<Object> chuanyunFindAllResponse = chuanYunManager.findAll(ChuanyunGroupProjectDO.SCHEMA_CODE,filter);
+                if (chuanyunFindAllResponse.getReturnData()!=null){
+                    updateFlag=true;
+                    List<ChuanyunGroupProjectDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+                    log.info("集团项目"+result.get(0));
+                    chuanyunBasicDataScheduledTask.chuanyunUpdateProjectMemberManually(result.get(0));
+                    log.info("研发项目更新项目组成员成功");
+                }
+            }catch (Exception e){
+                e.printStackTrace();
+                log.warn(e.getMessage());
+            }
+        }
+    }
+}

+ 19 - 0
src/main/java/com/galaxis/manatee/service/U9WorkMessageService.java

@@ -0,0 +1,19 @@
+package com.galaxis.manatee.service;
+
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunUserDO;
+
+/**
+ * created by IntelliJ IDEA.
+ * author: xuj
+ * date: 2020/9/21
+ */
+public interface U9WorkMessageService {
+
+    /**
+     * 根据钉钉工号获取用户对象
+     * @param employeeNumber  钉钉工号
+     * @return 氚云对象
+     */
+    ChuanyunUserDO findByEmployeeNumber(String employeeNumber);
+
+}

+ 229 - 45
src/main/java/com/galaxis/manatee/service/impl/ChuanyunServiceImpl.java

@@ -7,20 +7,25 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 import com.galaxis.capsule.bo.ChuanyunObject;
 import com.galaxis.manatee.constant.ChuanYunConstant;
 import com.galaxis.manatee.constant.StringConstant;
-import com.galaxis.manatee.dao.ChuanyunCostCollectionDao;
-import com.galaxis.manatee.dao.ChuanyunUserCompanyDao;
+import com.galaxis.manatee.dao.*;
 import com.galaxis.manatee.entity.chuanyun.data.object.*;
 import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunSaveDTO;
 import com.galaxis.manatee.entity.chuanyun.dto.Filter;
 import com.galaxis.manatee.exception.BigSizeException;
 import com.galaxis.manatee.manager.ChuanYunManager;
 import com.galaxis.manatee.service.ChuanyunService;
+import com.galaxis.manatee.task.ChuanyunBasicDataScheduledTask;
 import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
 
+import javax.persistence.CascadeType;
+import javax.persistence.FetchType;
+import javax.persistence.OneToMany;
+import java.time.LocalDateTime;
 import java.util.ArrayList;
-import java.util.Arrays;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -34,12 +39,19 @@ public class ChuanyunServiceImpl implements ChuanyunService {
     private final ChuanYunManager chuanYunManager;
     private final ChuanyunCostCollectionDao chuanyunCostCollectionDao;
     private final ChuanyunUserCompanyDao chuanyunUserCompanyDao;
-    private String[] leader = {"e1feb431-91fd-4a01-8d81-a2e618b571ff","1c8c4dfa-7e22-4f4e-a672-3e080e01a283","18bf4c09-f7d7-4c01-8509-ec554c6592f0","9df86c86-87f4-4d91-ba1e-29657c6cdb65","3fcbf0e0-bf06-411b-9ce4-b77dc897ee93","0fb67380-3408-4786-bac4-44dfef738110"};
+    private final ChuanyunEquipmentInformDao chuanyunEquipmentInformDao;
+    private final ChuanyunGroupProjectDao chuanyunGroupProjectDao;
+    private final ChuanyunBasicDataScheduledTask chuanyunBasicDataScheduledTask;
+    private final ChuanyunOperationInformationDao chuanyunOperationInformationDao;
 
-    public ChuanyunServiceImpl(ChuanYunManager chuanYunManager, ChuanyunCostCollectionDao chuanyunCostCollectionDao, ChuanyunUserCompanyDao chuanyunUserCompanyDao) {
+    public ChuanyunServiceImpl(ChuanYunManager chuanYunManager, ChuanyunCostCollectionDao chuanyunCostCollectionDao, ChuanyunUserCompanyDao chuanyunUserCompanyDao, ChuanyunEquipmentInformDao chuanyunEquipmentInformDao, ChuanyunGroupProjectDao chuanyunGroupProjectDao, ChuanyunBasicDataScheduledTask chuanyunBasicDataScheduledTask, ChuanyunOperationInformationDao chuanyunOperationInformationDao) {
         this.chuanYunManager = chuanYunManager;
         this.chuanyunCostCollectionDao = chuanyunCostCollectionDao;
         this.chuanyunUserCompanyDao = chuanyunUserCompanyDao;
+        this.chuanyunEquipmentInformDao = chuanyunEquipmentInformDao;
+        this.chuanyunGroupProjectDao = chuanyunGroupProjectDao;
+        this.chuanyunBasicDataScheduledTask = chuanyunBasicDataScheduledTask;
+        this.chuanyunOperationInformationDao = chuanyunOperationInformationDao;
     }
 
     @Override
@@ -154,16 +166,56 @@ public class ChuanyunServiceImpl implements ChuanyunService {
         }
     }
 
+
+    @Override
+    public void importEquipment(List<ChuanyunEquipmentDO> list) {
+        var objectMapper=new ObjectMapper();
+        list.forEach(chuanyunEquipmentDO -> {
+            //更新氚云
+            try {
+                List<String> matchers = new ArrayList<>();
+                matchers.add("F0000001_2,"+chuanyunEquipmentDO.getEquipmentCode());
+                var filter= Filter.instance(0,1,true,"And",matchers);
+                var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunEquipmentInformDO.SCHEMA_CODE,filter);
+                if (chuanyunFindAllResponse.getReturnData()!=null){
+                    List<ChuanyunEquipmentInformDO> projectresult=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+                    chuanyunEquipmentDO.setEquipmentCode(projectresult.get(0).getObjectId());
+                }
+//                ChuanyunEquipmentInformDO chuanyunEquipmentInformDO = chuanyunEquipmentInformDao.findByEquipmentCode(chuanyunEquipmentDO.getEquipmentCode());
+//                if (chuanyunEquipmentInformDO!=null){
+//                    chuanyunEquipmentDO.setEquipmentCode(chuanyunEquipmentInformDO.getObjectId());
+//                }
+                EquipmentDTO equipmentDTO = new EquipmentDTO(chuanyunEquipmentDO);
+                var equipmentString = objectMapper.writeValueAsString(equipmentDTO);
+                ChuanyunSaveDTO chuanyunSaveDTO;
+//                if (chuanyunFindAllResponse.getReturnData()!=null) {
+//                    List<ChuanyunEquipmentDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+//                    chuanyunSaveDTO = chuanYunManager.update(ChuanyunEquipmentDO.SCHEMA_CODE,result.get(0).getObjectId(),equipmentString);
+//                }else {
+                    chuanyunSaveDTO = chuanYunManager.save(ChuanyunEquipmentDO.SCHEMA_CODE,equipmentString,true);
+//                }
+                if (chuanyunSaveDTO.getSuccessful()){
+                    log.info("新增项目配置信息成功");
+                }else {
+                    log.error("新增项目配置信息失败");
+                }
+            } catch (JsonProcessingException | BigSizeException e) {
+                e.printStackTrace();
+            }
+        });
+    }
+
     @Override
-    public void deleteProjectMember() {
+    public void updateU9Department() {
         var objectMapper=new ObjectMapper();
         var start=0;
+        var totalCount=0L;
         var flag=true;
         while (flag){
-            try {
+            try{
                 //从氚云查询数据
                 var filter= Filter.instance(start,start+pageSize,true);
-                var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunGroupProjectDO.SCHEMA_CODE,filter);
+                var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunU9DepartmentDO.SCHEMA_CODE,filter);
                 if(chuanyunFindAllResponse.getReturnData()==null){
                     flag=false;
                     continue;
@@ -173,47 +225,94 @@ public class ChuanyunServiceImpl implements ChuanyunService {
                 }else{
                     flag=false;
                 }
-                //转化为POJO
-                List<ChuanyunGroupProjectDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
-                //保存
-                result.forEach(chuanyunGroupProjectDO ->  {
-                    if (chuanyunGroupProjectDO.getProjectMemberObject()!=null&&chuanyunGroupProjectDO.getProjectMemberObject().size()>0){
-                        //判断是否是实施、研发二开、售后维保项目
-                        var specifiedProjectTypeFlag=("实施".equals(chuanyunGroupProjectDO.getProjectType())||
-                                "维保".equals(chuanyunGroupProjectDO.getProjectType())||
-                                "研发二开".equals(chuanyunGroupProjectDO.getProjectType())||
-                                "售后".equals(chuanyunGroupProjectDO.getProjectType()));
-                        var specifiedBusinessGroupFlag=ChuanyunGroupProjectDO.EBG.equals(chuanyunGroupProjectDO.getBusinessGroup());
-                        //项目组成员去除领导
-                        List<String> projectMember = new ArrayList<String>();
-                        if (specifiedBusinessGroupFlag&&specifiedProjectTypeFlag){
-                            List<ChuanyunObject> list = chuanyunGroupProjectDO.getProjectMemberObject();
-                            for (ChuanyunObject chuanyunObject:list){
-                                if (!Arrays.asList(leader).contains(chuanyunObject.getObjectId())){
-                                    projectMember.add(chuanyunObject.getObjectId());
-                                }
-                            }
-                            chuanyunGroupProjectDO.setProjectMemberList(projectMember.toArray(new String[0]));
-                            GroupProjectUpdateDTO groupProjectUpdateDTO = new GroupProjectUpdateDTO(chuanyunGroupProjectDO);
-                            try {
-                                var groupProjectUpdateString=objectMapper.writeValueAsString(groupProjectUpdateDTO);
-                                ChuanyunSaveDTO chuanyunSaveDTO=chuanYunManager.update(ChuanyunGroupProjectDO.SCHEMA_CODE,chuanyunGroupProjectDO.getObjectId(),groupProjectUpdateString);
-                                if(chuanyunSaveDTO.getSuccessful()){
-                                    log.info("删除项目组成员成功");
-                                }else{
-                                    log.warn("删除项目组成员失败");
-                                }
-                            } catch (JsonProcessingException | BigSizeException e) {
-                                e.printStackTrace();
-                            }
-                        }
-                    }
+                List<ChuanyunU9DepartmentDO> result = objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+                result.forEach(chuanyunU9DepartmentDO -> {
+                    synchroOutDepartment(chuanyunU9DepartmentDO);
                 });
-            }catch (Exception e){
-                log.error(e.getMessage());
+            }catch (JsonProcessingException  e){
                 e.printStackTrace();
+                log.warn(e.getMessage());
+            }
+        }
+    }
+
+    @Override
+    public void updateOperationInformation(ChuanyunOperationInformationDO chuanyunOperationInformationDO) {
+        chuanyunOperationInformationDO.setCreatetime(LocalDateTime.now());
+        chuanyunOperationInformationDao.save(chuanyunOperationInformationDO);
+    }
+
+    @Override
+    public void importProduct(List<ChuanyunProductDO> list) {
+        try {
+            ChuanyunProductLibraryDO chuanyunProductLibraryDO = new ChuanyunProductLibraryDO();
+            List<ChuanyunProductLibrarySpecificationsDO> list1 = new ArrayList<>();
+            list.forEach(chuanyunProductDO -> {
+                if (!StringUtils.isEmpty(chuanyunProductDO.getProductModel())){
+                    chuanyunProductLibraryDO.setProductModel(chuanyunProductDO.getProductModel());
+                }
+                ChuanyunProductLibrarySpecificationsDO chuanyunProductLibrarySpecificationsDO = new ChuanyunProductLibrarySpecificationsDO();
+                chuanyunProductLibrarySpecificationsDO.setSpecName(chuanyunProductDO.getSpecName());
+                chuanyunProductLibrarySpecificationsDO.setSpecValue(chuanyunProductDO.getSpecValue());
+                chuanyunProductLibrarySpecificationsDO.setRemark(chuanyunProductDO.getRemark());
+                list1.add(chuanyunProductLibrarySpecificationsDO);
+            });
+            var objectMapper=new ObjectMapper();
+            List<String> matchers = new ArrayList<>();
+            matchers.add("F0000004_2,"+chuanyunProductLibraryDO.getProductModel());
+            var filter= Filter.instance(0,1,true,"And",matchers);
+            var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunProductLibraryDO.SCHEMA_CODE,filter);
+            if (chuanyunFindAllResponse.getReturnData()!=null) {
+                List<ChuanyunProductLibraryDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+                chuanYunManager.delete(ChuanyunProductLibraryDO.SCHEMA_CODE,result.get(0).getObjectId());
+            }
+            ProductLibraryDTO productLibraryDTO = new ProductLibraryDTO(chuanyunProductLibraryDO);
+            productLibraryDTO.setList(list1);
+            var productString = objectMapper.writeValueAsString(productLibraryDTO);
+            ChuanyunSaveDTO chuanyunSaveDTO = chuanYunManager.save(ChuanyunProductLibraryDO.SCHEMA_CODE,productString,true);
+            if(chuanyunSaveDTO.getSuccessful()){
+                log.info("更新产品库成功");
+            }else{
+                log.warn("更新产品库失败");
+            }
+        }catch (Exception e){
+            e.printStackTrace();
+            log.error(e.getMessage());
+        }
+    }
+
+    /**
+     * 更新外部部门名称
+     * @param
+     */
+    private void synchroOutDepartment(ChuanyunU9DepartmentDO chuanyunU9DepartmentDO) {
+        try {
+            if (!StringUtils.isEmpty(chuanyunU9DepartmentDO.getActualDepartmentObject().getObjectId())){
+                var objectMapper=new ObjectMapper();
+                List<String> matchers = new ArrayList<>();
+                matchers.add("F0000001_2,"+chuanyunU9DepartmentDO.getActualDepartmentObject().getObjectId());
+                var filter= Filter.instance(0,1,true,"And",matchers);
+                var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunOutDepartmentDO.SCHEMA_CODE,filter);
+                if (chuanyunFindAllResponse.getReturnData()!=null) {
+                    List<ChuanyunOutDepartmentDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
+                    ChuanyunOutDepartmentDO firstResult = result.get(0);
+                    chuanyunU9DepartmentDO.setDepartmentName(firstResult.getOutDepartment());
+                    chuanyunU9DepartmentDO.setDepartmentCode(firstResult.getDepartmentCode());
+                }
+                outDepartmentDTO departmentDTO = new outDepartmentDTO(chuanyunU9DepartmentDO);
+                var departmentString = objectMapper.writeValueAsString(departmentDTO);
+                ChuanyunSaveDTO chuanyunSaveDTO = chuanYunManager.update(ChuanyunU9DepartmentDO.SCHEMA_CODE,chuanyunU9DepartmentDO.getObjectId(),departmentString);
+                if(chuanyunSaveDTO.getSuccessful()){
+                    log.info("更新外部部门名称成功");
+                }else{
+                    log.warn("更新外部部门名称失败");
+                }
             }
+        }catch (Exception e) {
+            e.printStackTrace();
+            log.error(e.getMessage());
         }
+
     }
 
     /**
@@ -287,6 +386,91 @@ public class ChuanyunServiceImpl implements ChuanyunService {
     }
 
     @Data
+    static class ProductLibraryDTO{
+
+        @JsonProperty("F0000004")
+        private String productModel;
+
+        @JsonProperty("D001789F4d732f3541934286b97c21a1ea1e5398")
+        @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true,fetch = FetchType.EAGER)
+        private List<ChuanyunProductLibrarySpecificationsDO> list;
+
+        public ProductLibraryDTO(ChuanyunProductLibraryDO chuanyunProductLibraryDO) {
+            if(null!=chuanyunProductLibraryDO){
+                if (null!=chuanyunProductLibraryDO.getProductModel()){
+                    this.productModel=chuanyunProductLibraryDO.getProductModel();
+                }
+            }
+        }
+    }
+
+
+    @Data
+    class outDepartmentDTO {
+
+        @JsonProperty("F0000062")
+        private String outDepartment;
+
+        @JsonProperty("F0000063")
+        private String departmentCode;
+
+        public outDepartmentDTO(ChuanyunU9DepartmentDO chuanyunU9DepartmentDO) {
+            if (null!=chuanyunU9DepartmentDO){
+                if(null!=chuanyunU9DepartmentDO.getDepartmentName()){
+                    this.outDepartment=chuanyunU9DepartmentDO.getDepartmentName();
+                }
+                if (null!=chuanyunU9DepartmentDO.getDepartmentCode()){
+                    this.departmentCode=chuanyunU9DepartmentDO.getDepartmentCode();
+                }
+            }
+        }
+    }
+
+    @Data
+    class EquipmentDTO{
+        /**
+         * 设备编号
+         */
+        @JsonProperty("F0000001")
+        private String equipmentCode;
+
+        /**
+         * 设备配置编号
+         */
+        @JsonProperty("F0000002")
+        private String equipmentConfigureCode;
+
+        /**
+         * 设备配置属性
+         */
+        @JsonProperty("F0000003")
+        private String equipmentConfigureAttribute;
+
+        /**
+         * 设备配置值
+         */
+        @JsonProperty("F0000004")
+        private String equipmentConfigureValue;
+
+        public EquipmentDTO(ChuanyunEquipmentDO chuanyunEquipmentDO){
+            if (null!=chuanyunEquipmentDO){
+                if (null!=chuanyunEquipmentDO.getEquipmentCode()){
+                    this.equipmentCode=chuanyunEquipmentDO.getEquipmentCode();
+                }
+                if (null!=chuanyunEquipmentDO.getEquipmentConfigureAttribute()){
+                    this.equipmentConfigureAttribute=chuanyunEquipmentDO.getEquipmentConfigureAttribute();
+                }
+                if (null!=chuanyunEquipmentDO.getEquipmentConfigureCode()){
+                    this.equipmentConfigureCode=chuanyunEquipmentDO.getEquipmentConfigureCode();
+                }
+                if (null!=chuanyunEquipmentDO.getEquipmentConfigureValue()){
+                    this.equipmentConfigureValue=chuanyunEquipmentDO.getEquipmentConfigureValue();
+                }
+            }
+        }
+    }
+
+    @Data
     static class ProjectUpdateDTO{
 
         @JsonProperty("OwnerId")

+ 33 - 0
src/main/java/com/galaxis/manatee/service/impl/U9WorkMessageServiceImpl.java

@@ -0,0 +1,33 @@
+package com.galaxis.manatee.service.impl;
+
+import com.galaxis.manatee.dao.ChuanyunUserDao;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunUserDO;
+import com.galaxis.manatee.service.U9WorkMessageService;
+import lombok.extern.slf4j.Slf4j;
+import lombok.extern.slf4j.XSlf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * created by IntelliJ IDEA.
+ * author: xuj
+ * date: 2020/9/21
+ */
+@Service
+@Slf4j
+public class U9WorkMessageServiceImpl implements U9WorkMessageService {
+
+    @Autowired
+    private ChuanyunUserDao chuanyunUserDao;
+
+    /**
+     * 根据钉钉工号获取用户对象
+     * @param employeeNumber  钉钉工号
+     * @return 氚云对象
+     */
+    @Override
+    public ChuanyunUserDO findByEmployeeNumber(String employeeNumber) {
+        return chuanyunUserDao.findByEmployeeNumber(employeeNumber);
+    }
+
+}

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 418 - 377
src/main/java/com/galaxis/manatee/task/ChuanyunBasicDataScheduledTask.java


+ 4 - 59
src/main/java/com/galaxis/manatee/task/ChuanyunFinancialScheduledTask.java

@@ -1,16 +1,11 @@
 package com.galaxis.manatee.task;
 
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.galaxis.manatee.dao.*;
 import com.galaxis.manatee.entity.chuanyun.data.object.*;
-import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunSaveAllDTO;
-import com.galaxis.manatee.entity.chuanyun.dto.ChuanyunSaveDTO;
 import com.galaxis.manatee.entity.chuanyun.dto.Filter;
 import com.galaxis.manatee.manager.ChuanYunManager;
-import lombok.Data;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
@@ -38,10 +33,9 @@ public class ChuanyunFinancialScheduledTask {
     private final ChuanyunGroupProjectDao chuanyunGroupProjectDao;
     private final ChuanyunUserCompanyDao chuanyunUserCompanyDao;
     private final ChuanyunUserDao chuanyunUserDao;
-    private final ChuanyunCostDao chuanyunCostDao;
     private final ChuanyunReimbursementSubjectDao chuanyunReimbursementSubjectDao;
 
-    public ChuanyunFinancialScheduledTask(ChuanYunManager chuanYunManager, ChuanyunReimbursementDao chuanyunReimbursementDao, ChuanyunCompanyDao chuanyunCompanyDao, ChuanyunSupplierDao chuanyunSupplierDao, ChuanyunGroupProjectDao chuanyunGroupProjectDao, ChuanyunUserCompanyDao chuanyunUserCompanyDao, ChuanyunUserDao chuanyunUserDao, ChuanyunCostDao chuanyunCostDao, ChuanyunReimbursementSubjectDao chuanyunReimbursementSubjectDao) {
+    public ChuanyunFinancialScheduledTask(ChuanYunManager chuanYunManager, ChuanyunReimbursementDao chuanyunReimbursementDao, ChuanyunCompanyDao chuanyunCompanyDao, ChuanyunSupplierDao chuanyunSupplierDao, ChuanyunGroupProjectDao chuanyunGroupProjectDao, ChuanyunUserCompanyDao chuanyunUserCompanyDao, ChuanyunUserDao chuanyunUserDao, ChuanyunReimbursementSubjectDao chuanyunReimbursementSubjectDao) {
         this.chuanYunManager = chuanYunManager;
         this.chuanyunReimbursementDao = chuanyunReimbursementDao;
         this.chuanyunCompanyDao = chuanyunCompanyDao;
@@ -49,7 +43,6 @@ public class ChuanyunFinancialScheduledTask {
         this.chuanyunGroupProjectDao = chuanyunGroupProjectDao;
         this.chuanyunUserCompanyDao = chuanyunUserCompanyDao;
         this.chuanyunUserDao = chuanyunUserDao;
-        this.chuanyunCostDao = chuanyunCostDao;
         this.chuanyunReimbursementSubjectDao = chuanyunReimbursementSubjectDao;
     }
 
@@ -97,9 +90,6 @@ public class ChuanyunFinancialScheduledTask {
                     }catch (NoSuchElementException e){
                         //没有之前的数据不做处理
                     }
-                    //TODO 等财务定义外部名称
-                    //同步报销单中外部部门名称
-//                    synchroOutDepartment(chuanyunReimbursementDO);
 
                     //将报销单中关联信息的id转化为具体的数据
                     try{
@@ -123,13 +113,13 @@ public class ChuanyunFinancialScheduledTask {
                             ChuanyunUserCompanyDO chuanyunUserCompany=userCompanyList.get(0);
                             chuanyunReimbursementDO.setReimburseUserCostCode(chuanyunUserCompany.getCostCode());
                         }
-                        ChuanyunCostDO chuanyunCostDO=chuanyunCostDao.findById(chuanyunReimbursementDO.getBeneficiaryCostId()).orElseThrow();
+//                        ChuanyunCostDO chuanyunCostDO=chuanyunCostDao.findById(chuanyunReimbursementDO.getBeneficiaryCostId()).orElseThrow();
                         chuanyunReimbursementDO.setBusinessDate(chuanyunReimbursementDO.getCreatedTime());
                         chuanyunReimbursementDO.setReimburseUserCompanyCode(chuanyunCompanyDO.getErpCode());
                         chuanyunReimbursementDO.setReimburseUserCode(chuanyunUserDO.getEmployeeNumber());
                         chuanyunReimbursementDO.setBeneficiaryBankCode(chuanyunCompanyDO.getBankCode());
                         chuanyunReimbursementDO.setBeneficiaryBankAccount(chuanyunCompanyDO.getBankAccount());
-                        chuanyunReimbursementDO.setBeneficiaryCostCode(chuanyunCostDO.getCostCode());
+//                        chuanyunReimbursementDO.setBeneficiaryCostCode(chuanyunCostDO.getCostCode());
                         chuanyunReimbursementDO.setCurrency("C001");
                         chuanyunReimbursementDO.setExchangeRate(new BigDecimal("1"));
                         chuanyunReimbursementDO.setSettlementMethod("101");
@@ -140,7 +130,7 @@ public class ChuanyunFinancialScheduledTask {
                             chuanyunReimbursementDetailDO.setReimburseSubjectName(chuanyunReimbursementSubjectDO.getSubjectName());
                             chuanyunReimbursementDetailDO.setReimburseUserCompanyCode(chuanyunCompanyDO.getErpCode());
                             chuanyunReimbursementDetailDO.setGroupProjectCode(chuanyunGroupProjectCode.toString());
-                            chuanyunReimbursementDetailDO.setReimburseUserCostCode(chuanyunCostDO.getCostCode());
+//                            chuanyunReimbursementDetailDO.setReimburseUserCostCode(chuanyunCostDO.getCostCode());
                         });
                     }catch (Exception e){
                         log.warn(e.getMessage());
@@ -156,51 +146,6 @@ public class ChuanyunFinancialScheduledTask {
         log.info("报销信息保存保存"+totalCount);
     }
 
-    /**
-     * 更新外部部门名称
-     * @param chuanyunReimbursementDO
-     */
-    private void synchroOutDepartment(ChuanyunReimbursementDO chuanyunReimbursementDO) {
-        try {
-            var objectMapper=new ObjectMapper();
-            List<String> matchers = new ArrayList<>();
-            matchers.add("F0000001_2,"+chuanyunReimbursementDO.getDepartmentObject().getObjectId());
-            var filter= Filter.instance(0,1,true,"And",matchers);
-            var chuanyunFindAllResponse=chuanYunManager.findAll(ChuanyunOutDepartmentDO.SCHEMA_CODE,filter);
-            if (chuanyunFindAllResponse.getReturnData()!=null) {
-                List<ChuanyunOutDepartmentDO> result=objectMapper.convertValue(chuanyunFindAllResponse.getReturnData().getBizObjectArray(), new TypeReference<>(){});
-                ChuanyunOutDepartmentDO firstResult = result.get(0);
-                chuanyunReimbursementDO.setOutDepartment(firstResult.getOutDepartment());
-            }else {
-                chuanyunReimbursementDO.setOutDepartment(chuanyunReimbursementDO.getDepartment());
-            }
-            outDepartmentDTO departmentDTO = new outDepartmentDTO(chuanyunReimbursementDO);
-            var departmentString = objectMapper.writeValueAsString(departmentDTO);
-            ChuanyunSaveDTO chuanyunSaveDTO = chuanYunManager.update(ChuanyunReimbursementDO.SCHEMA_CODE,chuanyunReimbursementDO.getObjectId(),departmentString);
-            if(chuanyunSaveDTO.getSuccessful()){
-                log.info("更新外部部门名称成功");
-            }else{
-                log.warn("更新外部部门名称失败");
-            }
-        }catch (Exception e) {
-            e.printStackTrace();
-            log.error(e.getMessage());
-        }
-
-    }
-
-    @Data
-    class outDepartmentDTO {
 
-        @JsonProperty("F0000112")
-        private String outDepartment;
 
-        public outDepartmentDTO(ChuanyunReimbursementDO chuanyunReimbursementDO) {
-            if (chuanyunReimbursementDO!=null){
-                if (chuanyunReimbursementDO.getOutDepartment()!=null){
-                    this.outDepartment=chuanyunReimbursementDO.getOutDepartment();
-                }
-            }
-        }
-    }
 }

+ 0 - 0
src/main/java/com/galaxis/manatee/task/ChuanyunHumanResourceScheduledTask.java


이 변경점에서 너무 많은 파일들이 변경되어 몇몇 파일들은 표시되지 않았습니다.