diff --git a/anomaly/pom.xml b/anomaly/pom.xml index 1796024e..47f0bbd1 100644 --- a/anomaly/pom.xml +++ b/anomaly/pom.xml @@ -76,5 +76,10 @@ commons-net 3.1 + + org.springframework.boot + spring-boot-starter-quartz + 2.0.5.RELEASE + \ No newline at end of file diff --git a/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/service/AbnormalBillService.java b/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/service/AbnormalBillService.java index 965dc0fa..455099e8 100644 --- a/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/service/AbnormalBillService.java +++ b/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/service/AbnormalBillService.java @@ -44,6 +44,7 @@ public interface AbnormalBillService extends IService { /** * 生成异常单号、创建时间和更新时间 + * 异常提报的时候调用的公共方法 * @param abnormalBill * @param abnormalBillDispose */ @@ -124,8 +125,13 @@ public interface AbnormalBillService extends IService { // void deleteFileInDatabase(String ftpPath,String fileName); /** - * 异常提报发送消息 + * 异常发送消息 */ - boolean anomalyReportSendMessage(AbnormalBill abnormalBill); + boolean anomalyCreatedAndSendMessage(AbnormalBill abnormalBill,AbnormalBillDispose abnormalBillDispose); + + /** + * 格式化消息 + */ + String formatMessage(AbnormalBill abnormalBill,String messageType, String site); } \ No newline at end of file diff --git a/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/service/AnomalyJobService.java b/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/service/AnomalyJobService.java new file mode 100644 index 00000000..5ddbd382 --- /dev/null +++ b/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/service/AnomalyJobService.java @@ -0,0 +1,15 @@ +package com.foreverwin.mesnac.anomaly.service; + +/** + * @Description TODO + * @Author zhaojiawei + * @Since 2021-07-22 + */ +public interface AnomalyJobService { + + /** + * 异常计时器进程 + * @param site + */ + void anomalyJobProcess(String site); +} diff --git a/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/service/impl/AbnormalBillServiceImpl.java b/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/service/impl/AbnormalBillServiceImpl.java index 536d7dca..a6f4bfe8 100644 --- a/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/service/impl/AbnormalBillServiceImpl.java +++ b/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/service/impl/AbnormalBillServiceImpl.java @@ -7,8 +7,10 @@ import com.foreverwin.mesnac.anomaly.dto.AbnormalBillDisposeDto; import com.foreverwin.mesnac.anomaly.dto.AbnormalBillDto; import com.foreverwin.mesnac.anomaly.mapper.AbnormalBillDisposeMapper; import com.foreverwin.mesnac.anomaly.mapper.AbnormalBillMapper; +import com.foreverwin.mesnac.anomaly.mapper.AbnormalMessageMapper; import com.foreverwin.mesnac.anomaly.model.*; import com.foreverwin.mesnac.anomaly.service.*; +import com.foreverwin.mesnac.anomaly.util.ActiveMQUtil; import com.foreverwin.mesnac.common.constant.Constants; import com.foreverwin.mesnac.common.enums.HandleEnum; import com.foreverwin.mesnac.common.helper.NextNumberHelper; @@ -119,6 +121,15 @@ public class AbnormalBillServiceImpl extends ServiceImpl selectPage(FrontPage frontPage, AbnormalBill abnormalBill) { QueryWrapper queryWrapper = new QueryWrapper<>(); @@ -142,6 +153,8 @@ public class AbnormalBillServiceImpl extends ServiceImpl status = new ArrayList<>(); status.add(Constants.PROGRAM_CONFIRM); status.add(Constants.CANCEL); status.add(Constants.SHUT_DOWN); List abnormalBillList = abnormalBillMapper.findCountBySfc(abnormalBill.getSite(), abnormalBill.getType(), abnormalBill.getSfc(), status); - - if(abnormalBillList.size() > 1 && !"更新成功".equals(message)){ - throw BusinessException.build("设备异常有未处理完成的sfc"); - }else if(abnormalBillList.size() > 1 ){ + if(abnormalBillList.size() >= 1 ){ throw BusinessException.build("设备异常有未处理完成的sfc"); } } + abnormalBillDisposeService.saveOrUpdate(abnormalBillDispose); + this.saveOrUpdate(abnormalBill); + //发送消息 + this.anomalyCreatedAndSendMessage(abnormalBill,null); return message; } @@ -311,6 +326,8 @@ public class AbnormalBillServiceImpl extends ServiceImpl dutyCauseType,List dutyType) { String site = CommonMethods.getSite(); - String message = null; + //返回的消息 + String message = "保存成功"; LocalDateTime currentTime = LocalDateTime.now(); String user = CommonMethods.getUser(); + //如果前台传过来的异常单为空的话,则抛出一个异常 if(StringUtil.isBlank(abnormalBill.getAbnormalNo())) { throw BusinessException.build("异常单号不存在"); } + //设置异常单的handle abnormalBill.setHandle(HandleEnum.Z_ABNORMAL_BILL.getHandle(site,abnormalBill.getAbnormalNo())); - //更新的时候,判断该异常单的状态是否为新建 - AbnormalBill abnormalBill1 = abnormalBillMapper.selectById(abnormalBill.getHandle()); - if(abnormalBill1 != null){ - if(!"N".equals(abnormalBill1.getStatus()) && StringUtil.isBlank(abnormalBillDispose.getClosedUser())){ - throw BusinessException.build("该异常单已经被人处理,不能进行更新"); - } - message = "更新成功"; - }else{ - message = "保存成功"; + if(abnormalBillMapper.selectById(abnormalBill.getHandle()) != null && + !Constants.SHUT_DOWN.equals(abnormalBill.getStatus())){ + throw BusinessException.build("该异常单已经提交,请清空后提交"); } - abnormalBillDispose.setClosedUser(null); + /** + * 取消异常提报的更新 + */ + + //更新的时候,判断该异常单的状态是否为新建,如果为新建,则可以修改,否则就不能进行修改 +// AbnormalBill abnormalBill1 = abnormalBillMapper.selectById(abnormalBill.getHandle()); +// if(abnormalBill1 != null){ +// if(!"N".equals(abnormalBill1.getStatus()) && StringUtil.isBlank(abnormalBillDispose.getClosedUser())){ +// throw BusinessException.build("该异常单已经被人处理,不能进行更新"); +// } +// message = "更新成功"; +// }else{ +// message = "保存成功"; +// } +// abnormalBillDispose.setClosedUser(null); + //设置异常单详细表的handle和abnormalBillBo abnormalBillDispose.setAbnormalBillBo(abnormalBill.getHandle()); abnormalBillDispose.setHandle(HandleEnum.Z_ABNORMAL_BILL_DISPOSE.getHandle(site,abnormalBill.getAbnormalNo())); //设置责任划分填报人和填报时间 - if(StringUtil.isBlank(abnormalBillDispose.getDutyUser())){ - abnormalBillDispose.setDutyUser(user); - abnormalBillDispose.setDutyDateTime(currentTime); - } - ArrayList causeTypes = new ArrayList<>(); + abnormalBillDispose.setDutyUser(user); + abnormalBillDispose.setDutyDateTime(currentTime); + //判断原因分类是否为空,如果不为空,把它放进Z_ABNORMAL_CAUSE表里面 + ArrayList causeTypes = new ArrayList<>(); if(dutyCauseType != null && dutyCauseType.size() >= 1){ for(String cause:dutyCauseType){ AbnormalCause abnormalCause = new AbnormalCause(); @@ -458,9 +492,8 @@ public class AbnormalBillServiceImpl extends ServiceImpl operationQueryWrapper = new QueryWrapper(); operationQueryWrapper.eq("OPERATION",abnormalBill.getOperation()) @@ -471,9 +504,7 @@ public class AbnormalBillServiceImpl extends ServiceImpl ncCodes = Arrays.asList(abnormalBill.getNcCode().split(",")); Integer length = ncCodeMapper.checkNcCode(ncCodes,site,"FAILURE"); @@ -528,6 +559,10 @@ public class AbnormalBillServiceImpl extends ServiceImpl 0){ @@ -582,10 +617,7 @@ public class AbnormalBillServiceImpl extends ServiceImpl sendUsersList = nwaUserService.checkUserGroup(abnormalBill.getReportSendUserGroup()); + public boolean anomalyCreatedAndSendMessage(AbnormalBill abnormalBill,AbnormalBillDispose abnormalBillDispose){ String site = CommonMethods.getSite(); String user = CommonMethods.getUser(); String locale = LocaleContextHolder.getLocale().getLanguage(); @@ -770,37 +806,123 @@ public class AbnormalBillServiceImpl extends ServiceImpl wrapper = new QueryWrapper<>(); + AbnormalMessage abnormalMessage1 = new AbnormalMessage(); + abnormalMessage1.setSite(site); + abnormalMessage1.setAbnormalBillBo(abnormalBill.getHandle()); + abnormalMessage1.setAbnormalNode(Constants.ABNORMAL_MESSAGE_REPORT); + wrapper.setEntity(abnormalMessage1); + AbnormalMessage _abnormalMessage = abnormalMessageMapper.selectOne(wrapper); + abnormalMessage.setUpUserGroup(_abnormalMessage.getUpUserGroup()); + abnormalMessage.setGrade(_abnormalMessage.getGrade()); + abnormalMessage.setUpDateTime(_abnormalMessage.getUpDateTime()); + abnormalMessage.setAbnormalNode(Constants.ABNORMAL_MESSAGE_RESPONSE); + break; + case Constants.CORRECTION_CONFIRM://纠纷确认 + abnormalMessage.setSendUserGroup(abnormalBillDispose.getDutySendUserGroup()); + abnormalMessage.setAbnormalNode(Constants.ABNORMAL_MESSAGE_CORRECTION_CONFIRM); + break; + case Constants.PROGRAM_CONFIRM://方案确认 + abnormalMessage.setSendUser(abnormalBillDispose.getResolveSendUser()); + abnormalMessage.setAbnormalNode(Constants.ABNORMAL_MESSAGE_PROGRAM_CONFIRM); + break; + case Constants.CANCEL://取消 + abnormalMessage.setSendUserGroup(abnormalBill.getCancelSendUserGroup()); + abnormalMessage.setAbnormalNode(Constants.ABNORMAL_MESSAGE_CANCEL); + break; + case Constants.SHUT_DOWN: + break; + } + + String message = this.formatMessage(abnormalBill, abnormalMessage.getMessageType(), site); + //得到消息触发的时间 + abnormalMessage.setResponseDateTime(now); + //得到要发送的消息 + abnormalMessage.setContent(message); + //得到升级的用户组 + //新建有、响应没有、纠防确认有、方案确认没有、取消没有、关闭没有 + if(Constants.NEW.equals(abnormalBill.getStatus()) || Constants.CORRECTION_CONFIRM.equals(abnormalBill.getStatus())){ + abnormalMessage.setUpUserGroup(abnormalMessage.getSendUserGroup()+"_UP"); + //得到升级的时间和等级 + + UserGroup customFieldByGroup = userGroupMapper.getCustomFieldByGroup(site, abnormalMessage.getSendUserGroup()); + abnormalMessage.setUpDateTime(abnormalMessage.getResponseDateTime().plusMinutes(Integer.parseInt(customFieldByGroup.getMessageNoticeTime()))); + abnormalMessage.setGrade(customFieldByGroup.getMessageNoticeLevel()); + //得到升级的消息类型 + abnormalMessage.setUpMessageType(abnormalMessage.getMessageType()); + } + + + + //得到异常节点 + + //abnormalMessage.setAbnormalNode(Constants.ABNORMAL_MESSAGE_REPORT); + + + //设置状态,新建是Y,响应为N,纠防确认是N,方案确认是Y, + if(Constants.ABNORMAL_MESSAGE_RESPONSE.equals(abnormalMessage.getAbnormalNode()) || + Constants.ABNORMAL_MESSAGE_CORRECTION_CONFIRM.equals(abnormalMessage.getAbnormalNode())){ + abnormalMessage.setStatus("N"); + }else{ + abnormalMessage.setStatus("Y"); + } + + + abnormalMessage.setCreatedUser(user); + abnormalMessage.setCreatedDateTime(now); + abnormalMessage.setModifiedUser(user); + abnormalMessage.setModifiedDateTime(now); + + + //判断,如果是方案确认,则发送用户,否则,除了节点是响应之外,则发送用户 + if(Constants.ABNORMAL_MESSAGE_PROGRAM_CONFIRM.equals(abnormalMessage.getAbnormalNode())){ + String sendUsers = abnormalMessage.getSendUser().replace(',', '|'); + activeMQUtil.wechatSendMessage(sendUsers,abnormalMessage.getContent()); + }else if(!Constants.ABNORMAL_MESSAGE_RESPONSE.equals(abnormalMessage.getAbnormalNode())){ + List nwaUsers = nwaUserService.checkUserGroup(abnormalMessage.getSendUserGroup()); + StringBuilder sendUsers = new StringBuilder(); + for (int i = 0; i < nwaUsers.size(); i++) { + if(i == (nwaUsers.size() - 1)){ + sendUsers.append(nwaUsers.get(i)); + }else{ + sendUsers.append(nwaUsers.get(i)).append("|"); + } + } + activeMQUtil.wechatSendMessage(sendUsers.toString(),abnormalMessage.getContent()); + } + abnormalMessageService.saveOrUpdate(abnormalMessage); + return true; + } + + @Override + public String formatMessage(AbnormalBill abnormalBill,String messageType, String site) { //找到消息内容 + String locale = LocaleContextHolder.getLocale().getLanguage(); MessageType messageTypeEntity = new MessageType(); messageTypeEntity.setSite(site); - messageTypeEntity.setMessageType(abnormalMessage.getMessageType()); + messageTypeEntity.setMessageType(messageType); QueryWrapper messageTypeQueryWrapper = new QueryWrapper(); messageTypeQueryWrapper.setEntity(messageTypeEntity); - MessageType messageType = messageTypeMapper.selectOne(messageTypeQueryWrapper); + MessageType sendMessageType = messageTypeMapper.selectOne(messageTypeQueryWrapper); if(messageType == null){ throw new BaseException("异常提报时找不到要发送的消息类型"); } //格式化消息 - String body = messageType.getBody(); + String body = sendMessageType.getBody(); //替换消息类型中的参数 Map messageMap = new HashMap<>(); //根据车间找到对应车间的描述 @@ -813,49 +935,19 @@ public class AbnormalBillServiceImpl extends ServiceImpl _upSendUserGroups = Arrays.asList(abnormalMessage.getSendUserGroup().split(",")); -// for(int i = 0; i < _upSendUserGroups.size(); i++){ -// _upSendUserGroups.set(i,_upSendUserGroups.get(i)+"_UP"); -// } -// List upSendUserGroups = userGroupMapper.getUserGroupListByGroups(site, _upSendUserGroups); -// if(upSendUserGroups != null && upSendUserGroups.size() > 0){ -// abnormalMessage.setUpUserGroup(upSendUserGroups.get(0).getUserGroup()); -// } - //得到升级的用户组 - abnormalMessage.setUpUserGroup(abnormalMessage.getSendUserGroup()+"_UP"); - //得到升级的消息类型 - abnormalMessage.setUpMessageType(abnormalMessage.getMessageType()); - //得到消息触发的时间 - abnormalMessage.setResponseDateTime(now); - //得到升级的时间和等级 - UserGroup customFieldByGroup = userGroupMapper.getCustomFieldByGroup(site, abnormalMessage.getSendUserGroup()); - abnormalMessage.setUpDateTime(abnormalMessage.getResponseDateTime().plusMinutes(Integer.parseInt(customFieldByGroup.getMessageNoticeTime()))); - abnormalMessage.setGrade(customFieldByGroup.getMessageNoticeLevel()); - //得到异常节点 - abnormalMessage.setAbnormalNode(Constants.ABNORMAL_MESSAGE_REPORT); - //设置状态 - if(Constants.ABNORMAL_MESSAGE_REPORT.equals(abnormalMessage.getAbnormalNode())){ - abnormalMessage.setStatus("Y"); - }else{ - abnormalMessage.setStatus("N"); - } - - abnormalMessage.setCreatedUser(user); - abnormalMessage.setCreatedDateTime(now); - abnormalMessage.setModifiedUser(user); - abnormalMessage.setModifiedDateTime(now); - - - return false; + //格式化之后的消息 + return StringUtils.format(body, messageMap); } diff --git a/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/service/impl/AnomalyJobServiceImpl.java b/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/service/impl/AnomalyJobServiceImpl.java new file mode 100644 index 00000000..d3c9eb36 --- /dev/null +++ b/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/service/impl/AnomalyJobServiceImpl.java @@ -0,0 +1,122 @@ +package com.foreverwin.mesnac.anomaly.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.foreverwin.mesnac.anomaly.mapper.AbnormalBillMapper; +import com.foreverwin.mesnac.anomaly.mapper.AbnormalMessageMapper; +import com.foreverwin.mesnac.anomaly.model.AbnormalBill; +import com.foreverwin.mesnac.anomaly.model.AbnormalMessage; +import com.foreverwin.mesnac.anomaly.service.AbnormalBillService; +import com.foreverwin.mesnac.anomaly.service.AbnormalMessageService; +import com.foreverwin.mesnac.anomaly.service.AnomalyJobService; +import com.foreverwin.mesnac.anomaly.util.ActiveMQUtil; +import com.foreverwin.mesnac.common.util.StringUtil; +import com.foreverwin.mesnac.meapi.model.NwaUser; +import com.foreverwin.mesnac.meapi.service.NwaUserService; +import com.foreverwin.modular.core.util.CommonMethods; +import org.springframework.beans.factory.annotation.Autowired; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.UUID; + +/** + * @Description TODO + * @Author zhaojiawei + * @Since 2021-07-22 + */ +public class AnomalyJobServiceImpl implements AnomalyJobService { + + @Autowired + private AbnormalMessageService abnormalMessageService; + + @Autowired + private AbnormalMessageMapper abnormalMessageMapper; + + @Autowired + private AbnormalBillMapper abnormalBillMapper; + + @Autowired + private AbnormalBillService abnormalBillService; + + @Autowired + private ActiveMQUtil activeMQUtil; + + @Autowired + private NwaUserService nwaUserService; + + @Override + public void anomalyJobProcess(String site) { + LocalDateTime now = LocalDateTime.now(); + String user = CommonMethods.getUser(); + //找到状态为N,并且升级时间大于当前时间 + QueryWrapper abnormalMessageQueryWrapper = new QueryWrapper<>(); + abnormalMessageQueryWrapper.eq("STATUS","N"); + abnormalMessageQueryWrapper.gt("UP_DATE_TIME",now); + List abnormalMessages = abnormalMessageMapper.selectList(abnormalMessageQueryWrapper); + for(AbnormalMessage _abnormalMessage : abnormalMessages){ + String uuid = UUID.randomUUID().toString(); + AbnormalMessage abnormalMessage = new AbnormalMessage(); + //设置abnormalMessage的handle + abnormalMessage.setHandle(uuid); + //设置abnormalMessage的site + abnormalMessage.setSite(_abnormalMessage.getSite()); + //设置abnormalMessage的异常单Bo + abnormalMessage.setAbnormalBillBo(_abnormalMessage.getAbnormalBillBo()); + //设置abnormalMessage的type + abnormalMessage.setType(_abnormalMessage.getType()); + //设置abnormalMessage的message_type + abnormalMessage.setMessageType(_abnormalMessage.getUpMessageType()); + //设置发送用户组和升级用户组 + if(!StringUtil.isBlank(_abnormalMessage.getUpUserGroup())){ + //当前发送用户组就等于升级用户组,升级用户组就等于空 + abnormalMessage.setSendUserGroup(abnormalMessage.getUpUserGroup()); + abnormalMessage.setUpUserGroup(null); + } + + //设置发送用户和升级用户 + if(!StringUtil.isBlank(abnormalMessage.getUpUser())){ + //当前发送用户就等于升级用户,升级用户就等于空 + abnormalMessage.setSendUser(abnormalMessage.getUpUser()); + abnormalMessage.setUpUser(null); + } + + AbnormalBill abnormalBill = abnormalBillMapper.selectById(abnormalMessage.getAbnormalBillBo()); + + String message = abnormalBillService.formatMessage(abnormalBill,abnormalMessage.getMessageType(),site); + + abnormalMessage.setContent(message); + + //设置UP_DATE_TIME、UP_MESSAGE_TYPE、GRADE、RESPONSE_DATE_TIME、ABNORMAL_NODE、STATUS + abnormalMessage.setUpMessageType(null); + abnormalMessage.setUpDateTime(null); + + abnormalMessage.setGrade(abnormalMessage.getGrade() + 1); + abnormalMessage.setResponseDateTime(now); + abnormalMessage.setAbnormalNode(_abnormalMessage.getAbnormalNode()); + abnormalMessage.setStatus("Y"); + + //设置时间 + abnormalMessage.setCreatedUser(user); + abnormalMessage.setCreatedDateTime(now); + abnormalMessage.setModifiedUser(user); + abnormalMessage.setModifiedDateTime(now); + +// if(Constants.ABNORMAL_MESSAGE_PROGRAM_CONFIRM.equals(abnormalMessage.getAbnormalNode())){ +// String sendUsers = abnormalMessage.getSendUser().replace(',', '|'); +// activeMQUtil.wechatSendMessage(sendUsers,abnormalMessage.getContent()); +// }else if(!Constants.ABNORMAL_MESSAGE_RESPONSE.equals(abnormalMessage.getAbnormalNode())){ + List nwaUsers = nwaUserService.checkUserGroup(abnormalMessage.getSendUserGroup()); + StringBuilder sendUsers = new StringBuilder(); + for (int i = 0; i < nwaUsers.size(); i++) { + if(i == (nwaUsers.size() - 1)){ + sendUsers.append(nwaUsers.get(i)); + }else{ + sendUsers.append(nwaUsers.get(i)).append("|"); + } + } + activeMQUtil.wechatSendMessage(sendUsers.toString(),abnormalMessage.getContent()); +// } + abnormalMessageService.saveOrUpdate(abnormalMessage); + } + } +} diff --git a/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/util/ActiveMQUtil.java b/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/util/ActiveMQUtil.java new file mode 100644 index 00000000..08168f7a --- /dev/null +++ b/anomaly/src/main/java/com/foreverwin/mesnac/anomaly/util/ActiveMQUtil.java @@ -0,0 +1,64 @@ +package com.foreverwin.mesnac.anomaly.util; + +import com.foreverwin.modular.core.exception.BaseException; +import org.apache.activemq.ActiveMQConnectionFactory; +import org.json.JSONObject; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.stereotype.Component; + +import javax.jms.*; + +/** + * @Description TODO + * @Author zhaojiawei + * @Since 2021-07-21 + */ +@Component +@ConditionalOnProperty(prefix = "activeMq", value = {"enabled"}, matchIfMissing = true) +public class ActiveMQUtil { + @Value("${activeMq.sendWeChatMessage}") + private String weChatUrl; + @Value("${activeMq.queue}") + private String queue; + + public void wechatSendMessage(String user, String text) { + ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(weChatUrl); + Connection connection = null; + Session session = null; + MessageProducer producer = null; + try{ + connection = factory.createConnection(); + connection.start(); + session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + Destination destination = session.createQueue(this.queue); + producer = session.createProducer(destination); + + JSONObject jsonObject = new JSONObject(); + //jsonObject.put("TO_USER", user); + jsonObject.put("TO_USER", "@all"); + jsonObject.put("CONTENT",text); + String sendMessage = jsonObject.toString(); + TextMessage textMessage = session.createTextMessage(sendMessage); + producer.send(textMessage); + }catch (Exception e){ + throw new BaseException("发送消息失败"+e.getMessage()); + }finally { + try { + if (producer != null) { + producer.close(); + } + if (session != null) { + session.close(); + } + if (connection != null) { + connection.close(); + } + }catch (Exception e){ + e.printStackTrace(); + } + } + + + } +} diff --git a/common/src/main/java/com/foreverwin/mesnac/common/enums/HandleEnum.java b/common/src/main/java/com/foreverwin/mesnac/common/enums/HandleEnum.java index fe15c86e..bae4abb6 100644 --- a/common/src/main/java/com/foreverwin/mesnac/common/enums/HandleEnum.java +++ b/common/src/main/java/com/foreverwin/mesnac/common/enums/HandleEnum.java @@ -87,6 +87,9 @@ public enum HandleEnum { /**设备检验任务**/ RESOURCE_INSPECT_TASK("ResourceInspectTaskBo","ResourceInspectTaskBo:{0},{1}"), + /**设备检验任务**/ + SPLIT_SFC("SplitSfcBo","SplitSfcBo:{0},{1}"), + /**设备检验任务**/ RESOURCE_REPAIR_TASK("ResourceRepairTaskBo","ResourceRepairTaskBo:{0},{1}"), diff --git a/common/src/main/java/com/foreverwin/mesnac/common/service/impl/InspectionTaskServiceImpl.java b/common/src/main/java/com/foreverwin/mesnac/common/service/impl/InspectionTaskServiceImpl.java index f95ef7b3..2f1b3648 100644 --- a/common/src/main/java/com/foreverwin/mesnac/common/service/impl/InspectionTaskServiceImpl.java +++ b/common/src/main/java/com/foreverwin/mesnac/common/service/impl/InspectionTaskServiceImpl.java @@ -218,9 +218,9 @@ public class InspectionTaskServiceImpl extends ServiceImpl impl public List findNgGroupByOperationBo(Operation operation) { String site = CommonMethods.getSite(); operation.setSite(site); - operation.setHandle("OperationBO"+site+","+operation.getOperation()+",#"); + if(StringUtil.isBlank(operation.getOperation())){ + operation.setHandle("OperationBO"+site+","+operation.getOperation()+",#"); + } return ncGroupMapper.findNgGroupByOperationBo(operation); } diff --git a/production/src/main/java/com/foreverwin/mesnac/production/controller/SplitSfcController.java b/production/src/main/java/com/foreverwin/mesnac/production/controller/SplitSfcController.java new file mode 100644 index 00000000..d63abafb --- /dev/null +++ b/production/src/main/java/com/foreverwin/mesnac/production/controller/SplitSfcController.java @@ -0,0 +1,136 @@ +package com.foreverwin.mesnac.production.controller; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.foreverwin.mesnac.meapi.dto.SfcDto; +import com.foreverwin.mesnac.production.model.SplitSfc; +import com.foreverwin.mesnac.production.service.SplitSfcService; +import com.foreverwin.modular.core.util.FrontPage; +import com.foreverwin.modular.core.util.R; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * + * @author Philip + * @since 2021-07-20 + */ +@RestController +@RequestMapping("/Z-SPLIT-SFC") +public class SplitSfcController { + + @Autowired + public SplitSfcService splitSfcService; + + @ResponseBody + @GetMapping("/getSfcData") + public R getSfcData(String sfc){ + SfcDto result; + result = splitSfcService.getSfcData(sfc); + return R.ok(result); + } + + @ResponseBody + @GetMapping("/splitSfc") + public R getSfcData(SfcDto sfcDto){ + return R.ok( splitSfcService.splitSfc(sfcDto)); + } + + /** + * 根据id查询 + * + * @param id 主键 + * @return + */ + @ResponseBody + @GetMapping("/{id:.+}") + public R getSplitSfcById(@PathVariable String id) { + return R.ok( splitSfcService.getById(id)); + } + + /** + * 查询所有数据 + * + * @return + */ + @ResponseBody + @GetMapping("") + public R getSplitSfcList(SplitSfc splitSfc){ + List result; + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.setEntity(splitSfc); + result = splitSfcService.list(queryWrapper); + return R.ok(result); + } + + /** + * 分页查询数据 + * + * @param frontPage 分页信息 + * @return + */ + @ResponseBody + @GetMapping("/page") + public R page(FrontPage frontPage, SplitSfc splitSfc){ + IPage result; + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.setEntity(splitSfc); + if (frontPage.getGlobalQuery() != null && !"".equals(frontPage.getGlobalQuery().trim())) { + //TODO modify global query + queryWrapper.lambda().and(wrapper -> wrapper + .like(SplitSfc::getHandle, frontPage.getGlobalQuery()) + .or().like(SplitSfc::getSite, frontPage.getGlobalQuery()) + .or().like(SplitSfc::getSfc, frontPage.getGlobalQuery()) + .or().like(SplitSfc::getSplitSfc, frontPage.getGlobalQuery()) + .or().like(SplitSfc::getRouter, frontPage.getGlobalQuery()) + .or().like(SplitSfc::getCreateUser, frontPage.getGlobalQuery()) + ); + } + result = splitSfcService.page(frontPage.getPagePlus(), queryWrapper); + return R.ok(result); + } + + /** + * 新增 + * @param splitSfc 传递的实体 + * @return null 失败 实体成功 + */ + @PostMapping + public R save(@RequestBody SplitSfc splitSfc) { + return R.ok(splitSfcService.save(splitSfc)); + } + + /** + * 修改 + * @param splitSfc 传递的实体 + * @return null 失败 实体成功 + */ + @PutMapping + public R updateById(@RequestBody SplitSfc splitSfc) { + return R.ok(splitSfcService.updateById(splitSfc)); + } + + /** + * 根据id删除对象 + * @param id 实体ID + * @return 0 失败 1 成功 + */ + @ResponseBody + @RequestMapping(method = RequestMethod.DELETE, value = "/{id:.+}") + public R removeById(@PathVariable("id") String id){ + return R.ok(splitSfcService.removeById(id)); + } + + /** + * 批量删除对象 + * @param ids 实体集合ID + * @return 0 失败 1 成功 + */ + @ResponseBody + @RequestMapping(method = RequestMethod.POST, value = "/delete-batch") + public R removeByIds(List ids){ + return R.ok(splitSfcService.removeByIds(ids)); + } +} \ No newline at end of file diff --git a/production/src/main/java/com/foreverwin/mesnac/production/dto/SplitSfcDto.java b/production/src/main/java/com/foreverwin/mesnac/production/dto/SplitSfcDto.java new file mode 100644 index 00000000..e17af61a --- /dev/null +++ b/production/src/main/java/com/foreverwin/mesnac/production/dto/SplitSfcDto.java @@ -0,0 +1,33 @@ +package com.foreverwin.mesnac.production.dto; + +import com.foreverwin.mesnac.production.model.SplitSfc; + +public class SplitSfcDto extends SplitSfc { + private String ncCode; + private String routerBo; + private String ncQty; + + public String getNcCode() { + return ncCode; + } + + public void setNcCode(String ncCode) { + this.ncCode = ncCode; + } + + public String getRouterBo() { + return routerBo; + } + + public void setRouterBo(String routerBo) { + this.routerBo = routerBo; + } + + public String getNcQty() { + return ncQty; + } + + public void setNcQty(String ncQty) { + this.ncQty = ncQty; + } +} diff --git a/production/src/main/java/com/foreverwin/mesnac/production/mapper/SfcCrossMapper.java b/production/src/main/java/com/foreverwin/mesnac/production/mapper/SfcCrossMapper.java index 78cc80b9..59a92ee6 100644 --- a/production/src/main/java/com/foreverwin/mesnac/production/mapper/SfcCrossMapper.java +++ b/production/src/main/java/com/foreverwin/mesnac/production/mapper/SfcCrossMapper.java @@ -69,7 +69,7 @@ public interface SfcCrossMapper extends BaseMapper { List getSfcListByResrce(@Param("site") String site, @Param("resrce") String resrce,@Param("locale") String locale); - Integer resourceCheck(@Param("resrceBO")String resrceBO, @Param("dateTime")LocalDateTime dateTime); - SfcDto getInfoBySfc(@Param("sfc")Sfc sfc); + + Integer resourceCheck(@Param("site")String site,@Param("resrce")String resrce, @Param("dateTime")LocalDateTime dateTime); } diff --git a/production/src/main/java/com/foreverwin/mesnac/production/mapper/SplitSfcMapper.java b/production/src/main/java/com/foreverwin/mesnac/production/mapper/SplitSfcMapper.java new file mode 100644 index 00000000..3ac0c6a3 --- /dev/null +++ b/production/src/main/java/com/foreverwin/mesnac/production/mapper/SplitSfcMapper.java @@ -0,0 +1,24 @@ +package com.foreverwin.mesnac.production.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.foreverwin.mesnac.meapi.dto.SfcDto; +import com.foreverwin.mesnac.production.dto.SplitSfcDto; +import com.foreverwin.mesnac.production.model.SplitSfc; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +/** + *

+ * 产品条码拆分表 Mapper 接口 + *

+ * + * @author Philip + * @since 2021-07-20 + */ +@Repository +public interface SplitSfcMapper extends BaseMapper { + + SfcDto getSfcData(@Param("handle") String handle); + + SplitSfcDto getAbnormalQty(@Param("site")String site, @Param("sfc")String sfc, @Param("operation") String operation); +} \ No newline at end of file diff --git a/production/src/main/java/com/foreverwin/mesnac/production/model/SplitSfc.java b/production/src/main/java/com/foreverwin/mesnac/production/model/SplitSfc.java new file mode 100644 index 00000000..c02c7e03 --- /dev/null +++ b/production/src/main/java/com/foreverwin/mesnac/production/model/SplitSfc.java @@ -0,0 +1,169 @@ +package com.foreverwin.mesnac.production.model; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.baomidou.mybatisplus.extension.activerecord.Model; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + *

+ * 产品条码拆分表 + *

+ * + * @author Philip + * @since 2021-07-20 + */ + +@TableName("Z_SPLIT_SFC") + +public class SplitSfc extends Model { + + private static final long serialVersionUID = 1L; + + /** + * 主键 + */ + @TableId(value = "HANDLE", type = IdType.INPUT) + private String handle; + /** + * 站点 + */ + @TableField("SITE") + private String site; + /** + * 产品条码 + */ + @TableField("SFC") + private String sfc; + /** + * 拆出的产品条码 + */ + @TableField("SPLIT_SFC") + private String splitSfc; + /** + * 拆分数量 + */ + @TableField("SPLIT_QTY") + private BigDecimal splitQty; + /** + * 处置工艺路线 + */ + @TableField("ROUTER") + private String router; + /** + * 创建人 + */ + @TableField("CREATE_USER") + private String createUser; + /** + * 创建时间 + */ + @TableField("CREATED_DATE_TIME") + private LocalDateTime createdDateTime; + + + public String getHandle() { + return handle; + } + + public void setHandle(String handle) { + this.handle = handle; + } + + public String getSite() { + return site; + } + + public void setSite(String site) { + this.site = site; + } + + public String getSfc() { + return sfc; + } + + public void setSfc(String sfc) { + this.sfc = sfc; + } + + public String getSplitSfc() { + return splitSfc; + } + + public void setSplitSfc(String splitSfc) { + this.splitSfc = splitSfc; + } + + public BigDecimal getSplitQty() { + return splitQty; + } + + public void setSplitQty(BigDecimal splitQty) { + this.splitQty = splitQty; + } + + public String getRouter() { + return router; + } + + public void setRouter(String router) { + this.router = router; + } + + public String getCreateUser() { + return createUser; + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + public LocalDateTime getCreatedDateTime() { + return createdDateTime; + } + + public void setCreatedDateTime(LocalDateTime createdDateTime) { + this.createdDateTime = createdDateTime; + } + +public static final String HANDLE = "HANDLE"; + +public static final String SITE = "SITE"; + +public static final String SFC = "SFC"; + +public static final String SPLIT_SFC = "SPLIT_SFC"; + +public static final String SPLIT_QTY = "SPLIT_QTY"; + +public static final String ROUTER = "ROUTER"; + +public static final String CREATE_USER = "CREATE_USER"; + +public static final String CREATED_DATE_TIME = "CREATED_DATE_TIME"; + + + @Override + protected Serializable pkVal() { + return this.handle; + } + + @Override + public String toString() { + return "SplitSfc{" + + "handle = " + handle + + ", site = " + site + + ", sfc = " + sfc + + ", splitSfc = " + splitSfc + + ", splitQty = " + splitQty + + ", router = " + router + + ", createUser = " + createUser + + ", createdDateTime = " + createdDateTime + + "}"; + } +} \ No newline at end of file diff --git a/production/src/main/java/com/foreverwin/mesnac/production/service/SplitSfcService.java b/production/src/main/java/com/foreverwin/mesnac/production/service/SplitSfcService.java new file mode 100644 index 00000000..4e8e4c27 --- /dev/null +++ b/production/src/main/java/com/foreverwin/mesnac/production/service/SplitSfcService.java @@ -0,0 +1,33 @@ +package com.foreverwin.mesnac.production.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.IService; +import com.foreverwin.mesnac.meapi.dto.SfcDto; +import com.foreverwin.mesnac.production.model.SplitSfc; +import com.foreverwin.modular.core.util.FrontPage; + +import java.util.List; + +/** + *

+ * 产品条码拆分表 服务类 + *

+ * + * @author Philip + * @since 2021-07-20 + */ +public interface SplitSfcService extends IService { + + /** + * 分页查询 + * @param frontPage + * @return + */ + IPage selectPage(FrontPage frontPage, SplitSfc splitSfc); + + List selectList(SplitSfc splitSfc); + + SfcDto getSfcData(String sfc); + + SplitSfc splitSfc(SfcDto sfcDto); +} \ No newline at end of file diff --git a/production/src/main/java/com/foreverwin/mesnac/production/service/impl/PodTemplateServiceImpl.java b/production/src/main/java/com/foreverwin/mesnac/production/service/impl/PodTemplateServiceImpl.java index 74cd6428..ba2b07e1 100644 --- a/production/src/main/java/com/foreverwin/mesnac/production/service/impl/PodTemplateServiceImpl.java +++ b/production/src/main/java/com/foreverwin/mesnac/production/service/impl/PodTemplateServiceImpl.java @@ -173,7 +173,7 @@ public class PodTemplateServiceImpl implements PodTemplateService { throw new BaseException("资源不能为空"); } //是否设备点检 - sfcCrossService.resourceCheck(HandleEnum.RESOURCE.getHandle(site,resrce)); + sfcCrossService.resourceCheck(resrce); sfcDtoList.forEach(sfcDto -> { String operation = sfcDto.getOperation(); Operation currentRevisionRef = operationService.getCurrentRevisionRef(site, operation); diff --git a/production/src/main/java/com/foreverwin/mesnac/production/service/impl/SfcCrossServiceImpl.java b/production/src/main/java/com/foreverwin/mesnac/production/service/impl/SfcCrossServiceImpl.java index 96443454..97e4c234 100644 --- a/production/src/main/java/com/foreverwin/mesnac/production/service/impl/SfcCrossServiceImpl.java +++ b/production/src/main/java/com/foreverwin/mesnac/production/service/impl/SfcCrossServiceImpl.java @@ -77,10 +77,11 @@ public class SfcCrossServiceImpl implements SfcCrossService { } @Override - public void resourceCheck(String resrceBO) { + public void resourceCheck(String resrce) { LocalDateTime now = LocalDateTime.now(); + String site = CommonMethods.getSite(); LocalDateTime dateTime = LocalDateTime.of(now.getYear(), now.getMonth(), now.getDayOfMonth(), 0, 0, 0); - Integer integer = sfcCrossMapper.resourceCheck(resrceBO, dateTime); + Integer integer = sfcCrossMapper.resourceCheck(site,resrce, dateTime); if (integer<1){ throw new BaseException("当前设备点检未完成"); } diff --git a/production/src/main/java/com/foreverwin/mesnac/production/service/impl/SplitSfcServiceImpl.java b/production/src/main/java/com/foreverwin/mesnac/production/service/impl/SplitSfcServiceImpl.java new file mode 100644 index 00000000..ea8dd3e8 --- /dev/null +++ b/production/src/main/java/com/foreverwin/mesnac/production/service/impl/SplitSfcServiceImpl.java @@ -0,0 +1,166 @@ +package com.foreverwin.mesnac.production.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.foreverwin.mesnac.common.enums.HandleEnum; +import com.foreverwin.mesnac.common.util.ExceptionUtil; +import com.foreverwin.mesnac.common.util.StringUtil; +import com.foreverwin.mesnac.meapi.dto.SfcDto; +import com.foreverwin.mesnac.production.dto.SplitSfcDto; +import com.foreverwin.mesnac.production.mapper.SplitSfcMapper; +import com.foreverwin.mesnac.production.model.SplitSfc; +import com.foreverwin.mesnac.production.service.SplitSfcService; +import com.foreverwin.modular.core.exception.BaseException; +import com.foreverwin.modular.core.meext.MEServices; +import com.foreverwin.modular.core.util.CommonMethods; +import com.foreverwin.modular.core.util.FrontPage; +import com.sap.me.nonconformance.*; +import com.sap.me.production.SplitSerializeServiceInterface; +import com.sap.me.production.SplitSfcDetail; +import com.sap.me.production.SplitSfcRequest; +import com.sap.me.production.SplitSfcResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +/** + *

+ * 产品条码拆分表 服务实现类 + *

+ * + * @author Philip + * @since 2021-07-20 + */ +@Service +@Transactional(rollbackFor = Exception.class) +public class SplitSfcServiceImpl extends ServiceImpl implements SplitSfcService { + + + @Autowired + private SplitSfcMapper splitSfcMapper; + + @Override + public IPage selectPage(FrontPage frontPage, SplitSfc splitSfc) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.setEntity(splitSfc); + return super.page(frontPage.getPagePlus(), queryWrapper); + } + + @Override + public List selectList(SplitSfc splitSfc) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.setEntity(splitSfc); + return super.list(queryWrapper); + } + + @Override + public SfcDto getSfcData(String sfc) { + String site = CommonMethods.getSite(); + String handle = HandleEnum.SFC.getHandle(site, sfc); + //根据sfc找工单等信息 + SfcDto sfcData = splitSfcMapper.getSfcData(handle); + if (sfcData==null){ + throw new BaseException("未找到产品条码信息"); + } + String operation = sfcData.getOperation(); + //查询质量异常记录数量 + SplitSfcDto sfcDto=splitSfcMapper.getAbnormalQty(site,sfc,operation); + if (sfcDto==null){ + throw new BaseException("未找到方案确认的质量异常"); + } + sfcData.setQty(Double.valueOf(sfcDto.getNcQty())); + return sfcData; + } + @Override + public SplitSfc splitSfc(SfcDto sfcDto){ + String site = CommonMethods.getSite(); + String sfc = sfcDto.getSfc(); + String handle = HandleEnum.SFC.getHandle(site, sfc); + BigDecimal splitQty = new BigDecimal(sfcDto.getQty()); + + //根据sfc找工单等信息 + SfcDto sfcData = splitSfcMapper.getSfcData(handle); + String operation = sfcData.getOperation(); + if (sfcData==null){ + throw new BaseException("未找到产品条码信息"); + } + //查询质量异常记录数量 处置工艺路线及不良代码 + SplitSfcDto splitSfcDto=splitSfcMapper.getAbnormalQty(site,sfc,operation); + String routerBo = splitSfcDto.getRouterBo(); + String ncCode = splitSfcDto.getNcCode(); + if (StringUtil.isBlank(routerBo)){ + throw new BaseException("异常处置未选择处置工艺路线"); + } + if (StringUtil.isBlank(ncCode)){ + throw new BaseException("异常处置未选择不良代码"); + } + BigDecimal sfcQty = new BigDecimal(sfcData.getQty()); + if (new BigDecimal(splitSfcDto.getNcQty()).compareTo(sfcQty)>=0){ + throw new BaseException("质量异常数量不小于于产品条码的数量,不能拆分"); + } + if (splitQty.compareTo(new BigDecimal(splitSfcDto.getNcQty()))>0){ + throw new BaseException("拆分数量大于质量异常数量的数量,不能拆分"); + } + String[] splitNcCode = ncCode.split(","); + + SplitSfcRequest splitSfcRequest=new SplitSfcRequest(); + try { + SplitSerializeServiceInterface splitService = MEServices.create("com.sap.me.production", "SplitSerializeService",site); + NCProductionServiceInterface ncProductionService = MEServices.create("com.sap.me.nonconformance", "NCProductionService",site); + //拆sfc + List newList=new ArrayList<>(); + SplitSfcDetail splitDetail=new SplitSfcDetail(); + splitDetail.setQuantity(splitQty); + newList.add(splitDetail); + splitSfcRequest.setNewSfcList(newList); + splitSfcRequest.setSfcRef(HandleEnum.SFC.getHandle(site,sfc)); + Collection splitSfcResponses = splitService.splitSfc(splitSfcRequest); + SplitSfcResponse splitSfcResponse = splitSfcResponses.iterator().next(); + String newSfcRef = splitSfcResponse.getNewSfcRef(); + //记录不合格 + CreateNCRequest createNCRequest=new CreateNCRequest(); + createNCRequest.setQty(splitQty); + createNCRequest.setSfcRef(newSfcRef); + ProductionContext productionContext=new ProductionContext(); + StepIdentifier stepIdentifier=new StepIdentifier(); + stepIdentifier.setStepId(sfcData.getStepId()); + stepIdentifier.setOperationId(sfcData.getOperation()); + productionContext.setStepIdentifier(stepIdentifier); + createNCRequest.setProdCtx(productionContext); + createNCRequest.setNcCodeRef(HandleEnum.NC_CODE.getHandle(site,splitNcCode[0])); + ncProductionService.createNC(createNCRequest); + //不合格处置特殊工艺路线 + DispositionMultipleSfcsRequest dispositionSfcsRequest=new DispositionMultipleSfcsRequest(); + List sfcs=new ArrayList<>(); + sfcs.add(newSfcRef); + dispositionSfcsRequest.setSfcs(sfcs); + dispositionSfcsRequest.setBypassStepValidation(true); + DispositionSelection dispositionSelection=new DispositionSelection(); + dispositionSelection.setRouterRef(routerBo); + dispositionSfcsRequest.setDispositionSelection(dispositionSelection); + ncProductionService.dispositionMultipleSfcs(dispositionSfcsRequest); + SplitSfc splitSfc=new SplitSfc(); + String newSfc = StringUtil.trimHandle(newSfcRef); + splitSfc.setHandle(HandleEnum.SPLIT_SFC.getHandle(site,newSfc)); + splitSfc.setSite(site); + splitSfc.setSfc(sfc); + splitSfc.setSplitSfc(newSfc); + splitSfc.setSplitQty(splitQty); + splitSfc.setRouter(StringUtil.trimHandle(routerBo)); + splitSfc.setCreateUser(CommonMethods.getUser()); + splitSfc.setCreatedDateTime(LocalDateTime.now()); + save(splitSfc); + return splitSfc; + } catch (Exception e) { + ExceptionUtil.throwException(e); + } + return null; + } + +} \ No newline at end of file diff --git a/production/src/main/resources/mapper/SfcCrossMapper.xml b/production/src/main/resources/mapper/SfcCrossMapper.xml index 17fd4678..787b3224 100644 --- a/production/src/main/resources/mapper/SfcCrossMapper.xml +++ b/production/src/main/resources/mapper/SfcCrossMapper.xml @@ -160,7 +160,7 @@ WHERE sfc.site = #{site} and + SELECT FROM Z_SPLIT_SFC WHERE HANDLE=#{handle} + + + + + + + + + + + + + + + + + + + + + + INSERT INTO Z_SPLIT_SFC + + HANDLE, + SITE, + SFC, + SPLIT_SFC, + SPLIT_QTY, + ROUTER, + CREATE_USER, + CREATED_DATE_TIME, + VALUES + + #{handle}, + #{site}, + #{sfc}, + #{splitSfc}, + #{splitQty}, + #{router}, + #{createUser}, + #{createdDateTime}, + + + + + INSERT INTO Z_SPLIT_SFC + + + VALUES + + #{handle}, + #{site}, + #{sfc}, + #{splitSfc}, + #{splitQty}, + #{router}, + #{createUser}, + #{createdDateTime}, + + + + + + UPDATE Z_SPLIT_SFC + SITE=#{et.site}, + SFC=#{et.sfc}, + SPLIT_SFC=#{et.splitSfc}, + SPLIT_QTY=#{et.splitQty}, + ROUTER=#{et.router}, + CREATE_USER=#{et.createUser}, + CREATED_DATE_TIME=#{et.createdDateTime}, + WHERE HANDLE=#{et.handle} and ${et.MP_OPTLOCK_VERSION_COLUMN}=#{et.MP_OPTLOCK_VERSION_ORIGINAL} + + + + + UPDATE Z_SPLIT_SFC + SITE=#{et.site}, + SFC=#{et.sfc}, + SPLIT_SFC=#{et.splitSfc}, + SPLIT_QTY=#{et.splitQty}, + ROUTER=#{et.router}, + CREATE_USER=#{et.createUser}, + CREATED_DATE_TIME=#{et.createdDateTime}, + WHERE HANDLE=#{et.handle} and ${et.MP_OPTLOCK_VERSION_COLUMN}=#{et.MP_OPTLOCK_VERSION_ORIGINAL} + + + + + UPDATE Z_SPLIT_SFC + SITE=#{et.site}, + SFC=#{et.sfc}, + SPLIT_SFC=#{et.splitSfc}, + SPLIT_QTY=#{et.splitQty}, + ROUTER=#{et.router}, + CREATE_USER=#{et.createUser}, + CREATED_DATE_TIME=#{et.createdDateTime}, + + + + + HANDLE=#{ew.entity.handle} + AND SITE=#{ew.entity.site} + AND SFC=#{ew.entity.sfc} + AND SPLIT_SFC=#{ew.entity.splitSfc} + AND SPLIT_QTY=#{ew.entity.splitQty} + AND ROUTER=#{ew.entity.router} + AND CREATE_USER=#{ew.entity.createUser} + AND CREATED_DATE_TIME=#{ew.entity.createdDateTime} + + + ${ew.sqlSegment} + + + + + ${ew.sqlSegment} + + + + + DELETE FROM Z_SPLIT_SFC WHERE HANDLE=#{handle} + + + + DELETE FROM Z_SPLIT_SFC + + + + + ${k} = #{cm[${k}]} + + + + + + + + DELETE FROM Z_SPLIT_SFC + + + + + HANDLE=#{ew.entity.handle} + + AND SITE=#{ew.entity.site} + AND SFC=#{ew.entity.sfc} + AND SPLIT_SFC=#{ew.entity.splitSfc} + AND SPLIT_QTY=#{ew.entity.splitQty} + AND ROUTER=#{ew.entity.router} + AND CREATE_USER=#{ew.entity.createUser} + AND CREATED_DATE_TIME=#{ew.entity.createdDateTime} + + + ${ew.sqlSegment} + + + + + ${ew.sqlSegment} + + + + + DELETE FROM Z_SPLIT_SFC WHERE HANDLE IN ( + #{item} + ) + + + + + + diff --git a/quartz/pom.xml b/quartz/pom.xml index 55057bdf..e92893e5 100644 --- a/quartz/pom.xml +++ b/quartz/pom.xml @@ -38,5 +38,9 @@ com.foreverwin.modular modular-melib + + com.foreverwin.mesnac + anomaly + \ No newline at end of file diff --git a/quartz/src/main/java/com/foreverwin/mesnac/quartz/job/AnomalyJob.java b/quartz/src/main/java/com/foreverwin/mesnac/quartz/job/AnomalyJob.java new file mode 100644 index 00000000..40320b56 --- /dev/null +++ b/quartz/src/main/java/com/foreverwin/mesnac/quartz/job/AnomalyJob.java @@ -0,0 +1,43 @@ +package com.foreverwin.mesnac.quartz.job; + +import com.foreverwin.mesnac.anomaly.service.AnomalyJobService; +import com.foreverwin.mesnac.common.util.StringUtil; +import com.foreverwin.modular.core.exception.BaseException; +import org.quartz.DisallowConcurrentExecution; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * @Description TODO + * @Author zhaojiawei + * @Since 2021-07-22 + */ +@DisallowConcurrentExecution +public class AnomalyJob implements Job { + private static final String SITE_UPPERCASE = "SITE"; + private static final String SITE_LOWERCASE = "site"; + + @Autowired + private AnomalyJobService anomalyJobService; + + @Override + public void execute(JobExecutionContext context) throws JobExecutionException { + //获取站点,若站点为空则抛出异常 + String site = getSite(context); + if (StringUtil.isBlank(site)) { + throw new BaseException("anomaly.quartz.task.not.site", null); + } + + anomalyJobService.anomalyJobProcess(site); + } + + private String getSite(JobExecutionContext context) { + String site = context.getJobDetail().getJobDataMap().getString(SITE_LOWERCASE); + if (StringUtil.isBlank(site)) { + site = context.getJobDetail().getJobDataMap().getString(SITE_UPPERCASE); + } + return site; + } +}