From c12f3c402135d00c652fd50d5914c5032651e4a8 Mon Sep 17 00:00:00 2001 From: wxc <191104855@qq.com> Date: Wed, 17 Sep 2025 18:39:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=AE=8C=E5=96=84=EF=BC=8CBU?= =?UTF-8?q?G=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/biutag/constants/AppConstants.java | 3 + mailbox-lan/sql/20250917.sql | 7 ++ .../biutag/lan/controller/HomeController.java | 41 ++++++---- .../datascreen/DataScreenController.java | 18 ++--- .../java/com/biutag/lan/domain/MailMark.java | 3 + .../lan/flow/node/FirstDistributeFlow.java | 1 + .../biutag/lan/mapper/DataScreenMapper.java | 13 +-- .../biutag/lan/service/DataScreenService.java | 75 ++++++++++-------- .../com/biutag/lan/service/IDutyService.java | 1 - .../biutag/lan/service/MailMarkService.java | 4 +- .../lan/service/PoliceWeChatMessage.java | 2 +- .../lan/service/impl/DeptServiceImpl.java | 30 ++++--- .../lan/service/impl/DutyServiceImpl.java | 12 --- .../resources/mapper/DataScreenMapper.xml | 16 ++-- .../templates/《处理反馈表》.docx | Bin 15815 -> 25600 bytes 15 files changed, 115 insertions(+), 111 deletions(-) create mode 100644 mailbox-lan/sql/20250917.sql diff --git a/mailbox-common/src/main/java/com/biutag/constants/AppConstants.java b/mailbox-common/src/main/java/com/biutag/constants/AppConstants.java index 3b4a1a2..c2c91e4 100644 --- a/mailbox-common/src/main/java/com/biutag/constants/AppConstants.java +++ b/mailbox-common/src/main/java/com/biutag/constants/AppConstants.java @@ -1,5 +1,7 @@ package com.biutag.constants; +import java.time.LocalDateTime; + /** * Created by oumyye on 2019/1/18. */ @@ -48,4 +50,5 @@ public class AppConstants { */ public static final String CHANGSHA_DEPT_ID = "430100000000"; + public static final LocalDateTime BEGIN_TIME = LocalDateTime.of(2025, 9, 13, 0, 0, 0); } diff --git a/mailbox-lan/sql/20250917.sql b/mailbox-lan/sql/20250917.sql new file mode 100644 index 0000000..a95923f --- /dev/null +++ b/mailbox-lan/sql/20250917.sql @@ -0,0 +1,7 @@ +ALTER TABLE "mailbox"."mail_mark" +DROP COLUMN "mail_time", + ADD COLUMN "mail_time" date; + +COMMENT ON COLUMN "mailbox"."mail_mark"."mail_time" IS '来信时间'; + +update mail_mark mm set mm.mail_time = m.mail_time from mail m where mm.mail_id = m.id; \ No newline at end of file diff --git a/mailbox-lan/src/main/java/com/biutag/lan/controller/HomeController.java b/mailbox-lan/src/main/java/com/biutag/lan/controller/HomeController.java index d5be7a7..a03dfbe 100644 --- a/mailbox-lan/src/main/java/com/biutag/lan/controller/HomeController.java +++ b/mailbox-lan/src/main/java/com/biutag/lan/controller/HomeController.java @@ -5,6 +5,7 @@ import cn.hutool.core.date.DateUtil; import com.alibaba.fastjson2.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.biutag.aop.NotPower; +import com.biutag.constants.AppConstants; import com.biutag.core.AjaxResult; import com.biutag.enums.DeptTypeEnum; import com.biutag.enums.MailState; @@ -15,13 +16,12 @@ import com.biutag.lan.domain.MailMark; import com.biutag.lan.domain.Work; import com.biutag.lan.domain.bo.MailTotal; import com.biutag.lan.domain.vo.DutyView; +import com.biutag.lan.domain.vo.system.DeptVo; import com.biutag.lan.flow.FlowNameEnum; import com.biutag.lan.flow.FlowNodeEnum; import com.biutag.lan.mapper.DataScreenMapper; -import com.biutag.lan.service.IDutyService; -import com.biutag.lan.service.MailMarkService; -import com.biutag.lan.service.MailService; -import com.biutag.lan.service.WorkService; +import com.biutag.lan.service.*; +import com.biutag.mapper.system.DutyMapper; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; @@ -29,6 +29,7 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.time.LocalDateTime; import java.util.*; @Tag(name = "首页") @@ -122,7 +123,8 @@ public class HomeController { Long mailToday = mailService.countTodayByCurrent(); // 今日办结 long completedToday = mailMarkService.countByCompleted(today); - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .ge(MailMark::getMailTime, AppConstants.BEGIN_TIME); Integer roleId = AdminThreadLocal.getRoleId(); if (RoleEnum.MUNICIPAL_DEPT_CLASSES.getRoleId().equals(roleId)) { queryWrapper.eq(MailMark::getFirstDeptId, AdminThreadLocal.getDeptId()); @@ -146,36 +148,41 @@ public class HomeController { "thankTotal", thankTotal)); } - private final IDutyService dutyService; - private final DataScreenMapper dataScreenMapper; + private final IDeptService deptService; + @Operation(summary = "今日值班") @NotPower @GetMapping("duty") public AjaxResult> duty() { Integer roleId = AdminThreadLocal.getRoleId(); if (RoleEnum.PROVINCIAL_CLASSES.getRoleId().equals(roleId)) { - DutyView dutyView = new DutyView("省厅专班", dutyService.listByToday(DeptTypeEnum.ST_TYPE.getType(), null)); - DutyView dutyView1 = new DutyView("市州专班", dutyService.listByToday(DeptTypeEnum.SJ_TYPE.getType(), null)); + DutyView dutyView = new DutyView("省厅专班", dataScreenMapper.selectDutyListByTodayAndDeptId(DeptTypeEnum.ST_TYPE.getType(), null)); + DutyView dutyView1 = new DutyView("市州专班", dataScreenMapper.selectDutyListByTodayAndDeptId(DeptTypeEnum.SJ_TYPE.getType(), null)); return AjaxResult.success(List.of(dutyView, dutyView1)); } if (RoleEnum.MUNICIPAL_DEPT_CLASSES.getRoleId().equals(roleId)) { String deptId = AdminThreadLocal.getDeptId(); - DutyView dutyView = new DutyView("市州专班", dataScreenMapper.getToFjDuty(DeptTypeEnum.SJ_TYPE.getType(), deptId)); - DutyView dutyView1 = new DutyView("县市区专班", dutyService.listByToday(DeptTypeEnum.FJ_TYPE.getType(), deptId)); - return AjaxResult.success(List.of(dutyView, dutyView1)); + DutyView dutyView = new DutyView("省厅专班", dataScreenMapper.selectDutyListByTodayAndDeptId(DeptTypeEnum.ST_TYPE.getType(), null)); + DutyView dutyView1 = new DutyView("市州专班", dataScreenMapper.selectDutyListByTodayAndDeptId(DeptTypeEnum.SJ_TYPE.getType(), deptId)); + DutyView dutyView2 = new DutyView("县市区专班", dataScreenMapper.selectDutyListByTodayAndDeptPId(DeptTypeEnum.FJ_TYPE.getType(), deptId)); + return AjaxResult.success(List.of(dutyView, dutyView1, dutyView2)); } if (RoleEnum.SECOND_DEPT_CLASSES.getRoleId().equals(roleId)) { String deptId = AdminThreadLocal.getDeptId(); - DutyView dutyView = new DutyView("县市区专班", dataScreenMapper.getToFjDuty(DeptTypeEnum.FJ_TYPE.getType(), deptId)); - DutyView dutyView1 = new DutyView("所队专班", dutyService.listByToday(DeptTypeEnum.PCS_TYPE.getType(), deptId)); - return AjaxResult.success(List.of(dutyView, dutyView1)); + DeptVo deptVo = deptService.detail(deptId); + DutyView dutyView = new DutyView("市州专班", dataScreenMapper.selectDutyListByTodayAndDeptId(DeptTypeEnum.SJ_TYPE.getType(), deptVo.getPid())); + DutyView dutyView1 = new DutyView("县市区专班", dataScreenMapper.selectDutyListByTodayAndDeptId(DeptTypeEnum.FJ_TYPE.getType(), deptId)); + DutyView dutyView2 = new DutyView("所队专班", dataScreenMapper.selectDutyListByTodayAndDeptPId(DeptTypeEnum.PCS_TYPE.getType(), deptId)); + return AjaxResult.success(List.of(dutyView, dutyView1, dutyView2)); } if (RoleEnum.THREE_DEPT_CLASSES.getRoleId().equals(roleId)) { String deptId = AdminThreadLocal.getDeptId(); - DutyView dutyView = new DutyView("所队专班", dataScreenMapper.getToFjDuty(DeptTypeEnum.PCS_TYPE.getType(), deptId)); - return AjaxResult.success(List.of(dutyView)); + DeptVo deptVo = deptService.detail(deptId); + DutyView dutyView = new DutyView("县市区专班", dataScreenMapper.selectDutyListByTodayAndDeptId(DeptTypeEnum.FJ_TYPE.getType(), deptVo.getPid())); + DutyView dutyView1 = new DutyView("所队专班", dataScreenMapper.selectDutyListByTodayAndDeptId(DeptTypeEnum.PCS_TYPE.getType(), deptId)); + return AjaxResult.success(List.of(dutyView, dutyView1)); } return AjaxResult.success(new ArrayList<>()); } diff --git a/mailbox-lan/src/main/java/com/biutag/lan/controller/datascreen/DataScreenController.java b/mailbox-lan/src/main/java/com/biutag/lan/controller/datascreen/DataScreenController.java index 5cd3675..3e683d2 100644 --- a/mailbox-lan/src/main/java/com/biutag/lan/controller/datascreen/DataScreenController.java +++ b/mailbox-lan/src/main/java/com/biutag/lan/controller/datascreen/DataScreenController.java @@ -5,8 +5,6 @@ import com.biutag.aop.NotLogin; import com.biutag.aop.NotPower; import com.biutag.core.AjaxResult; import com.biutag.enums.DeptTypeEnum; -import com.biutag.enums.RoleEnum; -import com.biutag.lan.config.AdminThreadLocal; import com.biutag.lan.domain.Mail; import com.biutag.lan.domain.vo.DutyView; import com.biutag.lan.domain.vo.MailDatavStats; @@ -16,10 +14,8 @@ import com.biutag.lan.domain.vo.system.DeptVo; import com.biutag.lan.mapper.DataScreenMapper; import com.biutag.lan.service.DataScreenService; import com.biutag.lan.service.IDeptService; -import com.biutag.lan.service.IDutyService; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; -import jakarta.annotation.Resource; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; @@ -43,8 +39,6 @@ public class DataScreenController { private final DataScreenMapper dataScreenMapper; - private final IDutyService dutyService; - private final IDeptService deptService; @NotLogin @@ -84,19 +78,19 @@ public class DataScreenController { @Operation(summary = "今日值班") public AjaxResult> dutyDay(String id) { if (StrUtil.isBlank(id)) { - DutyView dutyView = new DutyView("省厅专班", dutyService.listByToday(DeptTypeEnum.ST_TYPE.getType(), null)); - DutyView dutyView1 = new DutyView("市州专班", dutyService.listByToday(DeptTypeEnum.SJ_TYPE.getType(), null)); + DutyView dutyView = new DutyView("省厅专班", dataScreenMapper.selectDutyListByTodayAndDeptId(DeptTypeEnum.ST_TYPE.getType(), null)); + DutyView dutyView1 = new DutyView("市州专班", dataScreenMapper.selectDutyListByTodayAndDeptId(DeptTypeEnum.SJ_TYPE.getType(), null)); return AjaxResult.success(List.of(dutyView, dutyView1)); } DeptVo deptVo = deptService.detail(id); if (deptVo.getLevel() == 1) { - DutyView dutyView = new DutyView("市州专班", dataScreenMapper.getToFjDuty(DeptTypeEnum.SJ_TYPE.getType(), id)); - DutyView dutyView1 = new DutyView("县市区专班", dutyService.listByToday(DeptTypeEnum.FJ_TYPE.getType(), id)); + DutyView dutyView = new DutyView("本单位", dataScreenMapper.selectDutyListByTodayAndDeptId(DeptTypeEnum.SJ_TYPE.getType(), id)); + DutyView dutyView1 = new DutyView("县市区专班", dataScreenMapper.selectDutyListByTodayAndDeptPId(DeptTypeEnum.FJ_TYPE.getType(), id)); return AjaxResult.success(List.of(dutyView, dutyView1)); } if (deptVo.getLevel() == 2) { - DutyView dutyView = new DutyView("县市区专班", dataScreenMapper.getToFjDuty(DeptTypeEnum.FJ_TYPE.getType(), id)); - DutyView dutyView1 = new DutyView("所队专班", dutyService.listByToday(DeptTypeEnum.PCS_TYPE.getType(), id)); + DutyView dutyView = new DutyView("本单位", dataScreenMapper.selectDutyListByTodayAndDeptId(DeptTypeEnum.FJ_TYPE.getType(), id)); + DutyView dutyView1 = new DutyView("所队专班", dataScreenMapper.selectDutyListByTodayAndDeptPId(DeptTypeEnum.PCS_TYPE.getType(), id)); return AjaxResult.success(List.of(dutyView, dutyView1)); } return AjaxResult.success(new ArrayList<>()); diff --git a/mailbox-lan/src/main/java/com/biutag/lan/domain/MailMark.java b/mailbox-lan/src/main/java/com/biutag/lan/domain/MailMark.java index 7408766..c5e4dfd 100644 --- a/mailbox-lan/src/main/java/com/biutag/lan/domain/MailMark.java +++ b/mailbox-lan/src/main/java/com/biutag/lan/domain/MailMark.java @@ -53,6 +53,9 @@ public class MailMark { */ private String threeDeptName; + // + private LocalDateTime mailTime; + /** * 办结时间 */ diff --git a/mailbox-lan/src/main/java/com/biutag/lan/flow/node/FirstDistributeFlow.java b/mailbox-lan/src/main/java/com/biutag/lan/flow/node/FirstDistributeFlow.java index b5bade6..081c961 100644 --- a/mailbox-lan/src/main/java/com/biutag/lan/flow/node/FirstDistributeFlow.java +++ b/mailbox-lan/src/main/java/com/biutag/lan/flow/node/FirstDistributeFlow.java @@ -99,6 +99,7 @@ public class FirstDistributeFlow extends Flow { MailMark mailMark = new MailMark() .setMailId(mailId) + .setMailTime(mail.getMailTime()) .setFirstDeptId(mail.getFirstDeptId()) .setSecondDeptId(mail.getSecondDeptId()) .setSecondDeptName(mail.getSecondDeptName()) diff --git a/mailbox-lan/src/main/java/com/biutag/lan/mapper/DataScreenMapper.java b/mailbox-lan/src/main/java/com/biutag/lan/mapper/DataScreenMapper.java index 24c116f..0ad444f 100644 --- a/mailbox-lan/src/main/java/com/biutag/lan/mapper/DataScreenMapper.java +++ b/mailbox-lan/src/main/java/com/biutag/lan/mapper/DataScreenMapper.java @@ -88,12 +88,6 @@ public interface DataScreenMapper { */ Map getAllResolvedRate(); - /** - * 全长沙解决率 - * @return - */ - Map getAllResolvedRate(@Param("deptId") String deptId); - /** * 全长沙办结率 * @return @@ -131,9 +125,6 @@ public interface DataScreenMapper { - List getToDayDuty(@Param("depatType") String depatType, @Param("deptId") String deptId); - - MailDetail getMailDetail(Map params); @@ -155,5 +146,7 @@ public interface DataScreenMapper { List> getOtherResolvedRate(); - List getToFjDuty(@Param("depatType") String depatType,@Param("deptId") String deptId); + List selectDutyListByTodayAndDeptPId(@Param("deptType") String deptType, @Param("deptPId") String deptPId); + + List selectDutyListByTodayAndDeptId(@Param("deptType") String deptType, @Param("deptId") String deptId); } diff --git a/mailbox-lan/src/main/java/com/biutag/lan/service/DataScreenService.java b/mailbox-lan/src/main/java/com/biutag/lan/service/DataScreenService.java index 0bdcbd2..66e1d07 100644 --- a/mailbox-lan/src/main/java/com/biutag/lan/service/DataScreenService.java +++ b/mailbox-lan/src/main/java/com/biutag/lan/service/DataScreenService.java @@ -137,10 +137,17 @@ public class DataScreenService { String todayStr = DateUtil.format(new Date(), DatePattern.NORM_DATE_FORMAT); if (StrUtil.isBlank(deptId)) { Long today = mailSourceService.count(todayStr); - Long total = mailMarkService.count(); - Long completedCases = mailMarkService.count(new LambdaQueryWrapper().eq(MailMark::getCompleted, AppConstants.TRUE)); - Long resolvedCases = mailMarkService.count(new LambdaQueryWrapper().eq(MailMark::getResolved, AppConstants.TRUE)); - Long satisfiedCases = mailMarkService.count(new LambdaQueryWrapper().eq(MailMark::getSatisfied, AppConstants.TRUE)); + Long total = mailMarkService.count(new LambdaQueryWrapper() + .ge(MailMark::getMailTime, AppConstants.BEGIN_TIME)); + Long completedCases = mailMarkService.count(new LambdaQueryWrapper() + .ge(MailMark::getMailTime, AppConstants.BEGIN_TIME) + .eq(MailMark::getCompleted, AppConstants.TRUE)); + Long resolvedCases = mailMarkService.count(new LambdaQueryWrapper() + .ge(MailMark::getMailTime, AppConstants.BEGIN_TIME) + .eq(MailMark::getResolved, AppConstants.TRUE)); + Long satisfiedCases = mailMarkService.count(new LambdaQueryWrapper() + .ge(MailMark::getMailTime, AppConstants.BEGIN_TIME) + .eq(MailMark::getSatisfied, AppConstants.TRUE)); MailDatavStats stats = new MailDatavStats() .setToday(today) .setTotal(total) @@ -153,37 +160,39 @@ public class DataScreenService { return stats; } else { DeptVo deptVo = deptService.detail(deptId); - Long today = mailSourceService.count(new QueryWrapper().eq("TO_CHAR(mail_time, 'YYYY-MM-DD')", todayStr)); + Long today = mailSourceService.count(new QueryWrapper() + .eq("TO_CHAR(mail_time, 'YYYY-MM-DD')", todayStr)); + + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .ge(MailMark::getMailTime, AppConstants.BEGIN_TIME); + + LambdaQueryWrapper completedCasesQueryWrapper = new LambdaQueryWrapper() + .ge(MailMark::getMailTime, AppConstants.BEGIN_TIME) + .eq(MailMark::getCompleted, AppConstants.TRUE); + + LambdaQueryWrapper satisfiedCasesQueryWrapper = new LambdaQueryWrapper() + .ge(MailMark::getMailTime, AppConstants.BEGIN_TIME) + .eq(MailMark::getSatisfied, AppConstants.TRUE); + + LambdaQueryWrapper resolvedCasesQueryWrapper = new LambdaQueryWrapper() + .ge(MailMark::getMailTime, AppConstants.BEGIN_TIME) + .eq(MailMark::getResolved, AppConstants.TRUE); - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); if (deptVo.getLevel() == 1) { queryWrapper.eq(MailMark::getFirstDeptId, deptId); - } else if (deptVo.getLevel() == 2) { - queryWrapper.eq(MailMark::getSecondDeptId, deptId); - } - Long total = mailMarkService.count(queryWrapper); - LambdaQueryWrapper completedCasesQueryWrapper = new LambdaQueryWrapper().eq(MailMark::getCompleted, AppConstants.TRUE); - if (deptVo.getLevel() == 1) { completedCasesQueryWrapper.eq(MailMark::getFirstDeptId, deptId); - } else if (deptVo.getLevel() == 2) { - completedCasesQueryWrapper.eq(MailMark::getSecondDeptId, deptId); - } - Long completedCases = mailMarkService.count(completedCasesQueryWrapper); - - LambdaQueryWrapper resolvedCasesQueryWrapper = new LambdaQueryWrapper().eq(MailMark::getResolved, AppConstants.TRUE); - if (deptVo.getLevel() == 1) { resolvedCasesQueryWrapper.eq(MailMark::getFirstDeptId, deptId); + satisfiedCasesQueryWrapper.eq(MailMark::getFirstDeptId, deptId); } else if (deptVo.getLevel() == 2) { + queryWrapper.eq(MailMark::getSecondDeptId, deptId); + completedCasesQueryWrapper.eq(MailMark::getSecondDeptId, deptId); resolvedCasesQueryWrapper.eq(MailMark::getSecondDeptId, deptId); + satisfiedCasesQueryWrapper.eq(MailMark::getSecondDeptId, deptId); } + Long total = mailMarkService.count(queryWrapper); + Long completedCases = mailMarkService.count(completedCasesQueryWrapper); Long resolvedCases = mailMarkService.count(resolvedCasesQueryWrapper); - LambdaQueryWrapper satisfiedCasesQueryWrapper = new LambdaQueryWrapper().eq(MailMark::getSatisfied, AppConstants.TRUE); - if (deptVo.getLevel() == 1) { - satisfiedCasesQueryWrapper.eq(MailMark::getFirstDeptId, deptId); - } else if (deptVo.getLevel() == 2) { - satisfiedCasesQueryWrapper.eq(MailMark::getSecondDeptId, deptId); - } Long satisfiedCases = mailMarkService.count(satisfiedCasesQueryWrapper); MailDatavStats stats = new MailDatavStats() .setToday(today) @@ -299,10 +308,10 @@ public class DataScreenService { public Map getToDayDuty(Map params) { Map map = new HashMap<>(); if (params.size() == 0) { - List dutySjList = baseMapper.getToDayDuty("0", null); - List dutyFjList = baseMapper.getToDayDuty(DeptTypeEnum.SJ_TYPE.getType(), null); - List dutyZdList = baseMapper.getToDayDuty(DeptTypeEnum.ZD_TYPE.getType(), null); - List dutyBwList = baseMapper.getToDayDuty(DeptTypeEnum.BW_TYPE.getType(), null); + List dutySjList = baseMapper.selectDutyListByTodayAndDeptPId("0", null); + List dutyFjList = baseMapper.selectDutyListByTodayAndDeptPId(DeptTypeEnum.SJ_TYPE.getType(), null); + List dutyZdList = baseMapper.selectDutyListByTodayAndDeptPId(DeptTypeEnum.ZD_TYPE.getType(), null); + List dutyBwList = baseMapper.selectDutyListByTodayAndDeptPId(DeptTypeEnum.BW_TYPE.getType(), null); map.put("dutySjList", dutySjList); map.put("dutyFjList", dutyFjList); map.put("dutyZdList", dutyZdList); @@ -314,10 +323,10 @@ public class DataScreenService { public Map getToIndexDuty() { Map map = new HashMap<>(); String deptId = AdminThreadLocal.getDeptId(); - List dutySjList = baseMapper.getToDayDuty(DeptTypeEnum.SJ_TYPE.getType(), null); - List dutyFjList = baseMapper.getToDayDuty(DeptTypeEnum.FJ_TYPE.getType(), deptId); - List dutyPcsList = baseMapper.getToDayDuty(DeptTypeEnum.PCS_TYPE.getType(), deptId); - List dutyDdList = baseMapper.getToDayDuty(DeptTypeEnum.DD_TYPE.getType(), deptId); + List dutySjList = baseMapper.selectDutyListByTodayAndDeptPId(DeptTypeEnum.SJ_TYPE.getType(), null); + List dutyFjList = baseMapper.selectDutyListByTodayAndDeptPId(DeptTypeEnum.FJ_TYPE.getType(), deptId); + List dutyPcsList = baseMapper.selectDutyListByTodayAndDeptPId(DeptTypeEnum.PCS_TYPE.getType(), deptId); + List dutyDdList = baseMapper.selectDutyListByTodayAndDeptPId(DeptTypeEnum.DD_TYPE.getType(), deptId); map.put("dutySjList", dutySjList); map.put("dutyFjList", dutyFjList); map.put("dutyPcsList", dutyPcsList); diff --git a/mailbox-lan/src/main/java/com/biutag/lan/service/IDutyService.java b/mailbox-lan/src/main/java/com/biutag/lan/service/IDutyService.java index ff7603c..85de70a 100644 --- a/mailbox-lan/src/main/java/com/biutag/lan/service/IDutyService.java +++ b/mailbox-lan/src/main/java/com/biutag/lan/service/IDutyService.java @@ -62,6 +62,5 @@ public interface IDutyService { boolean saveBatch(List list); - List listByToday(String deptTyp, String deptId); } diff --git a/mailbox-lan/src/main/java/com/biutag/lan/service/MailMarkService.java b/mailbox-lan/src/main/java/com/biutag/lan/service/MailMarkService.java index 767f73b..099980b 100644 --- a/mailbox-lan/src/main/java/com/biutag/lan/service/MailMarkService.java +++ b/mailbox-lan/src/main/java/com/biutag/lan/service/MailMarkService.java @@ -18,7 +18,9 @@ import java.util.List; public class MailMarkService extends ServiceImpl { public Long countByCompleted() { - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper().eq(MailMark::getCompleted, AppConstants.TRUE); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .ge(MailMark::getMailTime, LocalDateTime.of(2025, 9, 13, 0, 0, 0)) + .eq(MailMark::getCompleted, AppConstants.TRUE); Integer roleId = AdminThreadLocal.getRoleId(); if (RoleEnum.MUNICIPAL_DEPT_CLASSES.getRoleId().equals(roleId)) { queryWrapper.eq(MailMark::getFirstDeptId, AdminThreadLocal.getDeptId()); diff --git a/mailbox-lan/src/main/java/com/biutag/lan/service/PoliceWeChatMessage.java b/mailbox-lan/src/main/java/com/biutag/lan/service/PoliceWeChatMessage.java index 5052d22..972b6bd 100644 --- a/mailbox-lan/src/main/java/com/biutag/lan/service/PoliceWeChatMessage.java +++ b/mailbox-lan/src/main/java/com/biutag/lan/service/PoliceWeChatMessage.java @@ -40,7 +40,7 @@ public class PoliceWeChatMessage { List policeUsers = policeUserMapper.selectList(new LambdaQueryWrapper() .eq(PoliceUser::getRoleIds, roleId) .eq(PoliceUser::getDataDeptId, deptId)); - List dutys = dataScreenMapper.getToFjDuty(null, deptId); + List dutys = dataScreenMapper.selectDutyListByTodayAndDeptId(null, deptId); try { dutys.stream().filter(item -> PhoneUtil.isPhone(item.getMobile())) .forEach(item -> { diff --git a/mailbox-lan/src/main/java/com/biutag/lan/service/impl/DeptServiceImpl.java b/mailbox-lan/src/main/java/com/biutag/lan/service/impl/DeptServiceImpl.java index f750e75..d986189 100644 --- a/mailbox-lan/src/main/java/com/biutag/lan/service/impl/DeptServiceImpl.java +++ b/mailbox-lan/src/main/java/com/biutag/lan/service/impl/DeptServiceImpl.java @@ -1,8 +1,6 @@ package com.biutag.lan.service.impl; import cn.hutool.core.collection.CollectionUtil; -import cn.hutool.core.lang.tree.TreeNode; -import cn.hutool.core.lang.tree.TreeUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -415,17 +413,17 @@ class DeptServiceImpl implements IDeptService { Duty duty = dutyMapper.selectOne(new QueryWrapper().eq("depart_id",deptId).last("limit 1")); if(duty==null){ } else if (duty.getDeptType().equals(DeptTypeEnum.FJ_TYPE.getType())){ - dutyFjList = dataScreenMapper.getToFjDuty(DeptTypeEnum.FJ_TYPE.getType(), deptId); + dutyFjList = dataScreenMapper.selectDutyListByTodayAndDeptId(DeptTypeEnum.FJ_TYPE.getType(), deptId); }else if (duty.getDeptType().equals(DeptTypeEnum.ZD_TYPE.getType())){ - dutyFjList = dataScreenMapper.getToFjDuty(DeptTypeEnum.ZD_TYPE.getType(), deptId); + dutyFjList = dataScreenMapper.selectDutyListByTodayAndDeptId(DeptTypeEnum.ZD_TYPE.getType(), deptId); }else if (duty.getDeptType().equals(DeptTypeEnum.BW_TYPE.getType())){ - dutyFjList = dataScreenMapper.getToFjDuty(DeptTypeEnum.BW_TYPE.getType(), deptId); + dutyFjList = dataScreenMapper.selectDutyListByTodayAndDeptId(DeptTypeEnum.BW_TYPE.getType(), deptId); } map.put("dutyFjList", dutyFjList); - dutySjList = dataScreenMapper.getToDayDuty(DeptTypeEnum.SJ_TYPE.getType(), null); - dutyPcsList = dataScreenMapper.getToDayDuty(DeptTypeEnum.PCS_TYPE.getType(), deptId); - dutyDdList = dataScreenMapper.getToDayDuty(DeptTypeEnum.DD_TYPE.getType(), deptId); - dutyOtList = dataScreenMapper.getToDayDuty(DeptTypeEnum.OT_TYPE.getType(), deptId); + dutySjList = dataScreenMapper.selectDutyListByTodayAndDeptPId(DeptTypeEnum.SJ_TYPE.getType(), null); + dutyPcsList = dataScreenMapper.selectDutyListByTodayAndDeptPId(DeptTypeEnum.PCS_TYPE.getType(), deptId); + dutyDdList = dataScreenMapper.selectDutyListByTodayAndDeptPId(DeptTypeEnum.DD_TYPE.getType(), deptId); + dutyOtList = dataScreenMapper.selectDutyListByTodayAndDeptPId(DeptTypeEnum.OT_TYPE.getType(), deptId); map.put("dutySjList", dutySjList); map.put("dutyPcsList", dutyPcsList); map.put("dutyDdList", dutyDdList); @@ -435,24 +433,24 @@ class DeptServiceImpl implements IDeptService { Duty duty = dutyMapper.selectOne(new QueryWrapper().eq("depart_id",dept.getPid()).last("limit 1")); if (duty == null){ }else if (duty.getDeptType().equals(DeptTypeEnum.FJ_TYPE.getType())){ - dutyFjList = dataScreenMapper.getToFjDuty(DeptTypeEnum.FJ_TYPE.getType(), dept.getPid()); + dutyFjList = dataScreenMapper.selectDutyListByTodayAndDeptId(DeptTypeEnum.FJ_TYPE.getType(), dept.getPid()); }else if (duty.getDeptType().equals(DeptTypeEnum.ZD_TYPE.getType())){ - dutyFjList = dataScreenMapper.getToFjDuty(DeptTypeEnum.ZD_TYPE.getType(), dept.getPid()); + dutyFjList = dataScreenMapper.selectDutyListByTodayAndDeptId(DeptTypeEnum.ZD_TYPE.getType(), dept.getPid()); }else if (duty.getDeptType().equals(DeptTypeEnum.BW_TYPE.getType())){ - dutyFjList = dataScreenMapper.getToFjDuty(DeptTypeEnum.BW_TYPE.getType(), dept.getPid()); + dutyFjList = dataScreenMapper.selectDutyListByTodayAndDeptId(DeptTypeEnum.BW_TYPE.getType(), dept.getPid()); } map.put("dutyFjList", dutyFjList); - dutySjList = dataScreenMapper.getToDayDuty(DeptTypeEnum.SJ_TYPE.getType(), null); + dutySjList = dataScreenMapper.selectDutyListByTodayAndDeptPId(DeptTypeEnum.SJ_TYPE.getType(), null); map.put("dutySjList", dutySjList); Duty dutyByDeptid = dutyMapper.selectOne(new QueryWrapper().eq("depart_id",dept.getId()).last("limit 1")); if (dutyByDeptid == null){ } else if (dutyByDeptid.getDeptType().equals(DeptTypeEnum.PCS_TYPE.getType())){ - dutyPcsList = dataScreenMapper.getToFjDuty(DeptTypeEnum.PCS_TYPE.getType(), deptId); + dutyPcsList = dataScreenMapper.selectDutyListByTodayAndDeptId(DeptTypeEnum.PCS_TYPE.getType(), deptId); }else if (dutyByDeptid.getDeptType().equals(DeptTypeEnum.DD_TYPE.getType())){ - dutyPcsList = dataScreenMapper.getToFjDuty(DeptTypeEnum.DD_TYPE.getType(), deptId); + dutyPcsList = dataScreenMapper.selectDutyListByTodayAndDeptId(DeptTypeEnum.DD_TYPE.getType(), deptId); }else if (dutyByDeptid.getDeptType().equals(DeptTypeEnum.OT_TYPE.getType())){ - dutyPcsList = dataScreenMapper.getToFjDuty(DeptTypeEnum.OT_TYPE.getType(), deptId); + dutyPcsList = dataScreenMapper.selectDutyListByTodayAndDeptId(DeptTypeEnum.OT_TYPE.getType(), deptId); } map.put("dutyPcsList", dutyPcsList); } diff --git a/mailbox-lan/src/main/java/com/biutag/lan/service/impl/DutyServiceImpl.java b/mailbox-lan/src/main/java/com/biutag/lan/service/impl/DutyServiceImpl.java index 8b28e5c..874d2c7 100644 --- a/mailbox-lan/src/main/java/com/biutag/lan/service/impl/DutyServiceImpl.java +++ b/mailbox-lan/src/main/java/com/biutag/lan/service/impl/DutyServiceImpl.java @@ -17,21 +17,17 @@ import com.biutag.lan.domain.validate.system.DutySearchValidate; import com.biutag.lan.domain.validate.system.DutyUpdateValidate; import com.biutag.lan.domain.vo.system.DutyDetailVo; import com.biutag.lan.domain.vo.system.DutyListedVo; -import com.biutag.lan.mapper.DataScreenMapper; import com.biutag.lan.mapper.PoliceUserMapper; import com.biutag.lan.service.IDeptService; import com.biutag.lan.service.IDutyService; import com.biutag.mapper.setting.DictDataMapper; import com.biutag.mapper.system.DeptMapper; import com.biutag.mapper.system.DutyMapper; -import com.biutag.util.TimeUtils; import jakarta.annotation.Resource; import org.springframework.beans.BeanUtils; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.Assert; -import java.util.Date; import java.util.List; /** @@ -215,12 +211,4 @@ public class DutyServiceImpl implements IDutyService { return true; } - @Autowired - private DataScreenMapper dataScreenMapper; - - @Override - public List listByToday(String deptTyp, String deptId) { - return dataScreenMapper.getToDayDuty(deptTyp, deptId); - } - } diff --git a/mailbox-lan/src/main/resources/mapper/DataScreenMapper.xml b/mailbox-lan/src/main/resources/mapper/DataScreenMapper.xml index 4c14e50..cf6552c 100644 --- a/mailbox-lan/src/main/resources/mapper/DataScreenMapper.xml +++ b/mailbox-lan/src/main/resources/mapper/DataScreenMapper.xml @@ -353,25 +353,25 @@ limit 1 - select distinct on (a.depart_id, a.emp_no,b.sort) a.* from duty a inner join dept b on a.depart_id=b.id where now() BETWEEN to_date(a.start_time) + interval '9 H' and (to_date(a.end_time) + interval '33 H') - - and a.dept_type=#{depatType} + + and a.dept_type=#{deptType} - - and b.pid=#{deptId} + + and b.pid=#{deptPId} order by b.sort asc - select distinct on (a.depart_id, a.emp_no,b.sort) a.* from duty a inner join dept b on a.depart_id=b.id where now() BETWEEN to_date(a.start_time) + interval '9 H' and (to_date(a.end_time) + interval '33 H') - - and a.dept_type=#{depatType} + + and a.dept_type=#{deptType} and b.id=#{deptId} diff --git a/mailbox-lan/src/main/resources/templates/《处理反馈表》.docx b/mailbox-lan/src/main/resources/templates/《处理反馈表》.docx index cac64d964361939e813a67a747fdcac48f995c13..7d672bbbbf1519c0e37f2c532c66e114d39d0451 100644 GIT binary patch literal 25600 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