package org.jeecg.modules.tms.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.shiro.SecurityUtils; import org.jeecg.common.api.vo.Result; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.modules.flowable.apithird.business.entity.FlowMyBusiness; import org.jeecg.modules.flowable.apithird.service.FlowCallBackServiceI; import org.jeecg.modules.flowable.apithird.service.FlowCommonService; import org.jeecg.modules.flowable.service.IFlowDefinitionService; import org.jeecg.modules.flowable.service.IFlowTaskService; import org.jeecg.modules.system.service.ISysBusinessCodeRuleService; import org.jeecg.modules.tms.entity.ToolsLossBound; import org.jeecg.modules.tms.entity.ToolsLossBoundDetail; import org.jeecg.modules.tms.enums.OutBillStatus; import org.jeecg.modules.tms.mapper.ToolsLossBoundDetailMapper; import org.jeecg.modules.tms.mapper.ToolsLossBoundMapper; import org.jeecg.modules.tms.service.IToolsLossBoundDetailService; import org.jeecg.modules.tms.service.IToolsLossBoundService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.io.Serializable; import java.util.*; /** * @Description: 损耗单 * @Author: jeecg-boot * @Date: 2025-05-21 * @Version: V1.0 */ @Service("IToolsLossBoundService") public class ToolsLossBoundServiceImpl extends ServiceImpl implements IToolsLossBoundService, FlowCallBackServiceI { @Autowired private ToolsLossBoundMapper baseMapper; @Autowired private ToolsLossBoundDetailMapper baseDetailMapper; @Autowired private IToolsLossBoundDetailService toolsLossBoundDetailService; @Resource private FlowCommonService flowCommonService; @Resource private IFlowDefinitionService flowDefinitionService; @Autowired private IFlowTaskService flowTaskService; @Autowired private ISysBusinessCodeRuleService businessCodeRuleService; @Override public void delMain(String id) { baseDetailMapper.deleteByMainId(id); baseMapper.deleteById(id); } @Override public void delBatchMain(Collection idList) { for (Serializable id : idList) { baseDetailMapper.deleteByMainId(id.toString()); baseMapper.deleteById(id); } } @Override public void addTotal(ToolsLossBound toolsLossBound) { LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); if (loginUser != null){ toolsLossBound.setHandler(loginUser.getId()); } toolsLossBound.setOrderCode(businessCodeRuleService.generateBusinessCodeSeq("LossBound")); toolsLossBound.setOrderStatus(OutBillStatus.DRAFT.getValue()); save(toolsLossBound); List detailList = toolsLossBound.getToolsLossBoundDetailList(); List newDetailList = new ArrayList<>(); if (CollectionUtils.isNotEmpty(detailList)) { detailList.forEach(item -> { item.setLossBoundId(toolsLossBound.getId()); newDetailList.add(item); }); toolsLossBoundDetailService.saveBatch(newDetailList); } } @Override public IPage queryPageList(Page page, Map parameterMap) { QueryWrapper queryWrapper = Wrappers.query(); String[] orderCode = parameterMap.get("orderCode"); if (orderCode != null && orderCode.length > 0) { queryWrapper.like("t.order_code", orderCode[0]); } String[] statuses = parameterMap.get("orderStatus"); if (statuses != null && statuses.length > 0) { queryWrapper.eq("t.order_status", statuses[0]); } return this.baseMapper.queryPageList(page, queryWrapper); } @Override public void editTotal(ToolsLossBound toolsLossBound) { //删除所有明细 toolsLossBoundDetailService.remove(new LambdaQueryWrapper() .eq(ToolsLossBoundDetail::getLossBoundId, toolsLossBound.getId())); ToolsLossBound toolsLossBound1 = BeanUtil.copyProperties(toolsLossBound, ToolsLossBound.class); this.baseMapper.updateById(toolsLossBound1); List detailList = CollectionUtil.newArrayList(); toolsLossBound.getToolsLossBoundDetailList().forEach(item -> { item.setLossBoundId(toolsLossBound1.getId()); detailList.add(item); }); toolsLossBoundDetailService.saveBatch(detailList); } @Override public boolean submintOrder(String id) { ToolsLossBound toolsLossBound = this.getById(id); if (toolsLossBound == null) { return false; } else { toolsLossBound.setReviewer(toolsLossBound.getReviewer()); flowCommonService.initActBusiness("报损单号:" + toolsLossBound.getOrderCode() + ";报损人: " + toolsLossBound.getLosser() + ";进行报损", toolsLossBound.getId(), "IToolsStocktakingBoundService", "tools_Loss_Approval", null); Map variables = new HashMap<>(); variables.put("dataId", toolsLossBound.getId()); if (StrUtil.isEmpty(toolsLossBound.getReviewer())) { variables.put("organization", "新增工具报损单默认启动流程"); variables.put("comment", "新增工具报损单默认启动流程"); } else { variables.put("organization", toolsLossBound.getLossReason()); variables.put("comment", toolsLossBound.getLossReason()); } variables.put("proofreading", true); List usernames = new ArrayList<>(); usernames.add(toolsLossBound.getReviewer()); variables.put("NextAssignee", usernames); Result result = flowDefinitionService.startProcessInstanceByKey("tools_Loss_Approval", variables); if (result != null) { toolsLossBound.setLossTime(new Date()); toolsLossBound.setOrderStatus(OutBillStatus.SUBMITTED.getValue()); //保存工单 baseMapper.updateById(toolsLossBound); return result.isSuccess(); } return true; } } @Override public void afterFlowHandle(FlowMyBusiness business) { business.getTaskNameId();//接下来审批的节点 business.getValues();//前端传进来的参数 business.getActStatus(); } @Override public Object getBusinessDataById(String dataId) { return this.getById(dataId); } @Override public Map flowValuesOfTask(String taskNameId, Map values) { return null; } @Override public List flowCandidateUsernamesOfTask(String taskNameId, Map values) { Object object = values.get("NextAssignee"); return (List) object; } }