package com.java110.oa.cmd.work; import com.alibaba.fastjson.JSONObject; import com.java110.core.annotation.Java110Cmd; import com.java110.core.context.CmdContextUtils; import com.java110.core.context.ICmdDataFlowContext; import com.java110.core.event.cmd.Cmd; import com.java110.core.event.cmd.CmdEvent; import com.java110.core.factory.GenerateCodeFactory; import com.java110.dto.user.UserDto; import com.java110.dto.workEvent.WorkEventDto; import com.java110.dto.workPool.WorkPoolDto; import com.java110.dto.workPoolFile.WorkPoolFileDto; import com.java110.dto.workTask.WorkTaskDto; import com.java110.intf.oa.IWorkEventV1InnerServiceSMO; import com.java110.intf.oa.IWorkPoolFileV1InnerServiceSMO; import com.java110.intf.oa.IWorkPoolV1InnerServiceSMO; import com.java110.intf.oa.IWorkTaskV1InnerServiceSMO; import com.java110.intf.user.IUserV1InnerServiceSMO; import com.java110.po.workEvent.WorkEventPo; import com.java110.po.workPool.WorkPoolPo; import com.java110.po.workPoolFile.WorkPoolFilePo; import com.java110.po.workTask.WorkTaskPo; import com.java110.utils.exception.CmdException; import com.java110.utils.util.Assert; import com.java110.utils.util.ListUtil; import com.java110.utils.util.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import java.text.ParseException; import java.util.List; @Java110Cmd(serviceCode = "work.finishWorkTask") public class FinishWorkTaskCmd extends Cmd { @Autowired private IWorkTaskV1InnerServiceSMO workTaskV1InnerServiceSMOImpl; @Autowired private IWorkEventV1InnerServiceSMO workEventV1InnerServiceSMOImpl; @Autowired private IWorkPoolV1InnerServiceSMO workPoolV1InnerServiceSMOImpl; @Autowired private IUserV1InnerServiceSMO userV1InnerServiceSMOImpl; @Autowired private IWorkPoolFileV1InnerServiceSMO workPoolFileV1InnerServiceSMOImpl; @Override public void validate(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException { Assert.hasKeyAndValue(reqJson, "taskId", "未包含任务"); Assert.hasKeyAndValue(reqJson, "auditCode", "未包含状态"); Assert.hasKeyAndValue(reqJson, "auditMessage", "未包含说明"); if ("T".equals(reqJson.getString("auditCode"))) { Assert.hasKeyAndValue(reqJson, "taskId", "未包含转单人"); } String userId = CmdContextUtils.getUserId(context); WorkTaskDto workTaskDto = new WorkTaskDto(); workTaskDto.setTaskId(reqJson.getString("taskId")); workTaskDto.setStaffId(userId); List workTaskDtos = workTaskV1InnerServiceSMOImpl.queryWorkTasks(workTaskDto); if (ListUtil.isNull(workTaskDtos)) { throw new CmdException("工作单不在你的工位,您无权处理"); } } @Override public void doCmd(CmdEvent event, ICmdDataFlowContext context, JSONObject reqJson) throws CmdException, ParseException { String storeId = CmdContextUtils.getStoreId(context); WorkTaskDto workTaskDto = new WorkTaskDto(); workTaskDto.setTaskId(reqJson.getString("taskId")); workTaskDto.setStoreId(storeId); List workTaskDtos = workTaskV1InnerServiceSMOImpl.queryWorkTasks(workTaskDto); //todo 转单 if ("T".equals(reqJson.getString("auditCode"))) { doTransfor(reqJson, workTaskDtos.get(0)); } else if ("C".equals(reqJson.getString("auditCode"))) { doFinish(reqJson, workTaskDtos.get(0)); } if (!reqJson.containsKey("pathUrl")) { return; } String pathUrl = reqJson.getString("pathUrl"); if (StringUtil.isEmpty(pathUrl)) { return; } WorkPoolFilePo workPoolFilePo = new WorkPoolFilePo(); workPoolFilePo.setCommunityId(workTaskDtos.get(0).getCommunityId()); workPoolFilePo.setFileType(WorkPoolFileDto.FILE_TYPE_END); workPoolFilePo.setFileId(GenerateCodeFactory.getGeneratorId("11")); workPoolFilePo.setWorkId(workTaskDtos.get(0).getWorkId()); workPoolFilePo.setTaskId(workTaskDtos.get(0).getTaskId()); workPoolFilePo.setPathUrl(reqJson.getString("pathUrl")); workPoolFilePo.setStoreId(workTaskDtos.get(0).getStoreId()); workPoolFileV1InnerServiceSMOImpl.saveWorkPoolFile(workPoolFilePo); } /** * 完成工作单 * * @param reqJson * @param workTaskDto */ private void doFinish(JSONObject reqJson, WorkTaskDto workTaskDto) { //todo 完成任务 WorkTaskPo workTaskPo = new WorkTaskPo(); workTaskPo.setState(WorkPoolDto.STATE_COMPLETE); workTaskPo.setTaskId(workTaskDto.getTaskId()); workTaskPo.setStoreId(workTaskDto.getStoreId()); workTaskV1InnerServiceSMOImpl.updateWorkTask(workTaskPo); //todo 查询 工作单 WorkPoolDto workPoolDto = new WorkPoolDto(); workPoolDto.setWorkId(workTaskDto.getWorkId()); workPoolDto.setStoreId(workTaskDto.getStoreId()); List workPoolDtos = workPoolV1InnerServiceSMOImpl.queryWorkPools(workPoolDto); Assert.listOnlyOne(workPoolDtos, "工作单不存在"); String preStaffId = workPoolDtos.get(0).getCreateUserId(); String preStaffName = workPoolDtos.get(0).getCreateUserName(); WorkEventDto workEventDto = new WorkEventDto(); workEventDto.setStoreId(workTaskDto.getStoreId()); workEventDto.setTaskId(workTaskDto.getTaskId()); workEventDto.setWorkId(workTaskDto.getWorkId()); workEventDto.setOrderByDesc("desc"); List workEventDtos = workEventV1InnerServiceSMOImpl.queryWorkEvents(workEventDto); if(!ListUtil.isNull(workEventDtos)){ preStaffId = workEventDtos.get(0).getStaffId(); preStaffName = workEventDtos.get(0).getStaffName(); } //todo 保存事件 WorkEventPo workEventPo = new WorkEventPo(); workEventPo.setWorkId(workTaskDto.getWorkId()); workEventPo.setEventId(GenerateCodeFactory.getGeneratorId("11")); workEventPo.setCommunityId(workTaskDto.getCommunityId()); workEventPo.setRemark(reqJson.getString("auditMessage")); workEventPo.setStaffId(workTaskDto.getStaffId()); workEventPo.setPreStaffId(preStaffId); workEventPo.setPreStaffName(preStaffName); workEventPo.setStaffName(workTaskDto.getStaffName()); workEventPo.setStoreId(workTaskDto.getStoreId()); workEventPo.setTaskId(workTaskDto.getTaskId()); workEventV1InnerServiceSMOImpl.saveWorkEvent(workEventPo); //todo 查询 工单任务 WorkTaskDto tmpWorkTaskDto = new WorkTaskDto(); tmpWorkTaskDto.setWorkId(workTaskDto.getWorkId()); tmpWorkTaskDto.setStoreId(workTaskDto.getStoreId()); tmpWorkTaskDto.setState(WorkTaskDto.STATE_WAIT); int waitCount = workTaskV1InnerServiceSMOImpl.queryWorkTasksCount(tmpWorkTaskDto); WorkPoolPo workPoolPo = new WorkPoolPo(); workPoolPo.setWorkId(workTaskDto.getWorkId()); if (waitCount > 0) { workPoolPo.setState(WorkPoolDto.STATE_DOING); } else { workPoolPo.setState(WorkPoolDto.STATE_COMPLETE); } workPoolV1InnerServiceSMOImpl.updateWorkPool(workPoolPo); } private void doTransfor(JSONObject reqJson, WorkTaskDto workTaskDto) { UserDto userDto = new UserDto(); userDto.setUserId(reqJson.getString("staffId")); List userDtos = userV1InnerServiceSMOImpl.queryUsers(userDto); //todo 完成任务 WorkTaskPo workTaskPo = new WorkTaskPo(); workTaskPo.setState(WorkPoolDto.STATE_WAIT); workTaskPo.setTaskId(workTaskDto.getTaskId()); workTaskPo.setStoreId(workTaskDto.getStoreId()); workTaskPo.setStaffId(userDtos.get(0).getUserId()); workTaskPo.setStaffName(userDtos.get(0).getName()); workTaskV1InnerServiceSMOImpl.updateWorkTask(workTaskPo); //todo 查询 工作单 WorkPoolDto workPoolDto = new WorkPoolDto(); workPoolDto.setWorkId(workTaskDto.getWorkId()); workPoolDto.setStoreId(workTaskDto.getStoreId()); List workPoolDtos = workPoolV1InnerServiceSMOImpl.queryWorkPools(workPoolDto); Assert.listOnlyOne(workPoolDtos, "工作单不存在"); WorkEventPo workEventPo = new WorkEventPo(); workEventPo.setWorkId(workTaskDto.getWorkId()); workEventPo.setEventId(GenerateCodeFactory.getGeneratorId("11")); workEventPo.setCommunityId(workTaskDto.getCommunityId()); workEventPo.setRemark(reqJson.getString("auditMessage") + ";转单给" + userDtos.get(0).getName()); workEventPo.setStaffId(workTaskDto.getStaffId()); workEventPo.setPreStaffId(workPoolDtos.get(0).getCreateUserId()); workEventPo.setPreStaffName(workPoolDtos.get(0).getCreateUserName()); workEventPo.setStaffName(workTaskDto.getStaffName()); workEventPo.setStoreId(workTaskDto.getStoreId()); workEventPo.setTaskId(workTaskDto.getTaskId()); workEventV1InnerServiceSMOImpl.saveWorkEvent(workEventPo); } }