瀏覽代碼

年假申请延时队列修改

yanliming 11 月之前
父節點
當前提交
b939a66962

+ 51 - 49
common/src/main/java/com/jpsoft/shinestar/modules/business/service/impl/YearRequestForLeaveInfoServiceImpl.java

@@ -189,7 +189,7 @@ public class YearRequestForLeaveInfoServiceImpl implements YearRequestForLeaveIn
 
 			Date now = new Date();
 
-			//如果出差开始时间<=当前时间,说明是补出差记录,可能正在出差
+			//如果年假开始时间<=当前时间,说明是补年假记录,可能正在年假
 			if (yearRequestForLeaveInfo.getStartTime().compareTo(now) <=0){
 				personInfo.setWorkStatus("7");
 				personInfoService.update(personInfo);
@@ -200,7 +200,7 @@ public class YearRequestForLeaveInfoServiceImpl implements YearRequestForLeaveIn
 
 				log.warn("创建延时队列修改工作状态,id:"+yearRequestForLeaveInfo.getId());
 
-				rabbitTemplate.convertAndSend("businessOutDelayExchange", "businessOutSubmit",
+				rabbitTemplate.convertAndSend("yearRequestForLeaveDelayExchange", "yearRequestForLeaveSubmit",
 						yearRequestForLeaveInfo.getId(), (message)->{
 							message.getMessageProperties().setHeader("x-delay",millisecond);
 							return message;
@@ -213,12 +213,12 @@ public class YearRequestForLeaveInfoServiceImpl implements YearRequestForLeaveIn
 					personInfo.setWorkStatus("1");
 					personInfoService.update(personInfo);
 				} else {
-					//如果出差结束时间>当前时间,则延时修改状态
+					//如果年假结束时间>当前时间,则延时修改状态
 					long millisecond = DateUtil.betweenMs(now, yearRequestForLeaveInfo.getEndTime())+60000;
 
 					log.warn("创建延时队列修改工作状态,id:" + yearRequestForLeaveInfo.getId());
 
-					rabbitTemplate.convertAndSend("businessOutDelayExchange", "businessOutSubmit",
+					rabbitTemplate.convertAndSend("yearRequestForLeaveDelayExchange", "yearRequestForLeaveSubmit",
 							yearRequestForLeaveInfo.getId(), (message) -> {
 								message.getMessageProperties().setHeader("x-delay", millisecond);
 								return message;
@@ -462,51 +462,51 @@ public class YearRequestForLeaveInfoServiceImpl implements YearRequestForLeaveIn
 							yearRequestForLeaveInfo.setUpdateTime(new Date());
 							update(yearRequestForLeaveInfo);
 
-							int a1 = "0".equals(yearRequestForLeaveInfo.getStartTimeQuantum()) ? 0 : 43200000;
-							int a2 = "0".equals(yearRequestForLeaveInfo.getEndTimeQuantum()) ? 43200000 : 86400000;
-							;
-
-							Date startLong = new Date(yearRequestForLeaveInfo.getStartTime().getTime() + a1);
-							Date endLong = new Date(yearRequestForLeaveInfo.getEndTime().getTime() + a2);
-
-							//时间符合为休假,
-
-							String initStatus = personInfo1.getWorkStatus();
-							if (startLong.getTime() < new Date().getTime() && endLong.getTime() > new Date().getTime()) {
-								personInfo1.setWorkStatus("4");//请假
-								personInfo1.setUpdateBy(personPopedom.getPersonId().toString());
-								personInfo1.setUpdateTime(new Date());
-								personInfoService.update(personInfo1);
-							}
-
-							if (personInfo1.getWorkStatus() == null) {
-								personInfo1.setWorkStatus("1");
-								initStatus = "1";
-							}
-							//休假,还没开始
-							if (startLong.getTime() > new Date().getTime()) {
-
-								//防止连续请假,造成的时间重叠
-								Long milliseconds = startLong.getTime() - new Date().getTime() + 5000;
-								String p = "A_" + personInfo1.getId() + "_" + personInfo1.getWorkStatus() + "_" + personPopedom.getPersonId();
-								rabbitTemplate.convertAndSend("updateWorkStatusExchange", "updateWorkStatus", p, (message) -> {
-									//延时单位毫秒
-									message.getMessageProperties().setHeader("x-delay", milliseconds);
-									return message;
-								});
-							}
-							//休假,结束
-							if (endLong.getTime() > new Date().getTime()) {
-								String p = "B_" + personInfo1.getId() + "_" + initStatus + "_" + personPopedom.getPersonId();
-								//防止连续请假,造成的时间重叠
-								Long milliseconds = endLong.getTime() - new Date().getTime() - 5000;
-
-								rabbitTemplate.convertAndSend("updateWorkStatusExchange", "updateWorkStatus", p, (message) -> {
-									//延时单位毫秒
-									message.getMessageProperties().setHeader("x-delay", milliseconds);
-									return message;
-								});
-							}
+//							int a1 = "0".equals(yearRequestForLeaveInfo.getStartTimeQuantum()) ? 0 : 43200000;
+//							int a2 = "0".equals(yearRequestForLeaveInfo.getEndTimeQuantum()) ? 43200000 : 86400000;
+//							;
+//
+//							Date startLong = new Date(yearRequestForLeaveInfo.getStartTime().getTime() + a1);
+//							Date endLong = new Date(yearRequestForLeaveInfo.getEndTime().getTime() + a2);
+//
+//							//时间符合为休假,
+//
+//							String initStatus = personInfo1.getWorkStatus();
+//							if (startLong.getTime() < new Date().getTime() && endLong.getTime() > new Date().getTime()) {
+//								personInfo1.setWorkStatus("4");//请假
+//								personInfo1.setUpdateBy(personPopedom.getPersonId().toString());
+//								personInfo1.setUpdateTime(new Date());
+//								personInfoService.update(personInfo1);
+//							}
+//
+//							if (personInfo1.getWorkStatus() == null) {
+//								personInfo1.setWorkStatus("1");
+//								initStatus = "1";
+//							}
+//							//休假,还没开始
+//							if (startLong.getTime() > new Date().getTime()) {
+//
+//								//防止连续请假,造成的时间重叠
+//								Long milliseconds = startLong.getTime() - new Date().getTime() + 5000;
+//								String p = "A_" + personInfo1.getId() + "_" + personInfo1.getWorkStatus() + "_" + personPopedom.getPersonId();
+//								rabbitTemplate.convertAndSend("updateWorkStatusExchange", "updateWorkStatus", p, (message) -> {
+//									//延时单位毫秒
+//									message.getMessageProperties().setHeader("x-delay", milliseconds);
+//									return message;
+//								});
+//							}
+//							//休假,结束
+//							if (endLong.getTime() > new Date().getTime()) {
+//								String p = "B_" + personInfo1.getId() + "_" + initStatus + "_" + personPopedom.getPersonId();
+//								//防止连续请假,造成的时间重叠
+//								Long milliseconds = endLong.getTime() - new Date().getTime() - 5000;
+//
+//								rabbitTemplate.convertAndSend("updateWorkStatusExchange", "updateWorkStatus", p, (message) -> {
+//									//延时单位毫秒
+//									message.getMessageProperties().setHeader("x-delay", milliseconds);
+//									return message;
+//								});
+//							}
 
 
 						}
@@ -571,6 +571,8 @@ public class YearRequestForLeaveInfoServiceImpl implements YearRequestForLeaveIn
 							if (1 == status) {
 								firstMessage = "审核通过";
 								getstatus = "1";
+								//延时队列处理人员工作状态
+								updatePersonWorkStatus(yearRequestForLeaveInfo);
 
 							} else {
 								firstMessage = "审核拒绝";

+ 25 - 0
web/src/main/java/com/jpsoft/shinestar/config/RabbitmqConfig.java

@@ -158,6 +158,31 @@ public class RabbitmqConfig {
     }
 
 
+    /**
+     * 年假修改人员工作状态
+     * @return
+     */
+    @Bean
+    public Queue yearRequestForLeaveQueue() {
+        Queue queue = new Queue("yearRequestForLeaveQueue", true);
+        return queue;
+    }
+
+    @Bean
+    public CustomExchange yearRequestForLeaveDelayExchange() {
+        Map<String, Object> args = new HashMap<>();
+        args.put("x-delayed-type", "direct");
+
+        return new CustomExchange("yearRequestForLeaveDelayExchange", "x-delayed-message",true, false,args);
+    }
+
+    @Bean
+    public Binding yearRequestForLeaveBinding() {
+        return BindingBuilder.bind(yearRequestForLeaveQueue())
+                .to(yearRequestForLeaveDelayExchange())
+                .with("yearRequestForLeaveSubmit").noargs();
+    }
+
 
 
     /**

+ 65 - 0
web/src/main/java/com/jpsoft/shinestar/mq/listener/YearRequestForLeaveListener.java

@@ -0,0 +1,65 @@
+package com.jpsoft.shinestar.mq.listener;
+
+import com.jpsoft.shinestar.modules.base.entity.PersonInfo;
+import com.jpsoft.shinestar.modules.base.entity.PersonPopedom;
+import com.jpsoft.shinestar.modules.base.service.PersonInfoService;
+import com.jpsoft.shinestar.modules.base.service.PersonPopedomService;
+import com.jpsoft.shinestar.modules.business.entity.YearRequestForLeaveInfo;
+import com.jpsoft.shinestar.modules.business.service.YearRequestForLeaveInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.amqp.rabbit.annotation.RabbitHandler;
+import org.springframework.amqp.rabbit.annotation.RabbitListener;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+
+@Slf4j
+@Component
+@RabbitListener(queues = "yearRequestForLeaveQueue",concurrency = "10")
+public class YearRequestForLeaveListener {
+
+    @Autowired
+    private YearRequestForLeaveInfoService yearRequestForLeaveInfoService;
+
+    @Autowired
+    private PersonPopedomService personPopedomService;
+
+    @Autowired
+    private PersonInfoService personInfoService;
+
+    @RabbitHandler
+    public void process(String id) {
+        log.warn("收到年假编号:" + id);
+
+        try {
+            YearRequestForLeaveInfo yearRequestForLeaveInfo = yearRequestForLeaveInfoService.get(id);
+
+            if (yearRequestForLeaveInfo != null && "1".equals(yearRequestForLeaveInfo.getStatus())){
+                PersonPopedom personPopedom = personPopedomService.get(yearRequestForLeaveInfo.getPersonPopedomId());
+                PersonInfo personInfo = personInfoService.get(personPopedom.getPersonId());
+
+                Date now = new Date();
+
+                //当前时间是年假期间
+                if (yearRequestForLeaveInfo.getStartTime().compareTo(now) <=0 && yearRequestForLeaveInfo.getEndTime().compareTo(now) >0){
+                    personInfo.setWorkStatus("3");
+                    personInfo.setUpdateTime(new Date());
+                    personInfoService.update(personInfo);
+                }
+
+                //当前时间已结束年假
+                if (yearRequestForLeaveInfo.getEndTime().compareTo(now) <= 0){
+                    personInfo.setWorkStatus("1");
+                    personInfo.setUpdateTime(new Date());
+                    personInfoService.update(personInfo);
+                }
+            }
+
+            log.warn("员工延时更新工作状态完毕");
+        }
+        catch (Exception ex){
+            log.error(ex.getMessage(),ex);
+        }
+    }
+}