新增后勤类服务指令api接口、实体类

This commit is contained in:
1378012178@qq.com 2025-12-02 13:36:17 +08:00
parent eaad08e8af
commit 8ae98ff4a9
4 changed files with 214 additions and 51 deletions

View File

@ -0,0 +1,139 @@
package com.nu.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* @Description: 后勤类服务指令工单表
* @Author: caolei
* @Date: 2025-12-1
* @Version: V1.0
*/
@Data
public class LogisticsOrdersEntity implements Serializable {
/**id*/
private String id;
/**数据池子表ID*/
private String poolId;
/**主表id*/
private String bizId;
/**护理单元id*/
private String nuId;
/**护理单元名称*/
private String nuName;
/**客户id*/
private String customerId;
/**客户姓名*/
private String customerName;
/**员工ID*/
private String employeeId;
/**员工姓名*/
private String employeeName;
/**服务指令id*/
private String directiveId;
/**服务指令名称*/
private String directiveName;
/**周期类型ID*/
private String cycleTypeId;
/**周期类型*/
private String cycleType;
/**周期值*/
private String cycleValue;
/**服务指令图片大图*/
private String previewFile;
/**服务指令图片大图-网络地址*/
private String netPreviewFile;
/**服务指令图片小图*/
private String previewFileSmall;
/**服务指令图片小图-网络地址*/
private String netPreviewFileSmall;
/**指令音频文件*/
private String mp3File;
/**指令音频文件-网络地址*/
private String netMp3File;
/**指令视频文件*/
private String mp4File;
/**指令视频文件-网络地址*/
private String netMp4File;
/**服务时长(分钟)*/
private String serviceDuration;
/**服务描述*/
private String serviceContent;
/**开始时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date startTime;
/**结束时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date endTime;
/**实际开始时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date beginTime;
/**实际结束时间*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date finishTime;
/**是否开始 Y是 N否*/
private String izStart;
/**是否完成 Y是 N否*/
private String izFinish;
/**创建人*/
private String createBy;
/**创建日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date createTime;
/**更新人*/
private String updateBy;
/**更新日期*/
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
private Date updateTime;
/**是否删除 0未删除 1删除*/
private String delFlag;
/**接单上限*/
private Integer orderCap;
/**最大时间*/
private Date maxTime;
/**单次*/
private Integer orderNum;
/**总服务时长*/
private Integer totalDuration;
/**总服务收益*/
private BigDecimal totalComPrice;
/**是否空闲 1空闲 0非空闲*/
private Integer izFree;
/**员工身上挂载的工单数,未完成工单即为挂单*/
private Integer ownCn;
/**员工id集合逗号分隔*/
private String employeeIds;
/**服务指令id集合逗号分隔*/
private String directiveIds;
/**优先级 数值越高优先级越高*/
//空闲状态提高3级 指定护理员提高2级
private Integer level;
}

View File

@ -599,7 +599,7 @@ public class QingLingServiceImpl implements IQinglingApi {
* 6修改仓库库存数量 当前的值 - 操作数量
*
* @param dto
* @return
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)

View File

@ -0,0 +1,10 @@
package com.nu.modules.care.api;
/**
* @Description: 后勤类服务指令工单主表
* @Author: zmy
* @Date: 2025-12-2
* @Version: V1.0
*/
public interface ILogisticsOrdersApi {
}

View File

@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.nu.modules.biz.logistics.order.entity.LogisticsOrders;
import com.nu.modules.biz.logistics.order.mapper.LogisticsOrdersMapper;
import com.nu.modules.biz.logistics.order.service.ILogisticsOrdersService;
import com.nu.modules.care.api.ILogisticsOrdersApi;
import com.nu.modules.config.sendorderpriority.entity.SendOrderRule;
import com.nu.modules.config.sendorderpriority.service.ISendOrderRuleService;
import com.nu.modules.mediamanage.entity.MediaManage;
@ -20,38 +21,40 @@ import java.util.stream.Collectors;
/**
* @Description: 后勤类服务指令工单主表
* @Author: caolei
* @Date: 2025-12-1
* @Date: 2025-12-1
* @Version: V1.0
*/
@Service
@Slf4j
public class LogisticsOrdersServiceImpl extends ServiceImpl<LogisticsOrdersMapper, LogisticsOrders> implements ILogisticsOrdersService {
public class LogisticsOrdersServiceImpl extends ServiceImpl<LogisticsOrdersMapper, LogisticsOrders> implements ILogisticsOrdersService, ILogisticsOrdersApi {
@Autowired
ISendOrderRuleService sendOrderRuleService;
/**
* 获取在线有指令权限的员工并获取员工的接单上限收益服务时长单次
*
* @param directiveId
* @return
*/
private List<LogisticsOrders> getEmpPermissionAndOnline(String directiveId, Date startTime){
return baseMapper.getEmpPermissionAndOnline(directiveId,startTime);
private List<LogisticsOrders> getEmpPermissionAndOnline(String directiveId, Date startTime) {
return baseMapper.getEmpPermissionAndOnline(directiveId, startTime);
}
/**
* 获取长者指定所有护理员
*
* @param customerId
* @return
*/
private Map<String,String> getEmpOrderly(String customerId){
private Map<String, String> getEmpOrderly(String customerId) {
Map<String, String> map = null;
LogisticsOrders orders = baseMapper.getEmpOrderly(customerId);
if(orders!=null){
if (orders != null) {
String empIds = orders.getEmployeeIds();
if(empIds!=null&&!empIds.equals("")){
if (empIds != null && !empIds.equals("")) {
String[] pairs = empIds.split(",");
if(pairs.length>0){
if (pairs.length > 0) {
map = new HashMap<>();
for (String pair : pairs) {
map.put(pair, pair);
@ -64,12 +67,13 @@ public class LogisticsOrdersServiceImpl extends ServiceImpl<LogisticsOrdersMappe
/**
* 指令池批量生成工单-定时调用
*
* @return
*/
@Override
public Result<?> generateOrdersBatch(){
public Result<?> generateOrdersBatch() {
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);
generateOrders(orders);
}
@ -78,19 +82,20 @@ public class LogisticsOrdersServiceImpl extends ServiceImpl<LogisticsOrdersMappe
/**
* 获取工单子表数据并进行处理
*
* @param orders
*/
private void generateOrders(LogisticsOrders orders){
System.out.println("护理单元:"+orders.getNuId()+",服务时间"+orders.getStartTime());
private void generateOrders(LogisticsOrders orders) {
System.out.println("护理单元:" + orders.getNuId() + ",服务时间" + orders.getStartTime());
//获取满足条件的员工
LogisticsOrders employee = employeeScreening(orders.getDirectiveId(),orders.getCustomerId(),orders.getStartTime());
if(employee!=null){
LogisticsOrders employee = employeeScreening(orders.getDirectiveId(), orders.getCustomerId(), orders.getStartTime());
if (employee != null) {
orders.setEmployeeId(employee.getEmployeeId());
orders.setEmployeeName(employee.getEmployeeName());
orders.setIzStart("N");
orders.setIzFinish("N");
this.save(orders);//生成工单主表
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("");
@ -99,76 +104,77 @@ public class LogisticsOrdersServiceImpl extends ServiceImpl<LogisticsOrdersMappe
/**
* 获取满足条件的员工
*
* @return
*/
private LogisticsOrders employeeScreening(String directiveId, String customerId, Date startTime){
private LogisticsOrders employeeScreening(String directiveId, String customerId, Date startTime) {
//获取派单规则
QueryWrapper<SendOrderRule> qw = new QueryWrapper<>();
qw.eq("izEnabled", "Y");
SendOrderRule one = sendOrderRuleService.getOne(qw);
if(one.getPriorityCode().equals("1")){
if (one.getPriorityCode().equals("1")) {
return getByPriority();
}
if(one.getPriorityCode().equals("2")){
if (one.getPriorityCode().equals("2")) {
return getByHeadCount();
}
if(one.getPriorityCode().equals("3")){
if (one.getPriorityCode().equals("3")) {
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++){
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());
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)){
if (emp.getIzFree().equals(1)) {
Integer empLevel = emp.getLevel();
empLevel = empLevel + empList.size()*5; //提高5N等级
empLevel = empLevel + empList.size() * 5; //提高5N等级
emp.setLevel(empLevel);
}
System.out.println("员工获取空闲积分信息:"+emp.getEmployeeId()+"-"+emp.getEmployeeName()+"["+emp.getLevel()+"]");
if(orderlyMap!=null){
System.out.println("员工获取空闲积分信息:" + emp.getEmployeeId() + "-" + emp.getEmployeeName() + "[" + emp.getLevel() + "]");
if (orderlyMap != null) {
String orderlyId = orderlyMap.get(employeeId);
if(orderlyId!=null&&!orderlyId.equals("")){
if (orderlyId != null && !orderlyId.equals("")) {
Integer empLevel = emp.getLevel();
empLevel = empLevel + empList.size()*3; //提高4N等级
empLevel = empLevel + empList.size() * 3; //提高4N等级
emp.setLevel(empLevel);
}
}
System.out.println("员工获取指定护理积分信息:"+emp.getEmployeeId()+"-"+emp.getEmployeeName()+"["+emp.getLevel()+"]");
System.out.println("员工获取指定护理积分信息:" + emp.getEmployeeId() + "-" + emp.getEmployeeName() + "[" + emp.getLevel() + "]");
}
//通过工单次数排序数据来设置优先级
sortByNumAndSetLevel(empList);
for(int i=0;i<empList.size();i++){
for (int i = 0; i < empList.size(); i++) {
LogisticsOrders emp = empList.get(i);
System.out.println("员工获取工单数积分信息:"+emp.getEmployeeId()+"-"+emp.getEmployeeName()+"["+emp.getLevel()+"]");
System.out.println("员工获取工单数积分信息:" + emp.getEmployeeId() + "-" + emp.getEmployeeName() + "[" + emp.getLevel() + "]");
}
//通过总收益排序数据来设置优先级
sortByPriceAndSetLevel(empList);
for(int i=0;i<empList.size();i++){
for (int i = 0; i < empList.size(); i++) {
LogisticsOrders emp = empList.get(i);
System.out.println("员工获取工单收益积分信息:"+emp.getEmployeeId()+"-"+emp.getEmployeeName()+"["+emp.getLevel()+"]");
System.out.println("员工获取工单收益积分信息:" + emp.getEmployeeId() + "-" + emp.getEmployeeName() + "[" + emp.getLevel() + "]");
}
//通过服务时长排序数据来设置优先级
sortByDurationAndSetLevel(empList);
for(int i=0;i<empList.size();i++){
for (int i = 0; i < empList.size(); i++) {
LogisticsOrders emp = empList.get(i);
System.out.println("员工获取服务时长积分信息:"+emp.getEmployeeId()+"-"+emp.getEmployeeName()+"["+emp.getLevel()+"]");
System.out.println("员工获取服务时长积分信息:" + emp.getEmployeeId() + "-" + emp.getEmployeeName() + "[" + emp.getLevel() + "]");
}
//通过最后一次接收派单时间排序数据来设置优先级
sortByMaxTimeAndSetLevel(empList);
for(int i=0;i<empList.size();i++){
for (int i = 0; i < empList.size(); i++) {
LogisticsOrders emp = empList.get(i);
System.out.println("员工获取派单时间积分信息:"+emp.getEmployeeId()+"-"+emp.getEmployeeName()+"["+emp.getLevel()+"]");
System.out.println("员工获取派单时间积分信息:" + emp.getEmployeeId() + "-" + emp.getEmployeeName() + "[" + emp.getLevel() + "]");
}
//按优先级排序数据
sortByLevel(empList);
for(int i=0;i<empList.size();i++){
for (int i = 0; i < empList.size(); i++) {
LogisticsOrders emp = empList.get(i);
System.out.println("员工获取总积分信息:"+emp.getEmployeeId()+"-"+emp.getEmployeeName()+"["+emp.getLevel()+"]");
System.out.println("员工获取总积分信息:" + emp.getEmployeeId() + "-" + emp.getEmployeeName() + "[" + emp.getLevel() + "]");
}
//获取员工信息
return empList.get(0);
@ -178,33 +184,37 @@ public class LogisticsOrdersServiceImpl extends ServiceImpl<LogisticsOrdersMappe
/**
* 优先级派单
*
* @return
*/
private LogisticsOrders getByPriority(){
private LogisticsOrders getByPriority() {
return null;
}
/**
* 按人头派单
*
* @return
*/
private LogisticsOrders getByHeadCount(){
private LogisticsOrders getByHeadCount() {
return null;
}
/**
* 1V1派单
*
* @return
*/
private LogisticsOrders getBySpecial(){
private LogisticsOrders getBySpecial() {
return null;
}
/**
* 通过工单次数排序数据来设置优先级
*
* @param empList
*/
public void sortByNumAndSetLevel(List<LogisticsOrders> empList) {
@ -215,7 +225,7 @@ public class LogisticsOrdersServiceImpl extends ServiceImpl<LogisticsOrdersMappe
// 为level字段顺序赋值1,2,3...
for (int i = 0; i < sortedEmployees.size(); i++) {
Integer levle = sortedEmployees.get(i).getLevel()+i+1;
Integer levle = sortedEmployees.get(i).getLevel() + i + 1;
sortedEmployees.get(i).setLevel(levle);
}
@ -227,6 +237,7 @@ public class LogisticsOrdersServiceImpl extends ServiceImpl<LogisticsOrdersMappe
/**
* 通过总收益排序数据来设置优先级
*
* @param empList
*/
public void sortByPriceAndSetLevel(List<LogisticsOrders> empList) {
@ -237,7 +248,7 @@ public class LogisticsOrdersServiceImpl extends ServiceImpl<LogisticsOrdersMappe
// 为level字段顺序赋值1,2,3...
for (int i = 0; i < sortedEmployees.size(); i++) {
Integer levle = sortedEmployees.get(i).getLevel()+i+1;
Integer levle = sortedEmployees.get(i).getLevel() + i + 1;
sortedEmployees.get(i).setLevel(levle);
}
@ -249,6 +260,7 @@ public class LogisticsOrdersServiceImpl extends ServiceImpl<LogisticsOrdersMappe
/**
* 通过服务时长排序数据来设置优先级
*
* @param empList
*/
public void sortByDurationAndSetLevel(List<LogisticsOrders> empList) {
@ -259,7 +271,7 @@ public class LogisticsOrdersServiceImpl extends ServiceImpl<LogisticsOrdersMappe
// 为level字段顺序赋值1,2,3...
for (int i = 0; i < sortedEmployees.size(); i++) {
Integer levle = sortedEmployees.get(i).getLevel()+i+1;
Integer levle = sortedEmployees.get(i).getLevel() + i + 1;
sortedEmployees.get(i).setLevel(levle);
}
@ -271,6 +283,7 @@ public class LogisticsOrdersServiceImpl extends ServiceImpl<LogisticsOrdersMappe
/**
* 通过最后一次接收派单时间排序数据来设置优先级
*
* @param empList
*/
public void sortByMaxTimeAndSetLevel(List<LogisticsOrders> empList) {
@ -284,7 +297,7 @@ public class LogisticsOrdersServiceImpl extends ServiceImpl<LogisticsOrdersMappe
// 为level字段顺序赋值1,2,3...
for (int i = 0; i < sortedEmployees.size(); i++) {
Integer levle = sortedEmployees.get(i).getLevel()+i+1;
Integer levle = sortedEmployees.get(i).getLevel() + i + 1;
sortedEmployees.get(i).setLevel(levle);
}
@ -296,13 +309,14 @@ public class LogisticsOrdersServiceImpl extends ServiceImpl<LogisticsOrdersMappe
/**
* 按优先级排序数据
*
* @param empList
*/
public void sortByLevel(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;
if (empList.get(i).getOwnCn() >= empList.get(i).getOrderCap()) {
Integer levle = empList.get(i).getLevel() - empList.size() * 4;
empList.get(i).setLevel(levle);
}
}