package com.dg.core.service.impl; import cn.hutool.core.date.DateTime; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.dg.core.ResultData; import com.dg.core.db.gen.entity.*; import com.dg.core.db.gen.mapper.*; import com.dg.core.db.manual.mapper.util.ConstantPropertiesUtil; import com.dg.core.service.IGuideRepairOrderService; import com.dg.core.service.ISysSettingsService; import com.dg.core.util.SmsUtil; import com.dg.core.util.Snowflake; import com.dg.core.util.TestDate; import com.dg.core.util.WxUtil; import com.iceyyy.workday.WorkUtils; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; import javax.annotation.PostConstruct; import javax.annotation.Resource; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneOffset; import java.util.ArrayList; import java.util.Calendar; import java.util.List; @Service public class GuideRepairOrderServiceImpl extends ServiceImpl implements IGuideRepairOrderService { @Resource private TransactionEventMapper transactionEventMapper; @Resource private GuideRepairOrderImageMapper guideRepairOrderImageMapper; @Resource private SysUserMapper sysUserMapper; @Resource private OrganizationChartMapper organizationChartMapper; @Resource private GuideEvolveMapper guideEvolveMapper; @Resource private AutomessageSysSettingsMapper iSysSettingsMapper; @Resource private AreaCode2022Mapper areaCode2022Mapper; @Resource SmsUtil smsUtil; @Resource(name = "stringRedisTemplate") private StringRedisTemplate stringRedisTemplate; private static WxUtil wxUtil; @Override public int addOrder(GuideRepairOrder guideRepairOrder) { TransactionEvent transactionEvent = transactionEventMapper.selectOne(new QueryWrapper().lambda(). eq(TransactionEvent::getId, guideRepairOrder.getMatterId())); guideRepairOrder.setOrderNum(Long.toString(Snowflake.getId())); guideRepairOrder.setMatterName(transactionEvent.getMatterName()); guideRepairOrder.setDepartmentId(transactionEvent.getDepartmentId()); guideRepairOrder.setClassifyId(transactionEvent.getClassifyId()); List departmentIds = new ArrayList<>(); Boolean isAdd = true;//是否能够新建工单 List guideRepairOrders = baseMapper.selectList(new QueryWrapper().lambda() .eq(GuideRepairOrder::getMatterId, guideRepairOrder.getMatterId()) .eq(GuideRepairOrder::getConsultContent, guideRepairOrder.getConsultContent())); if (guideRepairOrders.size() == 0) { isAdd = true; } else { for (GuideRepairOrder guideRepair : guideRepairOrders) { if (guideRepair.getState().equals("1") || guideRepair.getState().equals("2") || guideRepair.getState().equals("6") || guideRepair.getState().equals("7")) { isAdd = false; break; } } } if (isAdd) { AreaCode2022 areaCode2022 = areaCode2022Mapper.selectOne(new QueryWrapper().lambda().eq(AreaCode2022::getCode, guideRepairOrder.getAreaCode())); Integer grade=2; if (areaCode2022.getLevel()==2){ grade=1; } //自动分配业务代码开始 List organizationChartEntities = organizationChartMapper.selectByCode(transactionEvent.getDepartmentId(), guideRepairOrder.getAreaCode(),grade); if (organizationChartEntities.size() > 0) { for (OrganizationChartEntity organizationChart : organizationChartEntities) { departmentIds.add(organizationChart.getId().toString()); } List sysUsers = sysUserMapper.selectListByDepartmentId(departmentIds, "," + transactionEvent.getId(), transactionEvent.getId() + ",");//获取导半人员 if (sysUsers.size() == 0) {//如果此所属地区部门没有导半人员则看其下级地区有没有相关分类导办人员 for (OrganizationChartEntity organizationChart : organizationChartEntities) { //获取下级部门 List organizationChartEntitiesUser = organizationChartMapper.selectList(new QueryWrapper().lambda() .eq(OrganizationChartEntity::getParentId, organizationChart.getId().toString())); if (organizationChartEntitiesUser != null) departmentIds = this.getDepartmentIds(organizationChartEntitiesUser, departmentIds); } sysUsers = sysUserMapper.selectListByDepartmentId(departmentIds, "," + transactionEvent.getId(), transactionEvent.getId() + ",");//获取导半人员 if (sysUsers.size() == 0) {//如果该所属地区没有导办人员则为获取其上級地区有没有相关分类导办人员 List departmentIdsParent = new ArrayList<>(); departmentIdsParent.addAll(departmentIds); for (String departmentId : departmentIdsParent) { OrganizationChartEntity organizationChart = organizationChartMapper.selectOne(new QueryWrapper().lambda().eq(OrganizationChartEntity::getId, departmentId)); OrganizationChartEntity organizationChartParent = organizationChartMapper.selectOne(new QueryWrapper().lambda().eq(OrganizationChartEntity::getId, organizationChart.getParentId())); if (organizationChartParent != null) { departmentIds.add(organizationChartParent.getId().toString()); } } sysUsers = sysUserMapper.selectListByDepartmentId(departmentIds, "," + transactionEvent.getId(), transactionEvent.getId() + ",");//获取导半人员 if (sysUsers.size() == 0) { sysUsers = sysUserMapper.selectListByDepartmentId(departmentIds, null, null);//获取导半人员 if (sysUsers.size() == 0) { //如果该所属地区没有导办人员则为特殊单据需要手动分配 guideRepairOrder.setState("1"); } } } } if (sysUsers.size() > 0) {//系统分配导办人员 SysUser sysUser = sysUsers.get(0);//因为sql用了升序排序所以第一条就是待办结最少的人员之一 guideRepairOrder.setState("2"); sysUser.setTransactionNum(sysUser.getTransactionNum() + 1); sysUserMapper.updateById(sysUser); guideRepairOrder.setGuideUserId(sysUser.getUserId().toString()); guideRepairOrder.setGuideDepartmentId(sysUser.getDepartmentId()); guideRepairOrder.setGuideUserPhone(sysUser.getPhonenumber()); //新增分配记录 GuideEvolveEntity entity = new GuideEvolveEntity(); entity.setCreateTime(LocalDateTime.now()); entity.setUpdateTime(LocalDateTime.now()); entity.setState("8"); entity.setDepartmentalId(sysUser.getDepartmentId()); entity.setToUserId(guideRepairOrder.getGuideUserId() + ""); // entity.setFromUserId(guideRepairOrder.getSubmitUserId()); // entity.setFromDepartmentalId(guideRepairOrder.getGuideDepartmentId()); entity.setGuidOrderNum(guideRepairOrder.getOrderNum()); //超时时间设置业务开始 guideRepairOrder = this.setTimeoutTim(guideRepairOrder); //超时时间设置业务结束 //消息推送 this.sendGuideRepairOrderSubmit(sysUser.getOpenid(), guideRepairOrder); //短信发送 smsUtil.sendSmsSubmitNew(sysUser.getPhonenumber(), sysUser.getUserName()); guideEvolveMapper.insertConfig(entity); } } else {//如果该办事指南用户所选所属地区无导半部门则为特殊单据需要手动分配 guideRepairOrder.setState("1"); } //自动分配业务代码结束 guideRepairOrder.setCreateTime(LocalDateTime.now()); guideRepairOrder.setUpdateTime(LocalDateTime.now()); guideRepairOrder.setIsPush(2); transactionEvent.setTransactionNum(transactionEvent.getTransactionNum() + 1); //保存图片地址 if (guideRepairOrder.getImages() != null) { String[] images = guideRepairOrder.getImages().split(","); for (String image : images) { GuideRepairOrderImage guideRepairOrderImage = new GuideRepairOrderImage(); guideRepairOrderImage.setId(Snowflake.getId()); guideRepairOrderImage.setGuideRepairOrderId(guideRepairOrder.getOrderNum()); guideRepairOrderImage.setUrl(image); guideRepairOrderImage.setCreateTime(LocalDateTime.now()); guideRepairOrderImage.setType(1); guideRepairOrderImageMapper.insert(guideRepairOrderImage); } } //保存视频地址 if (guideRepairOrder.getVideo() != null) { if (guideRepairOrder.getOrderNum() != null) { GuideRepairOrderImage guideRepairOrderImage = new GuideRepairOrderImage(); guideRepairOrderImage.setId(Snowflake.getId()); guideRepairOrderImage.setGuideRepairOrderId(guideRepairOrder.getOrderNum()); guideRepairOrderImage.setUrl(guideRepairOrder.getVideo()); guideRepairOrderImage.setCreateTime(LocalDateTime.now()); guideRepairOrderImage.setType(2); guideRepairOrderImageMapper.insert(guideRepairOrderImage); } } int ans = baseMapper.insert(guideRepairOrder); int i = transactionEventMapper.updateById(transactionEvent); if (ans > 0 && i > 0) return 1; else return 0; } else { return 0; } } public List getDepartmentIds(List organizationChartEntities, List departmentIds) { for (OrganizationChartEntity organizationChart : organizationChartEntities) { departmentIds.add(organizationChart.getId().toString()); List organizationChartEntitiesUser = organizationChartMapper.selectList(new QueryWrapper().lambda() .eq(OrganizationChartEntity::getParentId, organizationChart.getId().toString())); if (organizationChartEntitiesUser != null) departmentIds = this.getDepartmentIds(organizationChartEntitiesUser, departmentIds); } return departmentIds; } @Override public GuideRepairOrder selectConfigData(String Id, String orderNum) { return baseMapper.selectConfigData(Id, orderNum); } @Override public int updateConfig(GuideRepairOrder order) { if (order.getGuideUserId() != null && !order.getGuideUserId().equals("")) { SysUser sysUser = sysUserMapper.selectOne(new QueryWrapper().lambda().eq(SysUser::getUserId, order.getGuideUserId())); order.setGuideUserPhone(sysUser.getPhonenumber()); } return baseMapper.updateConfig(order); } @Override public List selectBySubmitId(String submitUserId) { return baseMapper.selectBySubmitId(submitUserId); } @Override public List selectConfigList(IPage page, Integer state, String matterName, List ids, String status, String guideUserId, String createTimeStartTime, String createTimeTimeEndTime, String classifyId) { return baseMapper.selectConfigList(page, state, matterName, ids, status, guideUserId, createTimeStartTime, createTimeTimeEndTime, classifyId); } @Override public List selectConfigList(String matterName, List ids, String status, String guideUserId, String createTimeStartTime, String createTimeTimeEndTime, String classifyId) { return baseMapper.selectConfigList(matterName, ids, status, guideUserId, createTimeStartTime, createTimeTimeEndTime, classifyId); } @Override public int countConfigList(String matterName, List ids, String status, String guideUserId) { return baseMapper.countConfigList(matterName, ids, status, guideUserId); } @Override public int countUser(String userId, String state) { return baseMapper.countUser(userId, state); } @Override public int updateSysUserOrderNum(GuideEvolveEntity order) { if (order.getState() != null) { if (order.getState().equals("11")) { SysUser sysUser = sysUserMapper.selectOne(new QueryWrapper().lambda().eq(SysUser::getUserId, order.getToUserId())); GuideRepairOrder guideRepairOrder = baseMapper.selectOne(new QueryWrapper().lambda() .eq(GuideRepairOrder::getId, order.getGuideId())); if (guideRepairOrder != null) { this.sendGuideRepairOrderSubmit(sysUser.getOpenid(), guideRepairOrder); } //短信发送 smsUtil.sendSmsSubmitNew(sysUser.getPhonenumber(), sysUser.getUserName()); sysUser.setTransactionNum(sysUser.getTransactionNum() + 1); return sysUserMapper.updateById(sysUser); } else if (order.getState().equals("10")) { SysUser sysUserTo = sysUserMapper.selectOne(new QueryWrapper().lambda().eq(SysUser::getUserId, order.getToUserId())); SysUser sysUserFrom = sysUserMapper.selectOne(new QueryWrapper().lambda().eq(SysUser::getUserId, order.getFromUserId())); sysUserTo.setTransactionNum(sysUserTo.getTransactionNum() + 1); if (sysUserFrom.getUserType().equals(2)) { sysUserFrom.setTransactionNum(sysUserFrom.getTransactionNum() - 1); sysUserMapper.updateById(sysUserFrom); } GuideRepairOrder guideRepairOrder = baseMapper.selectOne(new QueryWrapper().lambda() .eq(GuideRepairOrder::getId, order.getGuideId())); //短信发送 smsUtil.sendSmsSubmitNew(sysUserTo.getPhonenumber(), sysUserTo.getUserName()); if (guideRepairOrder != null) { this.sendGuideRepairOrderSubmit(sysUserTo.getOpenid(), guideRepairOrder); } return sysUserMapper.updateById(sysUserTo); } else if (order.getState().equals("7")) { SysUser sysUserFrom = sysUserMapper.selectOne(new QueryWrapper().lambda().eq(SysUser::getUserId, order.getFromUserId())); sysUserFrom.setTransactionNum(sysUserFrom.getTransactionNum() - 1); return sysUserMapper.updateById(sysUserFrom); } } return 0; } /** * 1 今天 2昨天 3本月 4本年度 String time * * @param state * @param ids * @return */ @Override public int countStatisticsNum(String state, List ids, String time, String isTimeout, String evaluateState, List classifyIds, String serviceState, String guideUserId) { return baseMapper.countStatisticsNum(state, ids, time, isTimeout, evaluateState, classifyIds, serviceState, guideUserId); } @Override public List countListNum(String state, List ids, Integer time) { return baseMapper.countListNum(state, ids, time); } @Override public SysUser getSubmitUser(GuideRepairOrder guideRepairOrder) { return sysUserMapper.selectOne(new QueryWrapper().lambda().eq(SysUser::getUserId, guideRepairOrder.getSubmitUserId())); } @Override public GuideRepairOrder setTimeoutTim(GuideRepairOrder guideRepairOrder) { AutomessageSysSettings automessageSysSettings = iSysSettingsMapper.selectOne( new QueryWrapper().lambda() .eq(AutomessageSysSettings::getSettingName, "系统超时基础设置")); LocalDateTime startTime = LocalDate.now().atTime(0, 0, 0);//今天开始时间 LocalDateTime morningStartTime = LocalDate.now().atTime(9, 0, 0);//上午工作开始时间 LocalDateTime morningEndTime = LocalDate.now().atTime(12, 0, 0);//上午工作结束时间 LocalDateTime afternoonStartTime = LocalDate.now().atTime(13, 30, 0);//下午工作开始时间 LocalDateTime afternoonEndTime = LocalDate.now().atTime(17, 0, 0);//下午工作结束时间 LocalDateTime endTime = LocalDate.now().atTime(23, 59, 59);//今天结束时间 TestDate td = new TestDate(); DateTime dateTimeUser = DateTime.now(); String format = "YYYYMMdd"; String dateTimeToday = dateTimeUser.toString(format); if (!WorkUtils.isWorkendDay(dateTimeToday)) { if (LocalDateTime.now().isAfter(startTime) && LocalDateTime.now().isBefore(morningStartTime)) {//提交时间是上午上班前 guideRepairOrder.setTimeoutTime(LocalDate.now(). atTime(9 + automessageSysSettings.getTimeoutNotificationNum(), 0, 0)); } else if (LocalDateTime.now().isAfter(morningStartTime) && LocalDateTime.now().isBefore(morningEndTime)) {//提交时间在上午工作日内 guideRepairOrder.setTimeoutTime(LocalDateTime.now().plusHours(automessageSysSettings.getTimeoutNotificationNum())); } else if (LocalDateTime.now().isAfter(morningEndTime) && LocalDateTime.now().isBefore(afternoonStartTime)) {//提交时间在工作日午休内 guideRepairOrder.setTimeoutTime(LocalDate.now(). atTime(13 + automessageSysSettings.getTimeoutNotificationNum(), 30, 0)); } else if (LocalDateTime.now().isAfter(afternoonStartTime) && LocalDateTime.now().isBefore(afternoonEndTime)) {//提交时间在下午工作日内 guideRepairOrder.setTimeoutTime(LocalDateTime.now().plusHours(automessageSysSettings.getTimeoutNotificationNum())); } else if (LocalDateTime.now().isAfter(afternoonEndTime) && LocalDateTime.now().isBefore(endTime)) {//提交时间在下午下班后 DateTime dateTime = td.nextWeekDay(dateTimeUser); Calendar calendar = dateTime.toCalendar(); LocalDateTime localDateTime = LocalDateTime.of(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH) + 1, calendar.get(Calendar.DATE), 9 + automessageSysSettings.getTimeoutNotificationNum(), 0);//设置时间为下一个工作日时间的9点+设置超时时间 guideRepairOrder.setTimeoutTime(localDateTime); } } else//当前不是工作日则获取下一个工作日 { DateTime dateTime = td.nextWeekDay(dateTimeUser); Calendar calendar = dateTime.toCalendar(); LocalDateTime localDateTime = LocalDateTime.of(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH) + 1, calendar.get(Calendar.DATE), 9 + automessageSysSettings.getTimeoutNotificationNum(), 0);//设置时间为下一个工作日时间的9点+设置超时时间 guideRepairOrder.setTimeoutTime(localDateTime); } return guideRepairOrder; } @Override public void sendGuideRepairOrderSubmit(String openid, GuideRepairOrder guideRepairOrder) { WxUtil wxUtil = new WxUtil(); String accessToken = "0"; try { accessToken = stringRedisTemplate.boundValueOps("access_token:access_token:" + ConstantPropertiesUtil.WX_OPEN_APP_ID).get(); } catch (Exception e) { throw new RuntimeException(e); } wxUtil.sendGuideRepairOrderSubmit(openid, accessToken, "WggWK_yG7_qfrTj8bQe-2co4ATgpXamLzT1xvrTu4K0", guideRepairOrder); // smsUtil.sendSmsOvertime(sysUser.getPhonenumber(),guideRepairOrder.getMatterName()); } @Override public int deleteConfigById(String Id) { GuideRepairOrder guideRepairOrderDelete = baseMapper.selectOne(new QueryWrapper().lambda().eq(GuideRepairOrder::getId, Id)); //删除进展记录 guideEvolveMapper.delete(new QueryWrapper().lambda().eq(GuideEvolveEntity::getGuideId, Id)); TransactionEvent transactionEvent = transactionEventMapper.selectOne(new QueryWrapper().lambda().eq(TransactionEvent::getId, guideRepairOrderDelete.getMatterId())); if (transactionEvent.getTransactionNum() > 0) { transactionEvent.setTransactionNum(transactionEvent.getTransactionNum() - 1); } //对应办事指南减一 transactionEventMapper.updateById(transactionEvent); SysUser sysUser = sysUserMapper.selectOne(new QueryWrapper().lambda().eq(SysUser::getUserId, guideRepairOrderDelete.getGuideUserId())); if (sysUser != null) { //对应导半人员待导半数量建议 sysUser.setTransactionNum(sysUser.getTransactionNum() - 1); sysUserMapper.updateById(sysUser); } return baseMapper.deleteConfigById(Id); } @Override public ResultData pushOvertimeGuideRepairOrder() { List guideRepairOrders = baseMapper.selectOvertime(); WxUtil wxUtil = new WxUtil(); String accessToken = "0"; try { accessToken = stringRedisTemplate.boundValueOps("access_token:access_token:" + ConstantPropertiesUtil.WX_OPEN_APP_ID).get(); } catch (Exception e) { throw new RuntimeException(e); } for (GuideRepairOrder guideRepairOrder : guideRepairOrders) { List sysUsers = sysUserMapper.selectList(new QueryWrapper().lambda().eq(SysUser::getDepartmentId, guideRepairOrder.getGuideDepartmentId()).eq(SysUser::getIsDivisionHead, 1)); if (sysUsers != null && sysUsers.size() > 0) { for (SysUser sysUser : sysUsers) { // transactionEventMapper.selectOne(new QueryWrapper().lambda().eq(TransactionEvent::getId, guideRepairOrder.getMatterId())); SysUser sysUserGuideUser = sysUserMapper.selectOne(new QueryWrapper().lambda().eq(SysUser::getUserId, guideRepairOrder.getGuideUserId())); if (sysUser != null) { smsUtil.sendSmsOvertimeNew(sysUser.getPhonenumber(), sysUserGuideUser.getUserName()); wxUtil.sendGuideRepairOrderOvertime(sysUser.getOpenid(), accessToken, "86JgWHhR8b1XxD72WYqMnndyfkiMtSSoCk9NFMwLEZ8", sysUser); guideRepairOrder.setIsPush(1); guideRepairOrder.setIsTimeout("2"); baseMapper.updateById(guideRepairOrder); } } } } return ResultData.success(); } @Override public ResultData pushNoticeTimeRepairOrder(){ AutomessageSysSettings automessageSysSettings = iSysSettingsMapper.selectOne( new QueryWrapper().lambda() .eq(AutomessageSysSettings::getSettingName, "系统超时基础设置")); Integer timeoutRemindNum = automessageSysSettings.getTimeoutRemindNum(); List guideRepairOrders = baseMapper.selectNoticeTime(timeoutRemindNum); for (GuideRepairOrder guideRepairOrder:guideRepairOrders){ SysUser sysUser = sysUserMapper.selectOne(new QueryWrapper().lambda().eq(SysUser::getUserId, guideRepairOrder.getGuideUserId())); if (sysUser != null) { smsUtil.sendSmsOvertimeRemind(sysUser.getPhonenumber(), sysUser.getUserName()); guideRepairOrder.setIsRemindPush(1); baseMapper.updateById(guideRepairOrder); } } return ResultData.success(); } @Override public int updateEvaluate() { //查找一天没有评价的单据 List guideRepairOrders = baseMapper.selectEvaluate(); for (GuideRepairOrder guideRepairOrder : guideRepairOrders) { guideRepairOrder.setEvaluateState("1"); guideRepairOrder.setEvaluateContent("好评"); guideRepairOrder.setServiceState(1); guideRepairOrder.setState("3"); baseMapper.updateById(guideRepairOrder); //新增默认好评进展 GuideEvolveEntity entity = new GuideEvolveEntity(); entity.setCreateTime(LocalDateTime.now()); entity.setUpdateTime(LocalDateTime.now()); entity.setState("12"); entity.setFromUserId(guideRepairOrder.getSubmitUserId() + ""); entity.setGuideId(guideRepairOrder.getId().toString()); guideEvolveMapper.insertConfig(entity); } return 0; } @Override public ResultData deleteComment(Integer id, SysUser sysUser) { if (sysUser.getUserType().equals("1") || sysUser.getIsDivisionHead().equals("1")) { GuideRepairOrder guideRepairOrder = baseMapper.selectOne(new QueryWrapper().lambda().eq(GuideRepairOrder::getId, id)); if (guideRepairOrder != null && guideRepairOrder.getState().equals("3")) { guideRepairOrder.setIsHideComments(1); baseMapper.updateById(guideRepairOrder); //新增删除评论进展 GuideEvolveEntity entity = new GuideEvolveEntity(); entity.setCreateTime(LocalDateTime.now()); entity.setUpdateTime(LocalDateTime.now()); entity.setState("14"); entity.setFromUserId(sysUser.getUserId() + ""); entity.setGuideId(guideRepairOrder.getId().toString()); guideEvolveMapper.insertConfig(entity); baseMapper.updateById(guideRepairOrder); return ResultData.success("删除评论成功"); } else { return ResultData.error("已办结的单据才能进行删除评论操作"); } } else { return ResultData.error("只能部门领导和超级管理员才能删除评论"); } } }