|
|
|
|
@ -4,7 +4,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
|
|
|
|
import jakarta.annotation.Resource; |
|
|
|
|
import lombok.Data; |
|
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
|
import org.flowable.task.service.delegate.TaskListener; |
|
|
|
|
import org.springblade.core.secure.utils.AuthUtil; |
|
|
|
|
import org.springblade.core.tool.api.R; |
|
|
|
|
import org.springblade.desk.quality.constant.ColBase; |
|
|
|
|
import org.springblade.desk.quality.constant.ColValue; |
|
|
|
|
import org.springblade.desk.quality.constant.LiquidTankTaskConst; |
|
|
|
|
@ -12,13 +13,23 @@ import org.springblade.desk.quality.mapper.gen.LiquidTankGenMapper; |
|
|
|
|
import org.springblade.desk.quality.mapper.gen.LiquidTankTaskGenMapper; |
|
|
|
|
import org.springblade.desk.quality.pojo.entity.LiquidTank; |
|
|
|
|
import org.springblade.desk.quality.pojo.entity.LiquidTankTask; |
|
|
|
|
import org.springblade.desk.quality.pojo.request.LiquidTankTaskAccept; |
|
|
|
|
import org.springblade.desk.quality.pojo.request.LiquidTankTaskFinishForce; |
|
|
|
|
import org.springblade.desk.quality.pojo.request.LiquidTankTaskGenManual; |
|
|
|
|
import org.springblade.desk.quality.pojo.request.LiquidTankTaskIssue; |
|
|
|
|
import org.springblade.desk.quality.util.IdUtil; |
|
|
|
|
import org.springblade.system.feign.IUserClient; |
|
|
|
|
import org.springblade.system.pojo.entity.UserInfo; |
|
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
|
|
|
|
|
|
import java.util.ArrayList; |
|
|
|
|
import java.util.Date; |
|
|
|
|
import java.util.List; |
|
|
|
|
import java.util.Objects; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* [槽液检测任务] |
|
|
|
|
*/ |
|
|
|
|
@Service |
|
|
|
|
@Slf4j |
|
|
|
|
@Data |
|
|
|
|
@ -29,13 +40,20 @@ public class LiquidTankTaskService { |
|
|
|
|
@Resource |
|
|
|
|
private LiquidTankTaskGenMapper genMapper; |
|
|
|
|
|
|
|
|
|
@Resource |
|
|
|
|
private MsgService msgService; |
|
|
|
|
|
|
|
|
|
@Resource |
|
|
|
|
private IUserClient userClient; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 定时运行:每天00:00 |
|
|
|
|
* 生成槽液任务。 |
|
|
|
|
* 周期性自动生成槽液任务。 |
|
|
|
|
* |
|
|
|
|
* @return |
|
|
|
|
* @return 所有生成的任务 |
|
|
|
|
*/ |
|
|
|
|
public List<LiquidTankTask> generate() { |
|
|
|
|
public List<LiquidTankTask> generateAuto() { |
|
|
|
|
log.info("========generate========start"); |
|
|
|
|
// 如果是节假日,则跳过生成。
|
|
|
|
|
if (false) { |
|
|
|
|
@ -49,26 +67,39 @@ public class LiquidTankTaskService { |
|
|
|
|
); |
|
|
|
|
// 遍历插入槽液任务。
|
|
|
|
|
List<LiquidTankTask> rList = new ArrayList<>(); |
|
|
|
|
for (LiquidTank tank : tankList) { |
|
|
|
|
for (LiquidTank lt : tankList) { |
|
|
|
|
// 如果有未处理任务,则跳过不生成新任务。
|
|
|
|
|
Long count = genMapper.selectCount( |
|
|
|
|
new QueryWrapper<LiquidTankTask>() |
|
|
|
|
.eq("LIQUID_TANK_ID", tank.getId()) |
|
|
|
|
.eq(ColBase.STATUS, LiquidTankTaskConst.STATUS_HANDLED) |
|
|
|
|
.eq("LIQUID_TANK_ID", lt.getId()) |
|
|
|
|
.eq(ColBase.STATUS, LiquidTankTaskConst.STATE_PENDING_ACCEPT) |
|
|
|
|
); |
|
|
|
|
if (count >= 1) { |
|
|
|
|
log.info("槽液{}存在未处理的槽液任务", tank.getId()); |
|
|
|
|
log.info("槽液{}存在未处理的槽液任务", lt.getId()); |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
LiquidTankTask task = new LiquidTankTask(); |
|
|
|
|
task.setLiquidTankId(tank.getId()); |
|
|
|
|
task.setLiquidTankId(lt.getId()); |
|
|
|
|
task.setName("name"); |
|
|
|
|
task.setCode("code"); |
|
|
|
|
task.setSort(0L); |
|
|
|
|
task.setCreateTime(new Date()); |
|
|
|
|
task.setRemark("remark"); |
|
|
|
|
task.setCode(""); |
|
|
|
|
task.setRemark(""); |
|
|
|
|
task.setTeamId(0L); |
|
|
|
|
task.setReceiveUserId(0L); |
|
|
|
|
// 设置人员相关
|
|
|
|
|
// 设置检测员
|
|
|
|
|
task.setTestUserId(lt.getTestUserId()); |
|
|
|
|
// 设置工艺员
|
|
|
|
|
task.setProcessUserId(lt.getProcessUserId()); |
|
|
|
|
//
|
|
|
|
|
task.setSendUserId(IdUtil.DEFAULT_ID); |
|
|
|
|
task.setReceiveUserId(IdUtil.DEFAULT_ID); |
|
|
|
|
// from type
|
|
|
|
|
task.setFromType(LiquidTankTaskConst.FROM_TYPE_PERIODIC); |
|
|
|
|
// status
|
|
|
|
|
task.setStatus(LiquidTankTaskConst.STATE_PENDING_ACCEPT); |
|
|
|
|
// 通用字段
|
|
|
|
|
task.setCreateUser(AuthUtil.getUserId()); |
|
|
|
|
task.setCreateTime(new Date()); |
|
|
|
|
task.setCreateDept(Long.parseLong(AuthUtil.getDeptId())); |
|
|
|
|
genMapper.insert(task); |
|
|
|
|
rList.add(task); |
|
|
|
|
} |
|
|
|
|
@ -80,13 +111,13 @@ public class LiquidTankTaskService { |
|
|
|
|
* 定时运行:每天09:30 |
|
|
|
|
* 槽液任务超时提醒。 |
|
|
|
|
* |
|
|
|
|
* @return |
|
|
|
|
* @return 被提醒的任务列表 |
|
|
|
|
*/ |
|
|
|
|
public List<LiquidTankTask> timeout() { |
|
|
|
|
log.info("========timeout========start"); |
|
|
|
|
// 查询出所有未处理的槽液任务
|
|
|
|
|
List<LiquidTankTask> list = genMapper.selectList(new QueryWrapper<LiquidTankTask>() |
|
|
|
|
.eq(ColBase.STATUS, LiquidTankTaskConst.STATUS_HANDLED) |
|
|
|
|
.eq(ColBase.STATUS, LiquidTankTaskConst.STATE_PENDING_ACCEPT) |
|
|
|
|
.orderByAsc(ColBase.ID) |
|
|
|
|
); |
|
|
|
|
for (LiquidTankTask task : list) { |
|
|
|
|
@ -94,9 +125,259 @@ public class LiquidTankTaskService { |
|
|
|
|
// todo:对监测员进行提醒。
|
|
|
|
|
// 按天运行,可以一直重复提醒。
|
|
|
|
|
String msg = "槽液 " + tank.getCode() + ",未及时检验!请及时处理。"; |
|
|
|
|
Long userId = tank.getTestUserId(); |
|
|
|
|
Long testUserId = tank.getTestUserId(); |
|
|
|
|
msgService.sendMsg(testUserId, msg); |
|
|
|
|
} |
|
|
|
|
log.info("========timeout========end"); |
|
|
|
|
return list; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* [槽液检测任务] 手动生成新增 |
|
|
|
|
* |
|
|
|
|
* @param req |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
public R<LiquidTankTask> generateManual(LiquidTankTaskGenManual req) { |
|
|
|
|
LiquidTank lt = liquidTankGenMapper.selectById(req.getLiquidTankId()); |
|
|
|
|
if (Objects.isNull(lt)) { |
|
|
|
|
R.fail("对应槽液信息为空。"); |
|
|
|
|
} |
|
|
|
|
// todo:检查当前角色
|
|
|
|
|
UserInfo userInfo = userClient.userInfo(req.getTestUserId()).getData(); |
|
|
|
|
// todo:检查角色
|
|
|
|
|
|
|
|
|
|
// todo:日期检查
|
|
|
|
|
LiquidTankTask task = new LiquidTankTask(); |
|
|
|
|
// 指定槽液
|
|
|
|
|
task.setLiquidTankId(req.getLiquidTankId()); |
|
|
|
|
// 指定人员
|
|
|
|
|
if (IdUtil.isValid(req.getTestUserId())) { |
|
|
|
|
task.setTestUserId(req.getTestUserId()); |
|
|
|
|
} else { |
|
|
|
|
task.setTestUserId(lt.getTestUserId()); |
|
|
|
|
} |
|
|
|
|
if (IdUtil.isValid(req.getProcessUserId())) { |
|
|
|
|
task.setProcessUserId(req.getProcessUserId()); |
|
|
|
|
} else { |
|
|
|
|
task.setProcessUserId(lt.getProcessUserId()); |
|
|
|
|
} |
|
|
|
|
// from type
|
|
|
|
|
task.setFromType(LiquidTankTaskConst.FROM_TYPE_MANUAL); |
|
|
|
|
// status
|
|
|
|
|
task.setStatus(LiquidTankTaskConst.STATE_PENDING_ACCEPT); |
|
|
|
|
// 通用字段
|
|
|
|
|
task.setCreateUser(AuthUtil.getUserId()); |
|
|
|
|
task.setCreateTime(new Date()); |
|
|
|
|
task.setCreateDept(Long.parseLong(AuthUtil.getDeptId())); |
|
|
|
|
// 插入
|
|
|
|
|
genMapper.insert(task); |
|
|
|
|
// final R
|
|
|
|
|
R<LiquidTankTask> r = new R<>(); |
|
|
|
|
r.setData(task); |
|
|
|
|
r.setSuccess(true); |
|
|
|
|
r.setMsg("手动生成槽液任务成功"); |
|
|
|
|
return r; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* [槽液检测任务] 手动下发 |
|
|
|
|
* |
|
|
|
|
* @param req |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
public R<LiquidTankTask> issue(LiquidTankTaskIssue req) { |
|
|
|
|
// todo:检查当前角色
|
|
|
|
|
if (IdUtil.isAnyInvalid(new Long[]{req.getId(), req.getTestUserId(), req.getProcessUserId()})) { |
|
|
|
|
return R.fail("id错误"); |
|
|
|
|
} |
|
|
|
|
LiquidTankTask task = genMapper.selectById(req.getId()); |
|
|
|
|
if (!LiquidTankTaskConst.STATE_NOT_READY.equals(task.getStatus())) { |
|
|
|
|
return R.fail("任务状态不对应"); |
|
|
|
|
} |
|
|
|
|
// status
|
|
|
|
|
task.setStatus(LiquidTankTaskConst.STATE_PENDING_ACCEPT); |
|
|
|
|
// 通用字段
|
|
|
|
|
task.setUpdateUser(AuthUtil.getUserId()); |
|
|
|
|
task.setUpdateTime(new Date()); |
|
|
|
|
R<LiquidTankTask> r = new R<>(); |
|
|
|
|
r.setData(task); |
|
|
|
|
r.setSuccess(true); |
|
|
|
|
r.setMsg("手动下发槽液任务成功"); |
|
|
|
|
return r; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* [槽液检测任务] 接收任务 |
|
|
|
|
* |
|
|
|
|
* @param req |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
public R<LiquidTankTask> accept(LiquidTankTaskAccept req) { |
|
|
|
|
if (IdUtil.isInvalid(req.getId())) { |
|
|
|
|
return R.fail("id错误"); |
|
|
|
|
} |
|
|
|
|
LiquidTankTask task = genMapper.selectById(req.getId()); |
|
|
|
|
if (!LiquidTankTaskConst.STATE_PENDING_ACCEPT.equals(task.getStatus())) { |
|
|
|
|
return R.fail("任务状态不对应"); |
|
|
|
|
} |
|
|
|
|
// check status
|
|
|
|
|
// status
|
|
|
|
|
task.setStatus(LiquidTankTaskConst.STATE_PENDING_TEST); |
|
|
|
|
R<LiquidTankTask> r = new R<>(); |
|
|
|
|
r.setData(task); |
|
|
|
|
r.setSuccess(true); |
|
|
|
|
r.setMsg("接收任务成功"); |
|
|
|
|
return r; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* [槽液检测任务] 首次填报数据 |
|
|
|
|
* |
|
|
|
|
* @param req |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
public R<LiquidTankTask> fillDataFirst(LiquidTankTaskAccept req) { |
|
|
|
|
LiquidTankTask task = genMapper.selectById(req.getId()); |
|
|
|
|
if (!LiquidTankTaskConst.STATE_FILL_DATA_FIRST.equals(task.getStatus())) { |
|
|
|
|
return R.fail("任务状态不对应"); |
|
|
|
|
} |
|
|
|
|
R<LiquidTankTask> r = new R<>(); |
|
|
|
|
// todo: 自动计算加药量
|
|
|
|
|
r.setData(task); |
|
|
|
|
r.setSuccess(true); |
|
|
|
|
r.setMsg("填报数据成功"); |
|
|
|
|
return r; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* [槽液检测任务] 编辑加药量 |
|
|
|
|
* |
|
|
|
|
* @param req |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
public R<LiquidTankTask> editDrugQuantity(LiquidTankTaskAccept req) { |
|
|
|
|
LiquidTankTask task = genMapper.selectById(req.getId()); |
|
|
|
|
if (!LiquidTankTaskConst.STATE_FILL_DATA_FIRST.equals(task.getStatus())) { |
|
|
|
|
return R.fail("任务状态不对应"); |
|
|
|
|
} |
|
|
|
|
R<LiquidTankTask> r = new R<>(); |
|
|
|
|
// todo: 自动计算加药量
|
|
|
|
|
r.setData(task); |
|
|
|
|
r.setSuccess(true); |
|
|
|
|
r.setMsg("编辑加药量成功"); |
|
|
|
|
return r; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* [槽液检测任务] 提交加药量审核 |
|
|
|
|
* |
|
|
|
|
* @param req |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
public R<LiquidTankTask> submitDrugQuantity(LiquidTankTaskAccept req) { |
|
|
|
|
LiquidTankTask task = genMapper.selectById(req.getId()); |
|
|
|
|
if (!LiquidTankTaskConst.STATE_PENDING_EDIT_DRUG.equals(task.getStatus())) { |
|
|
|
|
return R.fail("任务状态不对应"); |
|
|
|
|
} |
|
|
|
|
R<LiquidTankTask> r = new R<>(); |
|
|
|
|
|
|
|
|
|
// todo: 自动计算加药量
|
|
|
|
|
r.setData(null); |
|
|
|
|
r.setSuccess(true); |
|
|
|
|
r.setMsg("提交加药量审核成功"); |
|
|
|
|
return r; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* [槽液检测任务] 同意提交加药量 |
|
|
|
|
* |
|
|
|
|
* @param req |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
public R<LiquidTankTask> agreeDrugQuantity(LiquidTankTaskAccept req) { |
|
|
|
|
LiquidTankTask task = genMapper.selectById(req.getId()); |
|
|
|
|
if (!LiquidTankTaskConst.STATE_PENDING_REVIEW.equals(task.getStatus())) { |
|
|
|
|
return R.fail("任务状态不对应"); |
|
|
|
|
} |
|
|
|
|
R<LiquidTankTask> r = new R<>(); |
|
|
|
|
|
|
|
|
|
// todo: 自动计算加药量
|
|
|
|
|
r.setData(null); |
|
|
|
|
r.setSuccess(true); |
|
|
|
|
r.setMsg("同意提交加药量成功"); |
|
|
|
|
return r; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* [槽液检测任务] 驳回提交加药量 |
|
|
|
|
* |
|
|
|
|
* @param req |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
public R<LiquidTankTask> disagreeDrugQuantity(LiquidTankTaskAccept req) { |
|
|
|
|
R<LiquidTankTask> r = new R<>(); |
|
|
|
|
|
|
|
|
|
// todo: 自动计算加药量
|
|
|
|
|
r.setData(null); |
|
|
|
|
r.setSuccess(true); |
|
|
|
|
r.setMsg("驳回提交加药量成功"); |
|
|
|
|
return r; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* [槽液检测任务] 药品发放确认 |
|
|
|
|
* |
|
|
|
|
* @param req |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
public R<LiquidTankTask> sendDrug(LiquidTankTaskAccept req) { |
|
|
|
|
R<LiquidTankTask> r = new R<>(); |
|
|
|
|
|
|
|
|
|
// todo: 自动计算加药量
|
|
|
|
|
r.setData(null); |
|
|
|
|
r.setSuccess(true); |
|
|
|
|
r.setMsg("药品发放确认成功"); |
|
|
|
|
return r; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* [槽液检测任务] 药品接收确认 |
|
|
|
|
* |
|
|
|
|
* @param req |
|
|
|
|
* @return |
|
|
|
|
*/ |
|
|
|
|
public R<LiquidTankTask> receiveDrug(LiquidTankTaskAccept req) { |
|
|
|
|
R<LiquidTankTask> r = new R<>(); |
|
|
|
|
|
|
|
|
|
// todo: 自动计算加药量
|
|
|
|
|
r.setData(null); |
|
|
|
|
r.setSuccess(true); |
|
|
|
|
r.setMsg("药品接收确认成功"); |
|
|
|
|
return r; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public R<LiquidTankTask> finishForce(LiquidTankTaskFinishForce req) { |
|
|
|
|
LiquidTankTask task = genMapper.selectById(req.getId()); |
|
|
|
|
R<LiquidTankTask> r = new R<>(); |
|
|
|
|
r.setData(task); |
|
|
|
|
r.setSuccess(true); |
|
|
|
|
r.setMsg("强制结束槽液任务成功"); |
|
|
|
|
return r; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 计算加药量 |
|
|
|
|
* 根据历史填报 or 药品规格自动修正加药量 |
|
|
|
|
*/ |
|
|
|
|
public void calDrug() { |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 生产需求计算 |
|
|
|
|
*/ |
|
|
|
|
public void calProductNeed() { |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|