package com.project.enforce.service.impl; import cn.hutool.core.convert.Convert; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.project.common.annotation.DataScope; import com.project.common.core.domain.entity.SysUser; import com.project.common.enums.OrderPre; import com.project.common.exception.base.BaseException; import com.project.common.sms.YPSmsApi; import com.project.common.utils.DateUtils; import com.project.common.utils.JsonUtils; import com.project.common.utils.SecurityUtils; import com.project.common.utils.StringUtils; import com.project.enforce.domain.*; import com.project.enforce.domain.bo.editBo.*; import com.project.enforce.domain.bo.queryBo.EnforceOrderQueryBo; import com.project.enforce.domain.bo.queryBo.OrderCheckedQueryBo; import com.project.enforce.domain.vo.EnforceEvaluateVo; import com.project.enforce.domain.vo.EnforceOrderVo; import com.project.enforce.domain.vo.OrderNodeVo; import com.project.enforce.mapper.EnforceOrderMapper; import com.project.enforce.service.*; import com.project.system.service.ISysDeptService; import com.project.system.service.ISysOrderNoService; import com.project.system.service.ISysUserService; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Collection; import java.util.List; /** * 执法单Service业务层处理 * * @author manton */ @Service @RequiredArgsConstructor(onConstructor_ = @Autowired) public class EnforceOrderServiceImpl extends ServiceImpl implements IEnforceOrderService { private final ISysUserService userService; private final ISysDeptService deptService; private final ISysOrderNoService orderNoService; private final IEnforcePeerService peerService; private final IEnforceCheckLogService checkLogService; private final IEnforceComplaintLogService complaintLogService; private final IEnforceEvaluateLogService evaluateLogService; @Override//列表查询 @DataScope(deptAlias = "apply_dept_id", userAlias = "apply_id") public List queryList(EnforceOrderQueryBo bo) { QueryWrapper qw = getQw(bo); qw.apply(StringUtils.isNotEmpty(bo.getParams().get("dataScope").toString()), bo.getParams().get("dataScope").toString());//数据权限控制 List list = this.list(qw); return Convert.toList(EnforceOrderVo.class , list); } @Override//执法上报列表 @DataScope(deptAlias = "execute_dept_id", userAlias = "execute_id") public List getExecuteList(EnforceOrderQueryBo bo) { QueryWrapper qw = getQw(bo); qw.apply(StringUtils.isNotEmpty(bo.getParams().get("dataScope").toString()), bo.getParams().get("dataScope").toString());//数据权限控制 List list = this.list(qw); return Convert.toList(EnforceOrderVo.class , list); } @Override//待审核列表 public List queryCheckList(EnforceOrderQueryBo bo) { SysUser loginUser = SecurityUtils.getLoginUser().getUser(); bo.setCheckIds(loginUser.getPhonenumber()); List deptIds = deptService.getApplyDeptIdsByLoginUserId(loginUser.getUserId()); if (StringUtils.isNotEmpty(deptIds)){ bo.setApplyDeptIds(deptIds); } else { bo.setApplyDeptIds(null); } return this.baseMapper.selectCheckList(bo); } @Override public List queryCheckedList(OrderCheckedQueryBo bo) { bo.setUserId(SecurityUtils.getUserId()); return this.baseMapper.selectCheckedList(bo); } @Override//信息公式列表 public List showList() { List list = this.list(lq() .eq(EnforceOrder::getIsShow, 1) .eq(EnforceOrder::getOrderStatus, 4) ); return Convert.toList(EnforceOrderVo.class, list); } @Override//id查询 public EnforceOrderVo queryById(Long orderId) { EnforceOrder db = this.baseMapper.selectById(orderId); EnforceOrderVo vo = Convert.convert(EnforceOrderVo.class, db); List peers = peerService.list(peerService.lq().eq(EnforcePeer::getOrderId, orderId).eq(EnforcePeer::getPeerType,2)); vo.setPeers(peers); if (db.getIsEva()==1){ EnforceEvaluateLog one = evaluateLogService.getOne(evaluateLogService.lq().eq(EnforceEvaluateLog::getOrderId, orderId)); if (one!=null){ String questionStatic = one.getQuestionStatic(); if (StringUtils.isNotEmpty(questionStatic)){ try { EnforceEvaluateVo evaluateVo = JsonUtils.jsonToPojo(questionStatic, EnforceEvaluateVo.class); vo.setEvaluateVo(evaluateVo); } catch (Exception e) { throw new BaseException("评价问券解析异常!"); } } } } return vo; } @Override//添加 @Transactional public Boolean insertByBo(EnforceOrderBo bo) { EnforceOrder add = Convert.convert(EnforceOrder.class, bo); add.setCheckLevel(0); validEntityBeforeSave(add); List phones = getCheckPhones(add.getCheckLevel(), add.getApplyDeptId()); if (StringUtils.isNotEmpty(phones)){ String checkPhones = StringUtils.join(phones, ","); add.setCheckIds(checkPhones); } this.save(add); bo.getPeers().add(0,new EnforcePeer() .setPeerType(1) .setPeerId(add.getApplyId()) .setPeerUser(add.getApplyUser()) .setPeerPhone(add.getApplyPhone()) .setPeerDeptId(add.getApplyDeptId()) .setPeerDeptName(add.getApplyDeptName()) ); //处理执法人员信息 for (EnforcePeer peer : bo.getPeers()) { peer.setOrderId(add.getOrderId()); peer.setPeerDeptName(deptService.getDeptAllName(peer.getPeerDeptId())); } boolean savePeers = peerService.saveOrUpdateBatch(bo.getPeers()); if (savePeers && StringUtils.isNotEmpty(phones)) { sendApplyMsg(phones, add.getApplyUser()); } return savePeers; } @Override//修改 @Transactional public Boolean updateByBo(EnforceOrderBo bo) { EnforceOrder update = Convert.convert(EnforceOrder.class, bo); validEntityBeforeSave(update); return this.updateById(update); } @Override//删除 @Transactional public Boolean deleteByIds(Collection ids) { //做一些业务上的校验,判断是否需要校验 return this.removeByIds(ids); } @Override public List getCheckPhones(Integer checkLevel, Long applyDeptId) { return getCheckPhones(checkLevel, applyDeptId, 0); } @Override public List orderNodeList(Long orderId) { List vos = new ArrayList<>(); EnforceOrder order = this.getById(orderId); List checkLogs = checkLogService.list(checkLogService.lq() .eq(EnforceCheckLog::getOrderId, orderId).orderByAsc(EnforceCheckLog::getCheckTime) ); if (order.getApplyTime()!=null){ vos.add(new OrderNodeVo("提交申请",order.getApplyUser(),order.getApplyTime(), null)); } if (StringUtils.isNotEmpty(checkLogs)){ for (EnforceCheckLog checkLog : checkLogs) { if (checkLog.getCheckStatus()>0){ vos.add(new OrderNodeVo("审批通过",checkLog.getCheckUser(),checkLog.getCheckTime(), null)); } else { vos.add(new OrderNodeVo("审批拒绝",checkLog.getCheckUser(),checkLog.getCheckTime(), checkLog.getCheckReason())); } } } if (order.getInTime()!=null){ vos.add(new OrderNodeVo("扫码入企",order.getExecuteUser(),order.getInTime(), null)); } if (order.getExecuteTime()!=null){ vos.add(new OrderNodeVo("结果上报",order.getExecuteUser(),order.getExecuteTime(), null)); } return vos; } @Override//扫码结果 public List getScanList(String companyCode) { Long userId = SecurityUtils.getUserId(); return this.baseMapper.selectScanList(companyCode, userId); } @Override//确认扫码执法 @Transactional public Boolean doScanOrder(Long orderId) { EnforceOrder order = this.getById(orderId); order.setOrderStatus(3); SysUser user = SecurityUtils.getLoginUser().getUser(); order.setExecuteId(user.getUserId()); order.setExecuteUser(user.getNickName()); order.setExecutePhone(user.getRecommendPhone()); order.setExecuteDeptId(user.getDeptId()); order.setExecuteDeptName(deptService.getDeptAllName(user.getDeptId())); order.setInTime(DateUtils.getNowDate()); return this.updateById(order); } @Override//上报结果 @Transactional public Boolean doResultOrder(OrderResultBo resultBo) { if (resultBo.getRegionStatus()==null){ throw new BaseException("请填写执法结果"); } if (StringUtils.isEmpty(resultBo.getRegionReason())){ throw new BaseException("请填写执法结果说明"); } return this.update(lu() .set(resultBo.getRegionStatus()!=null, EnforceOrder::getRegionStatus, resultBo.getRegionStatus()) .set(StringUtils.isNotEmpty(resultBo.getRegionReason()), EnforceOrder::getRegionReason, resultBo.getRegionReason()) .set(StringUtils.isNotEmpty(resultBo.getRegionImgs()), EnforceOrder::getRegionImgs, resultBo.getRegionImgs()) .set(StringUtils.isNotEmpty(resultBo.getRegionVideos()), EnforceOrder::getRegionVideos, resultBo.getRegionVideos()) .set( EnforceOrder::getOrderStatus, 4) .set( EnforceOrder::getExecuteTime, DateUtils.getNowDate()) ); } @Override//执法单投诉 @Transactional public Boolean orderComplaint(OrderComplaintBo bo) { if (bo.getOrderId()==null){ throw new BaseException("请选择要投诉的执法单!"); } if (StringUtils.isEmpty(bo.getComplaintType())){ throw new BaseException("请选择要投诉类型!"); } if (StringUtils.isEmpty(bo.getComplaintReason())){ throw new BaseException("请填写投诉内容!"); } EnforceOrder order = this.getById(bo.getOrderId()); //添加投诉记录 EnforceComplaintLogBo complaintLogBo = Convert.convert(EnforceComplaintLogBo.class, order); complaintLogBo.setComplaintType(bo.getComplaintType()); complaintLogBo.setComplaintReason(bo.getComplaintReason()); Boolean addLog = complaintLogService.insertByBo(complaintLogBo); if (addLog){ return this.update(lu() .set(EnforceOrder::getIsComplaint,1) .set(EnforceOrder::getComplaintType,bo.getComplaintType()) .set(EnforceOrder::getComplaintReason,bo.getComplaintReason()) .eq(EnforceOrder::getOrderId,bo.getOrderId()) ); } return false; } @Override//执法单投诉节点 public List orderComplaintNodeList(Long orderId) { EnforceComplaintLog log = complaintLogService.getOne(complaintLogService.lq().eq(EnforceComplaintLog::getOrderId, orderId)); if (log==null){ return null; } return complaintLogService.orderNodeList(log.getId()); } //------------------------------------------------------------------------------------- /** * 发送审批短信 * @param phones 手机号 * @param applyUser 申请人 */ @Async public void sendApplyMsg(List phones, String applyUser) { String applyMsg = StringUtils.format(StringUtils.format(YPSmsApi.APPLY_TMP, applyUser)); phones.forEach(phone-> YPSmsApi.sendSms(phone, applyMsg)); } //保存前校验 private void validEntityBeforeSave(EnforceOrder entity) { if (entity.getOrderId()==null){ String orderNo = orderNoService.getOrderNo(OrderPre.ZFD.getIndex()); entity.setOrderNo(orderNo); entity.setCheckDeptId(deptService.getCheckDeptIdByLoginDeptId(entity.getApplyDeptId())); entity.setApplyTime(DateUtils.getNowDate()); } if (StringUtils.isEmpty(entity.getApplyDeptName()) && entity.getApplyDeptId()!=null){ entity.setApplyDeptName(deptService.getDeptAllName(entity.getApplyDeptId())); } if (StringUtils.isEmpty(entity.getExecuteDeptName()) && entity.getExecuteDeptId()!=null){ entity.setExecuteDeptName(deptService.getDeptAllName(entity.getExecuteDeptId())); } if (StringUtils.isEmpty(entity.getCheckDeptName()) && entity.getCheckDeptId()!=null){ entity.setCheckDeptName(deptService.getDeptAllName(entity.getCheckDeptId())); } } //获取查询参数 private QueryWrapper getQw(EnforceOrderQueryBo bo) { QueryWrapper qw = Wrappers.query(); qw.eq(StringUtils.isNotEmpty(bo.getOrderNo()), "order_no", bo.getOrderNo()); qw.eq(bo.getCompanyId() != null, "company_id", bo.getCompanyId()); qw.like(StringUtils.isNotEmpty(bo.getCompanyName()), "company_name", bo.getCompanyName()); qw.eq(StringUtils.isNotEmpty(bo.getCompanyCode()), "company_code", bo.getCompanyCode()); qw.eq(StringUtils.isNotEmpty(bo.getCompanyUser()), "company_user", bo.getCompanyUser()); qw.eq(StringUtils.isNotEmpty(bo.getCompanyPhone()), "company_phone", bo.getCompanyPhone()); qw.eq(StringUtils.isNotEmpty(bo.getCompanyAddress()), "company_address", bo.getCompanyAddress()); qw.eq(StringUtils.isNotEmpty(bo.getRegionCode()), "region_code", bo.getRegionCode()); qw.like(StringUtils.isNotEmpty(bo.getRegionName()), "region_name", bo.getRegionName()); qw.like(StringUtils.isNotEmpty(bo.getEnforceReason()), "enforce_reason", bo.getEnforceReason()); qw.like(StringUtils.isNotEmpty(bo.getEnforceContent()), "enforce_content", bo.getEnforceContent()); qw.eq(StringUtils.isNotEmpty(bo.getEnforceType()), "enforce_type", bo.getEnforceType()); qw.eq(bo.getApplyId() != null, "apply_id", bo.getApplyId()); qw.eq(StringUtils.isNotEmpty(bo.getApplyUser()), "apply_user", bo.getApplyUser()); qw.eq(StringUtils.isNotEmpty(bo.getApplyPhone()), "apply_phone", bo.getApplyPhone()); qw.eq(bo.getApplyDeptId() != null, "apply_dept_id", bo.getApplyDeptId()); qw.like(StringUtils.isNotEmpty(bo.getApplyDeptName()), "apply_dept_name", bo.getApplyDeptName()); qw.eq(bo.getApplyTime() != null, "apply_time", bo.getApplyTime()); qw.eq(bo.getPlanTime() != null, "plan_time", bo.getPlanTime()); qw.eq(bo.getInTime() != null, "in_time", bo.getInTime()); qw.eq(bo.getUserNum() != null, "user_num", bo.getUserNum()); qw.eq(bo.getWarnStatus() != null, "warn_status", bo.getWarnStatus()); qw.eq(StringUtils.isNotEmpty(bo.getWarnReason()), "warn_reason", bo.getWarnReason()); qw.eq(bo.getOrderStatus() != null, "order_status", bo.getOrderStatus()); qw.eq(bo.getCheckDeptId() != null, "check_dept_id", bo.getCheckDeptId()); qw.like(StringUtils.isNotEmpty(bo.getCheckDeptName()), "check_dept_name", bo.getCheckDeptName()); qw.eq(bo.getCheckStatus() != null, "check_status", bo.getCheckStatus()); qw.eq(StringUtils.isNotEmpty(bo.getCheckReason()), "check_reason", bo.getCheckReason()); qw.eq(bo.getCheckLevel() != null, "check_level", bo.getCheckLevel()); qw.eq(bo.getExecuteId() != null, "execute_id", bo.getExecuteId()); qw.eq(StringUtils.isNotEmpty(bo.getExecuteUser()), "execute_user", bo.getExecuteUser()); qw.eq(StringUtils.isNotEmpty(bo.getExecutePhone()), "execute_phone", bo.getExecutePhone()); qw.eq(bo.getExecuteDeptId() != null, "execute_dept_id", bo.getExecuteDeptId()); qw.like(StringUtils.isNotEmpty(bo.getExecuteDeptName()), "execute_dept_name", bo.getExecuteDeptName()); qw.eq(bo.getExecuteTime() != null, "execute_time", bo.getExecuteTime()); qw.eq(bo.getRegionStatus() != null, "region_status", bo.getRegionStatus()); qw.eq(StringUtils.isNotEmpty(bo.getRegionReason()), "region_reason", bo.getRegionReason()); qw.eq(StringUtils.isNotEmpty(bo.getRegionImgs()), "region_imgs", bo.getRegionImgs()); qw.eq(StringUtils.isNotEmpty(bo.getRegionVideos()), "region_videos", bo.getRegionVideos()); qw.eq(bo.getIsNoticeCompany() != null, "is_notice_company", bo.getIsNoticeCompany()); qw.eq(bo.getIsShow() != null, "is_show", bo.getIsShow()); qw.eq(bo.getIsEva() != null, "is_eva", bo.getIsEva()); qw.eq(bo.getTotalScore() != null, "total_score", bo.getTotalScore()); if (StringUtils.isNotEmpty(bo.getIsAsc()) && StringUtils.isNotEmpty(bo.getOrderByColumn())){ if ("acs".equals(bo.getIsAsc())) { qw.orderByAsc(bo.getOrderByColumn()); } else if ("desc".equals(bo.getIsAsc())) { qw.orderByDesc(bo.getOrderByColumn()); } } return qw; } /** * 获取审批人id * @param checkLevel 审批级别:默认0 * @param deptId 申请部门id */ private List getCheckPhones(Integer checkLevel, Long deptId, int current) { if (checkLevel==3){ if (current==1){ return null; } checkLevel = 0; deptId = deptService.selectDeptById(deptId).getParentId(); current++; getCheckPhones(checkLevel, deptId, current); } checkLevel++; String checkKey = "check_enforce_"; List phones = userService.getPhonesByRoleKey(checkKey + checkLevel, deptId); if (StringUtils.isNotEmpty(phones)){ return phones; } return getCheckPhones(checkLevel, deptId, current); } }