jiangbiao 9 месяцев назад
Родитель
Сommit
5d1650572d

+ 88 - 0
master/src/main/java/com/ruoyi/project/listener/pssr/ConfirmTaskCreateListener.java

@@ -0,0 +1,88 @@
+package com.ruoyi.project.listener.pssr;
+
+import com.alibaba.fastjson.JSON;
+import com.github.stuxuhai.jpinyin.PinyinFormat;
+import com.github.stuxuhai.jpinyin.PinyinHelper;
+import com.ruoyi.common.sendEmail.IMailService;
+import com.ruoyi.common.utils.SpringContextUtils;
+import com.ruoyi.project.invoice.domain.TApproveReserveInvoice;
+import com.ruoyi.project.invoice.domain.TInvoiceBookingworkticket;
+import com.ruoyi.project.invoice.service.ITApproveReserveInvoiceService;
+import com.ruoyi.project.invoice.service.ITInvoiceBookingworkticketService;
+import com.ruoyi.project.pssr.domain.TPssrApprove;
+import com.ruoyi.project.pssr.service.ITPssrApproveService;
+import com.ruoyi.project.system.domain.SysUser;
+import com.ruoyi.project.system.service.ISysUserService;
+import org.activiti.engine.delegate.DelegateTask;
+import org.activiti.engine.delegate.TaskListener;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Service("confirmTaskCreateListener")
+public class ConfirmTaskCreateListener implements Serializable, TaskListener {
+    protected Logger logger = LoggerFactory.getLogger(getClass());
+
+    @Override
+    public void notify(DelegateTask delegateTask) {
+        String id = delegateTask.getExecution().getProcessInstanceBusinessKey();
+        ITPssrApproveService approveService = (ITPssrApproveService) SpringContextUtils.getBean("tPssrApproveService");
+        ISysUserService sysUserService = (ISysUserService) SpringContextUtils.getBean("sysUserService");
+        IMailService mailService = (IMailService) SpringContextUtils.getBean("mailService");
+        TPssrApprove approveEntity = approveService.selectTPssrApproveById(Long.parseLong(id));
+        String assignee = delegateTask.getAssignee();
+
+        logger.info("==============================发邮件============================");
+        //发送邮件
+        try {
+            String email = sysUserService.selectUserById(Long.parseLong(assignee)).getEmail();
+            String apNo = approveEntity.getApNo();
+            logger.info("apNo:" + apNo);
+            SysUser sysUser = sysUserService.selectUserById(Long.parseLong(assignee));
+            String username = sysUser.getNickName();
+            String loginName = sysUser.getUserName();
+            String usernameEN = PinyinHelper.convertToPinyinString(username, " ", PinyinFormat.WITHOUT_TONE);
+            logger.info("email:" + email);
+            logger.info("username:" + username);
+            //写html开始内容
+            String start = "<!DOCTYPE html><html><head><meta charset=\"utf-8\"><title></title></head><body><div style=\"background-color:#ECECEC; padding: 35px;\">" +
+                    "<table cellpadding=\"0\" align=\"center\"" +
+                    "style=\"width: 600px; margin: 0px auto; text-align: left; position: relative; border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; font-size: 14px; font-family:微软雅黑, 黑体; line-height: 1.5; box-shadow: rgb(153, 153, 153) 0px 0px 5px; border-collapse: collapse; background-position: initial initial; background-repeat: initial initial;background:#fff;\">" +
+                    "<tbody><tr><th valign=\"middle\" style=\"height: 25px; line-height: 25px; padding: 15px 35px; border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: #42a3d3; background-color: #49bcff; border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px;\">" +
+                    "<font face=\"微软雅黑\" size=\"5\" style=\"color: rgb(255, 255, 255); \">预约开票管理系统 </font><font face=\"微软雅黑\" size=\"3\" style=\"color: rgb(255, 255, 255); \">Reserve Invoice</font></th></tr>";
+            //表html中间内容
+            String prime = "";
+            String center = "<tr><td><div style=\"padding:25px 35px 40px; background-color:#fff;\"><h2 style=\"margin: 5px 0px; \">" +
+                    "<font color=\"#333333\" style=\"line-height: 20px; \"><font style=\"line-height: 22px; \" size=\"4\">" +
+                    "亲爱的 username(loginName)</font><br><font style=\"line-height: 22px; \" size=\"4\">" +
+                    "Dear usernameEN(loginName)</font></font></h2>" +
+                    "<p>您有一个PSSR的待办任务:<br>" +
+                    "You have a pending PSSR task:<br>" +
+                    "请登录<a href=\"https://cpms.basf-ypc.net.cn/cpms/index.html#/approve/pending\">PSSR待办中</a>查看。<br>" +
+                    "Please log in the <a href=\"https://cpms.basf-ypc.net.cn/cpms/index.html#/approve/pending\">PSSRApprove</a> to handle it.</p>" +
+                    "<p align=\"right\">date</p>" +
+                    "<div style=\"width:700px;margin:0 auto;\">" +
+                    "<div style=\"padding:10px 10px 0;border-top:1px solid #ccc;color:#747474;margin-bottom:20px;line-height:1.3em;font-size:12px;\">" +
+                    "<p>此为系统邮件,请勿回复<br>This e-Mail is an automatic reminder sent by CPMS, please do not reply</p>" +
+                    "</div></div></div></td></tr>";
+            String one = center.replaceFirst("username", username);
+            String two = one.replaceFirst("usernameEN", usernameEN);
+            String three = two.replace("loginName", loginName);
+            String four = three.replaceFirst("apNo", apNo);
+            String five = four.replaceFirst("apNoEN", apNo);
+            String result = five.replaceFirst("date", String.valueOf(new Date()));
+            prime = prime + result;
+            //写html结尾内容
+            String end = "</tbody></table></div></body></html>";
+            //拼接html
+            String html = start + prime + end;
+            logger.info("html:" + html);
+            mailService.sendHtmlMail(email, "PSSR:您有一个新的待办任务 PSSR:You have a pending PSSR task (" + apNo + ")", html);
+        } catch (Exception e) {
+            logger.error("邮件发送失败" + JSON.toJSONString(e));
+        }
+    }
+}

+ 6 - 0
master/src/main/java/com/ruoyi/project/pssr/controller/TPssrApproveController.java

@@ -14,6 +14,8 @@ import com.ruoyi.framework.web.controller.BaseController;
 import com.ruoyi.framework.web.domain.AjaxResult;
 import com.ruoyi.framework.web.page.TableDataInfo;
 import com.ruoyi.project.approve.damain.DevTask;
+import com.ruoyi.project.listener.invoiceApprove.YhzgTaskCreateListener;
+import com.ruoyi.project.listener.pssr.ConfirmTaskCreateListener;
 import com.ruoyi.project.plant.domain.TStaffmgr;
 import com.ruoyi.project.pssr.domain.*;
 import com.ruoyi.project.pssr.service.*;
@@ -590,6 +592,7 @@ public class TPssrApproveController extends BaseController {
         Map<String, Object> variables = new HashMap<>();
         variables.put("applyUser", userId);
         variables.put("allJlUsers", executor);
+        variables.put("confirmTaskCreateListener", new ConfirmTaskCreateListener());//发送邮件
         variables.put("jlUser", aboveall.getPlantMgr());
 
         TPssrApprove exist = tPssrApproveService.selectTPssrApproveByAboveallId(aboveallId);
@@ -2603,6 +2606,7 @@ public class TPssrApproveController extends BaseController {
         Map<String, Object> variables = new HashMap<>();
         variables.put("applyUser", userId);
         variables.put("confirmUsers", confirmUsers);
+        variables.put("confirmTaskCreateListener", new ConfirmTaskCreateListener());//发送邮件
         variables.put("chargePerson", confirm);
         //采用key来启动流程定义并设置流程变量,返回流程实例
         ProcessInstance pi = runtimeService.startProcessInstanceByKey("pssr1confirm", String.valueOf(businessKey), variables);
@@ -2624,6 +2628,7 @@ public class TPssrApproveController extends BaseController {
         variables.put("applyUser", userId);
         variables.put("confirmUsers1", confirmUsers1);
         variables.put("confirmUsers2", confirmUsers2);
+        variables.put("confirmTaskCreateListener", new ConfirmTaskCreateListener());//发送邮件
         variables.put("chargePerson", confirm);
         //采用key来启动流程定义并设置流程变量,返回流程实例
         ProcessInstance pi = runtimeService.startProcessInstanceByKey("pssr2confirm", String.valueOf(businessKey), variables);
@@ -2646,6 +2651,7 @@ public class TPssrApproveController extends BaseController {
         variables.put("confirmUsers1", confirmUsers1);
         variables.put("confirmUsers2", confirmUsers2);
         variables.put("confirmUsers3", confirmUsers3);
+        variables.put("confirmTaskCreateListener", new ConfirmTaskCreateListener());//发送邮件
         variables.put("chargePerson", confirm);
         //采用key来启动流程定义并设置流程变量,返回流程实例
         ProcessInstance pi = runtimeService.startProcessInstanceByKey("pssr3confirm", String.valueOf(businessKey), variables);

+ 1 - 1
master/src/main/java/com/ruoyi/project/pssr/service/impl/TPssrApproveServiceImpl.java

@@ -13,7 +13,7 @@ import com.ruoyi.project.pssr.service.ITPssrApproveService;
  * @author ssy
  * @date 2024-09-18
  */
-@Service
+@Service("tPssrApproveService")
 public class TPssrApproveServiceImpl implements ITPssrApproveService
 {
     @Autowired

+ 6 - 1
master/src/main/resources/processes/pssr/pssr1confirm.bpmn

@@ -3,9 +3,14 @@
   <process id="pssr1confirm" name="PSSR单确认人确认流程" isExecutable="true">
     <startEvent id="applyUser" name="Start" activiti:initiator="${applyUser}"></startEvent>
     <sequenceFlow id="flow1" sourceRef="applyUser" targetRef="confirmUser"></sequenceFlow>
-    <userTask id="chargePerson" name="检查内容负责人" activiti:assignee="#{chargePerson}"></userTask>
+    <userTask id="chargePerson" name="检查内容负责人" activiti:assignee="#{chargePerson}">
+        <extensionElements>
+          <activiti:taskListener event="create" delegateExpression="${confirmTaskCreateListener}"></activiti:taskListener>
+        </extensionElements>
+    </userTask>
     <userTask id="confirmUser" name="确认人" activiti:assignee="${confirmUser}">
         <extensionElements>
+        <activiti:taskListener event="create" delegateExpression="${confirmTaskCreateListener}"></activiti:taskListener>
             <!-- 定义多实例任务,使用集合变量 confirmUsers 动态生成 -->
             <activiti:multiInstanceLoopCharacteristics isSequential="false" activiti:collection="confirmUsers" activiti:elementVariable="confirmUser">
                 <completionCondition>${nrOfCompletedInstances == nrOfInstances}</completionCondition>

+ 7 - 1
master/src/main/resources/processes/pssr/pssr2confirm.bpmn

@@ -5,6 +5,7 @@
     <sequenceFlow id="flow1" sourceRef="applyUser" targetRef="confirmUser1"></sequenceFlow>
     <userTask id="confirmUser1" name="确认人1" activiti:assignee="${confirmUser1}">
             <extensionElements>
+                <activiti:taskListener event="create" delegateExpression="${confirmTaskCreateListener}"></activiti:taskListener>
                 <!-- 定义多实例任务,使用集合变量 confirmUsers 动态生成 -->
                 <activiti:multiInstanceLoopCharacteristics isSequential="false" activiti:collection="confirmUsers1" activiti:elementVariable="confirmUser1">
                     <completionCondition>${nrOfCompletedInstances == nrOfInstances}</completionCondition>
@@ -13,6 +14,7 @@
         </userTask>
     <userTask id="confirmUser2" name="确认人2" activiti:assignee="${confirmUser2}">
             <extensionElements>
+                <activiti:taskListener event="create" delegateExpression="${confirmTaskCreateListener}"></activiti:taskListener>
                 <!-- 定义多实例任务,使用集合变量 confirmUsers 动态生成 -->
                 <activiti:multiInstanceLoopCharacteristics isSequential="false" activiti:collection="confirmUsers2" activiti:elementVariable="confirmUser2">
                     <completionCondition>${nrOfCompletedInstances == nrOfInstances}</completionCondition>
@@ -20,7 +22,11 @@
             </extensionElements>
         </userTask>
     <sequenceFlow id="flow2" sourceRef="confirmUser1" targetRef="confirmUser2"></sequenceFlow>
-    <userTask id="chargePerson" name="检查内容负责人" activiti:assignee="#{chargePerson}"></userTask>
+    <userTask id="chargePerson" name="检查内容负责人" activiti:assignee="#{chargePerson}">
+        <extensionElements>
+          <activiti:taskListener event="create" delegateExpression="${confirmTaskCreateListener}"></activiti:taskListener>
+        </extensionElements>
+    </userTask>
     <sequenceFlow id="flow3" sourceRef="confirmUser2" targetRef="chargePerson"></sequenceFlow>
     <endEvent id="endevent1" name="End"></endEvent>
     <sequenceFlow id="flow4" sourceRef="chargePerson" targetRef="endevent1">

+ 8 - 1
master/src/main/resources/processes/pssr/pssr3confirm.bpmn

@@ -5,6 +5,7 @@
     <sequenceFlow id="flow1" sourceRef="applyUser" targetRef="confirmUser1"></sequenceFlow>
     <userTask id="confirmUser1" name="确认人1" activiti:assignee="${confirmUser1}">
         <extensionElements>
+            <activiti:taskListener event="create" delegateExpression="${confirmTaskCreateListener}"></activiti:taskListener>
             <!-- 定义多实例任务,使用集合变量 confirmUsers 动态生成 -->
             <activiti:multiInstanceLoopCharacteristics isSequential="false" activiti:collection="confirmUsers1" activiti:elementVariable="confirmUser1">
                 <completionCondition>${nrOfCompletedInstances == nrOfInstances}</completionCondition>
@@ -13,6 +14,7 @@
     </userTask>
     <userTask id="confirmUser2" name="确认人2" activiti:assignee="${confirmUser2}">
         <extensionElements>
+            <activiti:taskListener event="create" delegateExpression="${confirmTaskCreateListener}"></activiti:taskListener>
             <!-- 定义多实例任务,使用集合变量 confirmUsers 动态生成 -->
             <activiti:multiInstanceLoopCharacteristics isSequential="false" activiti:collection="confirmUsers2" activiti:elementVariable="confirmUser2">
                 <completionCondition>${nrOfCompletedInstances == nrOfInstances}</completionCondition>
@@ -22,6 +24,7 @@
     <sequenceFlow id="flow2" sourceRef="confirmUser1" targetRef="confirmUser2"></sequenceFlow>
     <userTask id="confirmUser3" name="确认人3" activiti:assignee="${confirmUser3}">
         <extensionElements>
+            <activiti:taskListener event="create" delegateExpression="${confirmTaskCreateListener}"></activiti:taskListener>
             <!-- 定义多实例任务,使用集合变量 confirmUsers 动态生成 -->
             <activiti:multiInstanceLoopCharacteristics isSequential="false" activiti:collection="confirmUsers3" activiti:elementVariable="confirmUser3">
                 <completionCondition>${nrOfCompletedInstances == nrOfInstances}</completionCondition>
@@ -29,7 +32,11 @@
         </extensionElements>
     </userTask>
     <sequenceFlow id="flow3" sourceRef="confirmUser2" targetRef="confirmUser3"></sequenceFlow>
-    <userTask id="chargePerson" name="检查内容负责人"  activiti:assignee="#{chargePerson}"></userTask>
+    <userTask id="chargePerson" name="检查内容负责人"  activiti:assignee="#{chargePerson}">
+        <extensionElements>
+          <activiti:taskListener event="create" delegateExpression="${confirmTaskCreateListener}"></activiti:taskListener>
+        </extensionElements>
+    </userTask>
     <sequenceFlow id="flow4" sourceRef="confirmUser3" targetRef="chargePerson"></sequenceFlow>
     <endEvent id="endevent1" name="End"></endEvent>
     <sequenceFlow id="flow5" sourceRef="chargePerson" targetRef="endevent1">

+ 6 - 1
master/src/main/resources/processes/pssr/pssrMgrConfirm.bpmn

@@ -4,6 +4,7 @@
     <startEvent id="applyUser" name="Start" activiti:initiator="${applyUser}"></startEvent>
     <userTask id="allJlUser" name="所有装置经理" activiti:assignee="${allJlUser}">
         <extensionElements>
+            <activiti:taskListener event="create" delegateExpression="${confirmTaskCreateListener}"></activiti:taskListener>
             <!-- 定义多实例任务,使用集合变量 allJlUsers 动态生成 -->
             <activiti:multiInstanceLoopCharacteristics isSequential="false" activiti:collection="allJlUsers" activiti:elementVariable="allJlUser">
                 <completionCondition>${nrOfCompletedInstances == nrOfInstances}</completionCondition>
@@ -11,7 +12,11 @@
         </extensionElements>
     </userTask>
     <sequenceFlow id="flow1" sourceRef="applyUser" targetRef="allJlUser"></sequenceFlow>
-    <userTask id="jlUser" name="装置经理"  activiti:assignee="#{jlUser}"></userTask>
+    <userTask id="jlUser" name="装置经理"  activiti:assignee="#{jlUser}">
+        <extensionElements>
+          <activiti:taskListener event="create" delegateExpression="${confirmTaskCreateListener}"></activiti:taskListener>
+        </extensionElements>
+    </userTask>
     <sequenceFlow id="flow2" sourceRef="allJlUser" targetRef="jlUser">
       <conditionExpression xsi:type="tFormalExpression"><![CDATA[${condition == 0}]]></conditionExpression>
     </sequenceFlow>