|
@@ -1,18 +1,39 @@
|
|
|
package cn.iocoder.yudao.module.iscs.service.materialscheckplan;
|
|
package cn.iocoder.yudao.module.iscs.service.materialscheckplan;
|
|
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
|
|
+import cn.hutool.core.lang.Assert;
|
|
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
|
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
|
|
import cn.iocoder.yudao.module.iscs.controller.admin.materialscheckplan.vo.MaterialsCheckPlanPageReqVO;
|
|
import cn.iocoder.yudao.module.iscs.controller.admin.materialscheckplan.vo.MaterialsCheckPlanPageReqVO;
|
|
|
import cn.iocoder.yudao.module.iscs.controller.admin.materialscheckplan.vo.MaterialsCheckPlanSaveReqVO;
|
|
import cn.iocoder.yudao.module.iscs.controller.admin.materialscheckplan.vo.MaterialsCheckPlanSaveReqVO;
|
|
|
|
|
+import cn.iocoder.yudao.module.iscs.dal.dataobject.attribute.AttributeDO;
|
|
|
|
|
+import cn.iocoder.yudao.module.iscs.dal.dataobject.mailnotifyconfig.MailNotifyConfigDO;
|
|
|
|
|
+import cn.iocoder.yudao.module.iscs.dal.dataobject.mailsendtaskitem.MailSendTaskItemDO;
|
|
|
|
|
+import cn.iocoder.yudao.module.iscs.dal.dataobject.materialscabinet.MaterialsCabinetDO;
|
|
|
import cn.iocoder.yudao.module.iscs.dal.dataobject.materialscheckplan.MaterialsCheckPlanDO;
|
|
import cn.iocoder.yudao.module.iscs.dal.dataobject.materialscheckplan.MaterialsCheckPlanDO;
|
|
|
|
|
+import cn.iocoder.yudao.module.iscs.dal.dataobject.materialsplancabinet.MaterialsPlanCabinetDO;
|
|
|
import cn.iocoder.yudao.module.iscs.dal.mysql.materialscheckplan.MaterialsCheckPlanMapper;
|
|
import cn.iocoder.yudao.module.iscs.dal.mysql.materialscheckplan.MaterialsCheckPlanMapper;
|
|
|
|
|
+import cn.iocoder.yudao.module.iscs.service.attribute.AttributeService;
|
|
|
|
|
+import cn.iocoder.yudao.module.iscs.service.mailnotifyconfig.MailNotifyConfigService;
|
|
|
|
|
+import cn.iocoder.yudao.module.iscs.service.mailsendtaskitem.MailSendTaskItemService;
|
|
|
|
|
+import cn.iocoder.yudao.module.iscs.service.materialscabinet.MaterialsCabinetService;
|
|
|
|
|
+import cn.iocoder.yudao.module.iscs.service.materialsplancabinet.MaterialsPlanCabinetService;
|
|
|
|
|
+import cn.iocoder.yudao.module.iscs.utils.DateUtils;
|
|
|
|
|
+import cn.iocoder.yudao.module.system.dal.dataobject.mail.MailTemplateDO;
|
|
|
|
|
+import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
|
|
|
|
|
+import cn.iocoder.yudao.module.system.service.mail.MailTemplateService;
|
|
|
|
|
+import cn.iocoder.yudao.module.system.service.user.AdminUserService;
|
|
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import jakarta.annotation.Resource;
|
|
import jakarta.annotation.Resource;
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.validation.annotation.Validated;
|
|
import org.springframework.validation.annotation.Validated;
|
|
|
|
|
|
|
|
|
|
+import java.util.ArrayList;
|
|
|
|
|
+import java.util.Date;
|
|
|
|
|
+import java.util.HashMap;
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 物资检查计划 Service 实现类
|
|
* 物资检查计划 Service 实现类
|
|
@@ -25,24 +46,139 @@ public class MaterialsCheckPlanServiceImpl extends ServiceImpl<MaterialsCheckPla
|
|
|
|
|
|
|
|
@Resource
|
|
@Resource
|
|
|
private MaterialsCheckPlanMapper materialsCheckPlanMapper;
|
|
private MaterialsCheckPlanMapper materialsCheckPlanMapper;
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private MaterialsPlanCabinetService materialsPlanCabinetService;
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private AttributeService attributeService;
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private MailTemplateService mailTemplateService;
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private MailNotifyConfigService mailNotifyConfigService;
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private MailSendTaskItemService mailSendTaskItemService;
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private MaterialsCabinetService materialsCabinetService;
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private AdminUserService adminUserService;
|
|
|
|
|
+
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public Long createMaterialsCheckPlan(MaterialsCheckPlanSaveReqVO createReqVO) {
|
|
public Long createMaterialsCheckPlan(MaterialsCheckPlanSaveReqVO createReqVO) {
|
|
|
|
|
+ // 1.断言检测
|
|
|
|
|
+ Assert.notNull(createReqVO.getPlanDate(), "检查日期不可为空!");
|
|
|
|
|
+ Assert.notNull(createReqVO.getCheckUserId(), "检查员不可为空!");
|
|
|
|
|
+ Assert.isFalse(createReqVO.getCabinetIds().isEmpty(), "请选择需要检查的柜子!");
|
|
|
|
|
+ // 2.开始新增计划
|
|
|
// 插入
|
|
// 插入
|
|
|
MaterialsCheckPlanDO materialsCheckPlan = BeanUtils.toBean(createReqVO, MaterialsCheckPlanDO.class);
|
|
MaterialsCheckPlanDO materialsCheckPlan = BeanUtils.toBean(createReqVO, MaterialsCheckPlanDO.class);
|
|
|
- materialsCheckPlanMapper.insert(materialsCheckPlan);
|
|
|
|
|
-
|
|
|
|
|
|
|
+ // 2.1开始生成文件名称尾缀
|
|
|
|
|
+ String jobName = materialsCheckPlan.getPlanName();
|
|
|
|
|
+ int counter = 1;
|
|
|
|
|
+ String rname = materialsCheckPlan.getPlanName();
|
|
|
|
|
+ while (!list(Wrappers.<MaterialsCheckPlanDO>lambdaQuery().eq(MaterialsCheckPlanDO::getPlanName, jobName)).isEmpty()) {
|
|
|
|
|
+ jobName = rname + "(" + counter + ")";
|
|
|
|
|
+ counter++;
|
|
|
|
|
+ }
|
|
|
|
|
+ materialsCheckPlan.setPlanName(jobName);
|
|
|
|
|
+ save(materialsCheckPlan);
|
|
|
|
|
+ // 3.开始新增计划和物资柜的关联关系
|
|
|
|
|
+ List<MaterialsPlanCabinetDO> isMaterialsPlanCabinets = new ArrayList<>();
|
|
|
|
|
+ for (Long cabinetId : createReqVO.getCabinetIds()) {
|
|
|
|
|
+ MaterialsPlanCabinetDO isMaterialsPlanCabinet = new MaterialsPlanCabinetDO();
|
|
|
|
|
+ isMaterialsPlanCabinet.setId(materialsCheckPlan.getId());
|
|
|
|
|
+ isMaterialsPlanCabinet.setCabinetId(cabinetId);
|
|
|
|
|
+ isMaterialsPlanCabinets.add(isMaterialsPlanCabinet);
|
|
|
|
|
+ }
|
|
|
|
|
+ materialsPlanCabinetService.saveBatch(isMaterialsPlanCabinets);
|
|
|
|
|
+ // 4.开始计算倒计时,给检查员发送邮件
|
|
|
|
|
+ addMail(createReqVO, materialsCheckPlan);
|
|
|
// 返回
|
|
// 返回
|
|
|
return materialsCheckPlan.getId();
|
|
return materialsCheckPlan.getId();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ private Boolean addMail(MaterialsCheckPlanSaveReqVO dto, MaterialsCheckPlanDO materialsCheckPlan) {
|
|
|
|
|
+ // 4.1获取模板
|
|
|
|
|
+ AttributeDO isSystemAttributeByKey = attributeService.getAttributeByKey("sys.template.check_plan");
|
|
|
|
|
+ Assert.isFalse(isSystemAttributeByKey == null, "请在基础数据中配置物资检查计划模板!");
|
|
|
|
|
+ MailTemplateDO template = mailTemplateService.getOne(Wrappers.<MailTemplateDO>lambdaQuery()
|
|
|
|
|
+ .eq(MailTemplateDO::getCode, isSystemAttributeByKey.getSysAttrValue()));
|
|
|
|
|
+ // 4.2获取配置的时间
|
|
|
|
|
+ MailNotifyConfigDO notifyConfig = mailNotifyConfigService.getOne(Wrappers.<MailNotifyConfigDO>lambdaQuery()
|
|
|
|
|
+ .eq(MailNotifyConfigDO::getTemplateCode, isSystemAttributeByKey.getSysAttrValue()));
|
|
|
|
|
+ // 4.2.1无论是不是新增都先查一下有没有邮件,有邮件看下发了没有,没有发也没取消就删掉重新增
|
|
|
|
|
+ if (template != null) {
|
|
|
|
|
+ List<MailSendTaskItemDO> notSendMails = mailSendTaskItemService.list(Wrappers.<MailSendTaskItemDO>lambdaQuery()
|
|
|
|
|
+ .eq(MailSendTaskItemDO::getEmailTemplateId, template.getId())
|
|
|
|
|
+ .eq(MailSendTaskItemDO::getBelongId, materialsCheckPlan.getId())
|
|
|
|
|
+ .eq(MailSendTaskItemDO::getSendStatus, "0")
|
|
|
|
|
+ .eq(MailSendTaskItemDO::getIsCancelled, "0"));
|
|
|
|
|
+ if (!notSendMails.isEmpty()) {
|
|
|
|
|
+ List<Long> notSendMailIds = notSendMails.stream().map(MailSendTaskItemDO::getId).collect(Collectors.toList());
|
|
|
|
|
+ mailSendTaskItemService.removeBatchByIds(notSendMailIds);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ // 4.3判断柜子是否激活,激活才有效
|
|
|
|
|
+ if (template != null && notifyConfig != null && "1".equals(notifyConfig.getStatus())) {
|
|
|
|
|
+ // 5.1新增预发送邮件到数据库
|
|
|
|
|
+ // 理应的发送时间计算
|
|
|
|
|
+ Date newDateTime = DateUtils.getNewDateTime(dto.getPlanDate(), notifyConfig.getReminderTime());
|
|
|
|
|
+ // 5.1.1柜子的详情
|
|
|
|
|
+ List<MaterialsCabinetDO> cabinets = materialsCabinetService.list(Wrappers.<MaterialsCabinetDO>lambdaQuery()
|
|
|
|
|
+ .in(MaterialsCabinetDO::getId, dto.getCabinetIds()));
|
|
|
|
|
+ String cabinetNameStr = cabinets.stream().map(MaterialsCabinetDO::getCabinetName).collect(Collectors.joining(","));
|
|
|
|
|
+ // 5.1.2检察员信息
|
|
|
|
|
+ AdminUserDO user = adminUserService.getUser(dto.getCheckUserId());
|
|
|
|
|
+ // 5.3新增邮件任务
|
|
|
|
|
+ // 5.4整理可配置的字段
|
|
|
|
|
+ HashMap<String, String> map = new HashMap<>();
|
|
|
|
|
+ map.put("[计划名称]", dto.getPlanName());
|
|
|
|
|
+ map.put("[计划日期]", DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, dto.getPlanDate()));
|
|
|
|
|
+ map.put("[物资柜]", cabinetNameStr);
|
|
|
|
|
+ map.put("[检察员]", user.getNickname());
|
|
|
|
|
+ map.put("[发件人]", attributeService.getAttributeByKey("info.mail.name").getSysAttrValue());
|
|
|
|
|
+ map.put("[公司名称]", attributeService.getAttributeByKey("info.mail.company").getSysAttrValue());
|
|
|
|
|
+ map.put("[邮件发送时间]", DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, newDateTime));
|
|
|
|
|
+ // 邮件实体
|
|
|
|
|
+ MailSendTaskItemDO taskItem = new MailSendTaskItemDO();
|
|
|
|
|
+ taskItem.setSendToUserId(dto.getCheckUserId());
|
|
|
|
|
+ taskItem.setEmailTemplateId(template.getId());
|
|
|
|
|
+ taskItem.setScheduledSendTime(DateUtils.dateToLocalDateTime(newDateTime));
|
|
|
|
|
+ taskItem.setBelongId(materialsCheckPlan.getId());
|
|
|
|
|
+ taskItem.setSendStatus(0);
|
|
|
|
|
+ taskItem.setIsCancelled(0);
|
|
|
|
|
+ mailSendTaskItemService.insertIsMailSendTaskItem(taskItem, map);
|
|
|
|
|
+ }
|
|
|
|
|
+ return true;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
@Override
|
|
@Override
|
|
|
public void updateMaterialsCheckPlan(MaterialsCheckPlanSaveReqVO updateReqVO) {
|
|
public void updateMaterialsCheckPlan(MaterialsCheckPlanSaveReqVO updateReqVO) {
|
|
|
- // 校验存在
|
|
|
|
|
- validateMaterialsCheckPlanExists(updateReqVO.getId());
|
|
|
|
|
- // 更新
|
|
|
|
|
- MaterialsCheckPlanDO updateObj = BeanUtils.toBean(updateReqVO, MaterialsCheckPlanDO.class);
|
|
|
|
|
- materialsCheckPlanMapper.updateById(updateObj);
|
|
|
|
|
|
|
+ // 1.断言检测
|
|
|
|
|
+ Assert.notNull(updateReqVO.getId(), "主键ID不可为空!");
|
|
|
|
|
+ Assert.notNull(updateReqVO.getPlanDate(), "检查日期不可为空!");
|
|
|
|
|
+ Assert.notNull(updateReqVO.getCheckUserId(), "检查员不可为空!");
|
|
|
|
|
+ Assert.isFalse(updateReqVO.getCabinetIds().isEmpty(), "请选择需要检查的柜子!");
|
|
|
|
|
+ List<MaterialsCheckPlanDO> list = list(Wrappers.<MaterialsCheckPlanDO>lambdaQuery()
|
|
|
|
|
+ .eq(MaterialsCheckPlanDO::getPlanName, updateReqVO.getPlanName())
|
|
|
|
|
+ .ne(MaterialsCheckPlanDO::getId, updateReqVO.getId()));
|
|
|
|
|
+ Assert.isTrue(list.isEmpty(), "该名称已被使用!");
|
|
|
|
|
+ // 2.开始新增计划
|
|
|
|
|
+ MaterialsCheckPlanDO materialsCheckPlan = BeanUtils.toBean(updateReqVO, MaterialsCheckPlanDO.class);
|
|
|
|
|
+ updateById(materialsCheckPlan);
|
|
|
|
|
+ // 3.开始新增计划和物资柜的关联关系
|
|
|
|
|
+ // 3.1先删除,再新增
|
|
|
|
|
+ materialsPlanCabinetService.remove(Wrappers.<MaterialsPlanCabinetDO>lambdaQuery()
|
|
|
|
|
+ .eq(MaterialsPlanCabinetDO::getId, updateReqVO.getId()));
|
|
|
|
|
+ List<MaterialsPlanCabinetDO> isMaterialsPlanCabinets = new ArrayList<>();
|
|
|
|
|
+ for (Long cabinetId : updateReqVO.getCabinetIds()) {
|
|
|
|
|
+ MaterialsPlanCabinetDO materialsPlanCabinetDO = new MaterialsPlanCabinetDO();
|
|
|
|
|
+ materialsPlanCabinetDO.setId(materialsCheckPlan.getId());
|
|
|
|
|
+ materialsPlanCabinetDO.setCabinetId(cabinetId);
|
|
|
|
|
+ isMaterialsPlanCabinets.add(materialsPlanCabinetDO);
|
|
|
|
|
+ }
|
|
|
|
|
+ materialsPlanCabinetService.saveBatch(isMaterialsPlanCabinets);
|
|
|
|
|
+ // 4.邮件也是先删除再新增
|
|
|
|
|
+ addMail(updateReqVO, materialsCheckPlan);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -55,6 +191,22 @@ public class MaterialsCheckPlanServiceImpl extends ServiceImpl<MaterialsCheckPla
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public void deleteMaterialsCheckPlanListByIds(List<Long> ids) {
|
|
public void deleteMaterialsCheckPlanListByIds(List<Long> ids) {
|
|
|
|
|
+ Assert.isFalse(ids.isEmpty(), "请选择需要删除的数据!");
|
|
|
|
|
+ removeBatchByIds(ids);
|
|
|
|
|
+ // 开始删除关联的物资柜数据
|
|
|
|
|
+ materialsPlanCabinetService.remove(Wrappers.<MaterialsPlanCabinetDO>lambdaQuery()
|
|
|
|
|
+ .in(MaterialsPlanCabinetDO::getId, ids));
|
|
|
|
|
+ // 取消关联的发送邮件
|
|
|
|
|
+ MailTemplateDO template = mailTemplateService.getOne(Wrappers.<MailTemplateDO>lambdaQuery()
|
|
|
|
|
+ .eq(MailTemplateDO::getCode, attributeService.getAttributeByKey("sys.template.check_plan").getSysAttrValue()));
|
|
|
|
|
+ if (template != null) {
|
|
|
|
|
+ mailSendTaskItemService.update(Wrappers.<MailSendTaskItemDO>lambdaUpdate()
|
|
|
|
|
+ .eq(MailSendTaskItemDO::getEmailTemplateId, template.getId())
|
|
|
|
|
+ .in(MailSendTaskItemDO::getBelongId, ids)
|
|
|
|
|
+ .eq(MailSendTaskItemDO::getSendStatus, "0")
|
|
|
|
|
+ .set(MailSendTaskItemDO::getIsCancelled, "1")
|
|
|
|
|
+ .set(MailSendTaskItemDO::getCancelTime, new Date()));
|
|
|
|
|
+ }
|
|
|
// 校验存在
|
|
// 校验存在
|
|
|
validateMaterialsCheckPlanExists(ids);
|
|
validateMaterialsCheckPlanExists(ids);
|
|
|
// 删除
|
|
// 删除
|