HuaGaoServiceImpl.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. package com.malk.huagao.service.impl;
  2. import cn.hutool.core.date.DateUtil;
  3. import cn.hutool.core.util.NumberUtil;
  4. import com.alibaba.fastjson.JSON;
  5. import com.alibaba.fastjson.JSONObject;
  6. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  7. import com.malk.huagao.entity.YdNonProdPrice;
  8. import com.malk.huagao.entity.YdProdWorkHoursPrice;
  9. import com.malk.huagao.entity.YdUserInput;
  10. import com.malk.huagao.mapper.YdNonProdPriceMapper;
  11. import com.malk.huagao.mapper.YdProdWorkHoursPriceMapper;
  12. import com.malk.huagao.mapper.YdUserInputMapper;
  13. import com.malk.huagao.service.HuaGaoService;
  14. import com.malk.server.aliwork.YDConf;
  15. import com.malk.server.aliwork.YDParam;
  16. import com.malk.server.common.McException;
  17. import com.malk.server.dingtalk.DDR;
  18. import com.malk.server.dingtalk.DDR_New;
  19. import com.malk.service.aliwork.YDClient;
  20. import com.malk.service.aliwork.YDService;
  21. import com.malk.service.dingtalk.DDClient;
  22. import com.malk.service.dingtalk.DDClient_Attendance;
  23. import com.malk.service.dingtalk.DDClient_Contacts;
  24. import com.malk.service.fxiaoke.FXKClient;
  25. import com.malk.utils.UtilDateTime;
  26. import com.malk.utils.UtilMap;
  27. import lombok.extern.slf4j.Slf4j;
  28. import org.springframework.beans.factory.annotation.Autowired;
  29. import org.springframework.beans.factory.annotation.Value;
  30. import org.springframework.stereotype.Service;
  31. import java.text.ParseException;
  32. import java.text.SimpleDateFormat;
  33. import java.time.LocalDateTime;
  34. import java.util.*;
  35. @Slf4j
  36. @Service
  37. public class HuaGaoServiceImpl implements HuaGaoService {
  38. @Autowired
  39. private YDService ydService;
  40. @Autowired
  41. private YDClient ydClient;
  42. @Autowired
  43. private DDClient_Contacts ddClient_contacts;
  44. @Autowired
  45. private DDClient_Attendance ddClientAttendance;
  46. @Autowired
  47. private DDClient ddClient;
  48. @Autowired
  49. private YdUserInputMapper ydUserInputMapper;
  50. @Autowired
  51. private YdNonProdPriceMapper ydNonProdPriceMapper;
  52. @Autowired
  53. private YdProdWorkHoursPriceMapper ydProdWorkHoursPriceMapper;
  54. @Override
  55. public void syncKqData(LocalDateTime startTime, LocalDateTime endTime) {
  56. String stTime=UtilDateTime.formatLocal(startTime,UtilDateTime.DATE_TIME_PATTERN);
  57. String edTime=UtilDateTime.formatLocal(endTime,UtilDateTime.DATE_TIME_PATTERN);
  58. List<Map> list=ydService.queryAllFormData(YDParam.builder().formUuid("FORM-5061F7AE543B429C8241EC730A6F31653NNK").build());
  59. for(Map map:list){
  60. Map formData= UtilMap.getMap(map,"formData");
  61. String deptId=String.valueOf(UtilMap.getList(formData,"departmentSelectField_m8e4zaju_id").get(0));
  62. String price=UtilMap.getString(formData,"numberField_m8e4zajw_value");
  63. List<String> users=ddClient_contacts.listDepartmentUserId(ddClient.getAccessToken(),Long.parseLong(deptId));
  64. for (String user : users) {
  65. List<Map> valList=ddClientAttendance.getAttColumnVal(ddClient.getAccessToken(),user, Arrays.asList("82772106","89349019","82772125"),stTime,edTime);
  66. if(valList!=null&&valList.size()==3){
  67. Map<String,Map<String,String>> dateMap=toDateMap(valList);
  68. for (String date:dateMap.keySet()) {
  69. Map<String,String> dataMap=dateMap.get(date);
  70. String workTime="休息".equals(dataMap.get("82772125"))?
  71. dataMap.get("89349019"): NumberUtil.add(dataMap.get("89349019"),dataMap.get("82772106")).toString();
  72. saveData(user,date,workTime,price);
  73. //同步到数据库
  74. LambdaQueryWrapper<YdUserInput> ydUserInputLambdaQueryWrapper = new LambdaQueryWrapper<>();
  75. ydUserInputLambdaQueryWrapper.eq(YdUserInput::getUserId,user)
  76. .eq(YdUserInput::getDate, date);
  77. YdUserInput ydUserInput = ydUserInputMapper.selectOne(ydUserInputLambdaQueryWrapper);
  78. if (Objects.nonNull(ydUserInput)){
  79. ydUserInput.setWorkHours(workTime);
  80. ydUserInput.setPrice(price);
  81. ydUserInput.setTotalPrice(NumberUtil.mul(workTime,price));
  82. ydUserInputMapper.update(ydUserInput,ydUserInputLambdaQueryWrapper);
  83. }else {
  84. try {
  85. ydUserInput = new YdUserInput();
  86. ydUserInput.setUserId(user);
  87. SimpleDateFormat formatter = new SimpleDateFormat(UtilDateTime.DATE_TIME_PATTERN);
  88. ydUserInput.setDate(formatter.parse(date));
  89. ydUserInput.setWorkHours(workTime);
  90. ydUserInput.setPrice(price);
  91. ydUserInput.setTotalPrice(NumberUtil.mul(workTime,price));
  92. ydUserInputMapper.insert(ydUserInput);
  93. }catch (ParseException e){
  94. log.info("无法解析日期字符串: {}",e.getMessage());
  95. }
  96. }
  97. }
  98. }
  99. }
  100. }
  101. }
  102. @Override
  103. public void upsertNonProdPrice(Map map) {
  104. String formInstId = UtilMap.getString(map, "formInstId");
  105. Map formData = ydClient.queryData(YDParam.builder()
  106. .formInstId(formInstId)
  107. .build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
  108. String type = UtilMap.getString(formData, "textField_m8fljzks");
  109. String form = UtilMap.getString(formData, "textField_m8fljzkt");
  110. String position = UtilMap.getString(formData, "textField_m8fljzku");
  111. String materialCodeLeft = UtilMap.getString(formData, "textField_m8fljzkv");
  112. String price = UtilMap.getString(formData, "numberField_m8fljzkw");
  113. LambdaQueryWrapper<YdNonProdPrice> ydNonProdPriceLambdaQueryWrapper = new LambdaQueryWrapper<>();
  114. ydNonProdPriceLambdaQueryWrapper.eq(YdNonProdPrice::getType,type)
  115. .eq(YdNonProdPrice::getForm,form)
  116. .eq(YdNonProdPrice::getPosition,position)
  117. .eq(YdNonProdPrice::getMaterialCodeLeft,materialCodeLeft);
  118. YdNonProdPrice ydNonProdPrice = ydNonProdPriceMapper.selectOne(ydNonProdPriceLambdaQueryWrapper);
  119. if (Objects.nonNull(ydNonProdPrice)){
  120. ydNonProdPrice.setPrice(price);
  121. ydNonProdPriceMapper.update(ydNonProdPrice,ydNonProdPriceLambdaQueryWrapper);
  122. }else {
  123. ydNonProdPrice = new YdNonProdPrice();
  124. ydNonProdPrice.setType(type);
  125. ydNonProdPrice.setForm(form);
  126. ydNonProdPrice.setPosition(position);
  127. ydNonProdPrice.setMaterialCodeLeft(materialCodeLeft);
  128. ydNonProdPrice.setPrice(price);
  129. ydNonProdPriceMapper.insert(ydNonProdPrice);
  130. }
  131. }
  132. @Override
  133. public void upsertWorkHoursPrice(Map map) {
  134. String formInstId = UtilMap.getString(map, "formInstId");
  135. Map formData = ydClient.queryData(YDParam.builder()
  136. .formInstId(formInstId)
  137. .build(), YDConf.FORM_QUERY.retrieve_id).getFormData();
  138. String type = UtilMap.getString(formData, "selectField_m8zib4co");
  139. String price = UtilMap.getString(formData, "numberField_m8zib4cp");
  140. LambdaQueryWrapper<YdProdWorkHoursPrice> ydProdWorkHoursPriceLambdaQueryWrapper = new LambdaQueryWrapper<>();
  141. ydProdWorkHoursPriceLambdaQueryWrapper.eq(YdProdWorkHoursPrice::getType,type);
  142. YdProdWorkHoursPrice ydProdWorkHoursPrice = ydProdWorkHoursPriceMapper.selectOne(ydProdWorkHoursPriceLambdaQueryWrapper);
  143. if (Objects.nonNull(ydProdWorkHoursPrice)){
  144. ydProdWorkHoursPrice.setPrice(price);
  145. ydProdWorkHoursPriceMapper.update(ydProdWorkHoursPrice,ydProdWorkHoursPriceLambdaQueryWrapper);
  146. }else {
  147. ydProdWorkHoursPrice = new YdProdWorkHoursPrice();
  148. ydProdWorkHoursPrice.setType(type);
  149. ydProdWorkHoursPrice.setPrice(price);
  150. ydProdWorkHoursPriceMapper.insert(ydProdWorkHoursPrice);
  151. }
  152. }
  153. /*@Override
  154. public void syncUserInput(LocalDateTime startTime, LocalDateTime endTime) {
  155. List<Map> dataList = getYdFormDataList("FORM-78BF5DE20E244369BD475C11A5CA48A0ZAQJ", "", YDConf.FORM_QUERY.retrieve_list_all);
  156. for (Map data : dataList) {
  157. Map formData = UtilMap.getMap(data, "formData");
  158. YdUserInput ydUserInput = new YdUserInput();
  159. ydUserInput.setUser(UtilMap.getList(formData, "employeeField_m8cu0g58").get(0).toString());
  160. ydUserInput.setUserId(UtilMap.getList(formData, "employeeField_m8cu0g58_id").get(0).toString());
  161. ydUserInput.setDate(new Date(UtilMap.getLong(formData,"dateField_m8e53oef")));
  162. ydUserInput.setWorkHours(UtilMap.getString(formData,"numberField_m8ctvm2e"));
  163. ydUserInput.setPrice(UtilMap.getString(formData,"numberField_m8e53oeg"));
  164. ydUserInput.setTotalPrice(UtilMap.getString(formData,"numberField_m8e53oeh"));
  165. ydUserInputMapper.insert(ydUserInput);
  166. }
  167. }*/
  168. /*private List<Map> getYdFormDataList(String formUuid, String searchCondition, YDConf.FORM_QUERY formQuery) {
  169. List<Map> list = new ArrayList<>();
  170. DDR_New ddrNew = new DDR_New();
  171. int pageNumber = 1;
  172. int pageSize = 100;
  173. do {
  174. ddrNew = ydClient.queryData(YDParam.builder().formUuid(formUuid)
  175. .searchCondition(searchCondition)
  176. .pageNumber(pageNumber)
  177. .pageSize(pageSize).build(), formQuery);
  178. list.addAll((List<Map>) ddrNew.getData());
  179. pageNumber++;
  180. }while (ddrNew.getTotalCount() > ddrNew.getPageNumber() * pageSize);
  181. return list;
  182. }*/
  183. private Map<String,Map<String,String>> toDateMap(List<Map> valList){
  184. Map<String,Map<String,String>> result = new HashMap<>();
  185. for(Map map:valList){
  186. String columnId=UtilMap.getString(UtilMap.getMap(map,"column_vo"),"id");
  187. List<Map> list=UtilMap.getList(map,"column_vals");
  188. for(Map map1:list){
  189. String date=UtilMap.getString(map1,"date");
  190. String value=UtilMap.getString(map1,"value");
  191. value=columnId.equals("82772106")?NumberUtil.round(NumberUtil.div(value,"60"),2).toString():value; // 工作时长 分钟转小时
  192. if(result.containsKey(date)){
  193. result.get(date).put(columnId,value);
  194. }else{
  195. result.put(date,UtilMap.map(columnId,value));
  196. }
  197. }
  198. }
  199. return result;
  200. }
  201. private void saveData(String userId,String date,String gs,String price){
  202. Long dateTime= UtilDateTime.getLocalDateTimeTimeStamp(UtilDateTime.parseLocalDateTime(date));
  203. Map saveMap=UtilMap.map("employeeField_m8cu0g58, dateField_m8e53oef, numberField_m8ctvm2e, numberField_m8e53oeg, numberField_m8e53oeh",
  204. Arrays.asList(userId),dateTime,gs,price,NumberUtil.mul(gs,price));
  205. ydClient.operateData(YDParam.builder().formUuid("FORM-78BF5DE20E244369BD475C11A5CA48A0ZAQJ")
  206. .searchCondition(JSONObject.toJSONString(UtilMap.map("employeeField_m8cu0g58, dateField_m8e53oef", userId,Arrays.asList(dateTime,dateTime))))
  207. .formDataJson(JSONObject.toJSONString(saveMap)).build(), YDConf.FORM_OPERATION.upsert);
  208. }
  209. }