| | |
| | | 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.sms.YPSmsApi; |
| | | import com.project.common.utils.DateUtils; |
| | | import com.project.common.utils.SecurityUtils; |
| | | import com.project.common.utils.StringUtils; |
| | | import com.project.enforce.domain.EnforceCheckLog; |
| | | import com.project.enforce.domain.EnforceOrder; |
| | | import com.project.enforce.domain.EnforcePeer; |
| | | import com.project.common.utils.*; |
| | | 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.IEnforceCheckLogService; |
| | | import com.project.enforce.service.IEnforceOrderService; |
| | | import com.project.enforce.service.IEnforcePeerService; |
| | | 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.LinkedList; |
| | | import java.util.List; |
| | | |
| | | /** |
| | |
| | | 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; |
| | | |
| | | @Override//列表查询 |
| | | /** |
| | | * 通用列表-无权限 |
| | | * @param bo 参数 |
| | | * @return 列表 |
| | | */ |
| | | @Override |
| | | public List<EnforceOrderVo> queryCommonList(EnforceOrderQueryBo bo) |
| | | { |
| | | QueryWrapper<EnforceOrder> qw = getQw(bo); |
| | | |
| | | |
| | | List<EnforceOrder> 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<EnforceOrder> updList = new LinkedList<>(); |
| | | //同一天重复执法 |
| | | List<EnforceDistinctVo> list =baseMapper.selectDistinctCheckDeptIdAndCompanyId(); |
| | | if (StringUtils.isNotEmpty(list)){ |
| | | for (EnforceDistinctVo distinctVo : list) { |
| | | List<EnforceOrder> 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<EnforceOrder> 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<EnforceOrderVo> queryCompanyList(EnforceOrderQueryBo bo) |
| | | { |
| | | QueryWrapper<EnforceOrder> qw = getQw(bo); |
| | | qw.ge("order_status",2); |
| | | List<EnforceOrder> list = this.list(qw); |
| | | List<EnforceOrderVo> vos = Convert.toList(EnforceOrderVo.class, list); |
| | | vos.forEach(SensitiveUtil::desensitize); |
| | | return vos; |
| | | } |
| | | |
| | | /** |
| | | * 执法申请单列表 |
| | | * @param bo 参数 |
| | | * @return 列表 |
| | | */ |
| | | @Override |
| | | @DataScope(deptAlias = "apply_dept_id", userAlias = "apply_id") |
| | | public List<EnforceOrderVo> queryList(EnforceOrderQueryBo bo) |
| | | { |
| | |
| | | return Convert.toList(EnforceOrderVo.class , list); |
| | | } |
| | | |
| | | @Override//执法上报列表 |
| | | /** |
| | | * 执法执行单列表 |
| | | * @param bo 参数 |
| | | * @return 列表 |
| | | */ |
| | | @Override |
| | | @DataScope(deptAlias = "execute_dept_id", userAlias = "execute_id") |
| | | public List<EnforceOrderVo> getExecuteList(EnforceOrderQueryBo bo) { |
| | | QueryWrapper<EnforceOrder> qw = getQw(bo); |
| | |
| | | return Convert.toList(EnforceOrderVo.class , list); |
| | | } |
| | | |
| | | @Override//待审核列表 |
| | | /** |
| | | * 待审核列表 |
| | | * @param bo 参数 |
| | | * @return 列表 |
| | | */ |
| | | @Override |
| | | public List<EnforceOrderVo> queryCheckList(EnforceOrderQueryBo bo) |
| | | { |
| | | SysUser loginUser = SecurityUtils.getLoginUser().getUser(); |
| | | SysUser loginUser = userService.selectUserById(SecurityUtils.getUserId()); |
| | | bo.setCheckIds(loginUser.getPhonenumber()); |
| | | List<Long> deptIds = deptService.getApplyDeptIdsByLoginUserId(loginUser.getUserId()); |
| | | if (StringUtils.isNotEmpty(deptIds)){ |
| | | bo.setApplyDeptIds(deptIds); |
| | | } else { |
| | | bo.setApplyDeptIds(null); |
| | | } |
| | | // List<Long> 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<EnforceOrderVo> queryCheckedList(OrderCheckedQueryBo bo) |
| | | { |
| | |
| | | return this.baseMapper.selectCheckedList(bo); |
| | | } |
| | | |
| | | @Override//信息公式列表 |
| | | |
| | | /** |
| | | * 信息公式列表 |
| | | * @return 列表 |
| | | */ |
| | | @Override |
| | | public List<EnforceOrderVo> showList() |
| | | { |
| | | List<EnforceOrder> list = this.list(lq().eq(EnforceOrder::getIsShow, 1)); |
| | | return Convert.toList(EnforceOrderVo.class, list); |
| | | List<EnforceOrder> list = this.list(lq() |
| | | .eq(EnforceOrder::getIsShow, 1) |
| | | .ge(EnforceOrder::getOrderStatus, 4) |
| | | ); |
| | | List<EnforceOrderVo> vos = Convert.toList(EnforceOrderVo.class, list); |
| | | vos.forEach(SensitiveUtil::desensitize); |
| | | return vos; |
| | | } |
| | | |
| | | @Override//id查询 |
| | | /** |
| | | * id查询 |
| | | */ |
| | | @Override |
| | | public EnforceOrderVo queryById(Long orderId) |
| | | { |
| | | EnforceOrder db = this.baseMapper.selectById(orderId); |
| | | EnforceOrderVo vo = Convert.convert(EnforceOrderVo.class, db); |
| | | List<EnforcePeer> 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<EnforceEvaluateQuestion> questions = JsonUtils.jsonToList(questionStatic, EnforceEvaluateQuestion.class); |
| | | evaluateVo.setQuestionList(questions); |
| | | } catch (Exception e) { |
| | | throw new BaseException("评价问券解析异常!"); |
| | | } |
| | | vo.setEvaluateVo(evaluateVo); |
| | | } |
| | | } |
| | | } |
| | | SensitiveUtil.desensitize(vo); |
| | | return vo; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 新增 |
| | | */ |
| | | @Override//添加 |
| | | @Transactional |
| | | public Boolean insertByBo(EnforceOrderBo bo) |
| | |
| | | validEntityBeforeSave(add); |
| | | List<String> 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); |
| | | } |
| | |
| | | } |
| | | boolean savePeers = peerService.saveOrUpdateBatch(bo.getPeers()); |
| | | if (savePeers && StringUtils.isNotEmpty(phones)) { |
| | | sendApplyMsg(phones, add.getApplyUser()); |
| | | smsService.sendApplyMsg(phones, add.getApplyUser()); |
| | | } |
| | | return savePeers; |
| | | } |
| | | |
| | | /** |
| | | * 修改 |
| | | */ |
| | | @Override//修改 |
| | | @Transactional |
| | | public Boolean updateByBo(EnforceOrderBo bo) |
| | |
| | | return this.updateById(update); |
| | | } |
| | | |
| | | /** |
| | | * 删除 |
| | | */ |
| | | @Override//删除 |
| | | @Transactional |
| | | public Boolean deleteByIds(Collection<Long> ids) |
| | |
| | | return this.removeByIds(ids); |
| | | } |
| | | |
| | | /** |
| | | * 获取下一级审批人电话 |
| | | */ |
| | | @Override |
| | | public List<String> getCheckPhones(Integer checkLevel, Long applyDeptId) |
| | | { |
| | | return getCheckPhones(checkLevel, applyDeptId, 0); |
| | | return getCheckPhonesSimple(checkLevel, applyDeptId); |
| | | } |
| | | |
| | | @Override |
| | |
| | | .eq(EnforceCheckLog::getOrderId, orderId).orderByAsc(EnforceCheckLog::getCheckTime) |
| | | ); |
| | | if (order.getApplyTime()!=null){ |
| | | vos.add(new OrderNodeVo("提交申请",order.getApplyUser(),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(),checkLog.getCheckTime(), null)); |
| | | vos.add(new OrderNodeVo("审批通过",checkLog.getCheckUser(),userService.getDeptNameByUserId(checkLog.getCheckId()),checkLog.getCheckTime(), null)); |
| | | } else { |
| | | vos.add(new OrderNodeVo("审批拒绝",checkLog.getCheckUser(),checkLog.getCheckTime(), checkLog.getCheckReason())); |
| | | 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.getInTime(), null)); |
| | | vos.add(new OrderNodeVo("扫码入企",order.getExecuteUser(),order.getExecuteDeptName(),order.getInTime(), null)); |
| | | } |
| | | if (order.getExecuteTime()!=null){ |
| | | vos.add(new OrderNodeVo("结果上报",order.getExecuteUser(),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; |
| | | } |
| | | |
| | |
| | | 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 = SecurityUtils.getLoginUser().getUser(); |
| | | SysUser user = userService.selectUserById(SecurityUtils.getUserId()); |
| | | order.setExecuteId(user.getUserId()); |
| | | order.setExecuteUser(user.getNickName()); |
| | | order.setExecutePhone(user.getRecommendPhone()); |
| | | order.setExecutePhone(user.getPhonenumber()); |
| | | order.setExecuteDeptId(user.getDeptId()); |
| | | order.setExecuteDeptName(deptService.getDeptAllName(user.getDeptId())); |
| | | order.setInTime(DateUtils.getNowDate()); |
| | | return this.updateById(order); |
| | | } |
| | | |
| | | @Override |
| | | @Override//上报结果 |
| | | @Transactional |
| | | public Boolean doResultOrder(OrderResultBo resultBo) |
| | | { |
| | | if (resultBo.getRegionStatus()==null){ |
| | |
| | | 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.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<OrderNodeVo> 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<String> 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) |
| | |
| | | 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()); |
| | |
| | | * @param checkLevel 审批级别:默认0 |
| | | * @param deptId 申请部门id |
| | | */ |
| | | private List<String> getCheckPhones(Integer checkLevel, Long deptId, int current) |
| | | private List<String> getCheckPhonesSimple(Integer checkLevel, Long deptId) |
| | | { |
| | | if (checkLevel==3){ |
| | | if (current==1){ |
| | | return null; |
| | | } |
| | | checkLevel = 0; |
| | | deptId = deptService.selectDeptById(deptId).getParentId(); |
| | | current++; |
| | | getCheckPhones(checkLevel, deptId, current); |
| | | return null; |
| | | } |
| | | checkLevel++; |
| | | String checkKey = "check_enforce_"; |
| | | List<String> phones = userService.getPhonesByRoleKey(checkKey + checkLevel, deptId); |
| | | if (StringUtils.isNotEmpty(phones)){ |
| | | phones.add(0,checkLevel.toString()); |
| | | return phones; |
| | | } |
| | | return getCheckPhones(checkLevel, deptId, current); |
| | | checkLevel ++; |
| | | return getCheckPhonesSimple(checkLevel, deptId); |
| | | } |
| | | |
| | | |