diff --git a/blade-biz-common/src/main/java/org/springblade/common/constant/aftersales/WorkOrderTypesOfStatusConstant.java b/blade-biz-common/src/main/java/org/springblade/common/constant/aftersales/WorkOrderTypesOfStatusConstant.java new file mode 100644 index 000000000..6a8a4b30a --- /dev/null +++ b/blade-biz-common/src/main/java/org/springblade/common/constant/aftersales/WorkOrderTypesOfStatusConstant.java @@ -0,0 +1,30 @@ +package org.springblade.common.constant.aftersales; + +public enum WorkOrderTypesOfStatusConstant { + kaiqi("开启","1"), + jeishu("结束","2") + ; + private String name; + private String value; + + WorkOrderTypesOfStatusConstant(String name, String value) { + this.name = name; + this.value = value; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } +} diff --git a/blade-service-api/logpm-aftersales-api/src/main/java/com/logpm/aftersales/entity/AftersalesArbitrationOrderEntity.java b/blade-service-api/logpm-aftersales-api/src/main/java/com/logpm/aftersales/entity/AftersalesArbitrationOrderEntity.java index a92ca5fc6..5a7bfadcd 100644 --- a/blade-service-api/logpm-aftersales-api/src/main/java/com/logpm/aftersales/entity/AftersalesArbitrationOrderEntity.java +++ b/blade-service-api/logpm-aftersales-api/src/main/java/com/logpm/aftersales/entity/AftersalesArbitrationOrderEntity.java @@ -65,11 +65,16 @@ public class AftersalesArbitrationOrderEntity extends TenantEntity { * 异常工单Id */ @ApiModelProperty(value = "异常工单Id") - private String workOrderId; + private Long workOrderId; /** * 类型 */ @ApiModelProperty(value = "类型") private String typesOf; + /** + * 操作 正常完结 客服完结 + */ + @ApiModelProperty(value = "操作 正常完结 客服完结 ") + private String operateType; } diff --git a/blade-service-api/logpm-aftersales-api/src/main/java/com/logpm/aftersales/entity/AftersalesCompletionRecipientEntity.java b/blade-service-api/logpm-aftersales-api/src/main/java/com/logpm/aftersales/entity/AftersalesCompletionRecipientEntity.java index 7af98d3a5..d5e206fde 100644 --- a/blade-service-api/logpm-aftersales-api/src/main/java/com/logpm/aftersales/entity/AftersalesCompletionRecipientEntity.java +++ b/blade-service-api/logpm-aftersales-api/src/main/java/com/logpm/aftersales/entity/AftersalesCompletionRecipientEntity.java @@ -23,6 +23,8 @@ import io.swagger.annotations.ApiModelProperty; import lombok.EqualsAndHashCode; import org.springblade.core.tenant.mp.TenantEntity; +import java.math.BigDecimal; + /** * 异常工单完结处理结果受款方 实体类 * @@ -34,6 +36,65 @@ import org.springblade.core.tenant.mp.TenantEntity; @ApiModel(value = "AftersalesCompletionRecipient对象", description = "异常工单完结处理结果受款方") @EqualsAndHashCode(callSuper = true) public class AftersalesCompletionRecipientEntity extends TenantEntity { - + /** + * 预留1 + */ + @ApiModelProperty(value = "预留1") + private String reserve1; + /** + * 预留2 + */ + @ApiModelProperty(value = "预留2") + private String reserve2; + /** + * 预留3 + */ + @ApiModelProperty(value = "预留3") + private String reserve3; + /** + * 预留4 + */ + @ApiModelProperty(value = "预留4") + private String reserve4; + /** + * 预留5 + */ + @ApiModelProperty(value = "预留5") + private String reserve5; + /** + * 赔款方 + */ + @ApiModelProperty(value = "受款方") + private String recipient; + /** + * 原因 + */ + @ApiModelProperty(value = "受款原因") + private String reasonReceivingPayment; + /** + * 金额 + */ + @ApiModelProperty(value = "金额") + private BigDecimal money; + /** + * 金额 + */ + @ApiModelProperty(value = "责任方") + private String responsibleParty; + /** + * 工单号 + */ + @ApiModelProperty(value = "工单号") + private String workOrderNumber; + /** + * 异常工单ID + */ + @ApiModelProperty(value = "异常工单ID") + private String workOrderId; + /** + * 仓库ID + */ + @ApiModelProperty(value = "仓库ID") + private String warehouseId; } diff --git a/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/controller/AftersalesWorkOrderController.java b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/controller/AftersalesWorkOrderController.java index 8e30eaf23..a5c59a021 100644 --- a/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/controller/AftersalesWorkOrderController.java +++ b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/controller/AftersalesWorkOrderController.java @@ -33,6 +33,7 @@ import org.springblade.core.log.exception.ServiceException; import org.springblade.core.secure.BladeUser; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; +import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; import org.springblade.system.entity.User; @@ -101,10 +102,7 @@ public class AftersalesWorkOrderController extends BladeController { @ApiOperationSupport(order = 2) @ApiOperation(value = "查询异常完整数据集合", notes = "传入aftersalesWorkOrder") public R> getListOwn(@ApiIgnore @RequestParam Map aftersalesWorkOrder, Query query) { - BasicdataWarehouseEntity myCurrentWarehouse = warehouseClient.getMyCurrentWarehouse(); - if(ObjectUtils.isNotNull(myCurrentWarehouse)){ - aftersalesWorkOrder.put("warehouseId", myCurrentWarehouse.getId()); - } + IPage pages = aftersalesWorkOrderService.pageListOwn(aftersalesWorkOrder, Condition.getPage(query)); return R.data(AftersalesWorkOrderWrapper.build().pageVO(pages)); } @@ -131,6 +129,17 @@ public class AftersalesWorkOrderController extends BladeController { return R.data(list); } + /** + * 客服异常工单 查询营业部责任人人员信息 + */ + @GetMapping("/getCustomerServicePersonnel") + @ApiOperationSupport(order = 2) + @ApiOperation(value = "查询营业部责任人人员信息", notes = "传入aftersalesWorkOrder") + public R> getBusinessDepartmentUser(Long warehouseId) { + List list = aftersalesWorkOrderService.getBusinessDepartmentUser(warehouseId); + return R.data(list); + } + /** * 客服异常工单 异常工单分配处理客服信息 */ @@ -206,12 +215,27 @@ public class AftersalesWorkOrderController extends BladeController { @ApiOperationSupport(order = 5) @ApiOperation(value = "申请仲裁", notes = "传入aftersalesWorkOrder") public R updateArbitrate (@Valid @RequestBody AftersalesWorkOrderDTO aftersalesWorkOrder) { + log.info("申请仲裁>>>>{}",aftersalesWorkOrder); if(ObjectUtils.isNull(aftersalesWorkOrder) || aftersalesWorkOrder.getAssignList().isEmpty()){ throw new ServiceException("数据不能为空!!"); } return R.status(aftersalesWorkOrderService.updateArbitrate(aftersalesWorkOrder)); } + /** + * 客服异常工单 客服仲裁完结操作 + */ + @PostMapping("/arbitrateEnd") + @ApiOperationSupport(order = 5) + @ApiOperation(value = "客服异常工单 客服仲裁完结操作", notes = "传入aftersalesWorkOrder") + public R addArbitrateEnd(@Valid @RequestBody AftersalesWorkOrderDTO aftersalesWorkOrder) { + log.info("客服仲裁完结操作》》》{}",aftersalesWorkOrder); + if(ObjectUtils.isNull(aftersalesWorkOrder) || aftersalesWorkOrder.getAssignList().isEmpty()){ + throw new ServiceException("数据不能为空!!"); + } + return R.status(aftersalesWorkOrderService.addArbitrateEnd(aftersalesWorkOrder)); + } + /** * 客服异常工单 修改 */ diff --git a/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/dto/AftersalesWorkOrderDTO.java b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/dto/AftersalesWorkOrderDTO.java index 8e11918dc..62e88c105 100644 --- a/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/dto/AftersalesWorkOrderDTO.java +++ b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/dto/AftersalesWorkOrderDTO.java @@ -72,6 +72,12 @@ public class AftersalesWorkOrderDTO extends AftersalesWorkOrderEntity { */ private List assignList; + /** + * 处理结果 + */ + private AftersalesProcessingResultsDTO aftersalesProcessingResultsDTO; + + } diff --git a/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/mapper/AftersalesWorkOrderMapper.xml b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/mapper/AftersalesWorkOrderMapper.xml index 75d74ef30..5f756734a 100644 --- a/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/mapper/AftersalesWorkOrderMapper.xml +++ b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/mapper/AftersalesWorkOrderMapper.xml @@ -55,6 +55,47 @@ lawo.secondary,lawo.vehicle_route,lawo.deliver_goods_time,lawo.discovery_time,lawo.warehousing_time,lawo.waybill_mall,lawo.remarks,lawo.delivery_time, lawo.delivery_driver,lawo.work_order_status,lawo.problem_description,lawo.responsible_person,lawo.processed_by from logpm_aftersales_work_order lawo + + and lawo.id = #{param.id } + and lawo.work_order_type = #{param.workOrderType } + and lawo.initiation_identification = #{param.initiationIdentification } + and lawo.discovery_node = #{param.discoveryNode } + and lawo.work_order_number = #{param.workOrderNumber } + and lawo.waybill_number = #{param.waybillNumber } + and lawo.order_code = #{param.orderCode } + and lawo.train_number = #{param.trainNumber } + and lawo.first = #{param.first } + and lawo.secondary = #{param.secondary } + and lawo.vehicle_route = #{param.vehicleRoute } + + and date_format(from_unixtime( lawo.deliver_goods_time),'%Y-%m-%d') = date_format(#{param.deliverGoodsTime },'%Y-%m-%d') + and date_format(from_unixtime(lawo.discovery_time),'%Y-%m-%d') = date_format( #{param.discoveryTime},'%Y-%m-%d') + and date_format(from_unixtime(lawo.warehousing_time),'%Y-%m-%d') = date_format( #{param.warehousingTime},'%Y-%m-%d') + and date_format(from_unixtime( lawo.delivery_time),'%Y-%m-%d') = date_format(#{param.deliveryTime} param.deliveryTime,'%Y-%m-%d') + and date_format(from_unixtime(lawo.audit_time),'%Y-%m-%d') = date_format(#{param.auditTime},'%Y-%m-%d') + and date_format(from_unixtime(lawo.entry_time),'%Y-%m-%d') = date_format(#{param.entryTime},'%Y-%m-%d') + and date_format(from_unixtime(lawo.over_time),'%Y-%m-%d') = date_format(#{param.overTime}),'%Y-%m-%d') + + + and lawo.waybill_mall = #{param.waybillMall } + and lawo.delivery_driver = #{param.deliveryDriver } + and lawo.work_order_status = #{param.workOrderStatus } + and lawo.customer_service_id = #{param.customerServiceId } + and lawo.customer_service_name = #{param.customerServiceName } + and lawo.waybill_mall_id = #{param.waybillMallId } + and lawo.problem_description = #{param.problemDescription } + and lawo.warehouse_id = #{param.warehouseId } + and lawo.person_responsible = #{param.personResponsible } + and lawo.process_number = #{param.processNumber } + and lawo.reviewed_by = #{param.reviewedBy } + and lawo.operator = #{param.operator } + and lawo.responsible_person = #{param.responsiblePerson } + and lawo.processed_by = #{param.processedBy} + and lawo.investigation_process = #{param.investigationProcess } + and lawo.related_work_orders_id = #{param.relatedWorkOrdersId } + diff --git a/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/service/IAftersalesWorkOrderService.java b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/service/IAftersalesWorkOrderService.java index ed85367ea..75beb4778 100644 --- a/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/service/IAftersalesWorkOrderService.java +++ b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/service/IAftersalesWorkOrderService.java @@ -143,4 +143,17 @@ public interface IAftersalesWorkOrderService extends BaseService getBusinessDepartmentUser(Long warehouseId); } diff --git a/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/service/impl/AftersalesWorkOrderServiceImpl.java b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/service/impl/AftersalesWorkOrderServiceImpl.java index 1d7b8e383..b0103dc73 100644 --- a/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/service/impl/AftersalesWorkOrderServiceImpl.java +++ b/blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/service/impl/AftersalesWorkOrderServiceImpl.java @@ -22,6 +22,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.logpm.aftersales.dto.AftersalesProcessingResultsDTO; import com.logpm.aftersales.dto.AftersalesWorkOrderDTO; import com.logpm.aftersales.entity.*; import com.logpm.aftersales.service.*; @@ -34,6 +35,7 @@ import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springblade.common.constant.DictBizConstant; import org.springblade.common.constant.aftersales.WorkOrderStatusConstant; +import org.springblade.common.constant.aftersales.WorkOrderTypesOfStatusConstant; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.support.Condition; import org.springblade.core.secure.BladeUser; @@ -57,10 +59,7 @@ import java.time.Duration; import java.time.Instant; import java.time.LocalDateTime; import java.time.ZoneOffset; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; /** @@ -81,6 +80,7 @@ public class AftersalesWorkOrderServiceImpl extends BaseServiceImpl pageListOwn(Map aftersalesWorkOrder, IPage page) { + //查询用户角色信息 + BladeUser user = AuthUtil.getUser(); + String roleName = user.getRoleName(); + String tenantId = user.getTenantId(); + + //查询客服岗位 + List warehouseType = DictBizCache.getList("after_sales_visits"); + if (warehouseType.isEmpty()) { + throw new ServiceException("注意,注意!售后访问字典未配置!请配置!"); + } else { + Optional first = warehouseType.stream().filter(i -> { + if (i.getDictKey().equals(roleName)) { + return true; + } + return false; + }).findFirst(); + if(first.isPresent()){ + //存在 + DictBiz dictBiz = first.get(); + String dictValue = dictBiz.getDictValue(); + switch (dictValue){ + case "1": //客服经理 查询全部待处理工单 + + break; + case "2": // 营业部客服 + BasicdataWarehouseEntity myCurrentWarehouse = warehouseClient.getMyCurrentWarehouse(); + if(ObjectUtils.isNotNull(myCurrentWarehouse)){ + aftersalesWorkOrder.put("warehouseId", myCurrentWarehouse.getId()); + }else{ + throw new ServiceException("请选择仓库!"); + } + break; + case "3": //职能客服 查询自己的待处理工单 + aftersalesWorkOrder.put("customer_service_id",user.getUserId()); + break; + } + + }else{ + //不存在 + BasicdataWarehouseEntity myCurrentWarehouse = warehouseClient.getMyCurrentWarehouse(); + if(ObjectUtils.isNotNull(myCurrentWarehouse)){ + aftersalesWorkOrder.put("warehouseId", myCurrentWarehouse.getId()); + }else{ + throw new ServiceException("请选择仓库!"); + } + + } + + } AftersalesWorkOrderEntity workOrderEntity = JSONObject.parseObject(JSONObject.toJSONString(aftersalesWorkOrder), AftersalesWorkOrderEntity.class); return baseMapper.pageListOwn(page,workOrderEntity); @@ -634,13 +682,81 @@ public class AftersalesWorkOrderServiceImpl extends BaseServiceImpl arbitrationOrderList = new ArrayList<>(); aftersalesWorkOrder.getAssignList().forEach(i ->{ AftersalesWorkOrderEntity aftersalesWorkOrderEntity = new AftersalesWorkOrderEntity(); aftersalesWorkOrderEntity.setId(i); aftersalesWorkOrderEntity.setWorkOrderStatus(WorkOrderStatusConstant.zhongchaizhong.getValue()); baseMapper.updateById(aftersalesWorkOrderEntity); + //添加仲裁记录 + AftersalesArbitrationOrderEntity aftersalesArbitrationOrderEntity = new AftersalesArbitrationOrderEntity(); + aftersalesArbitrationOrderEntity.setWorkOrderId(i); + aftersalesArbitrationOrderEntity.setOperateType("正常"); + aftersalesArbitrationOrderEntity.setTypesOf(WorkOrderTypesOfStatusConstant.kaiqi.getValue()); + arbitrationOrderList.add(aftersalesArbitrationOrderEntity); }); + if(!arbitrationOrderList.isEmpty()){ + //添加仲裁记录 + aftersalesArbitrationOrderService.saveBatch(arbitrationOrderList); + return true; + } + return false; + } + + /** + * 异常工单 客服仲裁完结 + */ + @Override + public boolean addArbitrateEnd(AftersalesWorkOrderDTO aftersalesWorkOrder) { + + for (Long l : aftersalesWorkOrder.getAssignList()) { + //查询工单的状态 + AftersalesWorkOrderEntity workOrderEntity = baseMapper.selectById(l); + if(!workOrderEntity.getWorkOrderStatus().equals(WorkOrderStatusConstant.zhongchaizhong.getValue())){ + throw new ServiceException("包含不是仲裁的订单数据!无法强制完结!"); + } + //添加处理结果 + AftersalesProcessingResultsDTO aftersalesProcessingResultsDTO = aftersalesWorkOrder.getAftersalesProcessingResultsDTO(); + aftersalesProcessingResultsService.ownSaveOrUpdate(aftersalesProcessingResultsDTO); + //添加完结数据 + List orderDTOList = new ArrayList<>(); + orderDTOList.add(aftersalesWorkOrder); + addCompletionEnd(orderDTOList); + //修改工单状态 + AftersalesWorkOrderEntity aftersalesWorkOrderEntity = new AftersalesWorkOrderEntity(); + aftersalesWorkOrderEntity.setId(l); + aftersalesWorkOrderEntity.setWorkOrderStatus(WorkOrderStatusConstant.yiwanjei.getValue()); + baseMapper.updateById(aftersalesWorkOrderEntity); + //修改 + LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); + lambdaUpdateWrapper.eq(AftersalesArbitrationOrderEntity::getWorkOrderId,l); + lambdaUpdateWrapper.set(AftersalesArbitrationOrderEntity::getOperateType,"客服完结"); + lambdaUpdateWrapper.set(AftersalesArbitrationOrderEntity::getTypesOf,WorkOrderTypesOfStatusConstant.jeishu.getValue()); + aftersalesArbitrationOrderService.update(lambdaUpdateWrapper); + } + return true; } + /** + * 查询 营业部责任人人员信息 + * @return + */ + @Override + public List getBusinessDepartmentUser(Long warehouseId) { + BasicdataWarehouseEntity entityWarehouseId = warehouseClient.getEntityWarehouseId(warehouseId); + if(ObjectUtils.isNotNull(warehouseId)){ + //查询单独的责任人 + + R> listR = userSearchClient.listByName(entityWarehouseId.getLinkman()); + return listR.getData(); + }else{ + //查询全部数据 + R> listR = userSearchClient.listByDept(String.valueOf(entityWarehouseId.getDepartment())); + return listR.getData(); + + } + + } + }