package com.panzhihua.sangeshenbian.service.impl; import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.panzhihua.common.model.vos.LoginUserInfoVO; import com.panzhihua.sangeshenbian.model.dto.ComplaintCompletionDTO; import com.panzhihua.sangeshenbian.model.dto.ComplaintProcessDTO; import com.panzhihua.sangeshenbian.model.entity.Complaint; import com.panzhihua.sangeshenbian.enums.ProcessStatusEnum; import com.panzhihua.sangeshenbian.dao.ComplaintMapper; import com.panzhihua.sangeshenbian.model.entity.ComplaintFlow; import com.panzhihua.sangeshenbian.model.entity.ComplaintProgress; import com.panzhihua.sangeshenbian.model.entity.SystemUser; import com.panzhihua.sangeshenbian.model.query.BasePage; import com.panzhihua.sangeshenbian.model.query.ComplaintQuery; import com.panzhihua.sangeshenbian.model.vo.ComplaintTodoVO; import com.panzhihua.sangeshenbian.service.IComplaintFlowService; import com.panzhihua.sangeshenbian.service.IComplaintProgressService; import com.panzhihua.sangeshenbian.service.IComplaintService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.panzhihua.sangeshenbian.model.vo.ComplaintVO; import com.panzhihua.sangeshenbian.service.ISystemUserService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import java.util.Optional; import static cn.hutool.core.util.ObjectUtil.isNull; /** *

* 问题报告表 服务实现类 *

* * @author * @since 2025-02-22 */ @Service @RequiredArgsConstructor public class ComplaintServiceImpl extends ServiceImpl implements IComplaintService { private final ISystemUserService systemUserService; private final IComplaintFlowService complaintFlowService; private final IComplaintProgressService complaintProgressService; @Override public void saveComplaint(Complaint complaint,Long userId) { // 获取当前日期(年月日) String datePrefix = new SimpleDateFormat("yyyyMMdd").format(new Date()); // 查询当前日期的最大流水号 Complaint lastComplaint = getOne(new LambdaQueryWrapper() .likeRight(Complaint::getSerialNumber, datePrefix) // 查询以当前日期开头的流水号 .orderByDesc(Complaint::getSerialNumber) .last("limit 1")); String serialNumber; if (isNull(lastComplaint)) { // 如果当天没有记录,从 0001 开始 serialNumber = datePrefix + "0001"; } else { // 获取当前日期的最大流水号,并递增 String lastSerialNumber = lastComplaint.getSerialNumber(); int num = Integer.parseInt(lastSerialNumber.substring(lastSerialNumber.length() - 4)); // 提取后4位数字 serialNumber = datePrefix + String.format("%04d", num + 1); // 递增并格式化为4位 } // 设置流水号 complaint.setSerialNumber(serialNumber); // 设置其他字段 complaint.setStatus(ProcessStatusEnum.PROCESSING.getCode()); complaint.setCreateTime(new Date()); complaint.setCreateBy(userId); complaint.setUpdateBy(userId); complaint.setUpdateTime(new Date()); // 保存诉求记录 save(complaint); } /** * @param query * @param loginUserInfoVO * @return */ @Override public Page complaintList(ComplaintQuery query, LoginUserInfoVO loginUserInfoVO) { Page page = new Page<>(query.getPageNum(), query.getPageSize()); //判断当前登录用户级别,查询对应工单 Optional systemUserByPhone = systemUserService.getSystemUserByPhone(loginUserInfoVO.getPhone()); String targetId = ""; int isSuperior = 0; //上级 if (systemUserByPhone.isPresent()) { SystemUser systemUser = systemUserByPhone.get(); Integer accountLevel = systemUser.getAccountLevel(); switch (accountLevel) { case 1: //市级 targetId = "510400"; break; case 2: //区县级 targetId = systemUser.getDistrictsCode(); break; case 3: //街道 targetId = systemUser.getStreetCode(); break; case 4: //社区 targetId = systemUser.getCommunityCode(); break; } isSuperior = 1; } else { //党员 targetId = loginUserInfoVO.getUserId().toString(); } //查询对应诉求 page = baseMapper.selectComplaintPage(page, query, targetId,isSuperior); return page; } /** * 工单详情 * @param id * @return */ @Override public ComplaintVO detail(Long id) { ComplaintVO detail = baseMapper.getDetail(id); if (detail.getStatus().equals(0)) { List list = complaintFlowService.lambdaQuery().eq(ComplaintFlow::getComplaintId, id).orderByAsc(ComplaintFlow::getCreateTime).list(); detail.setComplaintFlows(list); } return detail; } /** *办理进度录入 * @param dto * @param userId */ @Override public void saveProcess(ComplaintProcessDTO dto,Long userId) { ComplaintProgress complaintProgress = BeanUtil.copyProperties(dto, ComplaintProgress.class); complaintProgress.setCreateTime(new Date()); complaintProgress.setCreateBy(userId); complaintProgressService.save(complaintProgress); } /** * 办理结果录入 * * @param dto * @param loginUserInfoVO */ @Override public void saveResult(ComplaintCompletionDTO dto, LoginUserInfoVO loginUserInfoVO) { Complaint complaint = BeanUtil.copyProperties(dto, Complaint.class); complaint.setUpdateTime(new Date()); complaint.setCompletionUserId(loginUserInfoVO.getUserId()); complaint.setCompletionUsername(loginUserInfoVO.getName()); complaint.setCompletionTime(new Date()); this.updateById(complaint); } /** * 获取待办诉求 * @param page * @param loginUserInfo * @return */ @Override public Page getTodoList(BasePage basePage, LoginUserInfoVO loginUserInfo) { Optional systemUserByPhone = systemUserService.getSystemUserByPhone(loginUserInfo.getPhone()); String targetId = ""; int isSuperior = 0; //上级 if (systemUserByPhone.isPresent()) { SystemUser systemUser = systemUserByPhone.get(); Integer accountLevel = systemUser.getAccountLevel(); switch (accountLevel) { case 1: //市级 targetId = "510400"; break; case 2: //区县级 targetId = systemUser.getDistrictsCode(); break; case 3: //街道 targetId = systemUser.getStreetCode(); break; case 4: //社区 targetId = systemUser.getCommunityCode(); break; } isSuperior = 1; } else { //党员 targetId = loginUserInfo.getUserId().toString(); } Page page = baseMapper.getTodoList(new Page<>(basePage.getPageNum(), basePage.getPageSize()), targetId,isSuperior); return page; } }