【admin&front】 新增&优化 1、优化客户新增客户编号电话号码唯一 2、优化excel导出图片多线程压缩
parent
8058ce8a52
commit
f8e92b0b48
|
@ -142,9 +142,9 @@ public class ClientServiceImpl implements IClientService {
|
||||||
public void add(ClientParam clientParam) {
|
public void add(ClientParam clientParam) {
|
||||||
LambdaQueryWrapper<Client> queryWrapper = new LambdaQueryWrapper<Client>()
|
LambdaQueryWrapper<Client> queryWrapper = new LambdaQueryWrapper<Client>()
|
||||||
.eq(Client::getIsDelete, GlobalConstant.NOT_DELETE)
|
.eq(Client::getIsDelete, GlobalConstant.NOT_DELETE)
|
||||||
.eq(Client::getPhone, clientParam.getPhone())
|
.and(query -> query.eq(Client::getPhone, clientParam.getPhone())
|
||||||
.or()
|
.or()
|
||||||
.eq(Client::getClientNo, clientParam.getClientNo());
|
.eq(Client::getClientNo, clientParam.getClientNo()));
|
||||||
|
|
||||||
Integer count = clientMapper.selectCount(queryWrapper);
|
Integer count = clientMapper.selectCount(queryWrapper);
|
||||||
if(count > 0){
|
if(count > 0){
|
||||||
|
|
|
@ -136,6 +136,26 @@ public class MaintenanceOrderServiceImpl implements IMaintenanceOrderService {
|
||||||
|
|
||||||
MaintenanceOrderDto maintenanceOrderDto = new MaintenanceOrderDto();
|
MaintenanceOrderDto maintenanceOrderDto = new MaintenanceOrderDto();
|
||||||
BeanUtils.copyProperties(maintenanceOrderParam,maintenanceOrderDto);
|
BeanUtils.copyProperties(maintenanceOrderParam,maintenanceOrderDto);
|
||||||
|
|
||||||
|
//当登录的角色是客户角色的时候,工单列表只查这个客户的数据 1-客户-主管人员 2-客户-客服人员 11-客户-采购员
|
||||||
|
//1、判断当前用户角色是否是客户角色
|
||||||
|
SystemAuthAdmin systemAuthAdminById = systemAuthAdminMapper.findSystemAuthAdminById(AdminThreadLocal.getAdminId());
|
||||||
|
//1、1获取当前用户所属的客户
|
||||||
|
ClientContacts clientContacts = clientContactsMapper.findClientContactsByAdminId(Long.valueOf(systemAuthAdminById.getId()));
|
||||||
|
//1、2获取当前用户的角色
|
||||||
|
String role = systemAuthAdminById.getRole();
|
||||||
|
String[] roleStrings = role.split(","); // 分割字符串
|
||||||
|
int[] roles = new int[roleStrings.length]; // 创建一个整数数组来存储转换后的数字
|
||||||
|
for (int i = 0; i < roleStrings.length; i++) {
|
||||||
|
roles[i] = Integer.parseInt(roleStrings[i]); // 将字符串转换为整数
|
||||||
|
}
|
||||||
|
// 输出转换后的整数数组
|
||||||
|
for (int num : roles) {
|
||||||
|
if(num == 1 || num == 2 || num == 11){
|
||||||
|
maintenanceOrderDto.setClientId(clientContacts.getClientId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
IPage<MaintenanceOrderDto> iPage = maintenanceOrderMapper.list(new Page<>(page, limit), maintenanceOrderDto);
|
IPage<MaintenanceOrderDto> iPage = maintenanceOrderMapper.list(new Page<>(page, limit), maintenanceOrderDto);
|
||||||
|
|
||||||
List<MaintenanceOrderListVo> list = new LinkedList<>();
|
List<MaintenanceOrderListVo> list = new LinkedList<>();
|
||||||
|
@ -277,6 +297,7 @@ public class MaintenanceOrderServiceImpl implements IMaintenanceOrderService {
|
||||||
if(sparePartStockAudit != null){
|
if(sparePartStockAudit != null){
|
||||||
SparePartStockAuditDetailVo sparePartStockAuditDetailVo = new SparePartStockAuditDetailVo();
|
SparePartStockAuditDetailVo sparePartStockAuditDetailVo = new SparePartStockAuditDetailVo();
|
||||||
BeanUtils.copyProperties(sparePartStockAudit,sparePartStockAuditDetailVo);
|
BeanUtils.copyProperties(sparePartStockAudit,sparePartStockAuditDetailVo);
|
||||||
|
|
||||||
vo.setSparePartStockAuditDetailVo(sparePartStockAuditDetailVo);
|
vo.setSparePartStockAuditDetailVo(sparePartStockAuditDetailVo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -334,7 +355,7 @@ public class MaintenanceOrderServiceImpl implements IMaintenanceOrderService {
|
||||||
LambdaQueryWrapper<OrderOperateRecord> queryWrapper = new LambdaQueryWrapper<OrderOperateRecord>()
|
LambdaQueryWrapper<OrderOperateRecord> queryWrapper = new LambdaQueryWrapper<OrderOperateRecord>()
|
||||||
.eq(OrderOperateRecord::getOrderType, OrderOperateRecordEnum.MAINTENANCE.getStatus())
|
.eq(OrderOperateRecord::getOrderType, OrderOperateRecordEnum.MAINTENANCE.getStatus())
|
||||||
.eq(OrderOperateRecord::getOrderId, model.getId())
|
.eq(OrderOperateRecord::getOrderId, model.getId())
|
||||||
.orderByDesc(OrderOperateRecord::getCreateTime);
|
.orderByDesc(OrderOperateRecord::getId);
|
||||||
vo.setOrderOperateRecords(orderOperateRecordMapper.selectList(queryWrapper));;
|
vo.setOrderOperateRecords(orderOperateRecordMapper.selectList(queryWrapper));;
|
||||||
|
|
||||||
//配件领用状态
|
//配件领用状态
|
||||||
|
@ -440,16 +461,17 @@ public class MaintenanceOrderServiceImpl implements IMaintenanceOrderService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
model.setReceiverId(param.getReceiverId());
|
model.setReceiverId(param.getReceiverId());
|
||||||
model.setReceiverType(param.getReceiverType());
|
|
||||||
model.setOrderDistance(param.getOrderDistance());
|
|
||||||
model.setProvinceId(param.getProvinceId());
|
model.setProvinceId(param.getProvinceId());
|
||||||
model.setCityId(param.getCityId());
|
model.setCityId(param.getCityId());
|
||||||
model.setDistrictId(param.getDistrictId());
|
model.setDistrictId(param.getDistrictId());
|
||||||
model.setFaultId(param.getFaultId());
|
model.setFaultId(param.getFaultId());
|
||||||
model.setFaultDescription(param.getFaultDescription());
|
model.setFaultDescription(param.getFaultDescription());
|
||||||
model.setRemark(param.getRemark());
|
model.setRemark(param.getRemark());
|
||||||
|
|
||||||
//修改派单方式
|
//修改派单方式
|
||||||
if(param.getReceiverType() != null && param.getId() != null){
|
if(param.getReceiverType() != null && param.getId() != null){
|
||||||
|
//如果原本派单方式跟现在派单方式不一样就进行修改
|
||||||
|
if(!Objects.equals(model.getReceiverType(), param.getReceiverType())){
|
||||||
//原本派单方式
|
//原本派单方式
|
||||||
String oldReceiverType;
|
String oldReceiverType;
|
||||||
if(model.getReceiverType() == 0){
|
if(model.getReceiverType() == 0){
|
||||||
|
@ -470,21 +492,26 @@ public class MaintenanceOrderServiceImpl implements IMaintenanceOrderService {
|
||||||
,OrderOperateRecordEnum.ALTER_RECEIVER_TYPE.getDesc()
|
,OrderOperateRecordEnum.ALTER_RECEIVER_TYPE.getDesc()
|
||||||
,"【"+AdminThreadLocal.get("username")+"】已修改派单方式。原本派单方式为:" +
|
,"【"+AdminThreadLocal.get("username")+"】已修改派单方式。原本派单方式为:" +
|
||||||
oldReceiverType + ",已修改派单方式为:" + newReceiverType + "。");
|
oldReceiverType + ",已修改派单方式为:" + newReceiverType + "。");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
//修改抢单范围
|
//修改抢单范围
|
||||||
if(param.getOrderDistance() != null && param.getId() != null){
|
if(param.getOrderDistance() != null && param.getId() != null){
|
||||||
|
|
||||||
//新增订单操作记录
|
//新增订单操作记录
|
||||||
orderOperateRecordService.addMaintenanceOrder(model.getId()
|
orderOperateRecordService.addMaintenanceOrder(model.getId()
|
||||||
,OrderOperateRecordEnum.ALTER_ORDER_DISTANCE.getDesc()
|
,OrderOperateRecordEnum.ALTER_ORDER_DISTANCE.getDesc()
|
||||||
,"【"+AdminThreadLocal.get("username")+"】已修改抢单范围。原本抢单范围为:" +
|
,"【"+AdminThreadLocal.get("username")+"】已修改抢单范围。原本抢单范围为:" +
|
||||||
model.getOrderDistance() + "公里,已修改抢单范围为:" + model.getOrderDistance() + "公里。");
|
model.getOrderDistance() + "公里,已修改抢单范围为:" + param.getOrderDistance() + "公里。");
|
||||||
|
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
throw new OperateException("工单已被接单,无法编辑");
|
throw new OperateException("工单已被接单,无法编辑");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
model.setReceiverType(param.getReceiverType()); // 接单类型 0-区域派单;1-距离派单
|
||||||
|
model.setOrderDistance(param.getOrderDistance()); // 订单距离
|
||||||
maintenanceOrderMapper.updateById(model);
|
maintenanceOrderMapper.updateById(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@ import com.hcy.common.constant.TimeConstant;
|
||||||
import com.hcy.common.core.PageResult;
|
import com.hcy.common.core.PageResult;
|
||||||
import com.hcy.common.dto.order.*;
|
import com.hcy.common.dto.order.*;
|
||||||
import com.hcy.common.entity.client.Client;
|
import com.hcy.common.entity.client.Client;
|
||||||
|
import com.hcy.common.entity.client.ClientContacts;
|
||||||
import com.hcy.common.entity.fault.Fault;
|
import com.hcy.common.entity.fault.Fault;
|
||||||
import com.hcy.common.entity.order.*;
|
import com.hcy.common.entity.order.*;
|
||||||
import com.hcy.common.entity.setting.DictData;
|
import com.hcy.common.entity.setting.DictData;
|
||||||
|
@ -30,6 +31,7 @@ import com.hcy.common.enums.order.RepairOrderAuditStatusEnum;
|
||||||
import com.hcy.common.enums.order.RepairOrderStatusEnum;
|
import com.hcy.common.enums.order.RepairOrderStatusEnum;
|
||||||
import com.hcy.common.enums.order.RepairOrderStopEnum;
|
import com.hcy.common.enums.order.RepairOrderStopEnum;
|
||||||
import com.hcy.common.exception.OperateException;
|
import com.hcy.common.exception.OperateException;
|
||||||
|
import com.hcy.common.mapper.client.ClientContactsMapper;
|
||||||
import com.hcy.common.mapper.client.ClientMapper;
|
import com.hcy.common.mapper.client.ClientMapper;
|
||||||
import com.hcy.common.mapper.fault.FaultMapper;
|
import com.hcy.common.mapper.fault.FaultMapper;
|
||||||
import com.hcy.common.mapper.order.*;
|
import com.hcy.common.mapper.order.*;
|
||||||
|
@ -39,6 +41,7 @@ import com.hcy.common.mapper.system.SystemAuthAdminMapper;
|
||||||
import com.hcy.common.mapper.user.UserMapper;
|
import com.hcy.common.mapper.user.UserMapper;
|
||||||
import com.hcy.common.utils.StringUtil;
|
import com.hcy.common.utils.StringUtil;
|
||||||
import com.hcy.common.utils.TimeUtil;
|
import com.hcy.common.utils.TimeUtil;
|
||||||
|
import com.hcy.common.utils.excel.CustomImageModifyHandler;
|
||||||
import com.hcy.common.utils.excel.LocalImageModifyStrategy;
|
import com.hcy.common.utils.excel.LocalImageModifyStrategy;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.core.io.ClassPathResource;
|
import org.springframework.core.io.ClassPathResource;
|
||||||
|
@ -97,6 +100,9 @@ public class ParentRepairOrderServiceImpl implements IParentRepairOrderService {
|
||||||
@Resource
|
@Resource
|
||||||
SparePartMapper sparePartMapper;
|
SparePartMapper sparePartMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
ClientContactsMapper clientContactsMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 总维修单列表
|
* 总维修单列表
|
||||||
*
|
*
|
||||||
|
@ -289,6 +295,25 @@ public class ParentRepairOrderServiceImpl implements IParentRepairOrderService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//当登录的角色是客户角色的时候,工单列表只查这个客户的数据 1-客户-主管人员 2-客户-客服人员 11-客户-采购员
|
||||||
|
//1、判断当前用户角色是否是客户角色
|
||||||
|
SystemAuthAdmin systemAuthAdminById = systemAuthAdminMapper.findSystemAuthAdminById(AdminThreadLocal.getAdminId());
|
||||||
|
//1、1获取当前用户所属的客户
|
||||||
|
ClientContacts clientContacts = clientContactsMapper.findClientContactsByAdminId(Long.valueOf(systemAuthAdminById.getId()));
|
||||||
|
//1、2获取当前用户的角色
|
||||||
|
String role = systemAuthAdminById.getRole();
|
||||||
|
String[] roleStrings = role.split(","); // 分割字符串
|
||||||
|
int[] roles = new int[roleStrings.length]; // 创建一个整数数组来存储转换后的数字
|
||||||
|
for (int i = 0; i < roleStrings.length; i++) {
|
||||||
|
roles[i] = Integer.parseInt(roleStrings[i]); // 将字符串转换为整数
|
||||||
|
}
|
||||||
|
// 输出转换后的整数数组
|
||||||
|
for (int num : roles) {
|
||||||
|
if(num == 1 || num == 2 || num == 11){
|
||||||
|
parentRepairOrderDto.setClientId(clientContacts.getClientId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 2、 根据条件去查询出维修单信息
|
// 2、 根据条件去查询出维修单信息
|
||||||
IPage<ParentRepairOrderDto> iPage = parentRepairOrderMapper.dispatchItemList(new Page<>(page, limit), parentRepairOrderDto);
|
IPage<ParentRepairOrderDto> iPage = parentRepairOrderMapper.dispatchItemList(new Page<>(page, limit), parentRepairOrderDto);
|
||||||
|
|
||||||
|
@ -398,6 +423,10 @@ public class ParentRepairOrderServiceImpl implements IParentRepairOrderService {
|
||||||
// 设置每张图片的宽度为 100px,转换因子为 32
|
// 设置每张图片的宽度为 100px,转换因子为 32
|
||||||
new LocalImageModifyStrategy(100, 32))
|
new LocalImageModifyStrategy(100, 32))
|
||||||
.build();
|
.build();
|
||||||
|
//在不再需要线程池时,应该关闭它
|
||||||
|
LocalImageModifyStrategy localImageModifyStrategy = new LocalImageModifyStrategy();
|
||||||
|
localImageModifyStrategy.shutdownAndAwaitTermination();
|
||||||
|
|
||||||
//公共数据
|
//公共数据
|
||||||
OfferDetailEntity offerDetail = new OfferDetailEntity();
|
OfferDetailEntity offerDetail = new OfferDetailEntity();
|
||||||
//入仓单
|
//入仓单
|
||||||
|
|
|
@ -17,9 +17,11 @@ import com.hcy.common.core.PageResult;
|
||||||
import com.hcy.common.dto.order.OrderSparePart;
|
import com.hcy.common.dto.order.OrderSparePart;
|
||||||
import com.hcy.common.dto.order.RepairOrderAuditDto;
|
import com.hcy.common.dto.order.RepairOrderAuditDto;
|
||||||
import com.hcy.common.entity.client.Client;
|
import com.hcy.common.entity.client.Client;
|
||||||
|
import com.hcy.common.entity.client.ClientContacts;
|
||||||
import com.hcy.common.entity.fault.Fault;
|
import com.hcy.common.entity.fault.Fault;
|
||||||
import com.hcy.common.entity.order.*;
|
import com.hcy.common.entity.order.*;
|
||||||
import com.hcy.common.entity.sparePart.SparePart;
|
import com.hcy.common.entity.sparePart.SparePart;
|
||||||
|
import com.hcy.common.entity.system.SystemAuthAdmin;
|
||||||
import com.hcy.common.entity.user.User;
|
import com.hcy.common.entity.user.User;
|
||||||
import com.hcy.common.entity.warehouse.Warehouse;
|
import com.hcy.common.entity.warehouse.Warehouse;
|
||||||
import com.hcy.common.enums.audit.AuditStateEnum;
|
import com.hcy.common.enums.audit.AuditStateEnum;
|
||||||
|
@ -27,10 +29,12 @@ import com.hcy.common.enums.order.RepairOrderAuditStatusEnum;
|
||||||
import com.hcy.common.enums.order.RepairOrderStatusEnum;
|
import com.hcy.common.enums.order.RepairOrderStatusEnum;
|
||||||
import com.hcy.common.enums.order.RepairOrderStopEnum;
|
import com.hcy.common.enums.order.RepairOrderStopEnum;
|
||||||
import com.hcy.common.exception.OperateException;
|
import com.hcy.common.exception.OperateException;
|
||||||
|
import com.hcy.common.mapper.client.ClientContactsMapper;
|
||||||
import com.hcy.common.mapper.client.ClientMapper;
|
import com.hcy.common.mapper.client.ClientMapper;
|
||||||
import com.hcy.common.mapper.fault.FaultMapper;
|
import com.hcy.common.mapper.fault.FaultMapper;
|
||||||
import com.hcy.common.mapper.order.*;
|
import com.hcy.common.mapper.order.*;
|
||||||
import com.hcy.common.mapper.sparePart.SparePartMapper;
|
import com.hcy.common.mapper.sparePart.SparePartMapper;
|
||||||
|
import com.hcy.common.mapper.system.SystemAuthAdminMapper;
|
||||||
import com.hcy.common.mapper.user.UserMapper;
|
import com.hcy.common.mapper.user.UserMapper;
|
||||||
import com.hcy.common.mapper.warehouse.WarehouseMapper;
|
import com.hcy.common.mapper.warehouse.WarehouseMapper;
|
||||||
import com.hcy.common.plugin.notice.engine.SmsNotice;
|
import com.hcy.common.plugin.notice.engine.SmsNotice;
|
||||||
|
@ -84,6 +88,12 @@ public class RepairOrderAuditServiceImpl implements IRepairOrderAuditService {
|
||||||
@Resource
|
@Resource
|
||||||
WarehouseMapper warehouseMapper;
|
WarehouseMapper warehouseMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
SystemAuthAdminMapper systemAuthAdminMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
ClientContactsMapper clientContactsMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 维修模块审核列表
|
* 维修模块审核列表
|
||||||
*
|
*
|
||||||
|
@ -544,6 +554,25 @@ public class RepairOrderAuditServiceImpl implements IRepairOrderAuditService {
|
||||||
RepairOrderAuditDto repairOrderAuditDto = new RepairOrderAuditDto();
|
RepairOrderAuditDto repairOrderAuditDto = new RepairOrderAuditDto();
|
||||||
BeanUtils.copyProperties(repairOrderAuditParam,repairOrderAuditDto);
|
BeanUtils.copyProperties(repairOrderAuditParam,repairOrderAuditDto);
|
||||||
|
|
||||||
|
//当登录的角色是客户角色的时候,工单列表只查这个客户的数据 1-客户-主管人员 2-客户-客服人员 11-客户-采购员
|
||||||
|
//1、判断当前用户角色是否是客户角色
|
||||||
|
SystemAuthAdmin systemAuthAdminById = systemAuthAdminMapper.findSystemAuthAdminById(AdminThreadLocal.getAdminId());
|
||||||
|
//1、1获取当前用户所属的客户
|
||||||
|
ClientContacts clientContacts = clientContactsMapper.findClientContactsByAdminId(Long.valueOf(systemAuthAdminById.getId()));
|
||||||
|
//1、2获取当前用户的角色
|
||||||
|
String role = systemAuthAdminById.getRole();
|
||||||
|
String[] roleStrings = role.split(","); // 分割字符串
|
||||||
|
int[] roles = new int[roleStrings.length]; // 创建一个整数数组来存储转换后的数字
|
||||||
|
for (int i = 0; i < roleStrings.length; i++) {
|
||||||
|
roles[i] = Integer.parseInt(roleStrings[i]); // 将字符串转换为整数
|
||||||
|
}
|
||||||
|
// 输出转换后的整数数组
|
||||||
|
for (int num : roles) {
|
||||||
|
if(num == 1 || num == 2 || num == 11){
|
||||||
|
repairOrderAuditDto.setClientId(clientContacts.getClientId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
IPage<RepairOrderAuditDto> iPage = repairOrderAuditMapper.auditMattersList(new Page<>(page, limit), repairOrderAuditDto);
|
IPage<RepairOrderAuditDto> iPage = repairOrderAuditMapper.auditMattersList(new Page<>(page, limit), repairOrderAuditDto);
|
||||||
List<RepairOrderAuditListVo> list = new LinkedList<>();
|
List<RepairOrderAuditListVo> list = new LinkedList<>();
|
||||||
for(RepairOrderAuditDto item : iPage.getRecords()) {
|
for(RepairOrderAuditDto item : iPage.getRecords()) {
|
||||||
|
|
|
@ -16,6 +16,7 @@ import com.hcy.common.constant.GlobalConstant;
|
||||||
import com.hcy.common.core.PageResult;
|
import com.hcy.common.core.PageResult;
|
||||||
import com.hcy.common.dto.RoutingInspectionOrderDto;
|
import com.hcy.common.dto.RoutingInspectionOrderDto;
|
||||||
import com.hcy.common.entity.client.Client;
|
import com.hcy.common.entity.client.Client;
|
||||||
|
import com.hcy.common.entity.client.ClientContacts;
|
||||||
import com.hcy.common.entity.client.Equipment;
|
import com.hcy.common.entity.client.Equipment;
|
||||||
import com.hcy.common.entity.fault.Fault;
|
import com.hcy.common.entity.fault.Fault;
|
||||||
import com.hcy.common.entity.order.MaintenanceOrder;
|
import com.hcy.common.entity.order.MaintenanceOrder;
|
||||||
|
@ -26,6 +27,7 @@ import com.hcy.common.entity.user.User;
|
||||||
import com.hcy.common.enums.order.MaintenanceOrderStatusEnum;
|
import com.hcy.common.enums.order.MaintenanceOrderStatusEnum;
|
||||||
import com.hcy.common.enums.order.OrderOperateRecordEnum;
|
import com.hcy.common.enums.order.OrderOperateRecordEnum;
|
||||||
import com.hcy.common.enums.order.OrderStateEnum;
|
import com.hcy.common.enums.order.OrderStateEnum;
|
||||||
|
import com.hcy.common.mapper.client.ClientContactsMapper;
|
||||||
import com.hcy.common.mapper.client.ClientMapper;
|
import com.hcy.common.mapper.client.ClientMapper;
|
||||||
import com.hcy.common.mapper.client.EquipmentMapper;
|
import com.hcy.common.mapper.client.EquipmentMapper;
|
||||||
import com.hcy.common.mapper.fault.FaultMapper;
|
import com.hcy.common.mapper.fault.FaultMapper;
|
||||||
|
@ -77,6 +79,9 @@ public class RoutingInspectionOrderServiceImpl implements IRoutingInspectionOrde
|
||||||
@Resource
|
@Resource
|
||||||
OrderOperateRecordMapper orderOperateRecordMapper;
|
OrderOperateRecordMapper orderOperateRecordMapper;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
ClientContactsMapper clientContactsMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 巡检订单列表
|
* 巡检订单列表
|
||||||
*
|
*
|
||||||
|
@ -106,6 +111,25 @@ public class RoutingInspectionOrderServiceImpl implements IRoutingInspectionOrde
|
||||||
inspectionOrderDto.setClientId(Long.valueOf(params.get("clientId")));
|
inspectionOrderDto.setClientId(Long.valueOf(params.get("clientId")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//当登录的角色是客户角色的时候,工单列表只查这个客户的数据 1-客户-主管人员 2-客户-客服人员 11-客户-采购员
|
||||||
|
//1、判断当前用户角色是否是客户角色
|
||||||
|
SystemAuthAdmin systemAuthAdminById = systemAuthAdminMapper.findSystemAuthAdminById(AdminThreadLocal.getAdminId());
|
||||||
|
//1、1获取当前用户所属的客户
|
||||||
|
ClientContacts clientContacts = clientContactsMapper.findClientContactsByAdminId(Long.valueOf(systemAuthAdminById.getId()));
|
||||||
|
//1、2获取当前用户的角色
|
||||||
|
String role = systemAuthAdminById.getRole();
|
||||||
|
String[] roleStrings = role.split(","); // 分割字符串
|
||||||
|
int[] roles = new int[roleStrings.length]; // 创建一个整数数组来存储转换后的数字
|
||||||
|
for (int i = 0; i < roleStrings.length; i++) {
|
||||||
|
roles[i] = Integer.parseInt(roleStrings[i]); // 将字符串转换为整数
|
||||||
|
}
|
||||||
|
// 输出转换后的整数数组
|
||||||
|
for (int num : roles) {
|
||||||
|
if(num == 1 || num == 2 || num == 11){
|
||||||
|
inspectionOrderDto.setClientId(clientContacts.getClientId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Page<RoutingInspectionOrderDto> iPage = routingInspectionOrderMapper.pageList(page, inspectionOrderDto);
|
Page<RoutingInspectionOrderDto> iPage = routingInspectionOrderMapper.pageList(page, inspectionOrderDto);
|
||||||
|
|
||||||
List<RoutingInspectionOrderListVo> list = new LinkedList<>();
|
List<RoutingInspectionOrderListVo> list = new LinkedList<>();
|
||||||
|
|
|
@ -315,8 +315,13 @@ public class SparePartStockAuditServiceImpl implements ISparePartStockAuditServi
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//获取审核人名称
|
||||||
|
SystemAuthAdmin responsiblePerson = systemAuthAdminMapper.selectOne(new LambdaQueryWrapper<SystemAuthAdmin>()
|
||||||
|
.eq(SystemAuthAdmin::getId, item.getAuditorId())
|
||||||
|
.eq(SystemAuthAdmin::getIsDelete, GlobalConstant.NOT_DELETE));// 审核人id
|
||||||
|
if(responsiblePerson != null){
|
||||||
|
vo.setResponsiblePerson(responsiblePerson.getUsername()); //经办人/审核人
|
||||||
|
}
|
||||||
|
|
||||||
list.add(vo);
|
list.add(vo);
|
||||||
}
|
}
|
||||||
|
@ -396,6 +401,13 @@ public class SparePartStockAuditServiceImpl implements ISparePartStockAuditServi
|
||||||
for (SparePartAudit sparePartAudit : sparePartAuditList) {
|
for (SparePartAudit sparePartAudit : sparePartAuditList) {
|
||||||
SparePartAuditListVo sparePartAuditListVo = new SparePartAuditListVo();
|
SparePartAuditListVo sparePartAuditListVo = new SparePartAuditListVo();
|
||||||
BeanUtils.copyProperties(sparePartAudit, sparePartAuditListVo);
|
BeanUtils.copyProperties(sparePartAudit, sparePartAuditListVo);
|
||||||
|
|
||||||
|
//所属仓库名称
|
||||||
|
Warehouse warehouseName = warehouseMapper.findWarehouseById(sparePartAudit.getWarehouseId());
|
||||||
|
if(warehouseName != null){
|
||||||
|
sparePartAuditListVo.setWarehouseName(warehouseName.getWarehouseName());
|
||||||
|
}
|
||||||
|
|
||||||
listVo.add(sparePartAuditListVo);
|
listVo.add(sparePartAuditListVo);
|
||||||
}
|
}
|
||||||
vo.setSparePartAuditList(listVo);
|
vo.setSparePartAuditList(listVo);
|
||||||
|
@ -775,7 +787,7 @@ public class SparePartStockAuditServiceImpl implements ISparePartStockAuditServi
|
||||||
model.setPurchaseStatus(sparePartStockAuditParam.getPurchaseStatus());//配件采购状态(0=待审核,1=未通过,2=待管理员审核,3=待发货,4=待收货,5=已完成,6=填写中,7=收货超期)
|
model.setPurchaseStatus(sparePartStockAuditParam.getPurchaseStatus());//配件采购状态(0=待审核,1=未通过,2=待管理员审核,3=待发货,4=待收货,5=已完成,6=填写中,7=收货超期)
|
||||||
model.setReceiveStatus(sparePartStockAuditParam.getReceiveStatus());// 配件领用状态(0=未审核,1=审核未通过,2=待领取,3=待确认,4=已完成)
|
model.setReceiveStatus(sparePartStockAuditParam.getReceiveStatus());// 配件领用状态(0=未审核,1=审核未通过,2=待领取,3=待确认,4=已完成)
|
||||||
model.setPurchaseIdea(sparePartStockAuditParam.getPurchaseIdea()); // 采购意见
|
model.setPurchaseIdea(sparePartStockAuditParam.getPurchaseIdea()); // 采购意见
|
||||||
|
model.setAuditIdea(sparePartStockAuditParam.getAuditIdea()); // 审核意见
|
||||||
//配件采购
|
//配件采购
|
||||||
if(sparePartStockAuditParam.getPurchaseStatus() != null){
|
if(sparePartStockAuditParam.getPurchaseStatus() != null){
|
||||||
//仓管员检修单审核不通过
|
//仓管员检修单审核不通过
|
||||||
|
@ -835,7 +847,7 @@ public class SparePartStockAuditServiceImpl implements ISparePartStockAuditServi
|
||||||
// 出库时需要判断库存数量是否大于出库数量,大于才允许出库;反之,提示备件库存数量不足
|
// 出库时需要判断库存数量是否大于出库数量,大于才允许出库;反之,提示备件库存数量不足
|
||||||
if (sparePart.getQuantity() >= sparePartAudit.getCount()) {
|
if (sparePart.getQuantity() >= sparePartAudit.getCount()) {
|
||||||
model.setAuditState(AuditStateEnum.UNREVIEWED.getStatus());
|
model.setAuditState(AuditStateEnum.UNREVIEWED.getStatus());
|
||||||
sparePart.setQuantity(sparePart.getQuantity() - sparePartAudit.getCount());
|
// sparePart.setQuantity(sparePart.getQuantity() - sparePartAudit.getCount());
|
||||||
} else {
|
} else {
|
||||||
throw new OperateException("备件库存数量不足,请联系客服人员!");
|
throw new OperateException("备件库存数量不足,请联系客服人员!");
|
||||||
}
|
}
|
||||||
|
|
|
@ -444,6 +444,8 @@ public class SystemAuthAdminServiceImpl implements ISystemAuthAdminService {
|
||||||
|
|
||||||
//更新admin信息
|
//更新admin信息
|
||||||
BeanUtils.copyProperties(systemAuthAdminParam, systemAuthAdmin);
|
BeanUtils.copyProperties(systemAuthAdminParam, systemAuthAdmin);
|
||||||
|
//
|
||||||
|
// systemAuthAdmin.setAvatar(systemAuthAdminParam.getAvatar());
|
||||||
|
|
||||||
//判断当前参数是否可以小程序登录
|
//判断当前参数是否可以小程序登录
|
||||||
boolean mnpLogin = iSystemAuthRoleService.isMnpLogin(systemAuthAdminParam.getRole());
|
boolean mnpLogin = iSystemAuthRoleService.isMnpLogin(systemAuthAdminParam.getRole());
|
||||||
|
|
|
@ -65,8 +65,8 @@ public class SystemAuthAdminParam implements Serializable {
|
||||||
|
|
||||||
private Integer postId = 0;
|
private Integer postId = 0;
|
||||||
|
|
||||||
private String avatar = "";
|
// private String avatar = "";
|
||||||
|
private String avatar;
|
||||||
private String phone; // 联系电话
|
private String phone; // 联系电话
|
||||||
private Integer plantId; // 管辖工厂
|
private Integer plantId; // 管辖工厂
|
||||||
private Long provinceId; //省id
|
private Long provinceId; //省id
|
||||||
|
|
|
@ -67,4 +67,8 @@ public class SparePartStockAuditDetailVo implements Serializable {
|
||||||
private Long auditorId; // 审核人id
|
private Long auditorId; // 审核人id
|
||||||
private String responsiblePerson; // 经办人、
|
private String responsiblePerson; // 经办人、
|
||||||
private String warehouseKeeperImg; // 仓管员上传图片
|
private String warehouseKeeperImg; // 仓管员上传图片
|
||||||
|
|
||||||
|
private String purchaseIdea; //采购意见
|
||||||
|
private Date consignerTime; //发货时间
|
||||||
|
private Integer creatorId; // 创建人id
|
||||||
}
|
}
|
||||||
|
|
|
@ -230,8 +230,15 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.alibaba</groupId>
|
<groupId>com.alibaba</groupId>
|
||||||
<artifactId>easyexcel</artifactId>
|
<artifactId>easyexcel</artifactId>
|
||||||
<version>3.0.5</version>
|
<version>4.0.2</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<!-- CollectionUtils工具类-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.commons</groupId>
|
||||||
|
<artifactId>commons-collections4</artifactId>
|
||||||
|
<version>4.4</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<!-- netty网络框架 -->
|
<!-- netty网络框架 -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>io.netty</groupId>
|
<groupId>io.netty</groupId>
|
||||||
|
@ -275,6 +282,12 @@
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!--Thumbnailator库作为图片压缩-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>net.coobird</groupId>
|
||||||
|
<artifactId>thumbnailator</artifactId>
|
||||||
|
<version>0.4.20</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
</project>
|
</project>
|
|
@ -56,4 +56,5 @@ public class RepairOrderAuditDto implements Serializable {
|
||||||
private String questionOne; // 问题1
|
private String questionOne; // 问题1
|
||||||
private String questionTwo; // 问题2
|
private String questionTwo; // 问题2
|
||||||
private String questionThree; // 问题3
|
private String questionThree; // 问题3
|
||||||
|
private Long clientId; //客户id
|
||||||
}
|
}
|
|
@ -15,4 +15,6 @@ public interface ClientContactsMapper extends IBaseMapper<ClientContacts> {
|
||||||
@Select("select * from la_client_contacts where is_delete = 0 and user_id = #{userId}")
|
@Select("select * from la_client_contacts where is_delete = 0 and user_id = #{userId}")
|
||||||
ClientContacts findClientContactsByUserId(@Param("userId") Long userId);
|
ClientContacts findClientContactsByUserId(@Param("userId") Long userId);
|
||||||
|
|
||||||
|
@Select("select * from la_client_contacts where is_delete = 0 and admin_id = #{adminId}")
|
||||||
|
ClientContacts findClientContactsByAdminId(@Param("adminId") Long adminId);
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,150 @@
|
||||||
|
package com.hcy.common.utils.excel;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
import com.alibaba.excel.enums.CellDataTypeEnum;
|
||||||
|
import com.alibaba.excel.metadata.Head;
|
||||||
|
import com.alibaba.excel.metadata.data.ImageData;
|
||||||
|
import com.alibaba.excel.metadata.data.WriteCellData;
|
||||||
|
import com.alibaba.excel.write.handler.CellWriteHandler;
|
||||||
|
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
|
||||||
|
import com.alibaba.excel.write.metadata.holder.WriteTableHolder;
|
||||||
|
|
||||||
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||||
|
import org.apache.poi.ss.usermodel.*;
|
||||||
|
import org.apache.poi.util.Units;
|
||||||
|
import org.apache.poi.xssf.usermodel.XSSFDrawing;
|
||||||
|
import org.apache.poi.xssf.usermodel.XSSFPicture;
|
||||||
|
import org.apache.poi.xssf.usermodel.XSSFShape;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.concurrent.CopyOnWriteArrayList;
|
||||||
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
|
||||||
|
|
||||||
|
public class CustomImageModifyHandler implements CellWriteHandler {
|
||||||
|
/**
|
||||||
|
* 已经处理的Cell
|
||||||
|
*/
|
||||||
|
private final CopyOnWriteArrayList<String> REPEATS = new CopyOnWriteArrayList<>();
|
||||||
|
/**
|
||||||
|
* 单元格的图片最大张数(每列的单元格图片张数不确定,单元格宽度需按照张数最多的长度来设置)
|
||||||
|
*/
|
||||||
|
private final AtomicReference<Integer> MAX_IMAGE_SIZE = new AtomicReference<>(0);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 标记手动添加的图片,用于排除EasyExcel自动添加的图片
|
||||||
|
*/
|
||||||
|
private final CopyOnWriteArrayList<Integer> CREATE_PIC_INDEX = new CopyOnWriteArrayList<>();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row, Head head, Integer columnIndex, Integer relativeRowIndex, Boolean isHead) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterCellDataConverted(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, WriteCellData<?> cellData, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
|
||||||
|
// 在 数据转换成功后 不是头就把类型设置成空
|
||||||
|
if (isHead) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//将要插入图片的单元格的type设置为空,下面再填充图片
|
||||||
|
if (CollectionUtils.isNotEmpty(cellData.getImageDataList())) {
|
||||||
|
cellData.setType(CellDataTypeEnum.EMPTY);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, List<WriteCellData<?>> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
|
||||||
|
// 在 单元格写入完毕后 ,自己填充图片
|
||||||
|
if (isHead || CollectionUtils.isEmpty(cellDataList)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
boolean listFlag = false;
|
||||||
|
Sheet sheet = cell.getSheet();
|
||||||
|
// 此处为ExcelUrlConverterUtil的返回值
|
||||||
|
List<ImageData> imageDataList = cellDataList.get(0).getImageDataList();
|
||||||
|
if (CollectionUtils.isNotEmpty(imageDataList)) {
|
||||||
|
listFlag = true;
|
||||||
|
}
|
||||||
|
if (!listFlag && imageDataList == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String key = cell.getRowIndex() + "_" + cell.getColumnIndex();
|
||||||
|
if (REPEATS.contains(key)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
REPEATS.add(key);
|
||||||
|
if (imageDataList.size() > MAX_IMAGE_SIZE.get()) {
|
||||||
|
MAX_IMAGE_SIZE.set(imageDataList.size());
|
||||||
|
}
|
||||||
|
// 默认要导出的图片大小为60*60px,60px的行高大约是900,60px列宽大概是248*8
|
||||||
|
sheet.getRow(cell.getRowIndex()).setHeight((short) 900);
|
||||||
|
sheet.setColumnWidth(cell.getColumnIndex(), listFlag ? 240 * 8 * MAX_IMAGE_SIZE.get() : 240 * 8);
|
||||||
|
|
||||||
|
if (listFlag) {
|
||||||
|
for (int i = 0; i < imageDataList.size(); i++) {
|
||||||
|
ImageData imageData = imageDataList.get(i);
|
||||||
|
if (imageData == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
byte[] image = imageData.getImage();
|
||||||
|
this.insertImage(sheet, cell, image, i);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.insertImage(sheet, cell, imageDataList.get(0).getImage(), 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 清除EasyExcel自动添加的没有格式的图片
|
||||||
|
XSSFDrawing drawingPatriarch = (XSSFDrawing) sheet.getDrawingPatriarch();
|
||||||
|
List<XSSFShape> shapes = drawingPatriarch.getShapes();
|
||||||
|
for (int i = 0; i < shapes.size(); i++) {
|
||||||
|
XSSFShape shape = shapes.get(i);
|
||||||
|
if (shape instanceof XSSFPicture && !CREATE_PIC_INDEX.contains(i)) {
|
||||||
|
CREATE_PIC_INDEX.add(i);
|
||||||
|
XSSFPicture picture = (XSSFPicture) shape;
|
||||||
|
picture.resize(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 重新插入一个图片
|
||||||
|
*
|
||||||
|
* @param sheet Excel页面
|
||||||
|
* @param cell 表格元素
|
||||||
|
* @param pictureData 图片数据
|
||||||
|
* @param i 图片顺序
|
||||||
|
*/
|
||||||
|
private void insertImage(Sheet sheet, Cell cell, byte[] pictureData, int i) {
|
||||||
|
int picWidth = Units.pixelToEMU(60);
|
||||||
|
int index = sheet.getWorkbook().addPicture(pictureData, HSSFWorkbook.PICTURE_TYPE_PNG);
|
||||||
|
CREATE_PIC_INDEX.add(index);
|
||||||
|
Drawing<?> drawing = sheet.getDrawingPatriarch();
|
||||||
|
if (drawing == null) {
|
||||||
|
drawing = sheet.createDrawingPatriarch();
|
||||||
|
}
|
||||||
|
CreationHelper helper = sheet.getWorkbook().getCreationHelper();
|
||||||
|
ClientAnchor anchor = helper.createClientAnchor();
|
||||||
|
// 设置图片坐标
|
||||||
|
anchor.setDx1(picWidth * i);
|
||||||
|
anchor.setDx2(picWidth + picWidth * i);
|
||||||
|
anchor.setDy1(0);
|
||||||
|
anchor.setDy2(0);
|
||||||
|
//设置图片位置
|
||||||
|
int columnIndex = cell.getColumnIndex();
|
||||||
|
anchor.setCol1(columnIndex);
|
||||||
|
anchor.setCol2(columnIndex);
|
||||||
|
int rowIndex = cell.getRowIndex();
|
||||||
|
anchor.setRow1(rowIndex);
|
||||||
|
anchor.setRow2(rowIndex + 1);
|
||||||
|
anchor.setAnchorType(ClientAnchor.AnchorType.DONT_MOVE_AND_RESIZE);
|
||||||
|
drawing.createPicture(anchor, index);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,66 @@
|
||||||
|
package com.hcy.common.utils.excel;
|
||||||
|
|
||||||
|
import com.alibaba.excel.converters.Converter;
|
||||||
|
import com.alibaba.excel.enums.CellDataTypeEnum;
|
||||||
|
import com.alibaba.excel.metadata.GlobalConfiguration;
|
||||||
|
import com.alibaba.excel.metadata.data.ImageData;
|
||||||
|
import com.alibaba.excel.metadata.data.ReadCellData;
|
||||||
|
import com.alibaba.excel.metadata.data.WriteCellData;
|
||||||
|
import com.alibaba.excel.metadata.property.ExcelContentProperty;
|
||||||
|
import com.alibaba.excel.util.IoUtils;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
|
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
|
@Slf4j
|
||||||
|
public class ExcelUrlConverterUtil implements Converter<List<URL>> {
|
||||||
|
@Override
|
||||||
|
public Class supportJavaTypeKey() {
|
||||||
|
return List.class;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CellDataTypeEnum supportExcelTypeKey() {
|
||||||
|
return CellDataTypeEnum.EMPTY;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public WriteCellData<?> convertToExcelData(List<URL> value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
|
||||||
|
// 这里进行对数据实体类URL集合处理
|
||||||
|
List<ImageData> data = new ArrayList<>();
|
||||||
|
ImageData imageData;
|
||||||
|
// for 循环一次读取
|
||||||
|
for (URL url : value) {
|
||||||
|
try (InputStream inputStream = url.openStream();) {
|
||||||
|
byte[] bytes = IoUtils.toByteArray(inputStream);
|
||||||
|
imageData = new ImageData();
|
||||||
|
imageData.setImage(bytes);
|
||||||
|
data.add(imageData);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("导出临时记录图片异常:", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
WriteCellData<?> cellData = new WriteCellData<>();
|
||||||
|
if (CollectionUtils.isNotEmpty(data)) {
|
||||||
|
// 图片返回图片列表
|
||||||
|
cellData.setImageDataList(data);
|
||||||
|
cellData.setType(CellDataTypeEnum.EMPTY);
|
||||||
|
} else {
|
||||||
|
// 没有图片使用汉字表示
|
||||||
|
cellData.setStringValue("无图");
|
||||||
|
cellData.setType(CellDataTypeEnum.STRING);
|
||||||
|
}
|
||||||
|
return cellData;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
package com.hcy.common.utils.excel;
|
||||||
|
import net.coobird.thumbnailator.Thumbnails;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
|
||||||
|
public class FileUtil {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 压缩图片文件大小
|
||||||
|
*
|
||||||
|
* @param inputStream 输入图片流
|
||||||
|
* @param outputStream 输出图片流
|
||||||
|
* @param quality 压缩质量 (0.0 到 1.0,1.0表示最高质量)
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
public static void compressImage(InputStream inputStream, OutputStream outputStream, float quality) throws IOException {
|
||||||
|
// 使用Thumbnailator进行压缩
|
||||||
|
Thumbnails.of(inputStream)
|
||||||
|
.scale(1.0) // 保持原始尺寸
|
||||||
|
.outputQuality(quality)
|
||||||
|
.toOutputStream(outputStream);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -12,8 +12,16 @@ import org.apache.poi.ss.usermodel.*;
|
||||||
import org.apache.poi.util.Units;
|
import org.apache.poi.util.Units;
|
||||||
import org.springframework.util.CollectionUtils;
|
import org.springframework.util.CollectionUtils;
|
||||||
|
|
||||||
|
import javax.imageio.ImageIO;
|
||||||
|
import java.awt.*;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.concurrent.ExecutorService;
|
||||||
|
import java.util.concurrent.Executors;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.concurrent.atomic.AtomicReference;
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -47,6 +55,9 @@ public class LocalImageModifyStrategy implements CellWriteHandler {
|
||||||
*/
|
*/
|
||||||
private final int pixelConversionFactor;
|
private final int pixelConversionFactor;
|
||||||
|
|
||||||
|
// 创建一个固定大小的线程池
|
||||||
|
private final ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
|
||||||
|
|
||||||
public LocalImageModifyStrategy() {
|
public LocalImageModifyStrategy() {
|
||||||
this.imageWidth = DEFAULT_IMAGE_WIDTH;
|
this.imageWidth = DEFAULT_IMAGE_WIDTH;
|
||||||
this.pixelConversionFactor = DEFAULT_PIXEL_CONVERSION_FACTOR;
|
this.pixelConversionFactor = DEFAULT_PIXEL_CONVERSION_FACTOR;
|
||||||
|
@ -103,16 +114,70 @@ public class LocalImageModifyStrategy implements CellWriteHandler {
|
||||||
int widthValue = imageWidth * pixelConversionFactor;
|
int widthValue = imageWidth * pixelConversionFactor;
|
||||||
sheet.setColumnWidth(cell.getColumnIndex(), widthValue * MAX_IMAGE_SIZE.get() + pixelConversionFactor);
|
sheet.setColumnWidth(cell.getColumnIndex(), widthValue * MAX_IMAGE_SIZE.get() + pixelConversionFactor);
|
||||||
|
|
||||||
|
// for (int i = 0; i < filePaths.size(); i++) {
|
||||||
|
// String filePath = filePaths.get(i);
|
||||||
|
// // todo 这里可以对图片作一些处理,比如说压缩
|
||||||
|
// try {
|
||||||
|
// compressImage(filePath);
|
||||||
|
// } catch (IOException e) {
|
||||||
|
// throw new RuntimeException(e);
|
||||||
|
// }
|
||||||
|
// // 读取文件
|
||||||
|
// byte[] image = FileUtil.readBytes(filePath);
|
||||||
|
// this.insertImage(sheet, cell, image, i);
|
||||||
|
// }
|
||||||
|
|
||||||
|
// 使用线程池来并行处理图片插入
|
||||||
|
// List<String> filePaths = Arrays.asList(stringValue.split(","));
|
||||||
for (int i = 0; i < filePaths.size(); i++) {
|
for (int i = 0; i < filePaths.size(); i++) {
|
||||||
String filePath = filePaths.get(i);
|
String filePath = filePaths.get(i);
|
||||||
// todo 这里可以对图片作一些处理,比如说压缩
|
int finalI = i;
|
||||||
// ...
|
executorService.submit(() -> {
|
||||||
// 读取文件
|
try {
|
||||||
|
//压缩图片
|
||||||
|
compressImage(filePath);
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
byte[] image = FileUtil.readBytes(filePath);
|
byte[] image = FileUtil.readBytes(filePath);
|
||||||
this.insertImage(sheet, cell, image, i);
|
insertImage(sheet, cell, image, finalI);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 压缩图像文件
|
||||||
|
*
|
||||||
|
* @param filePath 要压缩的图像文件路径
|
||||||
|
* @throws IOException 如果读取或写入图像文件时发生错误
|
||||||
|
*/
|
||||||
|
public void compressImage(String filePath) throws IOException {
|
||||||
|
// 读取原始图像文件
|
||||||
|
File inputFile = new File(filePath);
|
||||||
|
BufferedImage inputImage = ImageIO.read(inputFile);
|
||||||
|
|
||||||
|
// 获取原始图像的宽度和高度
|
||||||
|
int scaledWidth = inputImage.getWidth() / 2;
|
||||||
|
int scaledHeight = inputImage.getHeight() / 2;
|
||||||
|
|
||||||
|
// 创建一个新图像,宽度和高度是原始图像的一半
|
||||||
|
BufferedImage outputImage = new BufferedImage(scaledWidth, scaledHeight, inputImage.getType());
|
||||||
|
|
||||||
|
// 绘制缩放后的图像
|
||||||
|
Graphics2D g2d = outputImage.createGraphics();
|
||||||
|
g2d.drawImage(inputImage, 0, 0, scaledWidth, scaledHeight, null);
|
||||||
|
g2d.dispose();
|
||||||
|
|
||||||
|
// 设置压缩质量参数
|
||||||
|
float quality = 0.5f; // 压缩质量,范围从0.0f到1.0f
|
||||||
|
|
||||||
|
// 将压缩后的图像写入文件
|
||||||
|
File outputFile = new File(filePath);
|
||||||
|
ImageIO.write(outputImage, "jpg", outputFile);
|
||||||
|
|
||||||
|
// 可以选择删除原始文件
|
||||||
|
// inputFile.delete();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 重新插入一个图片
|
* 重新插入一个图片
|
||||||
|
@ -150,5 +215,24 @@ public class LocalImageModifyStrategy implements CellWriteHandler {
|
||||||
drawing.createPicture(anchor, index);
|
drawing.createPicture(anchor, index);
|
||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 在不再需要线程池时,应该关闭它
|
||||||
|
public void shutdownAndAwaitTermination() {
|
||||||
|
executorService.shutdown(); // 禁止提交新任务
|
||||||
|
try {
|
||||||
|
// 等待现有任务终止
|
||||||
|
if (!executorService.awaitTermination(60, TimeUnit.SECONDS)) {
|
||||||
|
executorService.shutdownNow(); // 取消正在执行的任务
|
||||||
|
// 等待任务响应取消
|
||||||
|
if (!executorService.awaitTermination(60, TimeUnit.SECONDS))
|
||||||
|
System.err.println("线程池未正常终止");
|
||||||
|
}
|
||||||
|
} catch (InterruptedException ie) {
|
||||||
|
// 重新取消当前线程进行中断
|
||||||
|
executorService.shutdownNow();
|
||||||
|
// 保留中断状态
|
||||||
|
Thread.currentThread().interrupt();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,9 @@
|
||||||
LEFT JOIN la_user as u on pro.creator_id = u.id
|
LEFT JOIN la_user as u on pro.creator_id = u.id
|
||||||
where
|
where
|
||||||
pro.is_delete = 0
|
pro.is_delete = 0
|
||||||
|
<if test="param.clientId != null">
|
||||||
|
and pro.client_id = #{param.clientId}
|
||||||
|
</if>
|
||||||
<if test="param.orderNo != null and param.orderNo != ''">
|
<if test="param.orderNo != null and param.orderNo != ''">
|
||||||
and pro.order_no like concat('%', #{param.orderNo}, '%')
|
and pro.order_no like concat('%', #{param.orderNo}, '%')
|
||||||
</if>
|
</if>
|
||||||
|
|
|
@ -17,6 +17,9 @@
|
||||||
LEFT JOIN la_repair_order_audit AS roa ON ro.id = roa.repair_order_id
|
LEFT JOIN la_repair_order_audit AS roa ON ro.id = roa.repair_order_id
|
||||||
WHERE
|
WHERE
|
||||||
ro.is_delete = 0
|
ro.is_delete = 0
|
||||||
|
<if test="param.clientId != null">
|
||||||
|
AND ro.client_id = #{param.clientId}
|
||||||
|
</if>
|
||||||
<if test="param.reviewRequest != null">
|
<if test="param.reviewRequest != null">
|
||||||
AND roa.review_request = #{param.reviewRequest}
|
AND roa.review_request = #{param.reviewRequest}
|
||||||
</if>
|
</if>
|
||||||
|
|
|
@ -2391,7 +2391,7 @@ public class RepairOrderServiceImpl implements IRepairOrderService {
|
||||||
//维修单步骤数据
|
//维修单步骤数据
|
||||||
RepairOrderStepData requestRepairOrderStepData = new RepairOrderStepData();
|
RepairOrderStepData requestRepairOrderStepData = new RepairOrderStepData();
|
||||||
requestRepairOrderStepData.setRepairOrderId(order.getId());// 维修单id
|
requestRepairOrderStepData.setRepairOrderId(order.getId());// 维修单id
|
||||||
requestRepairOrderStepData.setRemark("退仓申请已完成,退仓原因:" + reasonForWithdrawal);// 备注
|
requestRepairOrderStepData.setRemark("退仓申请已完成,难修原因:" + reasonForWithdrawal);// 备注
|
||||||
requestRepairOrderStepData.setTitle("退仓已完成"); // 标题
|
requestRepairOrderStepData.setTitle("退仓已完成"); // 标题
|
||||||
requestRepairOrderStepData.setCreatorId(FrontThreadLocal.getUserId().longValue()); //创建人
|
requestRepairOrderStepData.setCreatorId(FrontThreadLocal.getUserId().longValue()); //创建人
|
||||||
requestRepairOrderStepData.setCreateTime(new Date()); // 创建时间
|
requestRepairOrderStepData.setCreateTime(new Date()); // 创建时间
|
||||||
|
|
24
pom.xml
24
pom.xml
|
@ -172,9 +172,31 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.alibaba</groupId>
|
<groupId>com.alibaba</groupId>
|
||||||
<artifactId>easyexcel</artifactId>
|
<artifactId>easyexcel</artifactId>
|
||||||
<version>3.3.4</version>
|
<version>4.0.2</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.commons</groupId>
|
||||||
|
<artifactId>commons-collections4</artifactId>
|
||||||
|
<version>4.4</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!--pdf模板导出-->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.itextpdf</groupId>
|
||||||
|
<artifactId>itextpdf</artifactId>
|
||||||
|
<version>5.5.13.4</version>
|
||||||
|
</dependency>
|
||||||
|
<!-- PDF中文支持 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.itextpdf</groupId>
|
||||||
|
<artifactId>itext-asian</artifactId>
|
||||||
|
<version>5.1.0</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.itextpdf.tool</groupId>
|
||||||
|
<artifactId>xmlworker</artifactId>
|
||||||
|
<version>5.5.13.1</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</dependencyManagement>
|
</dependencyManagement>
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue