wzy 1 тиждень тому
батько
коміт
7957868b83

+ 22 - 0
mjava-huagao/pom.xml

@@ -25,6 +25,28 @@
             <artifactId>spring-boot-starter-test</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <version>8.0.32</version>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+            <version>3.5.3.2</version>
+        </dependency>
+        <!--MP自动生成器依赖-->
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-generator</artifactId>
+            <version>3.5.3.1</version>
+        </dependency>
+        <dependency> <!--自动生成的模板:模板有三种:Velocity(默认)、Freemarker、Beetl -->
+            <groupId>org.apache.velocity</groupId>
+            <artifactId>velocity</artifactId>
+            <version>1.7</version>
+        </dependency>
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>

+ 23 - 0
mjava-huagao/src/main/java/com/malk/huagao/controller/HuaGaoController.java

@@ -53,4 +53,27 @@ public class HuaGaoController {
         huaGaoService.getCheckWorkDateDetails(data);
         return McR.success();
     }
+
+    /**
+     * 宜搭非生产单价同步至数据库
+     * @param map
+     * @return
+     */
+    @PostMapping("/upsertNonProdPrice")
+    McR upsertNonProdPrice(@RequestBody Map map) {
+        huaGaoService.upsertNonProdPrice(map);
+        return McR.success();
+    }
+
+    /**
+     * 宜搭生产工时单价同步至数据库
+     * @param map
+     * @return
+     */
+    @PostMapping("/upsertWorkHoursPrice")
+    McR upsertWorkHoursPrice(@RequestBody Map map) {
+        huaGaoService.upsertWorkHoursPrice(map);
+        return McR.success();
+    }
+
 }

+ 11 - 0
mjava-huagao/src/main/java/com/malk/huagao/service/HuaGaoService.java

@@ -17,4 +17,15 @@ public interface HuaGaoService {
     void getCheckWorkDateDetails(Map data);
 
     void syncKqData(LocalDateTime startTime, LocalDateTime endTime);
+
+    void upsertNonProdPrice(Map map);
+
+    void upsertWorkHoursPrice(Map map);
+
+    /**
+     * 同步员工工时投入
+     * @param startTime
+     * @param endTime
+     */
+//    void syncUserInput(LocalDateTime startTime, LocalDateTime endTime);
 }

+ 150 - 0
mjava-huagao/src/main/java/com/malk/huagao/service/impl/HuaGaoServiceImpl.java

@@ -1,13 +1,22 @@
 package com.malk.huagao.service.impl;
 
+import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.NumberUtil;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.malk.huagao.entity.YdNonProdPrice;
+import com.malk.huagao.entity.YdProdWorkHoursPrice;
+import com.malk.huagao.entity.YdUserInput;
+import com.malk.huagao.mapper.YdNonProdPriceMapper;
+import com.malk.huagao.mapper.YdProdWorkHoursPriceMapper;
+import com.malk.huagao.mapper.YdUserInputMapper;
 import com.malk.huagao.service.HuaGaoService;
 import com.malk.server.aliwork.YDConf;
 import com.malk.server.aliwork.YDParam;
 import com.malk.server.common.McException;
 import com.malk.server.dingtalk.DDR;
+import com.malk.server.dingtalk.DDR_New;
 import com.malk.service.aliwork.YDClient;
 import com.malk.service.aliwork.YDService;
 import com.malk.service.dingtalk.DDClient;
@@ -21,6 +30,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
+import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.time.LocalDateTime;
 import java.util.*;
@@ -52,6 +62,15 @@ public class HuaGaoServiceImpl implements HuaGaoService {
     @Autowired
     private FXKClient fxkClient;
 
+    @Autowired
+    private YdUserInputMapper ydUserInputMapper;
+
+    @Autowired
+    private YdNonProdPriceMapper ydNonProdPriceMapper;
+
+    @Autowired
+    private YdProdWorkHoursPriceMapper ydProdWorkHoursPriceMapper;
+
     @Autowired
     private static final long DEPT_ID = 971482089L; // 合作加盟校区
 
@@ -206,12 +225,143 @@ private Map crcreateUser_dingTalk(String name, String randomAccount, String rand
                         String workTime="休息".equals(dataMap.get("82772125"))?
                                 dataMap.get("89349019"): NumberUtil.add(dataMap.get("89349019"),dataMap.get("82772106")).toString();
                         saveData(user,date,workTime,price);
+
+                        //同步到数据库
+                        LambdaQueryWrapper<YdUserInput> ydUserInputLambdaQueryWrapper = new LambdaQueryWrapper<>();
+                        ydUserInputLambdaQueryWrapper.eq(YdUserInput::getUserId,user)
+                                .eq(YdUserInput::getDate, date);
+
+                        YdUserInput ydUserInput = ydUserInputMapper.selectOne(ydUserInputLambdaQueryWrapper);
+
+                        if (Objects.nonNull(ydUserInput)){
+                            ydUserInput.setWorkHours(workTime);
+                            ydUserInput.setPrice(price);
+                            ydUserInput.setTotalPrice(NumberUtil.mul(workTime,price));
+
+                            ydUserInputMapper.update(ydUserInput,ydUserInputLambdaQueryWrapper);
+                        }else {
+                            try {
+                                ydUserInput = new YdUserInput();
+                                ydUserInput.setUserId(user);
+                                SimpleDateFormat formatter = new SimpleDateFormat(UtilDateTime.DATE_TIME_PATTERN);
+                                ydUserInput.setDate(formatter.parse(date));
+                                ydUserInput.setWorkHours(workTime);
+                                ydUserInput.setPrice(price);
+                                ydUserInput.setTotalPrice(NumberUtil.mul(workTime,price));
+
+                                ydUserInputMapper.insert(ydUserInput);
+                            }catch (ParseException e){
+                                log.info("无法解析日期字符串: {}",e.getMessage());
+                            }
+                        }
                     }
                 }
             }
         }
     }
 
+    @Override
+    public void upsertNonProdPrice(Map map) {
+        String formInstId = UtilMap.getString(map, "formInstId");
+
+        Map formData = ydClient.queryData(YDParam.builder()
+                .formInstId(formInstId)
+                .build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
+
+        String type = UtilMap.getString(formData, "textField_m8fljzks");
+        String form = UtilMap.getString(formData, "textField_m8fljzkt");
+        String position = UtilMap.getString(formData, "textField_m8fljzku");
+        String materialCodeLeft = UtilMap.getString(formData, "textField_m8fljzkv");
+        String price = UtilMap.getString(formData, "numberField_m8fljzkw");
+
+        LambdaQueryWrapper<YdNonProdPrice> ydNonProdPriceLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        ydNonProdPriceLambdaQueryWrapper.eq(YdNonProdPrice::getType,type)
+                .eq(YdNonProdPrice::getForm,form)
+                .eq(YdNonProdPrice::getPosition,position)
+                .eq(YdNonProdPrice::getMaterialCodeLeft,materialCodeLeft);
+
+        YdNonProdPrice ydNonProdPrice = ydNonProdPriceMapper.selectOne(ydNonProdPriceLambdaQueryWrapper);
+        if (Objects.nonNull(ydNonProdPrice)){
+            ydNonProdPrice.setPrice(price);
+
+            ydNonProdPriceMapper.update(ydNonProdPrice,ydNonProdPriceLambdaQueryWrapper);
+        }else {
+            ydNonProdPrice = new YdNonProdPrice();
+            ydNonProdPrice.setType(type);
+            ydNonProdPrice.setForm(form);
+            ydNonProdPrice.setPosition(position);
+            ydNonProdPrice.setMaterialCodeLeft(materialCodeLeft);
+            ydNonProdPrice.setPrice(price);
+
+            ydNonProdPriceMapper.insert(ydNonProdPrice);
+        }
+    }
+
+    @Override
+    public void upsertWorkHoursPrice(Map map) {
+        String formInstId = UtilMap.getString(map, "formInstId");
+
+        Map formData = ydClient.queryData(YDParam.builder()
+                .formInstId(formInstId)
+                .build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
+
+        String type = UtilMap.getString(formData, "selectField_m8zib4co");
+        String price = UtilMap.getString(formData, "numberField_m8zib4cp");
+
+        LambdaQueryWrapper<YdProdWorkHoursPrice> ydProdWorkHoursPriceLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        ydProdWorkHoursPriceLambdaQueryWrapper.eq(YdProdWorkHoursPrice::getType,type);
+
+        YdProdWorkHoursPrice ydProdWorkHoursPrice = ydProdWorkHoursPriceMapper.selectOne(ydProdWorkHoursPriceLambdaQueryWrapper);
+        if (Objects.nonNull(ydProdWorkHoursPrice)){
+            ydProdWorkHoursPrice.setPrice(price);
+
+            ydProdWorkHoursPriceMapper.update(ydProdWorkHoursPrice,ydProdWorkHoursPriceLambdaQueryWrapper);
+        }else {
+            ydProdWorkHoursPrice = new YdProdWorkHoursPrice();
+            ydProdWorkHoursPrice.setType(type);
+            ydProdWorkHoursPrice.setPrice(price);
+
+            ydProdWorkHoursPriceMapper.insert(ydProdWorkHoursPrice);
+        }
+    }
+
+    /*@Override
+    public void syncUserInput(LocalDateTime startTime, LocalDateTime endTime) {
+        List<Map> dataList = getYdFormDataList("FORM-78BF5DE20E244369BD475C11A5CA48A0ZAQJ", "", YDConf.FORM_QUERY.retrieve_list_all);
+
+        for (Map data : dataList) {
+            Map formData = UtilMap.getMap(data, "formData");
+
+            YdUserInput ydUserInput = new YdUserInput();
+            ydUserInput.setUser(UtilMap.getList(formData, "employeeField_m8cu0g58").get(0).toString());
+            ydUserInput.setUserId(UtilMap.getList(formData, "employeeField_m8cu0g58_id").get(0).toString());
+
+            ydUserInput.setDate(new Date(UtilMap.getLong(formData,"dateField_m8e53oef")));
+            ydUserInput.setWorkHours(UtilMap.getString(formData,"numberField_m8ctvm2e"));
+            ydUserInput.setPrice(UtilMap.getString(formData,"numberField_m8e53oeg"));
+            ydUserInput.setTotalPrice(UtilMap.getString(formData,"numberField_m8e53oeh"));
+
+            ydUserInputMapper.insert(ydUserInput);
+        }
+    }*/
+
+    private List<Map> getYdFormDataList(String formUuid, String searchCondition, YDConf.FORM_QUERY formQuery) {
+        List<Map> list = new ArrayList<>();
+        DDR_New ddrNew = new DDR_New();
+        int pageNumber = 1;
+        int pageSize = 100;
+        do {
+            ddrNew = ydClient.queryData(YDParam.builder().formUuid(formUuid)
+                    .searchCondition(searchCondition)
+                    .pageNumber(pageNumber)
+                    .pageSize(pageSize).build(), formQuery);
+
+            list.addAll((List<Map>) ddrNew.getData());
+            pageNumber++;
+        }while (ddrNew.getTotalCount() > ddrNew.getPageNumber() * pageSize);
+        return list;
+    }
+
     private Map<String,Map<String,String>> toDateMap(List<Map> valList){
         Map<String,Map<String,String>>  result = new HashMap<>();
         for(Map map:valList){

+ 44 - 0
mjava-huagao/src/main/java/com/malk/huagao/utils/MPGenerator.java

@@ -0,0 +1,44 @@
+package com.malk.huagao.utils;
+
+import com.baomidou.mybatisplus.generator.FastAutoGenerator;
+import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
+import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;
+
+import java.sql.Types;
+
+public class MPGenerator {
+    public static void main(String[] args) {
+        //可以直接去官方文档上查看
+        FastAutoGenerator
+                .create("jdbc:mysql://mes.huagaochina.com:7707/huagao",
+                        "root", "HG_root@2025..")
+                .globalConfig(builder -> {
+                    builder.author("WZY")
+                            .disableOpenDir()
+                            .outputDir(System.getProperty("user.dir")+
+                                    "/mjava-huagao/src/main/java");
+                })
+                .dataSourceConfig(builder ->
+                        builder.typeConvertHandler((globalConfig, typeRegistry, metaInfo) -> {
+                            int typeCode = metaInfo.getJdbcType().TYPE_CODE;
+                            if (typeCode == Types.SMALLINT) {
+                                return DbColumnType.INTEGER;
+                            }
+                            return typeRegistry.getColumnType(metaInfo);
+                        }))
+                .packageConfig(builder -> {
+                    builder.parent("com.malk.huagao")
+                            .controller("controller")
+                            .service("service")
+                            .serviceImpl("service.impl")
+                            .mapper("mapper")
+                            .entity("entity");
+                })
+                .strategyConfig(builder -> {
+                    builder.addInclude("YD_PROD_WORK_HOURS_PRICE")
+                            .entityBuilder().enableLombok();
+                })
+                .templateEngine(new VelocityTemplateEngine())
+                .execute();
+    }
+}

+ 19 - 2
mjava-huagao/src/main/resources/application-dev.yml

@@ -4,12 +4,29 @@ server:
     context-path: /huagao
 
 enable:
-  scheduling: true
+  scheduling: false
 logging:
   config: classpath:logback-spring.xml
   path: /home/server/huagao/log/
   level:
-    com.malk.*: info
+    com.malk.*: debug
+
+spring:
+  datasource:
+    url: jdbc:mysql://mes.huagaochina.com:7707/huagao?serverTimezone=GMT%2B8
+    username: root
+    password: HG_root@2025..
+    driver-class-name: com.mysql.cj.jdbc.Driver
+
+mybatis-plus:
+  configuration:
+    #开启驼峰命名自动映射
+    map-underscore-to-camel-case: true
+    #开启日志打印
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+  type-aliases-package: com.malk.huagao.entity
+  #扫描mapper文件
+  mapper-locations: classpath:mapper/*.xml
 
 # dingtalk
 dingtalk:

+ 16 - 0
mjava-huagao/src/test/java/com/malk/huagao/YyYdTest.java

@@ -21,7 +21,9 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
+import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.LocalTime;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
@@ -82,4 +84,18 @@ public class YyYdTest {
 //        List<Map> attColumns = ddClientAttendance.getAttColumns(ddClient.getAccessToken());
 //        System.out.println(attColumns);
     }
+
+    @Test
+    public void test2() {
+        //同步员工投入历史数据
+//        huaGaoService.syncUserInput(LocalDateTime.now(),LocalDateTime.now());
+    }
+
+    @Test
+    public void test3() {
+        LocalDateTime startTime= LocalDate.now().minusDays(1).atTime(LocalTime.MIN);
+        LocalDateTime endTime= LocalDate.now().atTime(LocalTime.MIN);
+
+        huaGaoService.syncKqData(startTime,endTime);
+    }
 }