pom.xml
@@ -96,13 +96,6 @@ <artifactId>hutool-all</artifactId> <version>5.8.18</version> </dependency> <!-- Apache POI for Excel (required by Hutool) --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.2.3</version> </dependency> </dependencies> <build> src/main/java/com/gs/xky/config/DataAcquisitionConfiguration.java
@@ -25,26 +25,19 @@ /** * åºç¨ç AgentId */ public static final Long AGENT_ID = 4104598880L; public static final Long AGENT_ID = 3303296035L; /** * åºç¨ç AppKey */ public static final String TALK_APP_KEY = "dinggglb3pttl1x0gn0c"; public static final String TALK_APP_KEY = "dingnpc4kma0t19nphhd"; /** * åºç¨ç AppSecret */ public static final String TALK_APP_SECRET = "Zc7r0Mb7bPsC_xy7ryrWoEnE5OzHEXibUMPDCA2LBusJ9pYzIolRk_OdZuLvNExf"; public static final String TALK_APP_SECRET = "uMecvKIfErf9htigYIyjI3svHpXEEDWROy2v1cXw7V6EXIG09oQI5N5e-EMqBo4r"; //ç¾¤èæºå¨äººç¸å ³ public static final String CUSTOM_ROBOT_TOKEN = "c2849e46cb0d91b0721c377742938b8ac5ef57e3c9eeab918e2cd5dd9c3aad2a"; public static final String SECRET = "SEC382027a5c81ea5152b71b687fb2c1ebf26acbde035355da6ab2fb37306454134"; //ä¼ä¸å¾®ä¿¡ public static final String CORPID = "wwabe21b935901a7d8"; public static final String CORPSECRET = "Z-7fNbZjrd80ypz69U14j8FMxI_fpUxcT6PksxlvKaY"; public static final String TXL_CORPSECRET = "T64bdcV7fo0hvW10W3NJYmGUmlBYxYMfiW6EiUJ9VPM"; } src/main/java/com/gs/xky/entity/DingtalkMsg.java
@@ -51,4 +51,8 @@ * å®¡æ ¸äºº */ private String modify1By; /** * æååç§° */ private String itemName; } src/main/java/com/gs/xky/service/DingtalkInfoService.java
@@ -11,15 +11,4 @@ public interface DingtalkInfoService extends IService<DingtalkInfo> { boolean sendMessage(String releaseNo); boolean sendActionCardMessage() throws Exception; /** * åéæä»¶æ¶æ¯ * * @param filePath æ¬å°æä»¶è·¯å¾ * @return æ¯å¦åéæå * @throws Exception å¼å¸¸ */ boolean sendFileMessage(String filePath) throws Exception; } src/main/java/com/gs/xky/service/Impl/DingtalkInfoServiceImpl.java
@@ -14,13 +14,11 @@ import com.gs.xky.mapper.MesStaffMapper; import com.gs.xky.service.DingtalkInfoService; import com.gs.xky.service.SimpleExample; import com.taobao.api.FileItem; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.util.StringUtils; import java.io.File; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; @@ -132,95 +130,6 @@ } } @Override public boolean sendActionCardMessage() { try { // 1. è·åéè¦æ¨éçç¨æ·å表ï¼å¯ä»¥æ¯åºå®æ¨éç¨æ·ï¼ List<DingtalkInfo> fixedList = baseMapper.selectList( new LambdaQueryWrapper<DingtalkInfo>().eq(DingtalkInfo::getIsHead, 1) ); List<Long> sidList = fixedList.stream() .map(DingtalkInfo::getSid) .collect(Collectors.toList()); List<String> userIdList = getDingtalkUserIdListBySids(sidList); if (userIdList == null || userIdList.isEmpty()) { log.warn("没æéè¦åéééæ¶æ¯çç¨æ·"); return false; } String userIdListStr = String.join(",", userIdList); // 2. æå»ºæ¶æ¯å 容 String title = "çäº§æ°æ®çæ¿"; String markdown = "请ç¹å»ä¸æ¹æé®æ¥ç详ç»BIæ¥è¡¨"; String singleTitle = "æ¥çæ¥è¡¨"; String singleUrl = "http://192.168.1.22:8081/design?fid=rpte6045ab079b211f0824bd3cfd50c6b93&fserid=4b198960bedd11f09f6f792bfe147b64&fsharetype=3"; // 3. åéæ¶æ¯ OapiMessageCorpconversationAsyncsendV2Response rsp = sendActionCardMessage(userIdListStr, title, markdown, singleTitle, singleUrl); log.info("æååéActionCardæ¶æ¯: {}", rsp.getBody()); return true; } catch (Exception e) { log.error("åéActionCardæ¶æ¯å¤±è´¥", e); return false; } } @Override public boolean sendFileMessage(String filePath) throws Exception { try { // 1. æ£æ¥æä»¶æ¯å¦åå¨ File file = new File(filePath); if (!file.exists()) { log.error("æä»¶ä¸åå¨: {}", filePath); return false; } // 2. è·åéè¦æ¨éçç¨æ·å表ï¼å¯æ ¹æ®å®é éæ±è°æ´ï¼è¿é使ç¨isHead=1çç¨æ·ï¼ List<DingtalkInfo> fixedList = baseMapper.selectList( new LambdaQueryWrapper<DingtalkInfo>().eq(DingtalkInfo::getIsHead, 1) ); if (fixedList == null || fixedList.isEmpty()) { log.warn("没æéè¦åéæä»¶çç¨æ·ï¼isHead=1ï¼"); return false; } List<String> sidList = fixedList.stream() .map(DingtalkInfo::getPhone) .collect(Collectors.toList()); List<String> userIdList = getDingtalkUserIdListByPhones(sidList); if (userIdList == null || userIdList.isEmpty()) { log.warn("æ²¡æææçééç¨æ·ID"); return false; } String userIdListStr = String.join(",", userIdList); // 3. ä¸ä¼ æä»¶å°ééæå¡å¨ log.info("å¼å§ä¸ä¼ æä»¶: {}", filePath); String mediaId = uploadMedia(filePath, "file"); // 4. åéæä»¶æ¶æ¯ log.info("å¼å§åéæä»¶æ¶æ¯ï¼mediaId: {}", mediaId); OapiMessageCorpconversationAsyncsendV2Response response = sendFileMessageByMediaId(userIdListStr, mediaId); log.info("æä»¶æ¶æ¯åéååº: {}", response.getBody()); return response.getErrcode() == 0; } catch (Exception e) { log.error("åéæä»¶æ¶æ¯å¤±è´¥", e); throw e; } } /** * æ ¹æ®æå®çsidå表è·åééç¨æ·IDå表 * @@ -285,72 +194,13 @@ } } private List<String> getDingtalkUserIdListByPhones(List<String> phoneList) { try { if (phoneList == null || phoneList.isEmpty()) { return new ArrayList<>(); } // å»é phoneList = phoneList.stream().distinct().collect(Collectors.toList()); // æ ¹æ®sidæ¥è¯¢DingtalkInfo List<DingtalkInfo> list = baseMapper.selectList( new LambdaQueryWrapper<DingtalkInfo>().in(DingtalkInfo::getPhone, phoneList) ); if (list == null || list.isEmpty()) { return new ArrayList<>(); } // 使ç¨streamæµè¿æ»¤åºlistä¸dingtalkIdä¸ºç©ºçæ°æ® List<DingtalkInfo> emptyDingtalkIdList = list.stream() .filter(info -> !StringUtils.hasText(info.getDingtalkId())) .collect(Collectors.toList()); // 妿åå¨ä¸ºç©ºçæ°æ®å°±éè¿ééçæ¥å£è·åï¼ä¸ºdingtalkIdèµå¼ï¼å¹¶ä¸æ´æ°æ°æ®åº if (!emptyDingtalkIdList.isEmpty()) { String accessToken = simpleExample.getAccessToken(); for (DingtalkInfo info : emptyDingtalkIdList) { if (StringUtils.hasText(info.getPhone())) { try { // éè¿ææºå·è·åééç¨æ·ID com.dingtalk.api.response.OapiV2UserGetbymobileResponse response = simpleExample.getOapiV2UserGetbymobileResponse(info.getPhone(), accessToken); if (response != null && response.getResult() != null) { info.setDingtalkId(response.getResult().getUserid()); // æ´æ°æ°æ®åº updateById(info); } } catch (Exception e) { log.error("è·åééç¨æ·IDå¤±è´¥ï¼ææºå·ï¼{}", info.getPhone(), e); } } } } // ä¸åå¨ä¸ºç©ºçæ°æ®æè å¤çå®ç©ºæ°æ®åï¼è¿åææææçdingtalkIdå表 return list.stream() .map(DingtalkInfo::getDingtalkId) .filter(StringUtils::hasText) .distinct() .collect(Collectors.toList()); } catch (Exception e) { log.error("è·åééç¨æ·å表失败", e); return new ArrayList<>(); } } private OapiMessageCorpconversationAsyncsendV2Response sendMessage(String userIdListStr, String message) throws Exception { String accessToken = simpleExample.getAccessToken(); DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2"); OapiMessageCorpconversationAsyncsendV2Request request = new OapiMessageCorpconversationAsyncsendV2Request(); request.setAgentId(4104598880L); request.setAgentId(3917187842L); request.setUseridList(userIdListStr); request.setToAllUser(false); @@ -358,135 +208,6 @@ msg.setMsgtype("text"); msg.setText(new OapiMessageCorpconversationAsyncsendV2Request.Text()); msg.getText().setContent(message); request.setMsg(msg); return client.execute(request, accessToken); } /** * åélinkæ¶æ¯ï¼å¨ééå ç½®æµè§å¨ä¸æå¼ï¼ * * @param userIdListStr ç¨æ·IDå表ï¼éå·åé * @param title æ¶æ¯æ é¢ * @param text æ¶æ¯å 容 * @param messageUrl ç¹å»æ¶æ¯å跳转çURL * @param picUrl å¾çURLï¼å¯éï¼ * @return ååºç»æ * @throws Exception å¼å¸¸ */ private OapiMessageCorpconversationAsyncsendV2Response sendLinkMessage(String userIdListStr, String title, String text, String messageUrl, String picUrl) throws Exception { String accessToken = simpleExample.getAccessToken(); DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2"); OapiMessageCorpconversationAsyncsendV2Request request = new OapiMessageCorpconversationAsyncsendV2Request(); request.setAgentId(4104598880L); request.setUseridList(userIdListStr); request.setToAllUser(false); OapiMessageCorpconversationAsyncsendV2Request.Msg msg = new OapiMessageCorpconversationAsyncsendV2Request.Msg(); msg.setMsgtype("link"); msg.setLink(new OapiMessageCorpconversationAsyncsendV2Request.Link()); msg.getLink().setTitle(title); msg.getLink().setText(text); msg.getLink().setMessageUrl(messageUrl); if (StringUtils.hasText(picUrl)) { msg.getLink().setPicUrl(picUrl); } request.setMsg(msg); return client.execute(request, accessToken); } /** * åéActionCardæ¶æ¯ï¼å¨å¤é¨æµè§å¨ä¸æå¼é¾æ¥ï¼éåBIçå¤é¨ç³»ç»ï¼ * * @param userIdListStr ç¨æ·IDå表ï¼éå·åé * @param title æ¶æ¯æ é¢ * @param markdown æ¶æ¯å å®¹ï¼æ¯æMarkdownæ ¼å¼ï¼ * @param singleTitle æé®æåï¼ä¾å¦ï¼"æ¥ç详æ " * @param singleUrl ç¹å»æé®å跳转çURLï¼å¤é¨é¾æ¥ï¼ * @return ååºç»æ * @throws Exception å¼å¸¸ */ private OapiMessageCorpconversationAsyncsendV2Response sendActionCardMessage(String userIdListStr, String title, String markdown, String singleTitle, String singleUrl) throws Exception { String accessToken = simpleExample.getAccessToken(); DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2"); OapiMessageCorpconversationAsyncsendV2Request request = new OapiMessageCorpconversationAsyncsendV2Request(); request.setAgentId(4104598880L); request.setUseridList(userIdListStr); request.setToAllUser(false); OapiMessageCorpconversationAsyncsendV2Request.Msg msg = new OapiMessageCorpconversationAsyncsendV2Request.Msg(); msg.setMsgtype("action_card"); msg.setActionCard(new OapiMessageCorpconversationAsyncsendV2Request.ActionCard()); msg.getActionCard().setTitle(title); msg.getActionCard().setMarkdown(markdown); msg.getActionCard().setSingleTitle(singleTitle); msg.getActionCard().setSingleUrl(singleUrl); request.setMsg(msg); return client.execute(request, accessToken); } /** * ä¸ä¼ æä»¶å°ééæå¡å¨ï¼è·åmedia_id * * @param filePath æ¬å°æä»¶è·¯å¾ * @param fileType æä»¶ç±»åï¼file(æ®éæä»¶), voice(è¯é³æä»¶), video(è§é¢æä»¶), image(å¾çæä»¶) * @return media_id * @throws Exception å¼å¸¸ */ private String uploadMedia(String filePath, String fileType) throws Exception { String accessToken = simpleExample.getAccessToken(); DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/media/upload"); com.dingtalk.api.request.OapiMediaUploadRequest request = new com.dingtalk.api.request.OapiMediaUploadRequest(); request.setType(fileType); // ä½¿ç¨ FileItem å è£ æä»¶ File file = new File(filePath); FileItem fileItem = new FileItem(file); request.setMedia(fileItem); com.dingtalk.api.response.OapiMediaUploadResponse response = client.execute(request, accessToken); if (response.getErrcode() == 0) { log.info("æä»¶ä¸ä¼ æåï¼media_id: {}", response.getMediaId()); return response.getMediaId(); } else { log.error("æä»¶ä¸ä¼ 失败ï¼é误ç : {}, é误信æ¯: {}", response.getErrcode(), response.getErrmsg()); throw new Exception("æä»¶ä¸ä¼ 失败: " + response.getErrmsg()); } } /** * éè¿media_idåéæä»¶æ¶æ¯ * * @param userIdListStr ç¨æ·IDå表ï¼éå·åé * @param mediaId æä»¶çmedia_idï¼éè¿uploadMediaæ¹æ³è·åï¼ * @return ååºç»æ * @throws Exception å¼å¸¸ */ private OapiMessageCorpconversationAsyncsendV2Response sendFileMessageByMediaId(String userIdListStr, String mediaId) throws Exception { String accessToken = simpleExample.getAccessToken(); DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2"); OapiMessageCorpconversationAsyncsendV2Request request = new OapiMessageCorpconversationAsyncsendV2Request(); request.setAgentId(4104598880L); request.setUseridList(userIdListStr); request.setToAllUser(false); OapiMessageCorpconversationAsyncsendV2Request.Msg msg = new OapiMessageCorpconversationAsyncsendV2Request.Msg(); msg.setMsgtype("file"); msg.setFile(new OapiMessageCorpconversationAsyncsendV2Request.File()); msg.getFile().setMediaId(mediaId); request.setMsg(msg); return client.execute(request, accessToken); src/main/java/com/gs/xky/service/Impl/MesQaItemsDetect01ServiceImpl.java
@@ -47,6 +47,11 @@ List<String> collect = list.stream().filter(s -> !StrUtil.isNotEmpty(s.getFcheckResu())).map(MesQaItemsDetect01::getReleaseNo).collect(Collectors.toList()); if (CollUtil.isEmpty(collect)) { return true; } LambdaUpdateWrapper<MesQaItemsDetect01> updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.in(MesQaItemsDetect01::getReleaseNo, collect); if (remove(wrapper)) { src/main/java/com/gs/xky/service/XkyService.java
@@ -97,7 +97,7 @@ private void processBatchDeliveries(List<XkyEntity> batchDeliveries) { batchDeliveries.forEach(deliveryNo -> { try { if ("6".equals(deliveryNo.getStatus()) || "0".equals(deliveryNo.getLogisticsStatus())) { if ("6".equals(deliveryNo.getStatus()) || "8".equals(deliveryNo.getStatus()) || "0".equals(deliveryNo.getLogisticsStatus())) { log.info("ãprocessBatchDeliveriesãç§»é¤éè´§å: {}", deliveryNo.getDeliveryNo()); remove1(deliveryNo); } else if ("1".equals(deliveryNo.getStatus()) && ("2".equals(deliveryNo.getLogisticsStatus()) || "1".equals(deliveryNo.getLogisticsStatus()))) { src/main/java/com/gs/xky/task/PurchaseOrderSyncTask.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,96 @@ package com.gs.xky.task; import com.gs.xky.service.PurchaseService; import lombok.RequiredArgsConstructor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.io.IOException; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; import java.util.concurrent.atomic.AtomicBoolean; /** * éè´è®¢å忥宿¶ä»»å¡ */ @Component @RequiredArgsConstructor public class PurchaseOrderSyncTask { private static final Logger log = LoggerFactory.getLogger(PurchaseOrderSyncTask.class); private final PurchaseService purchaseService; private final Executor purchaseTaskExecutor; // æ³¨å ¥ä¸ç¨çº¿ç¨æ± // ç¨äºæ è®°ä»»å¡æ¯å¦æ£å¨æ§è¡ private final AtomicBoolean isRunning = new AtomicBoolean(false); /** * 宿¶æ§è¡éè´è®¢ååæ¥ä»»å¡ * æ¯å¤©12ç¹æ´æ§è¡ä¸æ¬¡ * 设置为12ç¹05åæ§è¡ï¼é¿å ä¸å ¶ä»å®æ¶ä»»å¡å²çª * 使ç¨å¼æ¥æ§è¡ï¼é²æ¢é»å¡å ¶ä»å®æ¶ä»»å¡ */ @Scheduled(cron = "0 5 12 * * ?") public void syncPurchaseOrders() { // 妿任å¡å·²ç»å¨è¿è¡ï¼åè·³è¿æ¬æ¬¡æ§è¡ if (!isRunning.compareAndSet(false, true)) { log.info("ãsyncPurchaseOrdersãä¸ä¸æ¬¡ä»»å¡è¿å¨æ§è¡ä¸ï¼è·³è¿æ¬æ¬¡æ§è¡"); return; } log.info("ãsyncPurchaseOrdersãå¼å§æ§è¡éè´è®¢å忥任å¡"); // 使ç¨ä¸ç¨çº¿ç¨æ± æ§è¡å¼æ¥ä»»å¡ CompletableFuture.runAsync(() -> { try { log.info("ãsyncPurchaseOrdersã弿¥çº¿ç¨å¼å§æ§è¡éè´è®¢å忥"); purchaseService.syncPurchaseOrderDetails(); log.info("ãsyncPurchaseOrdersãéè´è®¢å忥任塿§è¡æå"); } catch (IOException e) { log.error("ãsyncPurchaseOrdersãéè´è®¢å忥任塿§è¡å¼å¸¸: {}", e.getMessage(), e); } finally { // æ 论æåè¿æ¯å¤±è´¥ï¼é½å°è¿è¡ç¶æéç½® isRunning.set(false); log.info("ãsyncPurchaseOrdersãä»»å¡ç¶æå·²éç½®ï¼å¯ä»¥æ¥åæ°çä»»å¡"); } }, purchaseTaskExecutor); // ä¸çå¾ ä»»å¡å®æï¼ç«å³è¿åï¼é¿å é»å¡è°åº¦çº¿ç¨ log.info("ãsyncPurchaseOrdersãéè´è®¢å忥任å¡å·²æäº¤å°å¼æ¥çº¿ç¨æ§è¡"); } /** * æå¨è§¦åéè´è®¢ååæ¥ä»»å¡ * ç¨äºç³»ç»ç®¡çåæå¨è§¦å忥 * * @return 任塿¯å¦å·²æäº¤æ§è¡ */ public boolean manualSyncPurchaseOrders() { // 妿任å¡å·²ç»å¨è¿è¡ï¼åæç»æ¬æ¬¡æ§è¡ if (!isRunning.compareAndSet(false, true)) { log.info("ãmanualSyncPurchaseOrdersãä¸ä¸æ¬¡ä»»å¡è¿å¨æ§è¡ä¸ï¼æç»æ¬æ¬¡æ§è¡"); return false; } log.info("ãmanualSyncPurchaseOrdersãæå¨è§¦åéè´è®¢å忥任å¡"); // 使ç¨ä¸ç¨çº¿ç¨æ± æ§è¡å¼æ¥ä»»å¡ CompletableFuture.runAsync(() -> { try { log.info("ãmanualSyncPurchaseOrdersã弿¥çº¿ç¨å¼å§æ§è¡éè´è®¢å忥"); purchaseService.syncPurchaseOrderDetails(); log.info("ãmanualSyncPurchaseOrdersãéè´è®¢å忥任塿§è¡æå"); } catch (IOException e) { log.error("ãmanualSyncPurchaseOrdersãéè´è®¢å忥任塿§è¡å¼å¸¸: {}", e.getMessage(), e); } finally { // æ 论æåè¿æ¯å¤±è´¥ï¼é½å°è¿è¡ç¶æéç½® isRunning.set(false); log.info("ãmanualSyncPurchaseOrdersãä»»å¡ç¶æå·²éç½®ï¼å¯ä»¥æ¥åæ°çä»»å¡"); } }, purchaseTaskExecutor); return true; } } src/main/java/com/gs/xky/task/ScheduledTasks.java
@@ -1,157 +1,133 @@ package com.gs.xky.task; import com.gs.xky.service.VwCjScSjTsBbService; import cn.hutool.core.collection.ListUtil; import com.gs.xky.config.DingTalkParam; import com.gs.xky.config.DingTalkResponse; import com.gs.xky.dto.EmployeeInfo; import com.gs.xky.entity.MesInvItemArn; import com.gs.xky.service.*; import lombok.RequiredArgsConstructor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.io.IOException; import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; import java.util.concurrent.atomic.AtomicBoolean; import java.util.stream.Collectors; @Component @RequiredArgsConstructor public class ScheduledTasks { private static final Logger log = LoggerFactory.getLogger(ScheduledTasks.class); private final VwCjScSjTsBbService vwCjScSjTsBbService; private final AtomicBoolean exportTaskRunning = new AtomicBoolean(false); // private final XkyService xkyService; // private final ApiService apiService; // private final MesStaffService staffService; // private final DeliveryNoticeService deliveryNoticeService; // private final MesInvItemArnService invItemArnService; // private final Executor taskExecutor; // æ³¨å ¥éç¨çº¿ç¨æ± private final XkyService xkyService; private final ApiService apiService; private final MesStaffService staffService; private final DeliveryNoticeService deliveryNoticeService; private final MesInvItemArnService invItemArnService; private final Executor taskExecutor; // æ³¨å ¥éç¨çº¿ç¨æ± // ç¨äºæ è®°å任塿¯å¦æ£å¨æ§è¡ // private final AtomicBoolean isDeviceDataRunning = new AtomicBoolean(false); // private final AtomicBoolean isCompensateRunning = new AtomicBoolean(false); // private final AtomicBoolean isDingTalkRunning = new AtomicBoolean(false); private final AtomicBoolean isDeviceDataRunning = new AtomicBoolean(false); private final AtomicBoolean isCompensateRunning = new AtomicBoolean(false); private final AtomicBoolean isDingTalkRunning = new AtomicBoolean(false); /** * æ¯å¤©ä¸å9ç¹æ§è¡ * 导åºçäº§æ°æ®å¹¶åéééæ¶æ¯ * æ¯äºåéæ§è¡ä¸æ¬¡ * è·åè®¾å¤æè¿ç䏿¡è®°å½ */ @Async("taskExecutor") @Scheduled(cron = "0 0 12,16 * * ?") public void exportAndSendProductionDataTask() { if (!exportTaskRunning.compareAndSet(false, true)) { log.warn("çäº§æ°æ®å¯¼åºä»»å¡æ£å¨æ§è¡ä¸ï¼è·³è¿æ¬æ¬¡æ§è¡"); @Scheduled(cron = "0 0/5 * * * ?") public void getDeviceRealTimeData() { // 妿任å¡å·²ç»å¨è¿è¡ï¼åè·³è¿æ¬æ¬¡æ§è¡ if (!isDeviceDataRunning.compareAndSet(false, true)) { log.info("ãgetDeviceRealTimeDataãä¸ä¸æ¬¡ä»»å¡è¿å¨æ§è¡ä¸ï¼è·³è¿æ¬æ¬¡æ§è¡"); return; } try { log.info("å¼å§æ§è¡çäº§æ°æ®å¯¼åºå¹¶åéééä»»å¡"); boolean result = vwCjScSjTsBbService.exportAndSendToDingtalk(); log.info("ãgetDeviceRealTimeDataãå¼å§è·å设å¤å®æ¶æ°æ®"); if (result) { log.info("çäº§æ°æ®å¯¼åºå¹¶åééé任塿§è¡æå"); } else { log.error("çäº§æ°æ®å¯¼åºå¹¶åééé任塿§è¡å¤±è´¥"); // 使ç¨å¼æ¥æ§è¡ï¼é¿å é»å¡è°åº¦çº¿ç¨ CompletableFuture.runAsync(() -> { try { xkyService.GetSaveDetail(); log.info("ãgetDeviceRealTimeDataãè·å设å¤å®æ¶æ°æ®æå"); } catch (IOException e) { log.error("ãgetDeviceRealTimeDataãè·å设å¤å®æ¶æ°æ®å¼å¸¸: {}", e.getMessage(), e); } finally { isDeviceDataRunning.set(false); } } catch (Exception e) { log.error("çäº§æ°æ®å¯¼åºå¹¶åééé任塿§è¡å¼å¸¸", e); } finally { exportTaskRunning.set(false); } }, taskExecutor); } // /** // * æ¯äºåéæ§è¡ä¸æ¬¡ // * è·ååå®¢äºæè¿ç䏿¡è®°å½ // */ // @Scheduled(cron = "0 0/5 * * * ?") // public void getDeviceRealTimeData() { // // 妿任å¡å·²ç»å¨è¿è¡ï¼åè·³è¿æ¬æ¬¡æ§è¡ // if (!isDeviceDataRunning.compareAndSet(false, true)) { // log.info("ãgetDeviceRealTimeDataãä¸ä¸æ¬¡ä»»å¡è¿å¨æ§è¡ä¸ï¼è·³è¿æ¬æ¬¡æ§è¡"); // return; // } // // log.info("ãgetDeviceRealTimeDataãå¼å§è·å设å¤å®æ¶æ°æ®"); // // // 使ç¨å¼æ¥æ§è¡ï¼é¿å é»å¡è°åº¦çº¿ç¨ // CompletableFuture.runAsync(() -> { // try { // xkyService.GetSaveDetail(); // log.info("ãgetDeviceRealTimeDataãè·å设å¤å®æ¶æ°æ®æå"); // } catch (IOException e) { // log.error("ãgetDeviceRealTimeDataãè·å设å¤å®æ¶æ°æ®å¼å¸¸: {}", e.getMessage(), e); // } finally { // isDeviceDataRunning.set(false); // } // }, taskExecutor); // } // // /** // * 宿¶æ§è¡è¡¥å¿é»è¾ // */ // @Scheduled(cron = "10 3,8,13,18,23,28,33,38,43,48,53,58 * * * ?") // public void compensateMethod() { // // 妿任å¡å·²ç»å¨è¿è¡ï¼åè·³è¿æ¬æ¬¡æ§è¡ // if (!isCompensateRunning.compareAndSet(false, true)) { // log.info("ãcompensateMethodãä¸ä¸æ¬¡ä»»å¡è¿å¨æ§è¡ä¸ï¼è·³è¿æ¬æ¬¡æ§è¡"); // return; // } // // log.info("ãcompensateMethodãå¼å§æ§è¡è¡¥å¿é»è¾"); // // // 使ç¨å¼æ¥æ§è¡ï¼é¿å é»å¡è°åº¦çº¿ç¨ // CompletableFuture.runAsync(() -> { // try { // // è¡¥å¿é»è¾ // List<MesInvItemArn> itemArnMinus = invItemArnService.getItemArnMinus(); // deliveryNoticeService.processMesInvItemArnStatusAsync(itemArnMinus); // log.info("ãcompensateMethodãè¡¥å¿é»è¾æ§è¡æå"); // } catch (Exception e) { // log.error("ãcompensateMethodãè¡¥å¿é»è¾æ§è¡å¼å¸¸: {}", e.getMessage(), e); // } finally { // isCompensateRunning.set(false); // } // }, taskExecutor); // } // // /** // * 宿¶è·åééæ°æ® // */ // @Scheduled(cron = "0 0/53 * * * ?") // public void getDinTalkData() { // // 妿任å¡å·²ç»å¨è¿è¡ï¼åè·³è¿æ¬æ¬¡æ§è¡ // if (!isDingTalkRunning.compareAndSet(false, true)) { // log.info("ãgetDinTalkDataãä¸ä¸æ¬¡ä»»å¡è¿å¨æ§è¡ä¸ï¼è·³è¿æ¬æ¬¡æ§è¡"); // return; // } // // log.info("ãgetDinTalkDataãå¼å§è·åééæ°æ®"); // // // 使ç¨å¼æ¥æ§è¡ï¼é¿å é»å¡è°åº¦çº¿ç¨ // CompletableFuture.runAsync(() -> { // try { // DingTalkParam dingTalkParam = new DingTalkParam(1); // DingTalkResponse<EmployeeInfo> employeeInfoDingTalkResponse = // apiService.sendListRequest(dingTalkParam, EmployeeInfo.class, // "http://192.168.1.64/eHR/eHRExternalService/Service.ashx"); // // List<EmployeeInfo> collect = employeeInfoDingTalkResponse.getData().stream() // .filter(s -> "é æ¢¦è ï¼æµæ±ï¼ç§ææéå ¬å¸".equals(s.getCUnitName())) // .collect(Collectors.toList()); // // log.info("ãgetDinTalkDataãè·åå°{}æ¡åå·¥æ°æ®", collect.size()); // // List<List<EmployeeInfo>> partition = ListUtil.partition(collect, 100); // partition.forEach(staffService::UpdateStaff); // // log.info("ãgetDinTalkDataãééæ°æ®å¤ç宿"); // } catch (IOException e) { // log.error("ãgetDinTalkDataãè·åééæ°æ®å¼å¸¸: {}", e.getMessage(), e); // } finally { // isDingTalkRunning.set(false); // } // }, taskExecutor); // } /** * 宿¶æ§è¡è¡¥å¿é»è¾ */ @Scheduled(cron = "10 3,8,13,18,23,28,33,38,43,48,53,58 * * * ?") public void compensateMethod() { // 妿任å¡å·²ç»å¨è¿è¡ï¼åè·³è¿æ¬æ¬¡æ§è¡ if (!isCompensateRunning.compareAndSet(false, true)) { log.info("ãcompensateMethodãä¸ä¸æ¬¡ä»»å¡è¿å¨æ§è¡ä¸ï¼è·³è¿æ¬æ¬¡æ§è¡"); return; } log.info("ãcompensateMethodãå¼å§æ§è¡è¡¥å¿é»è¾"); // 使ç¨å¼æ¥æ§è¡ï¼é¿å é»å¡è°åº¦çº¿ç¨ CompletableFuture.runAsync(() -> { try { // è¡¥å¿é»è¾ List<MesInvItemArn> itemArnMinus = invItemArnService.getItemArnMinus(); deliveryNoticeService.processMesInvItemArnStatusAsync(itemArnMinus); log.info("ãcompensateMethodãè¡¥å¿é»è¾æ§è¡æå"); } catch (Exception e) { log.error("ãcompensateMethodãè¡¥å¿é»è¾æ§è¡å¼å¸¸: {}", e.getMessage(), e); } finally { isCompensateRunning.set(false); } }, taskExecutor); } /** * 宿¶è·åééæ°æ® */ @Scheduled(cron = "0 0/53 * * * ?") public void getDinTalkData() { // 妿任å¡å·²ç»å¨è¿è¡ï¼åè·³è¿æ¬æ¬¡æ§è¡ if (!isDingTalkRunning.compareAndSet(false, true)) { log.info("ãgetDinTalkDataãä¸ä¸æ¬¡ä»»å¡è¿å¨æ§è¡ä¸ï¼è·³è¿æ¬æ¬¡æ§è¡"); return; } log.info("ãgetDinTalkDataãå¼å§è·åééæ°æ®"); // 使ç¨å¼æ¥æ§è¡ï¼é¿å é»å¡è°åº¦çº¿ç¨ CompletableFuture.runAsync(() -> { try { DingTalkParam dingTalkParam = new DingTalkParam(1); DingTalkResponse<EmployeeInfo> employeeInfoDingTalkResponse = apiService.sendListRequest(dingTalkParam, EmployeeInfo.class, "http://192.168.1.64/eHR/eHRExternalService/Service.ashx"); List<EmployeeInfo> collect = employeeInfoDingTalkResponse.getData().stream() .filter(s -> "é æ¢¦è ï¼æµæ±ï¼ç§ææéå ¬å¸".equals(s.getCUnitName())) .collect(Collectors.toList()); log.info("ãgetDinTalkDataãè·åå°{}æ¡åå·¥æ°æ®", collect.size()); List<List<EmployeeInfo>> partition = ListUtil.partition(collect, 100); partition.forEach(staffService::UpdateStaff); log.info("ãgetDinTalkDataãééæ°æ®å¤ç宿"); } catch (IOException e) { log.error("ãgetDinTalkDataãè·åééæ°æ®å¼å¸¸: {}", e.getMessage(), e); } finally { isDingTalkRunning.set(false); } }, taskExecutor); } } src/main/resources/application.yml
@@ -5,9 +5,9 @@ datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: oracle.jdbc.OracleDriver url: jdbc:oracle:thin:@192.168.1.22:1521/ORCL username: hm_prd password: hmprd url: jdbc:oracle:thin:@192.168.1.104:1521/ORCL username: zmz_prd password: zmzprd druid: initialSize: 5 minIdle: 5 src/main/resources/mapper/VwCjScSjTsBbMonthMapper.xml
@@ -4,27 +4,4 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.gs.xky.mapper.VwCjScSjTsBbMonthMapper"> <resultMap id="BaseResultMap" type="com.gs.xky.entity.VwCjScSjTsBbMonth"> <result property="itemName" column="ITEM_NAME" /> <result property="itemNo" column="ITEM_NO" /> <result property="departmentname" column="DEPARTMENTNAME" /> <result property="departmentcode" column="DEPARTMENTCODE" /> <result property="daa001" column="DAA001" /> <result property="lineName" column="LINE_NAME" /> <result property="lineNo" column="LINE_NO" /> <result property="daa008" column="DAA008" /> <result property="yjkg" column="YJKG" /> <result property="sjkg" column="SJKG" /> <result property="sq" column="SQ" /> <result property="rk" column="RK" /> <result property="sqwwg" column="SQWWG" /> <result property="rkwwg" column="RKWWG" /> <result property="sqwrk" column="SQWRK" /> </resultMap> <sql id="Base_Column_List"> ITEM_NAME,ITEM_NO,DEPARTMENTNAME,DEPARTMENTCODE,DAA001,LINE_NAME, LINE_NO,DAA008,YJKG,SJKG,SQ, RK,SQWWG,RKWWG,SQWRK </sql> </mapper> src/test/java/com/gs/xky/XkyApplicationTests.java
@@ -1,7 +1,14 @@ package com.gs.xky; import com.gs.xky.service.VwCjScSjTsBbService; import com.gs.xky.service.WorkWXService; import com.alibaba.fastjson.JSONObject; import com.gs.xky.config.ApiResponse; import com.gs.xky.config.BodyParam; import com.gs.xky.config.DataAcquisitionConfiguration; import com.gs.xky.config.XkyCommonParam; import com.gs.xky.dto.BarcodeDeliveryNo; import com.gs.xky.dto.XkyDetail; import com.gs.xky.dto.XkyEntity; import com.gs.xky.service.*; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @@ -13,126 +20,168 @@ class XkyApplicationTests { public static final String URL = "http://192.168.1.64/eHR/eHRExternalService/Service.ashx"; @Autowired private VwCjScSjTsBbService vwCjScSjTsBbService; private XkyService xkyService; @Autowired private WorkWXService workWXService; private ApiService apiService; /** * æµè¯å¯¼åºçäº§æ°æ®å¹¶åéééæ¶æ¯ * åè½ï¼æ¥è¯¢VW_CJ_SC_SJ_TS_BBè¡¨æ°æ® -> 导åºExcel -> åéééæä»¶æ¶æ¯ */ @Autowired private MesStaffService staffService; @Autowired private DeliveryNoticeService deliveryNoticeService; @Autowired private TblBarcodeInformationService barcodeInformationService; @Autowired private MesInvItemArnService invItemArnService; @Autowired private PurchaseService service; @Autowired private DingtalkInfoService dingtalkInfoService; @Test void testExportAndSendProductionData() throws Exception { System.out.println("=== å¼å§æµè¯å¯¼åºçäº§æ°æ®å¹¶åééé ==="); void contextLoads() throws IOException { // try { // boolean result = vwCjScSjTsBbService.exportAndSendToDingtalk(); // List<MesInvItemArn> itemArnMinus = invItemArnService.getItemArnMinus(); // // if (result) { // System.out.println("â çäº§æ°æ®å¯¼åºå¹¶åéæå"); // System.out.println(" - æ°æ®å·²ä» VW_CJ_SC_SJ_TS_BB 表æ¥è¯¢"); // System.out.println(" - Excel æä»¶å·²çæå¹¶ä¿åå° D:\\BIFile\\"); // System.out.println(" - ééæä»¶æ¶æ¯å·²åé"); // } else { // System.out.println("â çäº§æ°æ®å¯¼åºæåé失败"); // } // } catch (Exception e) { // System.out.println("â 导åºå¹¶åéæ¶åçå¼å¸¸: " + e.getMessage()); // e.printStackTrace(); // } // deliveryNoticeService.processMesInvItemArnStatusAsync(itemArnMinus); System.out.println("=== æµè¯ç»æ ==="); } @Test void testGetCheckinDataByQwStaff() { System.out.println("=== å¼å§æµè¯éè¿QW_STAFF表è·åæå¡æ°æ® ==="); try { long currentTime = System.currentTimeMillis() / 1000; long oneDaySeconds = 86400; long endTime = (currentTime / oneDaySeconds) * oneDaySeconds - 1; long startTime = endTime - oneDaySeconds + 1; System.out.println(" - å¼å§æ¶é´: " + new java.util.Date(startTime * 1000)); System.out.println(" - ç»ææ¶é´: " + new java.util.Date(endTime * 1000)); List<WorkWXService.CheckinData> checkinDataList = workWXService.getCheckinDataByQwStaff(startTime, endTime); if (checkinDataList != null && !checkinDataList.isEmpty()) { System.out.println("â æåè·åæå¡æ°æ®"); System.out.println(" - æå¡è®°å½æ»æ°: " + checkinDataList.size()); System.out.println(" - å5æ¡æ°æ®:"); checkinDataList.stream().limit(5).forEach(data -> { System.out.println(" * userid: " + data.getUserid() + ", æå¡æ¶é´: " + new java.util.Date(data.getCheckinTime() * 1000) + ", æå¡ç±»å: " + data.getCheckinType() + ", å¼å¸¸ç±»å: " + data.getExceptionType() + ", å°ç¹: " + data.getLocationDetail()); }); } else { System.out.println("â è·åçæå¡æ°æ®ä¸ºç©ºï¼å¯è½QW_STAFFè¡¨æ æ°æ®ææ¶é´èå´å æ æå¡è®°å½ï¼"); } } catch (IOException e) { System.out.println("â è·åæå¡æ°æ®å¤±è´¥: " + e.getMessage()); e.printStackTrace(); } System.out.println("=== æµè¯ç»æ ==="); public void getDeviceRealTimeData() throws IOException { // xkyService.GetSaveDetail(); } @Test void testGetWorkWXUserList() { System.out.println("=== å¼å§æµè¯è·åä¼ä¸å¾®ä¿¡ç¨æ·å表 ==="); void cs() throws IOException { try { List<WorkWXService.WorkWXUser> userList = workWXService.getUserList(); String str = "22251123LM3X"; if (userList != null && !userList.isEmpty()) { System.out.println("â æåè·åä¼ä¸å¾®ä¿¡ç¨æ·å表"); System.out.println(" - ç¨æ·æ»æ°: " + userList.size()); System.out.println(" - å10æ¡æ°æ®:"); userList.stream().limit(10).forEach(user -> { System.out.println(" * userid: " + user.getUserid() + ", å§å: " + user.getName() + ", é¨é¨: " + user.getDepartment()); }); } else { System.out.println("â è·åçç¨æ·å表为空"); String[] split = str.split(";"); for (String s : split) { XkyCommonParam param = XkyCommonParam.GetInit(); // å建 BodyParam 对象并èµå¼ BodyParam bodyParam = new BodyParam(); bodyParam.setErpCode(DataAcquisitionConfiguration.TEST_ERP_CODE); bodyParam.setDeliveryNo(s); param.setBody(bodyParam); ApiResponse<XkyDetail> detail = apiService.sendListRequest(param, XkyDetail.class, "https://openapi.xiekeyun.com/delivery/getDetail.json"); XkyDetail deliveryNo = detail.getData(); System.out.println((JSONObject) JSONObject.toJSON(deliveryNo)); if (deliveryNo == null) { System.out.println("为空çéè´§åå·" + s); return; } } catch (IOException e) { System.out.println("â è·åç¨æ·å表失败: " + e.getMessage()); e.printStackTrace(); System.out.println("éè´§åç¶æ" + deliveryNo.getStatus()); if ("6".equals(deliveryNo.getStatus()) || "8".equals(deliveryNo.getStatus()) || "0".equals(deliveryNo.getLogisticsStatus())) { XkyEntity xkyEntity = new XkyEntity(); xkyEntity.setDeliveryNo(deliveryNo.getDeliveryNo()); xkyService.remove1(xkyEntity); } else if ("1".equals(deliveryNo.getStatus()) && ("2".equals(deliveryNo.getLogisticsStatus()) || "1".equals(deliveryNo.getLogisticsStatus()))) { XkyDetail detail1 = deliveryNo; deliveryNoticeService.saveDeliveryNotice(detail1); List<BarcodeDeliveryNo> barcodeDeliveryNos = GetBarcodeInformation(deliveryNo.getDeliveryNo()); barcodeInformationService.SaveBarcodeInformation(barcodeDeliveryNos, deliveryNo.getDeliveryNo()); if ("2".equals(deliveryNo.getLogisticsStatus())) { deliveryNoticeService.callPdaReceiptBtn("éè´§åç¾æ¶[BTNOK[PL017[" + deliveryNo.getDeliveryNo(), ""); } } } } System.out.println("=== æµè¯ç»æ ==="); private List<BarcodeDeliveryNo> GetBarcodeInformation(String deliveryNo) throws IOException { XkyCommonParam param = XkyCommonParam.GetInit(); // å建 BodyParam 对象并èµå¼ BodyParam bodyParam = new BodyParam(); bodyParam.setErpCode(DataAcquisitionConfiguration.TEST_ERP_CODE); bodyParam.setDeliveryNo(deliveryNo); param.setBody(bodyParam); ApiResponse<BarcodeDeliveryNo> noList = apiService.sendListRequest(param, BarcodeDeliveryNo.class, "https://openapi.xiekeyun.com/barcode/byDeliveryNo.json"); return noList.getDataList(); } @Test void testGetUserDetail() { System.out.println("=== å¼å§æµè¯è·åç¨æ·è¯¦æ ==="); void cs1() throws IOException { // DingTalkParam dingTalkParam = new DingTalkParam(0); // // DingTalkResponse<EmployeeInfo> employeeInfoDingTalkResponse = apiService.sendListRequest(dingTalkParam, EmployeeInfo.class, "http://192.168.1.64/eHR/eHRExternalService/Service.ashx"); // // //é æ¢¦è ï¼æµæ±ï¼ç§ææéå ¬å¸ cUnitName // //http://192.168.1.64/eHR // List<EmployeeInfo> collect = employeeInfoDingTalkResponse.getData().stream().filter(s -> "é æ¢¦è ï¼æµæ±ï¼ç§ææéå ¬å¸".equals(s.getCUnitName())).collect(Collectors.toList()); // //System.out.println(collect.size()); // // collect.stream().filter(s->s.getEmployeeId().equals("2025130028")).forEach(System.out::println); // // List<List<EmployeeInfo>> partition = ListUtil.partition(collect, 500); try { String userid = "ShenJuanYue"; WorkWXService.WorkWXUserDetail userDetail = workWXService.getUserDetail(userid); // partition.forEach(list -> { // staffService.SaveStaff(list); // }); // XkyCommonParam param = XkyCommonParam.GetInit(); // String jsonString = JSON.toJSONString(param); // System.out.println(jsonString); } if (userDetail != null && userDetail.getErrcode() == 0) { System.out.println("â æåè·åç¨æ·è¯¦æ "); System.out.println(" - userid: " + userDetail.getUserid()); System.out.println(" - å§å: " + userDetail.getName()); System.out.println(" - ææºå·: " + userDetail.getMobile()); System.out.println(" - èä½: " + userDetail.getPosition()); } else { System.out.println("â è·åç¨æ·è¯¦æ 失败"); } } catch (IOException e) { System.out.println("â è·åç¨æ·è¯¦æ 失败: " + e.getMessage()); e.printStackTrace(); } @Test void cs2() throws IOException { // DingTalkParam dingTalkParam = new DingTalkParam(1); // // DingTalkResponse<EmployeeInfo> employeeInfoDingTalkResponse = apiService.sendListRequest(dingTalkParam, EmployeeInfo.class, "http://192.168.1.64/eHR/eHRExternalService/Service.ashx"); // // //é æ¢¦è ï¼æµæ±ï¼ç§ææéå ¬å¸ cUnitName // //http://192.168.1.64/eHR // List<EmployeeInfo> collect = employeeInfoDingTalkResponse.getData().stream().filter(s -> "é æ¢¦è ï¼æµæ±ï¼ç§ææéå ¬å¸".equals(s.getCUnitName())).collect(Collectors.toList()); // System.out.println(collect.size()); // // List<List<EmployeeInfo>> partition = ListUtil.partition(collect, 100); // // partition.forEach(list -> { // staffService.UpdateStaff(list); // // // }); System.out.println("=== æµè¯ç»æ ==="); } @Test void cs113() throws Exception { // DingTalkParam dingTalkParam = new DingTalkParam(1); // DingTalkResponse<EmployeeInfo> employeeInfoDingTalkResponse = // apiService.sendListRequest(dingTalkParam, EmployeeInfo.class, // "http://192.168.1.64/eHR/eHRExternalService/Service.ashx"); // // List<EmployeeInfo> collect = employeeInfoDingTalkResponse.getData().stream() // .filter(s -> "é æ¢¦è ï¼æµæ±ï¼ç§ææéå ¬å¸".equals(s.getCUnitName())) // .collect(Collectors.toList()); } @Test void cs3() throws Exception { // dingtalkInfoService.sendMessage("CGJY20250412166"); // XkyEntity xkyEntity = new XkyEntity(); // xkyEntity.setDeliveryNo("222505057541"); // xkyService.remove1(xkyEntity); } }