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.core.domain.model.DateRange; import com.project.common.enums.OrderPre; import com.project.common.exception.base.BaseException; 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.EnforceComplaintLogBo; import com.project.enforce.domain.bo.editBo.EnforceOrderBo; import com.project.enforce.domain.bo.editBo.OrderComplaintBo; import com.project.enforce.domain.bo.editBo.OrderResultBo; import com.project.enforce.domain.bo.queryBo.EnforceOrderQueryBo; import com.project.enforce.domain.bo.queryBo.OrderCheckedQueryBo; import com.project.enforce.domain.vo.EnforceDistinctVo; 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.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.Collection; import java.util.LinkedList; 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; private final YPSmsService smsService; private final EnforceOrderMapper orderMapper; /** * 通用列表-无权限 * @param bo 参数 * @return 列表 */ @Override public List queryCommonList(EnforceOrderQueryBo bo) { QueryWrapper qw = getQw(bo); List list = this.list(qw); return Convert.toList(EnforceOrderVo.class , list); } @Override public Integer getDistinctCompanyNum() { return orderMapper.getDistinctCompanyNum(); } /** * 企业确认执法单 * @param orderId 订单id * @return 结果 */ @Override @Transactional public Boolean confirm(Long orderId) { EnforceOrder order = this.getById(orderId); if (order.getOrderStatus()!=4){ throw new BaseException("请待执法部门上报结果后确认!"); } order.setOrderStatus(5); order.setConfirmTime(DateUtils.getNowDate()); return this.updateById(order); } @Override @Transactional public Integer executeEnforceOrderWarn() { List updList = new LinkedList<>(); //同一天重复执法 List list =baseMapper.selectDistinctCheckDeptIdAndCompanyId(); if (StringUtils.isNotEmpty(list)){ for (EnforceDistinctVo distinctVo : list) { List orderList = this.list(lq() .eq(EnforceOrder::getCompanyId, distinctVo.getCompanyId()) .eq(EnforceOrder::getCheckDeptId, distinctVo.getCheckDeptId()) .like(EnforceOrder::getApplyTime, distinctVo.getApplyTimeStr()) .orderByDesc(EnforceOrder::getApplyTime) ); if (StringUtils.isNotEmpty(orderList)){ List enforceOrders = orderList.subList(0, orderList.size() - 1); enforceOrders.forEach(order->{order.setWarnStatus(1);order.setWarnReason("同一天内对同一企业重复执法");}); updList.addAll(enforceOrders); } } } if (StringUtils.isNotEmpty(updList)){ this.updateBatchById(updList); } return updList.size(); } public static void main(String[] args) { DateRange todayRange = DateUtils.getTodayRange(); System.out.println(todayRange); } /** * 企业执法单列表 * @param bo 参数 * @return 列表 */ @Override public List queryCompanyList(EnforceOrderQueryBo bo) { QueryWrapper qw = getQw(bo); qw.ge("order_status",2); List list = this.list(qw); return Convert.toList(EnforceOrderVo.class , list); } /** * 执法申请单列表 * @param bo 参数 * @return 列表 */ @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); } /** * 执法执行单列表 * @param bo 参数 * @return 列表 */ @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); } /** * 待审核列表 * @param bo 参数 * @return 列表 */ @Override public List queryCheckList(EnforceOrderQueryBo bo) { SysUser loginUser = userService.selectUserById(SecurityUtils.getUserId()); 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); } /** * 审批记录列表 * @param bo 参数 * @return 列表 */ @Override public List queryCheckedList(OrderCheckedQueryBo bo) { bo.setUserId(SecurityUtils.getUserId()); return this.baseMapper.selectCheckedList(bo); } /** * 信息公式列表 * @return 列表 */ @Override public List showList() { List list = this.list(lq() .eq(EnforceOrder::getIsShow, 1) .eq(EnforceOrder::getOrderStatus, 4) ); return Convert.toList(EnforceOrderVo.class, list); } /** * id查询 */ @Override 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)){ EnforceEvaluateVo evaluateVo = Convert.convert(EnforceEvaluateVo.class, one); try { List questions = JsonUtils.jsonToList(questionStatic, EnforceEvaluateQuestion.class); evaluateVo.setQuestionList(questions); } catch (Exception e) { throw new BaseException("评价问券解析异常!"); } vo.setEvaluateVo(evaluateVo); } } } 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)){ int checkLevel = Integer.parseInt(phones.get(0)); add.setCheckLevel(checkLevel); phones.remove(0); 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)) { smsService.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 getCheckPhonesSimple(checkLevel, applyDeptId); } @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.getApplyDeptName(),order.getApplyTime(), null)); } if (StringUtils.isNotEmpty(checkLogs)){ for (EnforceCheckLog checkLog : checkLogs) { if (checkLog.getCheckStatus()>0){ vos.add(new OrderNodeVo("审批通过",checkLog.getCheckUser(),userService.getDeptNameByUserId(checkLog.getCheckId()),checkLog.getCheckTime(), null)); } else { vos.add(new OrderNodeVo("审批拒绝",checkLog.getCheckUser(),userService.getDeptNameByUserId(checkLog.getCheckId()),checkLog.getCheckTime(), checkLog.getCheckReason())); } } } if (order.getInTime()!=null){ vos.add(new OrderNodeVo("扫码入企",order.getExecuteUser(),order.getExecuteDeptName(),order.getInTime(), null)); } if (order.getExecuteTime()!=null){ vos.add(new OrderNodeVo("结果上报",order.getExecuteUser(),order.getExecuteDeptName(),order.getExecuteTime(), null)); } if (order.getConfirmTime()!=null){ vos.add(new OrderNodeVo("企业确认",order.getCompanyUser(),order.getCompanyName(),order.getConfirmTime(), 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); if (order.getOrderStatus()<2){ throw new BaseException("执法单还未审批!"); } if (order.getOrderStatus()>2){ throw new BaseException("执法单已确认执法!"); } order.setOrderStatus(3); SysUser user = userService.selectUserById(SecurityUtils.getUserId()); order.setExecuteId(user.getUserId()); order.setExecuteUser(user.getNickName()); order.setExecutePhone(user.getPhonenumber()); 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()) .eq( EnforceOrder::getOrderId, resultBo.getOrderId()) ); } @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()); if (order.getOrderStatus()!=4){ throw new BaseException("执法单未上报执法结果!"); } //添加投诉记录 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()); } //------------------------------------------------------------------------------------- //保存前校验 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()); qw.ge(StringUtils.isNotEmpty(bo.getBeginTime()), "in_time", bo.getBeginTime()); qw.le(StringUtils.isNotEmpty(bo.getEndTime()), "in_time", bo.getEndTime()); 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 getCheckPhonesSimple(Integer checkLevel, Long deptId) { if (checkLevel==3){ return null; } String checkKey = "check_enforce_"; List phones = userService.getPhonesByRoleKey(checkKey + checkLevel, deptId); if (StringUtils.isNotEmpty(phones)){ phones.add(0,checkLevel.toString()); return phones; } checkLevel ++; return getCheckPhonesSimple(checkLevel, deptId); } }