Browse Source

添加客服仲裁完结

newStockUp
caoyizhong 1 year ago
parent
commit
28692c9ac9
  1. 30
      blade-biz-common/src/main/java/org/springblade/common/constant/aftersales/WorkOrderTypesOfStatusConstant.java
  2. 7
      blade-service-api/logpm-aftersales-api/src/main/java/com/logpm/aftersales/entity/AftersalesArbitrationOrderEntity.java
  3. 63
      blade-service-api/logpm-aftersales-api/src/main/java/com/logpm/aftersales/entity/AftersalesCompletionRecipientEntity.java
  4. 32
      blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/controller/AftersalesWorkOrderController.java
  5. 6
      blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/dto/AftersalesWorkOrderDTO.java
  6. 41
      blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/mapper/AftersalesWorkOrderMapper.xml
  7. 13
      blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/service/IAftersalesWorkOrderService.java
  8. 128
      blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/service/impl/AftersalesWorkOrderServiceImpl.java

30
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;
}
}

7
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;
}

63
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;
}

32
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<IPage<AftersalesWorkOrderVO>> getListOwn(@ApiIgnore @RequestParam Map<String, Object> aftersalesWorkOrder, Query query) {
BasicdataWarehouseEntity myCurrentWarehouse = warehouseClient.getMyCurrentWarehouse();
if(ObjectUtils.isNotNull(myCurrentWarehouse)){
aftersalesWorkOrder.put("warehouseId", myCurrentWarehouse.getId());
}
IPage<AftersalesWorkOrderEntity> 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<List<User>> getBusinessDepartmentUser(Long warehouseId) {
List<User> 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));
}
/**
* 客服异常工单 修改
*/

6
blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/dto/AftersalesWorkOrderDTO.java

@ -72,6 +72,12 @@ public class AftersalesWorkOrderDTO extends AftersalesWorkOrderEntity {
*/
private List<Long> assignList;
/**
* 处理结果
*/
private AftersalesProcessingResultsDTO aftersalesProcessingResultsDTO;
}

41
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
<where>
<if test="param.id != null and param.id != '' ">and lawo.id = #{param.id } </if>
<if test="param.workOrderType != null and param.workOrderType != '' ">and lawo.work_order_type = #{param.workOrderType } </if>
<if test="param.initiationIdentification != null and paraminitiationIdentification != '' ">and lawo.initiation_identification = #{param.initiationIdentification } </if>
<if test="param.discoveryNode != null and param.discoveryNode != '' ">and lawo.discovery_node = #{param.discoveryNode } </if>
<if test="param.workOrderNumber != null and param.workOrderNumber != '' ">and lawo.work_order_number = #{param.workOrderNumber } </if>
<if test="param.waybillNumber != null and param.waybillNumber != '' ">and lawo.waybill_number = #{param.waybillNumber } </if>
<if test="param.orderCode != null and param.orderCode != '' ">and lawo.order_code = #{param.orderCode } </if>
<if test="param.trainNumber != null and param.trainNumber != '' ">and lawo.train_number = #{param.trainNumber } </if>
<if test="param.first != null and param.first != '' ">and lawo.first = #{param.first } </if>
<if test="param.secondary != null and param.secondary != '' ">and lawo.secondary = #{param.secondary } </if>
<if test="param.vehicleRoute != null and param.vehicleRoute != '' ">and lawo.vehicle_route = #{param.vehicleRoute } </if>
<!-- create_time >= unix_timestamp('2013-10-24 00:00:00') and create_time <= unix_timestamp('2013-10-24 23:59:59')
date_format(from_unixtime(create_time),'%Y-%m-%d') = date_format(now(),'%Y-%m-%d')
-->
<if test="param.deliverGoodsTime != null and param.deliverGoodsTime != '' ">and date_format(from_unixtime( lawo.deliver_goods_time),'%Y-%m-%d') = date_format(#{param.deliverGoodsTime },'%Y-%m-%d') </if>
<if test="param.discoveryTime != null and param.discoveryTime != '' ">and date_format(from_unixtime(lawo.discovery_time),'%Y-%m-%d') = date_format( #{param.discoveryTime},'%Y-%m-%d') </if>
<if test="param.warehousingTime != null and param.warehousingTime != '' "> and date_format(from_unixtime(lawo.warehousing_time),'%Y-%m-%d') = date_format( #{param.warehousingTime},'%Y-%m-%d') </if>
<if test="param.deliveryTime != null and param.deliveryTime != '' ">and date_format(from_unixtime( lawo.delivery_time),'%Y-%m-%d') = date_format(#{param.deliveryTime} param.deliveryTime,'%Y-%m-%d') </if>
<if test="param.auditTime != null and param.auditTime != '' ">and date_format(from_unixtime(lawo.audit_time),'%Y-%m-%d') = date_format(#{param.auditTime},'%Y-%m-%d') </if>
<if test="param.entryTime != null and param.entryTime != '' ">and date_format(from_unixtime(lawo.entry_time),'%Y-%m-%d') = date_format(#{param.entryTime},'%Y-%m-%d') </if>
<if test="param.overTime != null and param.overTime != '' ">and date_format(from_unixtime(lawo.over_time),'%Y-%m-%d') = date_format(#{param.overTime}),'%Y-%m-%d') </if>
<if test="param.waybillMall != null and param.waybillMall != '' ">and lawo.waybill_mall = #{param.waybillMall } </if>
<if test="param.deliveryDriver != null and param.deliveryDriver != '' ">and lawo.delivery_driver = #{param.deliveryDriver } </if>
<if test="param.workOrderStatus != null and param.workOrderStatus != '' ">and lawo.work_order_status = #{param.workOrderStatus } </if>
<if test="param.customerServiceId != null and param.customerServiceId != '' ">and lawo.customer_service_id = #{param.customerServiceId } </if>
<if test="param.customerServiceName != null and param.customerServiceName != '' ">and lawo.customer_service_name = #{param.customerServiceName } </if>
<if test="param.waybillMallId != null and param.waybillMallId != '' ">and lawo.waybill_mall_id = #{param.waybillMallId } </if>
<if test="param.problemDescription != null and param.problemDescription != '' ">and lawo.problem_description = #{param.problemDescription } </if>
<if test="param.warehouseId != null and param.warehouseId != '' ">and lawo.warehouse_id = #{param.warehouseId } </if>
<if test="param.personResponsible != null and param.personResponsible != '' ">and lawo.person_responsible = #{param.personResponsible } </if>
<if test="param.processNumber != null and param.processNumber != '' ">and lawo.process_number = #{param.processNumber } </if>
<if test="param.reviewedBy != null and param.reviewedBy != '' ">and lawo.reviewed_by = #{param.reviewedBy } </if>
<if test="param.operator != null and param.operator != '' ">and lawo.operator = #{param.operator } </if>
<if test="param.responsiblePerson != null and param.responsiblePerson != '' ">and lawo.responsible_person = #{param.responsiblePerson } </if>
<if test="param.processedBy != null and param.processedBy != '' ">and lawo.processed_by = #{param.processedBy} </if>
<if test="param.investigationProcess != null and param.investigationProcess != '' ">and lawo.investigation_process = #{param.investigationProcess } </if>
<if test="param.relatedWorkOrdersId != null and param.relatedWorkOrdersId != '' ">and lawo.related_work_orders_id = #{param.relatedWorkOrdersId } </if>
</where>
</select>
<update id="updateList">

13
blade-service/logpm-aftersales/src/main/java/com/logpm/aftersales/service/IAftersalesWorkOrderService.java

@ -143,4 +143,17 @@ public interface IAftersalesWorkOrderService extends BaseService<AftersalesWorkO
* @return
*/
boolean updateArbitrate(AftersalesWorkOrderDTO aftersalesWorkOrder);
/**
* 异常工单 客服仲裁完结
* @param aftersalesWorkOrder
* @return
*/
boolean addArbitrateEnd(AftersalesWorkOrderDTO aftersalesWorkOrder);
/**
* 查询营业部责任人
* @return
*/
List<User> getBusinessDepartmentUser(Long warehouseId);
}

128
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<AftersalesWo
private final IAftersalesCompletionRecipientService completionRecipientService;
private final IAftersalesProcessingResultsService aftersalesProcessingResultsService;
private final IAftersalesOvertimeFineService aftersalesOvertimeFineService;
private final IAftersalesArbitrationOrderService aftersalesArbitrationOrderService;
private final IBasicdataWarehouseClient warehouseClient;
@ -307,9 +307,8 @@ public class AftersalesWorkOrderServiceImpl extends BaseServiceImpl<AftersalesWo
}
//添加赔付方信息
completionRecordService.saveBatch(v.getCompletionRecordEntities());
//添加受款方信息,可以为空
if(ObjectUtils.isNull(v.getCompletionRecipientEntities())){
if(ObjectUtils.isNotNull(v.getCompletionRecipientEntities())){
completionRecipientService.saveBatch(v.getCompletionRecipientEntities());
}
});
@ -325,6 +324,55 @@ public class AftersalesWorkOrderServiceImpl extends BaseServiceImpl<AftersalesWo
*/
@Override
public IPage<AftersalesWorkOrderEntity> pageListOwn(Map<String, Object> aftersalesWorkOrder, IPage<Object> page) {
//查询用户角色信息
BladeUser user = AuthUtil.getUser();
String roleName = user.getRoleName();
String tenantId = user.getTenantId();
//查询客服岗位
List<DictBiz> warehouseType = DictBizCache.getList("after_sales_visits");
if (warehouseType.isEmpty()) {
throw new ServiceException("注意,注意!售后访问字典未配置!请配置!");
} else {
Optional<DictBiz> 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<AftersalesWo
*/
@Override
public boolean updateArbitrate(AftersalesWorkOrderDTO aftersalesWorkOrder) {
List<AftersalesArbitrationOrderEntity> 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<AftersalesWorkOrderDTO> orderDTOList = new ArrayList<>();
orderDTOList.add(aftersalesWorkOrder);
addCompletionEnd(orderDTOList);
//修改工单状态
AftersalesWorkOrderEntity aftersalesWorkOrderEntity = new AftersalesWorkOrderEntity();
aftersalesWorkOrderEntity.setId(l);
aftersalesWorkOrderEntity.setWorkOrderStatus(WorkOrderStatusConstant.yiwanjei.getValue());
baseMapper.updateById(aftersalesWorkOrderEntity);
//修改
LambdaUpdateWrapper<AftersalesArbitrationOrderEntity> 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<User> getBusinessDepartmentUser(Long warehouseId) {
BasicdataWarehouseEntity entityWarehouseId = warehouseClient.getEntityWarehouseId(warehouseId);
if(ObjectUtils.isNotNull(warehouseId)){
//查询单独的责任人
R<List<User>> listR = userSearchClient.listByName(entityWarehouseId.getLinkman());
return listR.getData();
}else{
//查询全部数据
R<List<User>> listR = userSearchClient.listByDept(String.valueOf(entityWarehouseId.getDepartment()));
return listR.getData();
}
}
}

Loading…
Cancel
Save