package com.java110.job.task.repair; import com.java110.core.factory.CallApiServiceFactory; import com.java110.intf.community.IRepairInnerServiceSMO; import com.java110.intf.community.IRepairTypeUserInnerServiceSMO; import com.java110.dto.app.AppDto; import com.java110.dto.community.CommunityDto; import com.java110.dto.repair.RepairDto; import com.java110.dto.repair.RepairTypeUserDto; import com.java110.dto.repair.RepairUserDto; import com.java110.dto.task.TaskDto; import com.java110.job.quartz.TaskSystemQuartz; import com.java110.utils.cache.CommonCache; import com.java110.utils.constant.ServiceCodeRepairDispatchStepConstant; import com.java110.utils.util.StringUtil; import org.slf4j.Logger; import com.java110.core.log.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.List; /** * @program: MicroCommunity * @description: 定时任务 轮训派单 * @author: wuxw * @create: 2020-06-15 13:35 **/ @Component public class TrainingRepairTemplate extends TaskSystemQuartz { private static Logger logger = LoggerFactory.getLogger(TrainingRepairTemplate.class); private static final int EXPIRE_IN = 7200; @Autowired private IRepairInnerServiceSMO repairInnerServiceSMOImpl; @Autowired private IRepairTypeUserInnerServiceSMO repairTypeUserInnerServiceSMOImpl; @Override protected void process(TaskDto taskDto) { logger.debug("开始执行微信模板信息推送" + taskDto.toString()); // 获取小区 List communityDtos = getAllCommunity(); for (CommunityDto communityDto : communityDtos) { try { trainingRepair(taskDto, communityDto); } catch (Exception e) { logger.error("推送消息失败", e); } } } /** * 轮训派单 * * @param taskDto * @param communityDto */ private void trainingRepair(TaskDto taskDto, CommunityDto communityDto) { RepairDto repairDto = new RepairDto(); repairDto.setCommunityId(communityDto.getCommunityId()); repairDto.setState(RepairDto.STATE_WAIT); repairDto.setRepairWay(RepairDto.REPAIR_WAY_TRAINING); //查询需要程序轮训派单 订单 List repairDtos = repairInnerServiceSMOImpl.queryRepairs(repairDto); for (RepairDto tmpRepairDto : repairDtos) { RepairTypeUserDto repairTypeUserDto = new RepairTypeUserDto(); repairTypeUserDto.setCommunityId(communityDto.getCommunityId()); repairTypeUserDto.setRepairType(tmpRepairDto.getRepairType()); repairTypeUserDto.setState(RepairTypeUserDto.STATE_ONLINE); //派单给在线员工 List repairTypeUserDtos = repairTypeUserInnerServiceSMOImpl.queryRepairTypeUsers(repairTypeUserDto); //没有设置 处理师傅 无法派单 if (repairTypeUserDtos == null || repairTypeUserDtos.size() < 1) { continue; } doTrainingRepair(tmpRepairDto, repairTypeUserDtos); } } /** * 将改订单 派给下面 师傅 * * @param tmpRepairDto * @param repairTypeUserDtos */ private void doTrainingRepair(RepairDto tmpRepairDto, List repairTypeUserDtos) { if (repairTypeUserDtos.size() == 1) { RepairUserDto repairUserDto = new RepairUserDto(); repairUserDto.setUserId(repairTypeUserDtos.get(0).getStaffId()); repairUserDto.setUserName(repairTypeUserDtos.get(0).getStaffName()); repairUserDto.setCommunityId(repairTypeUserDtos.get(0).getCommunityId()); repairUserDto.setRepairId(tmpRepairDto.getRepairId()); CallApiServiceFactory.postForApi(AppDto.WEB_APP_ID, repairUserDto, ServiceCodeRepairDispatchStepConstant.BINDING_GRABBING_REPAIR, RepairUserDto.class); return; } String sizeStr = CommonCache.getValue(tmpRepairDto.getRepairType() + "-" + tmpRepairDto.getCommunityId() + "-staff-size"); if (StringUtil.isEmpty(sizeStr)) { CommonCache.setValue(tmpRepairDto.getRepairType() + "-" + tmpRepairDto.getCommunityId() + "-staff-size", repairTypeUserDtos.size() + "", EXPIRE_IN); sizeStr = repairTypeUserDtos.size() + ""; } int size = Integer.parseInt(sizeStr); //总数不一致从新设置 随机判断就好 if (size != repairTypeUserDtos.size()) { size = repairTypeUserDtos.size(); CommonCache.setValue(tmpRepairDto.getRepairType() + "-" + tmpRepairDto.getCommunityId() + "-staff-size", size + "", EXPIRE_IN); int index = (int) (Math.random() * repairTypeUserDtos.size()); RepairUserDto repairUserDto = new RepairUserDto(); repairUserDto.setUserId(repairTypeUserDtos.get(index).getStaffId()); repairUserDto.setUserName(repairTypeUserDtos.get(index).getStaffName()); repairUserDto.setCommunityId(repairTypeUserDtos.get(index).getCommunityId()); repairUserDto.setRepairId(tmpRepairDto.getRepairId()); CallApiServiceFactory.postForApi(AppDto.WEB_APP_ID, repairUserDto, ServiceCodeRepairDispatchStepConstant.BINDING_GRABBING_REPAIR, RepairUserDto.class); return; } String repairIndexStr = CommonCache.getValue(tmpRepairDto.getRepairType() + "-" + tmpRepairDto.getCommunityId() + "-staff-index"); if (StringUtil.isEmpty(repairIndexStr)) { CommonCache.setValue(tmpRepairDto.getRepairType() + "-" + tmpRepairDto.getCommunityId() + "-staff-index", "0", EXPIRE_IN); repairIndexStr = "0"; } int repairIndex = Integer.parseInt(repairIndexStr); if (repairIndex < size - 1) { repairIndex += 1; } else { repairIndex = 0; } CommonCache.setValue(tmpRepairDto.getRepairType() + "-" + tmpRepairDto.getCommunityId() + "-staff-index", repairIndex + "", EXPIRE_IN); RepairUserDto repairUserDto = new RepairUserDto(); repairUserDto.setUserId(repairTypeUserDtos.get(repairIndex).getStaffId()); repairUserDto.setUserName(repairTypeUserDtos.get(repairIndex).getStaffName()); repairUserDto.setCommunityId(repairTypeUserDtos.get(repairIndex).getCommunityId()); repairUserDto.setRepairId(tmpRepairDto.getRepairId()); CallApiServiceFactory.postForApi(AppDto.WEB_APP_ID, repairUserDto, ServiceCodeRepairDispatchStepConstant.BINDING_GRABBING_REPAIR, RepairUserDto.class); } }