根据派单规则调整派单类
This commit is contained in:
parent
785641d8fd
commit
8f28439c05
|
|
@ -1,11 +1,16 @@
|
||||||
package com.nu.modules.biz.care.order.service.impl;
|
package com.nu.modules.biz.care.order.service.impl;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
import com.nu.modules.biz.care.order.entity.CareOrders;
|
import com.nu.modules.biz.care.order.entity.CareOrders;
|
||||||
import com.nu.modules.biz.care.order.entity.CareOrdersSub;
|
import com.nu.modules.biz.care.order.entity.CareOrdersSub;
|
||||||
import com.nu.modules.biz.care.order.mapper.CareOrdersMapper;
|
import com.nu.modules.biz.care.order.mapper.CareOrdersMapper;
|
||||||
import com.nu.modules.biz.care.order.service.ICareOrdersService;
|
import com.nu.modules.biz.care.order.service.ICareOrdersService;
|
||||||
import com.nu.modules.biz.care.order.service.ICareOrdersSubService;
|
import com.nu.modules.biz.care.order.service.ICareOrdersSubService;
|
||||||
|
import com.nu.modules.config.sendorderpriority.entity.SendOrderRule;
|
||||||
|
import com.nu.modules.config.sendorderpriority.entity.SendOrderRuleSub;
|
||||||
|
import com.nu.modules.config.sendorderpriority.service.ISendOrderRuleService;
|
||||||
|
import com.nu.modules.config.sendorderpriority.service.ISendOrderRuleSubService;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.jeecg.common.api.vo.Result;
|
import org.jeecg.common.api.vo.Result;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
|
@ -26,6 +31,29 @@ public class CareOrdersServiceImpl extends ServiceImpl<CareOrdersMapper, CareOrd
|
||||||
@Autowired
|
@Autowired
|
||||||
ICareOrdersSubService ordersSubService;
|
ICareOrdersSubService ordersSubService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
ISendOrderRuleService sendOrderRuleService;
|
||||||
|
@Autowired
|
||||||
|
ISendOrderRuleSubService sendOrderRuleSubService;
|
||||||
|
SendOrderRule sendOrderRule;
|
||||||
|
List<SendOrderRuleSub> ruleSubList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取派单规则
|
||||||
|
*/
|
||||||
|
private void getSendOrderRule(){
|
||||||
|
if(sendOrderRule == null){
|
||||||
|
QueryWrapper<SendOrderRule> qw = new QueryWrapper<>();
|
||||||
|
qw.eq("iz_enabled", "Y");
|
||||||
|
sendOrderRule = sendOrderRuleService.getOne(qw);
|
||||||
|
QueryWrapper<SendOrderRuleSub> subqw = new QueryWrapper<>();
|
||||||
|
subqw.eq("iz_enabled", "Y");
|
||||||
|
subqw.eq("main_id", sendOrderRule.getId());
|
||||||
|
subqw.orderByAsc("sort");
|
||||||
|
ruleSubList = sendOrderRuleSubService.list(subqw);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取在线,有指令权限的员工,并获取员工的接单上限、收益、服务时长、单次
|
* 获取在线,有指令权限的员工,并获取员工的接单上限、收益、服务时长、单次
|
||||||
* @param directiveId
|
* @param directiveId
|
||||||
|
|
@ -64,12 +92,14 @@ public class CareOrdersServiceImpl extends ServiceImpl<CareOrdersMapper, CareOrd
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public Result<?> generateOrdersBatch(){
|
public Result<?> generateOrdersBatch(){
|
||||||
|
//获取派单规则
|
||||||
|
getSendOrderRule();
|
||||||
List<CareOrders> ordersList = baseMapper.queryDataPoolList(null);
|
List<CareOrders> ordersList = baseMapper.queryDataPoolList(null);
|
||||||
for(int i=0;i<ordersList.size();i++){
|
for(int i=0;i<ordersList.size();i++){
|
||||||
CareOrders orders = ordersList.get(i);
|
CareOrders orders = ordersList.get(i);
|
||||||
generateOrdersSub(orders);
|
generateOrdersSub(orders);
|
||||||
}
|
}
|
||||||
return null;
|
return Result.OK();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -123,7 +153,6 @@ public class CareOrdersServiceImpl extends ServiceImpl<CareOrdersMapper, CareOrd
|
||||||
ordersSub.setIzFinish("N");
|
ordersSub.setIzFinish("N");
|
||||||
ordersSubService.save(ordersSub);//生成工单子表
|
ordersSubService.save(ordersSub);//生成工单子表
|
||||||
}
|
}
|
||||||
|
|
||||||
System.out.println("护理单元:"+orders.getNuId()+",服务时间:"+orders.getStartTime()+",服务员工:"+employee.getEmployeeName()+",获得积分:"+employee.getLevel());
|
System.out.println("护理单元:"+orders.getNuId()+",服务时间:"+orders.getStartTime()+",服务员工:"+employee.getEmployeeName()+",获得积分:"+employee.getLevel());
|
||||||
System.out.println("");
|
System.out.println("");
|
||||||
System.out.println("");
|
System.out.println("");
|
||||||
|
|
@ -138,71 +167,188 @@ public class CareOrdersServiceImpl extends ServiceImpl<CareOrdersMapper, CareOrd
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
private CareOrders employeeScreening(String directiveIds, String customerId, String employeeIds, Date startTime){
|
private CareOrders employeeScreening(String directiveIds, String customerId, String employeeIds, Date startTime){
|
||||||
|
if (sendOrderRule.getPriorityCode().equals("1")) {
|
||||||
List<CareOrders> empList = getEmpPermissionAndOnline(directiveIds,employeeIds,startTime);
|
//按优先级
|
||||||
Map<String,String> orderlyMap = getEmpOrderly(customerId);
|
return getByPriority(directiveIds, customerId, startTime, employeeIds);
|
||||||
if(empList.size()>0){
|
}
|
||||||
for(int i=0;i<empList.size();i++){
|
if (sendOrderRule.getPriorityCode().equals("2")) {
|
||||||
CareOrders emp = empList.get(i);
|
//按人头
|
||||||
System.out.println("员工信息:"+emp.getEmployeeName()+","+emp.getOrderCap()+","+emp.getOrderNum()+","+emp.getTotalDuration()+","+emp.getTotalComPrice()+","+emp.getMaxTime()+","+emp.getOwnCn()+","+emp.getIzFree());
|
return getByHeadCount(directiveIds, customerId, startTime, employeeIds);
|
||||||
String employeeId = emp.getEmployeeId();
|
}
|
||||||
if(emp.getIzFree().equals(1)){
|
if (sendOrderRule.getPriorityCode().equals("3")) {
|
||||||
Integer empLevel = emp.getLevel();
|
//1v1特殊
|
||||||
empLevel = empLevel + empList.size()*5; //提高5N等级
|
return getBySpecial();
|
||||||
emp.setLevel(empLevel);
|
|
||||||
}
|
|
||||||
System.out.println("员工获取空闲积分信息:"+emp.getEmployeeId()+"-"+emp.getEmployeeName()+"["+emp.getLevel()+"]");
|
|
||||||
if(orderlyMap!=null){
|
|
||||||
String orderlyId = orderlyMap.get(employeeId);
|
|
||||||
if(orderlyId!=null&&!orderlyId.equals("")){
|
|
||||||
Integer empLevel = emp.getLevel();
|
|
||||||
empLevel = empLevel + empList.size()*3; //提高4N等级
|
|
||||||
emp.setLevel(empLevel);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
System.out.println("员工获取指定护理积分信息:"+emp.getEmployeeId()+"-"+emp.getEmployeeName()+"["+emp.getLevel()+"]");
|
|
||||||
}
|
|
||||||
//通过工单次数排序数据来设置优先级
|
|
||||||
sortByNumAndSetLevel(empList);
|
|
||||||
for(int i=0;i<empList.size();i++){
|
|
||||||
CareOrders emp = empList.get(i);
|
|
||||||
System.out.println("员工获取工单数积分信息:"+emp.getEmployeeId()+"-"+emp.getEmployeeName()+"["+emp.getLevel()+"]");
|
|
||||||
}
|
|
||||||
//通过总收益排序数据来设置优先级
|
|
||||||
sortByPriceAndSetLevel(empList);
|
|
||||||
for(int i=0;i<empList.size();i++){
|
|
||||||
CareOrders emp = empList.get(i);
|
|
||||||
System.out.println("员工获取工单收益积分信息:"+emp.getEmployeeId()+"-"+emp.getEmployeeName()+"["+emp.getLevel()+"]");
|
|
||||||
}
|
|
||||||
//通过服务时长排序数据来设置优先级
|
|
||||||
sortByDurationAndSetLevel(empList);
|
|
||||||
for(int i=0;i<empList.size();i++){
|
|
||||||
CareOrders emp = empList.get(i);
|
|
||||||
System.out.println("员工获取服务时长积分信息:"+emp.getEmployeeId()+"-"+emp.getEmployeeName()+"["+emp.getLevel()+"]");
|
|
||||||
}
|
|
||||||
//通过最后一次接收派单时间排序数据来设置优先级
|
|
||||||
sortByMaxTimeAndSetLevel(empList);
|
|
||||||
for(int i=0;i<empList.size();i++){
|
|
||||||
CareOrders emp = empList.get(i);
|
|
||||||
System.out.println("员工获取派单时间积分信息:"+emp.getEmployeeId()+"-"+emp.getEmployeeName()+"["+emp.getLevel()+"]");
|
|
||||||
}
|
|
||||||
//按优先级排序数据
|
|
||||||
sortByLevel(empList);
|
|
||||||
for(int i=0;i<empList.size();i++){
|
|
||||||
CareOrders emp = empList.get(i);
|
|
||||||
System.out.println("员工获取总积分信息:"+emp.getEmployeeId()+"-"+emp.getEmployeeName()+"["+emp.getLevel()+"]");
|
|
||||||
}
|
|
||||||
//获取员工信息
|
|
||||||
return empList.get(0);
|
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过工单次数排序数据来设置优先级
|
* 优先级派单
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private CareOrders getByPriority(String directiveIds, String customerId, Date startTime, String employeeIds) {
|
||||||
|
List<CareOrders> empList = getEmpPermissionAndOnline(directiveIds,employeeIds,startTime);
|
||||||
|
if (empList.size() > 0) {
|
||||||
|
for(int i=0;i<empList.size();i++){
|
||||||
|
CareOrders emp = empList.get(i);
|
||||||
|
System.out.println("员工信息:"+emp.getEmployeeName()+","+emp.getOrderCap()+","+emp.getOrderNum()+","+emp.getTotalDuration()+","+emp.getTotalComPrice()+","+emp.getMaxTime()+","+emp.getOwnCn()+","+emp.getIzFree());
|
||||||
|
}
|
||||||
|
if(ruleSubList.size()>0){
|
||||||
|
for(SendOrderRuleSub ruleSub : ruleSubList){
|
||||||
|
switch (ruleSub.getPriorityCode()) {
|
||||||
|
case 1:
|
||||||
|
//空闲积分
|
||||||
|
sortByIzFree(empList,ruleSub.getCoefficient());
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
//专员积分
|
||||||
|
sortByOrderly(empList,ruleSub.getCoefficient(),customerId);
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
//单次积分
|
||||||
|
sortByNumAndSetLevel(empList,ruleSub.getCoefficient());
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
//收益积分
|
||||||
|
sortByPriceAndSetLevel(empList,ruleSub.getCoefficient());
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
//服务时长积分
|
||||||
|
sortByDurationAndSetLevel(empList,ruleSub.getCoefficient());
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
//最后接单时间积分
|
||||||
|
sortByMaxTimeAndSetLevel(empList,ruleSub.getCoefficient());
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
//超出上限积分
|
||||||
|
sortByLimit(empList,ruleSub.getCoefficient());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//获取员工信息
|
||||||
|
sortEmpList(empList);
|
||||||
|
return empList.get(0);
|
||||||
|
}else{
|
||||||
|
//随机获取一个员工
|
||||||
|
Random random = new Random();
|
||||||
|
return empList.get(random.nextInt(empList.size()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按人头派单
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private CareOrders getByHeadCount(String directiveIds, String customerId, Date startTime, String employeeIds) {
|
||||||
|
List<CareOrders> empList = getEmpPermissionAndOnline(directiveIds,employeeIds,startTime);
|
||||||
|
if (empList.size() > 0) {
|
||||||
|
for(int i=0;i<empList.size();i++){
|
||||||
|
CareOrders emp = empList.get(i);
|
||||||
|
System.out.println("员工信息:"+emp.getEmployeeName()+","+emp.getOrderCap()+","+emp.getOrderNum()+","+emp.getTotalDuration()+","+emp.getTotalComPrice()+","+emp.getMaxTime()+","+emp.getOwnCn()+","+emp.getIzFree());
|
||||||
|
}
|
||||||
|
//获取指定护理员工列表,不指定的排除掉
|
||||||
|
getByOrderly(empList,customerId);
|
||||||
|
if(ruleSubList.size()>0){
|
||||||
|
for(SendOrderRuleSub ruleSub : ruleSubList){
|
||||||
|
switch (ruleSub.getPriorityCode()) {
|
||||||
|
case 1:
|
||||||
|
//空闲积分
|
||||||
|
sortByIzFree(empList,ruleSub.getCoefficient());
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
//单次积分
|
||||||
|
sortByNumAndSetLevel(empList,ruleSub.getCoefficient());
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
//收益积分
|
||||||
|
sortByPriceAndSetLevel(empList,ruleSub.getCoefficient());
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
//服务时长积分
|
||||||
|
sortByDurationAndSetLevel(empList,ruleSub.getCoefficient());
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
//最后接单时间积分
|
||||||
|
sortByMaxTimeAndSetLevel(empList,ruleSub.getCoefficient());
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
//超出上限积分
|
||||||
|
sortByLimit(empList,ruleSub.getCoefficient());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//获取员工信息
|
||||||
|
sortEmpList(empList);
|
||||||
|
return empList.get(0);
|
||||||
|
}else{
|
||||||
|
//随机获取一个员工
|
||||||
|
Random random = new Random();
|
||||||
|
return empList.get(random.nextInt(empList.size()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 1V1派单
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
private CareOrders getBySpecial() {
|
||||||
|
//获取长者指定的员工,如在线直接派单
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过员工空闲状态来设置优先级
|
||||||
|
*
|
||||||
* @param empList
|
* @param empList
|
||||||
*/
|
*/
|
||||||
public void sortByNumAndSetLevel(List<CareOrders> empList) {
|
public void sortByIzFree(List<CareOrders> empList, Integer coefficient) {
|
||||||
|
for (int i = 0; i < empList.size(); i++) {
|
||||||
|
CareOrders emp = empList.get(i);
|
||||||
|
if (emp.getIzFree().equals(1)) {
|
||||||
|
Integer empLevel = emp.getLevel();
|
||||||
|
empLevel = empLevel + empList.size() * coefficient; //提高N等级
|
||||||
|
emp.setLevel(empLevel);
|
||||||
|
}
|
||||||
|
System.out.println("员工获取空闲积分信息:"+emp.getEmployeeId()+"-"+emp.getEmployeeName()+"["+emp.getLevel()+"]");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过员工专项指定状态来设置优先级
|
||||||
|
*
|
||||||
|
* @param empList
|
||||||
|
*/
|
||||||
|
public void sortByOrderly(List<CareOrders> empList,Integer coefficient,String customerId) {
|
||||||
|
for (int i = 0; i < empList.size(); i++) {
|
||||||
|
CareOrders emp = empList.get(i);
|
||||||
|
String employeeId = emp.getEmployeeId();
|
||||||
|
Map<String, String> orderlyMap = getEmpOrderly(customerId);
|
||||||
|
if (orderlyMap != null) {
|
||||||
|
String orderlyId = orderlyMap.get(employeeId);
|
||||||
|
if (orderlyId != null && !orderlyId.equals("")) {
|
||||||
|
Integer empLevel = emp.getLevel();
|
||||||
|
empLevel = empLevel + empList.size() * coefficient; //提高N等级
|
||||||
|
emp.setLevel(empLevel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
System.out.println("员工获取指定护理积分信息:"+emp.getEmployeeId()+"-"+emp.getEmployeeName()+"["+emp.getLevel()+"]");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过工单次数排序数据来设置优先级
|
||||||
|
*
|
||||||
|
* @param empList
|
||||||
|
*/
|
||||||
|
public void sortByNumAndSetLevel(List<CareOrders> empList,Integer coefficient) {
|
||||||
// 根据orderNum倒序排序,并为level顺序赋值
|
// 根据orderNum倒序排序,并为level顺序赋值
|
||||||
List<CareOrders> sortedEmployees = empList.stream()
|
List<CareOrders> sortedEmployees = empList.stream()
|
||||||
.sorted(Comparator.comparing(CareOrders::getOrderNum).reversed())
|
.sorted(Comparator.comparing(CareOrders::getOrderNum).reversed())
|
||||||
|
|
@ -210,10 +356,12 @@ public class CareOrdersServiceImpl extends ServiceImpl<CareOrdersMapper, CareOrd
|
||||||
|
|
||||||
// 为level字段顺序赋值1,2,3...
|
// 为level字段顺序赋值1,2,3...
|
||||||
for (int i = 0; i < sortedEmployees.size(); i++) {
|
for (int i = 0; i < sortedEmployees.size(); i++) {
|
||||||
Integer levle = sortedEmployees.get(i).getLevel()+i+1;
|
CareOrders emp = sortedEmployees.get(i);
|
||||||
sortedEmployees.get(i).setLevel(levle);
|
Integer levle = emp.getLevel()*coefficient + i + 1;
|
||||||
}
|
emp.setLevel(levle);
|
||||||
|
|
||||||
|
System.out.println("员工获取工单数积分信息:"+emp.getEmployeeId()+"-"+emp.getEmployeeName()+"["+emp.getLevel()+"]");
|
||||||
|
}
|
||||||
// 如果需要返回新列表,可以返回sortedEmployees
|
// 如果需要返回新列表,可以返回sortedEmployees
|
||||||
// 如果要在原列表上修改,可以清空原列表并添加所有元素
|
// 如果要在原列表上修改,可以清空原列表并添加所有元素
|
||||||
empList.clear();
|
empList.clear();
|
||||||
|
|
@ -222,9 +370,10 @@ public class CareOrdersServiceImpl extends ServiceImpl<CareOrdersMapper, CareOrd
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过总收益排序数据来设置优先级
|
* 通过总收益排序数据来设置优先级
|
||||||
|
*
|
||||||
* @param empList
|
* @param empList
|
||||||
*/
|
*/
|
||||||
public void sortByPriceAndSetLevel(List<CareOrders> empList) {
|
public void sortByPriceAndSetLevel(List<CareOrders> empList,Integer coefficient) {
|
||||||
// 根据totalComPrice倒序排序,并为level顺序赋值
|
// 根据totalComPrice倒序排序,并为level顺序赋值
|
||||||
List<CareOrders> sortedEmployees = empList.stream()
|
List<CareOrders> sortedEmployees = empList.stream()
|
||||||
.sorted(Comparator.comparing(CareOrders::getTotalComPrice).reversed())
|
.sorted(Comparator.comparing(CareOrders::getTotalComPrice).reversed())
|
||||||
|
|
@ -232,8 +381,11 @@ public class CareOrdersServiceImpl extends ServiceImpl<CareOrdersMapper, CareOrd
|
||||||
|
|
||||||
// 为level字段顺序赋值1,2,3...
|
// 为level字段顺序赋值1,2,3...
|
||||||
for (int i = 0; i < sortedEmployees.size(); i++) {
|
for (int i = 0; i < sortedEmployees.size(); i++) {
|
||||||
Integer levle = sortedEmployees.get(i).getLevel()+i+1;
|
CareOrders emp = sortedEmployees.get(i);
|
||||||
sortedEmployees.get(i).setLevel(levle);
|
Integer levle = emp.getLevel()*coefficient + i + 1;
|
||||||
|
emp.setLevel(levle);
|
||||||
|
|
||||||
|
System.out.println("员工获取工单收益积分信息:"+emp.getEmployeeId()+"-"+emp.getEmployeeName()+"["+emp.getLevel()+"]");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 如果需要返回新列表,可以返回sortedEmployees
|
// 如果需要返回新列表,可以返回sortedEmployees
|
||||||
|
|
@ -244,9 +396,10 @@ public class CareOrdersServiceImpl extends ServiceImpl<CareOrdersMapper, CareOrd
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过服务时长排序数据来设置优先级
|
* 通过服务时长排序数据来设置优先级
|
||||||
|
*
|
||||||
* @param empList
|
* @param empList
|
||||||
*/
|
*/
|
||||||
public void sortByDurationAndSetLevel(List<CareOrders> empList) {
|
public void sortByDurationAndSetLevel(List<CareOrders> empList,Integer coefficient) {
|
||||||
// 根据totalDuration倒序排序,并为level顺序赋值
|
// 根据totalDuration倒序排序,并为level顺序赋值
|
||||||
List<CareOrders> sortedEmployees = empList.stream()
|
List<CareOrders> sortedEmployees = empList.stream()
|
||||||
.sorted(Comparator.comparing(CareOrders::getTotalDuration).reversed())
|
.sorted(Comparator.comparing(CareOrders::getTotalDuration).reversed())
|
||||||
|
|
@ -254,8 +407,11 @@ public class CareOrdersServiceImpl extends ServiceImpl<CareOrdersMapper, CareOrd
|
||||||
|
|
||||||
// 为level字段顺序赋值1,2,3...
|
// 为level字段顺序赋值1,2,3...
|
||||||
for (int i = 0; i < sortedEmployees.size(); i++) {
|
for (int i = 0; i < sortedEmployees.size(); i++) {
|
||||||
Integer levle = sortedEmployees.get(i).getLevel()+i+1;
|
CareOrders emp = sortedEmployees.get(i);
|
||||||
sortedEmployees.get(i).setLevel(levle);
|
Integer levle = emp.getLevel()*coefficient + i + 1;
|
||||||
|
emp.setLevel(levle);
|
||||||
|
|
||||||
|
System.out.println("员工获取服务时长积分信息:"+emp.getEmployeeId()+"-"+emp.getEmployeeName()+"["+emp.getLevel()+"]");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 如果需要返回新列表,可以返回sortedEmployees
|
// 如果需要返回新列表,可以返回sortedEmployees
|
||||||
|
|
@ -266,9 +422,10 @@ public class CareOrdersServiceImpl extends ServiceImpl<CareOrdersMapper, CareOrd
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过最后一次接收派单时间排序数据来设置优先级
|
* 通过最后一次接收派单时间排序数据来设置优先级
|
||||||
|
*
|
||||||
* @param empList
|
* @param empList
|
||||||
*/
|
*/
|
||||||
public void sortByMaxTimeAndSetLevel(List<CareOrders> empList) {
|
public void sortByMaxTimeAndSetLevel(List<CareOrders> empList,Integer coefficient) {
|
||||||
// 根据maxTime倒序排序,并为level顺序赋值
|
// 根据maxTime倒序排序,并为level顺序赋值
|
||||||
List<CareOrders> sortedEmployees = empList.stream()
|
List<CareOrders> sortedEmployees = empList.stream()
|
||||||
.sorted(Comparator.comparing(
|
.sorted(Comparator.comparing(
|
||||||
|
|
@ -279,8 +436,11 @@ public class CareOrdersServiceImpl extends ServiceImpl<CareOrdersMapper, CareOrd
|
||||||
|
|
||||||
// 为level字段顺序赋值1,2,3...
|
// 为level字段顺序赋值1,2,3...
|
||||||
for (int i = 0; i < sortedEmployees.size(); i++) {
|
for (int i = 0; i < sortedEmployees.size(); i++) {
|
||||||
Integer levle = sortedEmployees.get(i).getLevel()+i+1;
|
CareOrders emp = sortedEmployees.get(i);
|
||||||
sortedEmployees.get(i).setLevel(levle);
|
Integer levle = emp.getLevel()*coefficient + i + 1;
|
||||||
|
emp.setLevel(levle);
|
||||||
|
|
||||||
|
System.out.println("员工获取派单时间积分信息:"+emp.getEmployeeId()+"-"+emp.getEmployeeName()+"["+emp.getLevel()+"]");
|
||||||
}
|
}
|
||||||
|
|
||||||
// 如果需要返回新列表,可以返回sortedEmployees
|
// 如果需要返回新列表,可以返回sortedEmployees
|
||||||
|
|
@ -290,25 +450,68 @@ public class CareOrdersServiceImpl extends ServiceImpl<CareOrdersMapper, CareOrd
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 按优先级排序数据
|
* 通过接单上限来排序数据来设置优先级
|
||||||
|
*
|
||||||
* @param empList
|
* @param empList
|
||||||
*/
|
*/
|
||||||
public void sortByLevel(List<CareOrders> empList) {
|
public void sortByLimit(List<CareOrders> empList,Integer coefficient) {
|
||||||
for (int i = 0; i < empList.size(); i++) {
|
for (int i = 0; i < empList.size(); i++) {
|
||||||
//工单超出接单上限,降4N级
|
CareOrders emp = empList.get(i);
|
||||||
if(empList.get(i).getOwnCn()>=empList.get(i).getOrderCap()){
|
//工单超出接单上限,降N级
|
||||||
Integer levle = empList.get(i).getLevel()-empList.size()*4;
|
if (emp.getOwnCn() >= emp.getOrderCap()) {
|
||||||
empList.get(i).setLevel(levle);
|
Integer levle = emp.getLevel() + empList.size() * coefficient;
|
||||||
|
emp.setLevel(levle);
|
||||||
|
|
||||||
|
System.out.println("员工获取单上限积分信息:"+emp.getEmployeeId()+"-"+emp.getEmployeeName()+"["+emp.getLevel()+"]");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 按优先级排序数据
|
||||||
|
*
|
||||||
|
* @param empList
|
||||||
|
*/
|
||||||
|
public void sortEmpList(List<CareOrders> empList) {
|
||||||
//为level顺序
|
//为level顺序
|
||||||
List<CareOrders> sortedEmployees = empList.stream()
|
List<CareOrders> sortedEmployees = empList.stream()
|
||||||
.sorted(Comparator.comparing(CareOrders::getLevel).reversed())
|
.sorted(Comparator.comparing(CareOrders::getLevel).reversed())
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
// 如果需要返回新列表,可以返回sortedEmployees
|
// 如果需要返回新列表,可以返回sortedEmployees
|
||||||
// 如果要在原列表上修改,可以清空原列表并添加所有元素
|
// 如果要在原列表上修改,可以清空原列表并添加所有元素
|
||||||
empList.clear();
|
empList.clear();
|
||||||
empList.addAll(sortedEmployees);
|
empList.addAll(sortedEmployees);
|
||||||
|
for(int i=0;i<empList.size();i++){
|
||||||
|
CareOrders emp = empList.get(i);
|
||||||
|
System.out.println("员工获取总积分信息:"+emp.getEmployeeId()+"-"+emp.getEmployeeName()+"["+emp.getLevel()+"]");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取指定护理员工列表
|
||||||
|
*
|
||||||
|
* @param empList
|
||||||
|
*/
|
||||||
|
public void getByOrderly(List<CareOrders> empList,String customerId) {
|
||||||
|
List<CareOrders> newList = new ArrayList();
|
||||||
|
for (int i = 0; i < empList.size(); i++) {
|
||||||
|
CareOrders emp = empList.get(i);
|
||||||
|
String employeeId = emp.getEmployeeId();
|
||||||
|
Map<String, String> orderlyMap = getEmpOrderly(customerId);
|
||||||
|
if (orderlyMap != null) {
|
||||||
|
String orderlyId = orderlyMap.get(employeeId);
|
||||||
|
if (orderlyId != null && !orderlyId.equals("")) {
|
||||||
|
newList.add(emp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
empList.clear();
|
||||||
|
empList.addAll(newList);
|
||||||
|
for(int i=0;i<empList.size();i++){
|
||||||
|
CareOrders emp = empList.get(i);
|
||||||
|
System.out.println("获取指定护理员工信息:"+emp.getEmployeeId()+"-"+emp.getEmployeeName());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -225,6 +225,8 @@
|
||||||
update_time datetime(0) NULL DEFAULT NULL COMMENT '更新日期',
|
update_time datetime(0) NULL DEFAULT NULL COMMENT '更新日期',
|
||||||
del_flag varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '是否删除 0未删除 1删除',
|
del_flag varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '是否删除 0未删除 1删除',
|
||||||
remarks varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
|
remarks varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
|
||||||
|
initiator_id varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '发起人ID',
|
||||||
|
initiator_name varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '发起人姓名',
|
||||||
PRIMARY KEY (id) USING BTREE
|
PRIMARY KEY (id) USING BTREE
|
||||||
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '护理单元-服务指令-工单日志主表' ROW_FORMAT = Dynamic;
|
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '护理单元-服务指令-工单日志主表' ROW_FORMAT = Dynamic;
|
||||||
</update>
|
</update>
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,9 @@ import com.nu.modules.biz.logistics.order.mapper.LogisticsOrdersMapper;
|
||||||
import com.nu.modules.biz.logistics.order.service.ILogisticsOrdersService;
|
import com.nu.modules.biz.logistics.order.service.ILogisticsOrdersService;
|
||||||
import com.nu.modules.care.api.ILogisticsOrdersApi;
|
import com.nu.modules.care.api.ILogisticsOrdersApi;
|
||||||
import com.nu.modules.config.sendorderpriority.entity.SendOrderRule;
|
import com.nu.modules.config.sendorderpriority.entity.SendOrderRule;
|
||||||
|
import com.nu.modules.config.sendorderpriority.entity.SendOrderRuleSub;
|
||||||
import com.nu.modules.config.sendorderpriority.service.ISendOrderRuleService;
|
import com.nu.modules.config.sendorderpriority.service.ISendOrderRuleService;
|
||||||
|
import com.nu.modules.config.sendorderpriority.service.ISendOrderRuleSubService;
|
||||||
import com.nu.modules.mediamanage.entity.MediaManage;
|
import com.nu.modules.mediamanage.entity.MediaManage;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.jeecg.common.api.vo.Result;
|
import org.jeecg.common.api.vo.Result;
|
||||||
|
|
@ -30,6 +32,26 @@ public class LogisticsOrdersServiceImpl extends ServiceImpl<LogisticsOrdersMappe
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
ISendOrderRuleService sendOrderRuleService;
|
ISendOrderRuleService sendOrderRuleService;
|
||||||
|
@Autowired
|
||||||
|
ISendOrderRuleSubService sendOrderRuleSubService;
|
||||||
|
SendOrderRule sendOrderRule;
|
||||||
|
List<SendOrderRuleSub> ruleSubList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取派单规则
|
||||||
|
*/
|
||||||
|
private void getSendOrderRule(){
|
||||||
|
if(sendOrderRule == null){
|
||||||
|
QueryWrapper<SendOrderRule> qw = new QueryWrapper<>();
|
||||||
|
qw.eq("iz_enabled", "Y");
|
||||||
|
sendOrderRule = sendOrderRuleService.getOne(qw);
|
||||||
|
QueryWrapper<SendOrderRuleSub> subqw = new QueryWrapper<>();
|
||||||
|
subqw.eq("iz_enabled", "Y");
|
||||||
|
subqw.eq("main_id", sendOrderRule.getId());
|
||||||
|
subqw.orderByAsc("sort");
|
||||||
|
ruleSubList = sendOrderRuleSubService.list(subqw);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取在线,有指令权限的员工,并获取员工的接单上限、收益、服务时长、单次
|
* 获取在线,有指令权限的员工,并获取员工的接单上限、收益、服务时长、单次
|
||||||
|
|
@ -72,6 +94,8 @@ public class LogisticsOrdersServiceImpl extends ServiceImpl<LogisticsOrdersMappe
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public Result<?> generateOrdersBatch() {
|
public Result<?> generateOrdersBatch() {
|
||||||
|
//获取派单规则
|
||||||
|
getSendOrderRule();
|
||||||
List<LogisticsOrders> ordersList = baseMapper.queryDataPoolList(null);
|
List<LogisticsOrders> ordersList = baseMapper.queryDataPoolList(null);
|
||||||
for (int i = 0; i < ordersList.size(); i++) {
|
for (int i = 0; i < ordersList.size(); i++) {
|
||||||
LogisticsOrders orders = ordersList.get(i);
|
LogisticsOrders orders = ordersList.get(i);
|
||||||
|
|
@ -86,7 +110,6 @@ public class LogisticsOrdersServiceImpl extends ServiceImpl<LogisticsOrdersMappe
|
||||||
* @param orders
|
* @param orders
|
||||||
*/
|
*/
|
||||||
private void generateOrders(LogisticsOrders orders) {
|
private void generateOrders(LogisticsOrders orders) {
|
||||||
System.out.println("护理单元:" + orders.getNuId() + ",服务时间" + orders.getStartTime());
|
|
||||||
//获取满足条件的员工
|
//获取满足条件的员工
|
||||||
LogisticsOrders employee = employeeScreening(orders.getDirectiveId(), orders.getCustomerId(), orders.getStartTime());
|
LogisticsOrders employee = employeeScreening(orders.getDirectiveId(), orders.getCustomerId(), orders.getStartTime());
|
||||||
if (employee != null) {
|
if (employee != null) {
|
||||||
|
|
@ -95,10 +118,6 @@ public class LogisticsOrdersServiceImpl extends ServiceImpl<LogisticsOrdersMappe
|
||||||
orders.setIzStart("N");
|
orders.setIzStart("N");
|
||||||
orders.setIzFinish("N");
|
orders.setIzFinish("N");
|
||||||
this.save(orders);//生成工单主表
|
this.save(orders);//生成工单主表
|
||||||
System.out.println("护理单元:" + orders.getNuId() + ",服务时间:" + orders.getStartTime() + ",服务员工:" + employee.getEmployeeName() + ",获得积分:" + employee.getLevel());
|
|
||||||
System.out.println("");
|
|
||||||
System.out.println("");
|
|
||||||
System.out.println("");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -108,77 +127,18 @@ public class LogisticsOrdersServiceImpl extends ServiceImpl<LogisticsOrdersMappe
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
private LogisticsOrders employeeScreening(String directiveId, String customerId, Date startTime) {
|
private LogisticsOrders employeeScreening(String directiveId, String customerId, Date startTime) {
|
||||||
|
if (sendOrderRule.getPriorityCode().equals("1")) {
|
||||||
//获取派单规则
|
//按优先级
|
||||||
QueryWrapper<SendOrderRule> qw = new QueryWrapper<>();
|
return getByPriority(directiveId, customerId, startTime);
|
||||||
qw.eq("izEnabled", "Y");
|
|
||||||
SendOrderRule one = sendOrderRuleService.getOne(qw);
|
|
||||||
if (one.getPriorityCode().equals("1")) {
|
|
||||||
return getByPriority();
|
|
||||||
}
|
}
|
||||||
if (one.getPriorityCode().equals("2")) {
|
if (sendOrderRule.getPriorityCode().equals("2")) {
|
||||||
|
//按人头
|
||||||
return getByHeadCount();
|
return getByHeadCount();
|
||||||
}
|
}
|
||||||
if (one.getPriorityCode().equals("3")) {
|
if (sendOrderRule.getPriorityCode().equals("3")) {
|
||||||
|
//1v1特殊
|
||||||
return getBySpecial();
|
return getBySpecial();
|
||||||
}
|
}
|
||||||
|
|
||||||
List<LogisticsOrders> empList = getEmpPermissionAndOnline(directiveId, startTime);
|
|
||||||
Map<String, String> orderlyMap = getEmpOrderly(customerId);
|
|
||||||
if (empList.size() > 0) {
|
|
||||||
for (int i = 0; i < empList.size(); i++) {
|
|
||||||
LogisticsOrders emp = empList.get(i);
|
|
||||||
System.out.println("员工信息:" + emp.getEmployeeName() + "," + emp.getOrderCap() + "," + emp.getOrderNum() + "," + emp.getTotalDuration() + "," + emp.getTotalComPrice() + "," + emp.getMaxTime() + "," + emp.getOwnCn() + "," + emp.getIzFree());
|
|
||||||
String employeeId = emp.getEmployeeId();
|
|
||||||
if (emp.getIzFree().equals(1)) {
|
|
||||||
Integer empLevel = emp.getLevel();
|
|
||||||
empLevel = empLevel + empList.size() * 5; //提高5N等级
|
|
||||||
emp.setLevel(empLevel);
|
|
||||||
}
|
|
||||||
System.out.println("员工获取空闲积分信息:" + emp.getEmployeeId() + "-" + emp.getEmployeeName() + "[" + emp.getLevel() + "]");
|
|
||||||
if (orderlyMap != null) {
|
|
||||||
String orderlyId = orderlyMap.get(employeeId);
|
|
||||||
if (orderlyId != null && !orderlyId.equals("")) {
|
|
||||||
Integer empLevel = emp.getLevel();
|
|
||||||
empLevel = empLevel + empList.size() * 3; //提高4N等级
|
|
||||||
emp.setLevel(empLevel);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
System.out.println("员工获取指定护理积分信息:" + emp.getEmployeeId() + "-" + emp.getEmployeeName() + "[" + emp.getLevel() + "]");
|
|
||||||
}
|
|
||||||
//通过工单次数排序数据来设置优先级
|
|
||||||
sortByNumAndSetLevel(empList);
|
|
||||||
for (int i = 0; i < empList.size(); i++) {
|
|
||||||
LogisticsOrders emp = empList.get(i);
|
|
||||||
System.out.println("员工获取工单数积分信息:" + emp.getEmployeeId() + "-" + emp.getEmployeeName() + "[" + emp.getLevel() + "]");
|
|
||||||
}
|
|
||||||
//通过总收益排序数据来设置优先级
|
|
||||||
sortByPriceAndSetLevel(empList);
|
|
||||||
for (int i = 0; i < empList.size(); i++) {
|
|
||||||
LogisticsOrders emp = empList.get(i);
|
|
||||||
System.out.println("员工获取工单收益积分信息:" + emp.getEmployeeId() + "-" + emp.getEmployeeName() + "[" + emp.getLevel() + "]");
|
|
||||||
}
|
|
||||||
//通过服务时长排序数据来设置优先级
|
|
||||||
sortByDurationAndSetLevel(empList);
|
|
||||||
for (int i = 0; i < empList.size(); i++) {
|
|
||||||
LogisticsOrders emp = empList.get(i);
|
|
||||||
System.out.println("员工获取服务时长积分信息:" + emp.getEmployeeId() + "-" + emp.getEmployeeName() + "[" + emp.getLevel() + "]");
|
|
||||||
}
|
|
||||||
//通过最后一次接收派单时间排序数据来设置优先级
|
|
||||||
sortByMaxTimeAndSetLevel(empList);
|
|
||||||
for (int i = 0; i < empList.size(); i++) {
|
|
||||||
LogisticsOrders emp = empList.get(i);
|
|
||||||
System.out.println("员工获取派单时间积分信息:" + emp.getEmployeeId() + "-" + emp.getEmployeeName() + "[" + emp.getLevel() + "]");
|
|
||||||
}
|
|
||||||
//按优先级排序数据
|
|
||||||
sortByLevel(empList);
|
|
||||||
for (int i = 0; i < empList.size(); i++) {
|
|
||||||
LogisticsOrders emp = empList.get(i);
|
|
||||||
System.out.println("员工获取总积分信息:" + emp.getEmployeeId() + "-" + emp.getEmployeeName() + "[" + emp.getLevel() + "]");
|
|
||||||
}
|
|
||||||
//获取员工信息
|
|
||||||
return empList.get(0);
|
|
||||||
}
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -187,8 +147,51 @@ public class LogisticsOrdersServiceImpl extends ServiceImpl<LogisticsOrdersMappe
|
||||||
*
|
*
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
private LogisticsOrders getByPriority() {
|
private LogisticsOrders getByPriority(String directiveId, String customerId, Date startTime) {
|
||||||
|
List<LogisticsOrders> empList = getEmpPermissionAndOnline(directiveId, startTime);
|
||||||
|
if (empList.size() > 0) {
|
||||||
|
if(ruleSubList.size()>0){
|
||||||
|
for(SendOrderRuleSub ruleSub : ruleSubList){
|
||||||
|
switch (ruleSub.getPriorityCode()) {
|
||||||
|
case 1:
|
||||||
|
//空闲积分
|
||||||
|
sortByIzFree(empList,ruleSub.getCoefficient());
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
//专员积分
|
||||||
|
sortByOrderly(empList,ruleSub.getCoefficient(),customerId);
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
//单次积分
|
||||||
|
sortByNumAndSetLevel(empList,ruleSub.getCoefficient());
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
//收益积分
|
||||||
|
sortByPriceAndSetLevel(empList,ruleSub.getCoefficient());
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
//服务时长积分
|
||||||
|
sortByDurationAndSetLevel(empList,ruleSub.getCoefficient());
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
//最后接单时间积分
|
||||||
|
sortByMaxTimeAndSetLevel(empList,ruleSub.getCoefficient());
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
//超出上限积分
|
||||||
|
sortByLimit(empList,ruleSub.getCoefficient());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//获取员工信息
|
||||||
|
sortEmpList(empList);
|
||||||
|
return empList.get(0);
|
||||||
|
}else{
|
||||||
|
//随机获取一个员工
|
||||||
|
Random random = new Random();
|
||||||
|
return empList.get(random.nextInt(empList.size()));
|
||||||
|
}
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -212,12 +215,49 @@ public class LogisticsOrdersServiceImpl extends ServiceImpl<LogisticsOrdersMappe
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过员工空闲状态来设置优先级
|
||||||
|
*
|
||||||
|
* @param empList
|
||||||
|
*/
|
||||||
|
public void sortByIzFree(List<LogisticsOrders> empList,Integer coefficient) {
|
||||||
|
for (int i = 0; i < empList.size(); i++) {
|
||||||
|
LogisticsOrders emp = empList.get(i);
|
||||||
|
if (emp.getIzFree().equals(1)) {
|
||||||
|
Integer empLevel = emp.getLevel();
|
||||||
|
empLevel = empLevel + empList.size() * coefficient; //提高5N等级
|
||||||
|
emp.setLevel(empLevel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过员工专项指定状态来设置优先级
|
||||||
|
*
|
||||||
|
* @param empList
|
||||||
|
*/
|
||||||
|
public void sortByOrderly(List<LogisticsOrders> empList,Integer coefficient,String customerId) {
|
||||||
|
for (int i = 0; i < empList.size(); i++) {
|
||||||
|
LogisticsOrders emp = empList.get(i);
|
||||||
|
String employeeId = emp.getEmployeeId();
|
||||||
|
Map<String, String> orderlyMap = getEmpOrderly(customerId);
|
||||||
|
if (orderlyMap != null) {
|
||||||
|
String orderlyId = orderlyMap.get(employeeId);
|
||||||
|
if (orderlyId != null && !orderlyId.equals("")) {
|
||||||
|
Integer empLevel = emp.getLevel();
|
||||||
|
empLevel = empLevel + empList.size() * coefficient; //提高4N等级
|
||||||
|
emp.setLevel(empLevel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过工单次数排序数据来设置优先级
|
* 通过工单次数排序数据来设置优先级
|
||||||
*
|
*
|
||||||
* @param empList
|
* @param empList
|
||||||
*/
|
*/
|
||||||
public void sortByNumAndSetLevel(List<LogisticsOrders> empList) {
|
public void sortByNumAndSetLevel(List<LogisticsOrders> empList,Integer coefficient) {
|
||||||
// 根据orderNum倒序排序,并为level顺序赋值
|
// 根据orderNum倒序排序,并为level顺序赋值
|
||||||
List<LogisticsOrders> sortedEmployees = empList.stream()
|
List<LogisticsOrders> sortedEmployees = empList.stream()
|
||||||
.sorted(Comparator.comparing(LogisticsOrders::getOrderNum).reversed())
|
.sorted(Comparator.comparing(LogisticsOrders::getOrderNum).reversed())
|
||||||
|
|
@ -225,7 +265,7 @@ public class LogisticsOrdersServiceImpl extends ServiceImpl<LogisticsOrdersMappe
|
||||||
|
|
||||||
// 为level字段顺序赋值1,2,3...
|
// 为level字段顺序赋值1,2,3...
|
||||||
for (int i = 0; i < sortedEmployees.size(); i++) {
|
for (int i = 0; i < sortedEmployees.size(); i++) {
|
||||||
Integer levle = sortedEmployees.get(i).getLevel() + i + 1;
|
Integer levle = sortedEmployees.get(i).getLevel()*coefficient + i + 1;
|
||||||
sortedEmployees.get(i).setLevel(levle);
|
sortedEmployees.get(i).setLevel(levle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -240,7 +280,7 @@ public class LogisticsOrdersServiceImpl extends ServiceImpl<LogisticsOrdersMappe
|
||||||
*
|
*
|
||||||
* @param empList
|
* @param empList
|
||||||
*/
|
*/
|
||||||
public void sortByPriceAndSetLevel(List<LogisticsOrders> empList) {
|
public void sortByPriceAndSetLevel(List<LogisticsOrders> empList,Integer coefficient) {
|
||||||
// 根据totalComPrice倒序排序,并为level顺序赋值
|
// 根据totalComPrice倒序排序,并为level顺序赋值
|
||||||
List<LogisticsOrders> sortedEmployees = empList.stream()
|
List<LogisticsOrders> sortedEmployees = empList.stream()
|
||||||
.sorted(Comparator.comparing(LogisticsOrders::getTotalComPrice).reversed())
|
.sorted(Comparator.comparing(LogisticsOrders::getTotalComPrice).reversed())
|
||||||
|
|
@ -248,7 +288,7 @@ public class LogisticsOrdersServiceImpl extends ServiceImpl<LogisticsOrdersMappe
|
||||||
|
|
||||||
// 为level字段顺序赋值1,2,3...
|
// 为level字段顺序赋值1,2,3...
|
||||||
for (int i = 0; i < sortedEmployees.size(); i++) {
|
for (int i = 0; i < sortedEmployees.size(); i++) {
|
||||||
Integer levle = sortedEmployees.get(i).getLevel() + i + 1;
|
Integer levle = sortedEmployees.get(i).getLevel()*coefficient + i + 1;
|
||||||
sortedEmployees.get(i).setLevel(levle);
|
sortedEmployees.get(i).setLevel(levle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -263,7 +303,7 @@ public class LogisticsOrdersServiceImpl extends ServiceImpl<LogisticsOrdersMappe
|
||||||
*
|
*
|
||||||
* @param empList
|
* @param empList
|
||||||
*/
|
*/
|
||||||
public void sortByDurationAndSetLevel(List<LogisticsOrders> empList) {
|
public void sortByDurationAndSetLevel(List<LogisticsOrders> empList,Integer coefficient) {
|
||||||
// 根据totalDuration倒序排序,并为level顺序赋值
|
// 根据totalDuration倒序排序,并为level顺序赋值
|
||||||
List<LogisticsOrders> sortedEmployees = empList.stream()
|
List<LogisticsOrders> sortedEmployees = empList.stream()
|
||||||
.sorted(Comparator.comparing(LogisticsOrders::getTotalDuration).reversed())
|
.sorted(Comparator.comparing(LogisticsOrders::getTotalDuration).reversed())
|
||||||
|
|
@ -271,7 +311,7 @@ public class LogisticsOrdersServiceImpl extends ServiceImpl<LogisticsOrdersMappe
|
||||||
|
|
||||||
// 为level字段顺序赋值1,2,3...
|
// 为level字段顺序赋值1,2,3...
|
||||||
for (int i = 0; i < sortedEmployees.size(); i++) {
|
for (int i = 0; i < sortedEmployees.size(); i++) {
|
||||||
Integer levle = sortedEmployees.get(i).getLevel() + i + 1;
|
Integer levle = sortedEmployees.get(i).getLevel()*coefficient + i + 1;
|
||||||
sortedEmployees.get(i).setLevel(levle);
|
sortedEmployees.get(i).setLevel(levle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -286,7 +326,7 @@ public class LogisticsOrdersServiceImpl extends ServiceImpl<LogisticsOrdersMappe
|
||||||
*
|
*
|
||||||
* @param empList
|
* @param empList
|
||||||
*/
|
*/
|
||||||
public void sortByMaxTimeAndSetLevel(List<LogisticsOrders> empList) {
|
public void sortByMaxTimeAndSetLevel(List<LogisticsOrders> empList,Integer coefficient) {
|
||||||
// 根据maxTime倒序排序,并为level顺序赋值
|
// 根据maxTime倒序排序,并为level顺序赋值
|
||||||
List<LogisticsOrders> sortedEmployees = empList.stream()
|
List<LogisticsOrders> sortedEmployees = empList.stream()
|
||||||
.sorted(Comparator.comparing(
|
.sorted(Comparator.comparing(
|
||||||
|
|
@ -297,7 +337,7 @@ public class LogisticsOrdersServiceImpl extends ServiceImpl<LogisticsOrdersMappe
|
||||||
|
|
||||||
// 为level字段顺序赋值1,2,3...
|
// 为level字段顺序赋值1,2,3...
|
||||||
for (int i = 0; i < sortedEmployees.size(); i++) {
|
for (int i = 0; i < sortedEmployees.size(); i++) {
|
||||||
Integer levle = sortedEmployees.get(i).getLevel() + i + 1;
|
Integer levle = sortedEmployees.get(i).getLevel()*coefficient + i + 1;
|
||||||
sortedEmployees.get(i).setLevel(levle);
|
sortedEmployees.get(i).setLevel(levle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -307,24 +347,31 @@ public class LogisticsOrdersServiceImpl extends ServiceImpl<LogisticsOrdersMappe
|
||||||
empList.addAll(sortedEmployees);
|
empList.addAll(sortedEmployees);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过接单上限来排序数据来设置优先级
|
||||||
|
*
|
||||||
|
* @param empList
|
||||||
|
*/
|
||||||
|
public void sortByLimit(List<LogisticsOrders> empList,Integer coefficient) {
|
||||||
|
for (int i = 0; i < empList.size(); i++) {
|
||||||
|
//工单超出接单上限,降4N级
|
||||||
|
if (empList.get(i).getOwnCn() >= empList.get(i).getOrderCap()) {
|
||||||
|
Integer levle = empList.get(i).getLevel() + empList.size() * coefficient;
|
||||||
|
empList.get(i).setLevel(levle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 按优先级排序数据
|
* 按优先级排序数据
|
||||||
*
|
*
|
||||||
* @param empList
|
* @param empList
|
||||||
*/
|
*/
|
||||||
public void sortByLevel(List<LogisticsOrders> empList) {
|
public void sortEmpList(List<LogisticsOrders> empList) {
|
||||||
for (int i = 0; i < empList.size(); i++) {
|
|
||||||
//工单超出接单上限,降4N级
|
|
||||||
if (empList.get(i).getOwnCn() >= empList.get(i).getOrderCap()) {
|
|
||||||
Integer levle = empList.get(i).getLevel() - empList.size() * 4;
|
|
||||||
empList.get(i).setLevel(levle);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//为level顺序
|
//为level顺序
|
||||||
List<LogisticsOrders> sortedEmployees = empList.stream()
|
List<LogisticsOrders> sortedEmployees = empList.stream()
|
||||||
.sorted(Comparator.comparing(LogisticsOrders::getLevel).reversed())
|
.sorted(Comparator.comparing(LogisticsOrders::getLevel).reversed())
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
// 如果需要返回新列表,可以返回sortedEmployees
|
// 如果需要返回新列表,可以返回sortedEmployees
|
||||||
// 如果要在原列表上修改,可以清空原列表并添加所有元素
|
// 如果要在原列表上修改,可以清空原列表并添加所有元素
|
||||||
empList.clear();
|
empList.clear();
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,10 @@ public class SendOrderRule implements Serializable {
|
||||||
@TableId(type = IdType.ASSIGN_ID)
|
@TableId(type = IdType.ASSIGN_ID)
|
||||||
private String id;
|
private String id;
|
||||||
|
|
||||||
private String priorityCode;
|
/**优先级编码值*/
|
||||||
|
private Integer priorityCode;
|
||||||
|
|
||||||
|
/**优先级名称*/
|
||||||
private String priorityName;
|
private String priorityName;
|
||||||
|
|
||||||
/**是否启用 Y启用 N未启用*/
|
/**是否启用 Y启用 N未启用*/
|
||||||
|
|
|
||||||
|
|
@ -29,15 +29,24 @@ public class SendOrderRuleSub implements Serializable {
|
||||||
@TableId(type = IdType.ASSIGN_ID)
|
@TableId(type = IdType.ASSIGN_ID)
|
||||||
private String id;
|
private String id;
|
||||||
|
|
||||||
|
/**是否启用 Y启用 N未启用*/
|
||||||
private String mainId;
|
private String mainId;
|
||||||
|
|
||||||
private String priorityCode;
|
/**优先级编码值*/
|
||||||
|
private Integer priorityCode;
|
||||||
|
|
||||||
|
/**优先级名称*/
|
||||||
private String priorityName;
|
private String priorityName;
|
||||||
|
|
||||||
/**是否启用 Y启用 N未启用*/
|
/**是否启用 Y启用 N未启用*/
|
||||||
private String izEnabled;
|
private String izEnabled;
|
||||||
|
|
||||||
|
/**系数*/
|
||||||
|
private Integer coefficient;
|
||||||
|
|
||||||
|
/**排序*/
|
||||||
|
private Integer sort;
|
||||||
|
|
||||||
/**创建人*/
|
/**创建人*/
|
||||||
private String createBy;
|
private String createBy;
|
||||||
/**创建日期*/
|
/**创建日期*/
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue