Commit a72132b3 authored by honghy's avatar honghy

需求117 后台-集运-异常包裹

parent 8a975b10
package cn.iocoder.yudao.module.order.dal.dataobject.consException;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.*;
import com.baomidou.mybatisplus.annotation.*;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import java.util.Date;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
/**
* 集运异常 DO
*
......@@ -36,7 +41,24 @@ public class ConsExceptionDO extends BaseDO {
*
* 枚举 {@link cons_exception_type 对应的类}
*/
private Integer exceptionType;
private String exceptionType;
/**
* 处理人
*/
private Long handlerId;
/**
* 处理时间
*/
@JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private Date handlerTime;
/**
* 处理结果
*/
private String handlerResult;
/**
* 处理备注
*/
private String handlerRemark;
/**
* 异常说明
*/
......
......@@ -6,8 +6,12 @@ import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQuery;
import cn.iocoder.yudao.framework.mybatis.core.mapper.AbstractMapper;
import cn.iocoder.yudao.framework.mybatis.core.vo.PageVO;
import cn.iocoder.yudao.module.order.dal.dataobject.consException.ConsExceptionDO;
import cn.iocoder.yudao.module.order.vo.consException.ConsExceptionBackVO;
import cn.iocoder.yudao.module.order.vo.consException.ConsExceptionQueryVO;
import cn.iocoder.yudao.module.order.vo.consFollowup.ConsFollowupBackVO;
import cn.iocoder.yudao.module.order.vo.consFollowup.ConsFollowupQueryVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
* 集运异常 Mapper
......@@ -52,4 +56,9 @@ public interface ConsExceptionMapper extends AbstractMapper<ConsExceptionDO> {
return null;
}
Long myCount(@Param("query") ConsExceptionQueryVO query);
List<ConsExceptionBackVO> myPageList(@Param("start") int start, @Param("size") int size, @Param("query") ConsExceptionQueryVO query);
}
......@@ -6,6 +6,7 @@ import cn.iocoder.yudao.framework.mybatis.core.vo.PageVO;
import cn.iocoder.yudao.framework.mybatis.core.service.IService;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.order.dal.dataobject.consException.ConsExceptionDO;
import cn.iocoder.yudao.module.order.vo.consException.ConsExceptionBackVO;
import cn.iocoder.yudao.module.order.vo.consException.ConsExceptionCreateReqVO;
import cn.iocoder.yudao.module.order.vo.consException.ConsExceptionQueryVO;
import cn.iocoder.yudao.module.order.vo.consException.ConsExceptionUpdateReqVO;
......@@ -41,7 +42,7 @@ public interface ConsExceptionService extends IService<ConsExceptionDO> {
* @param id 编号
* @return 集运异常
*/
ConsExceptionDO getConsException(Long id);
ConsExceptionBackVO getConsException(ConsExceptionQueryVO query);
/**
* 获得集运异常列表
......
package cn.iocoder.yudao.module.order.service.consException;
import java.util.*;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.service.AbstractService;
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
import cn.iocoder.yudao.module.order.convert.consException.ConsExceptionConvert;
import cn.iocoder.yudao.module.order.dal.dataobject.consException.ConsExceptionDO;
import cn.iocoder.yudao.module.order.dal.dataobject.consItem.ConsItemDO;
import cn.iocoder.yudao.module.order.dal.dataobject.consMedia.ConsMediaDO;
import cn.iocoder.yudao.module.order.dal.mysql.cons.ConsMapper;
import cn.iocoder.yudao.module.order.dal.mysql.consException.ConsExceptionMapper;
import cn.iocoder.yudao.module.order.dal.mysql.consItem.ConsItemMapper;
import cn.iocoder.yudao.module.order.dal.mysql.consMedia.ConsMediaMapper;
import cn.iocoder.yudao.module.order.vo.consException.ConsExceptionBackVO;
import cn.iocoder.yudao.module.order.vo.consException.ConsExceptionCreateReqVO;
import cn.iocoder.yudao.module.order.vo.consException.ConsExceptionQueryVO;
import cn.iocoder.yudao.module.order.vo.consException.ConsExceptionUpdateReqVO;
import cn.iocoder.yudao.module.order.vo.consFollowup.ConsFollowupQueryVO;
import cn.iocoder.yudao.module.product.dal.dataobject.product.ProductDO;
import cn.iocoder.yudao.module.product.dal.mysql.product.ProductMapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated;
......@@ -32,6 +42,10 @@ public class ConsExceptionServiceImpl extends AbstractService<ConsExceptionMappe
private ConsExceptionMapper consExceptionMapper;
@Resource
private ConsMediaMapper consMediaMapper;
@Resource
private ConsItemMapper consItemMapper;
@Resource
private ProductMapper productMapper;
@Transactional
@Override
......@@ -58,8 +72,42 @@ public class ConsExceptionServiceImpl extends AbstractService<ConsExceptionMappe
return id;
}
@Transactional
@Override
public void updateConsException(ConsExceptionUpdateReqVO updateReqVO) {
updateReqVO.setHandlerId(SecurityFrameworkUtils.getLoginUserId());
updateReqVO.setHandlerTime(new Date());
if ("goods_exists".equals(updateReqVO.getHandlerResult())) {
ConsItemDO consItemDO = consItemMapper.selectById(updateReqVO.getConsItemId());
consItemDO.setProdId(updateReqVO.getProductId());
consItemMapper.updateById(consItemDO);
}
Map<String, Long> map = consMediaMapper.selectList(new LambdaQueryWrapper<ConsMediaDO>()
.eq(ConsMediaDO::getTableName, "ecw_cons_exception")
.eq(ConsMediaDO::getColumnName, "files")
.eq(ConsMediaDO::getBizId, updateReqVO.getId())).stream().collect(Collectors.toMap(ConsMediaDO::getMediaUrl, ConsMediaDO::getId));
//新增
if (updateReqVO.getExceptionUrls() != null && !updateReqVO.getExceptionUrls().isEmpty()) {
List<String> exceptionUrls = updateReqVO.getExceptionUrls();
for (String exceptionUrl : exceptionUrls) {
if (map.containsKey(exceptionUrl)) {
map.remove(exceptionUrl);
} else {
ConsMediaDO consMediaDO = new ConsMediaDO()
.setMediaBusinessType(updateReqVO.getMediaBusinessType())
.setTableName("ecw_cons_followup")
.setColumnName("files")
.setMediaUrl(exceptionUrl)
.setBizId(updateReqVO.getId())
.setConsId(updateReqVO.getConsId());
consMediaMapper.insert(consMediaDO);
}
}
}
//删除
if (!map.isEmpty()) {
consMediaMapper.deleteBatchIds(map.values());
}
// 更新
ConsExceptionDO updateObj = ConsExceptionConvert.INSTANCE.convert(updateReqVO);
consExceptionMapper.updateById(updateObj);
......@@ -72,8 +120,30 @@ public class ConsExceptionServiceImpl extends AbstractService<ConsExceptionMappe
}
@Override
public ConsExceptionDO getConsException(Long id) {
return consExceptionMapper.selectById(id);
public ConsExceptionBackVO getConsException(ConsExceptionQueryVO query) {
ConsExceptionBackVO consExceptionBackVO = new ConsExceptionBackVO();
if (query.getConsId() != null) {
consExceptionBackVO = consExceptionMapper.myPageList(0, 1, new ConsExceptionQueryVO().setConsId(query.getConsId())).get(0);
} else {
consExceptionMapper.myPageList(0, 1, new ConsExceptionQueryVO().setId(query.getId())).get(0);
consExceptionBackVO.setExceptionUrls(consMediaMapper.selectList(new LambdaQueryWrapper<ConsMediaDO>()
.eq(ConsMediaDO::getTableName, "ecw_cons_exception")
.eq(ConsMediaDO::getColumnName, "files")
.eq(ConsMediaDO::getBizId, query.getId())).stream().map(ConsMediaDO::getMediaUrl).collect(Collectors.toList()));
}
String goodListName = "";
List<ConsItemDO> consItemDOList = consItemMapper.selectList(new LambdaQueryWrapper<ConsItemDO>()
.eq(ConsItemDO::getConsId, consExceptionBackVO.getConsId()));
for (ConsItemDO consItemDO : consItemDOList) {
ProductDO productDO = productMapper.selectById(consItemDO.getProdId());
if (StringUtils.isBlank(goodListName)) {
goodListName = productDO.getTitleZh();
} else {
goodListName = goodListName + "," + productDO.getTitleZh();
}
}
consExceptionBackVO.setGoodListName(goodListName);
return consExceptionBackVO;
}
@Override
......
package cn.iocoder.yudao.module.order.vo.consException;
import cn.iocoder.yudao.module.order.dal.dataobject.consItem.ConsItemDO;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.*;
import java.util.*;
import io.swagger.annotations.*;
import com.alibaba.excel.annotation.ExcelProperty;
import cn.iocoder.yudao.framework.excel.annotations.DictFormat;
......@@ -11,9 +15,10 @@ import org.springframework.format.annotation.DateTimeFormat;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
/**
* 集运异常 Response VO
* @author jayden
*/
* 集运异常 Response VO
*
* @author jayden
*/
@Data
@ApiModel("管理后台 - 集运异常 Response VO")
public class ConsExceptionBackVO {
......@@ -33,7 +38,31 @@ public class ConsExceptionBackVO {
@ExcelProperty(value = "异常类型,来自于字典表cons_exception_type", converter = DictConvert.class)
@DictFormat("cons_exception_type") // TODO 代码优化:建议设置到对应的 XXXDictTypeConstants 枚举类中
@ApiModelProperty(value = "异常类型,来自于字典表cons_exception_type", required = true)
private Integer exceptionType;
private String exceptionType;
/**
* 处理人
*/
private Long handlerId;
/**
* 处理时间
*/
@JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private Date handlerTime;
/**
* 处理结果
*/
private String handlerResult;
/**
* 处理备注
*/
private String handlerRemark;
/**
* 签收时间
*/
@JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private Date signedTime;
@ExcelProperty("异常说明")
@ApiModelProperty(value = "异常说明")
......@@ -53,8 +82,62 @@ public class ConsExceptionBackVO {
private Integer bpmStatus;
@ExcelProperty("")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
@JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
@ApiModelProperty(value = "", required = true)
private Date createTime;
@ExcelProperty("始发仓(中文)")
@ApiModelProperty(value = "始发仓(中文)")
private String startTitleZh;
@ExcelProperty("始发仓(英文)")
@ApiModelProperty(value = "始发仓(英文)")
private String startTitleEn;
@ExcelProperty("始发仓(法文)")
@ApiModelProperty(value = "始发仓(法文)")
private String startTitleFr;
@ExcelProperty("目的仓(中文)")
@ApiModelProperty(value = "目的仓(中文)")
private String destTitleZh;
@ExcelProperty("目的仓(英文)")
@ApiModelProperty(value = "目的仓(英文)")
private String destTitleEn;
@ExcelProperty("目的仓(法文)")
@ApiModelProperty(value = "目的仓(法文)")
private String destTitleFr;
@ApiModelProperty(value = "包裹号")
private String consNum;
@ApiModelProperty(value = "运输方式")
private Integer transportId;
@ApiModelProperty(value = "客户编码")
private String customerNumber;
@ApiModelProperty(value = "商品id")
private Long productId;
@ApiModelProperty(value = "商品名称")
private String goodTitleZh;
@ApiModelProperty(value = "商品名称")
private String goodTitleEn;
@ApiModelProperty(value = "快递单号")
private String expressNo;
/**
* 文件
*/
private List<String> exceptionUrls;
/**
* 所有商品名称
*/
private String goodListName;
}
package cn.iocoder.yudao.module.order.vo.consException;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.*;
import java.util.*;
import io.swagger.annotations.*;
import javax.validation.constraints.*;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
/**
* 集运异常 Base VO,提供给添加、修改、详细的子 VO 使用
* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
*/
* 集运异常 Base VO,提供给添加、修改、详细的子 VO 使用
* 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
*/
@Data
public class ConsExceptionBaseVO {
......@@ -21,7 +27,25 @@ public class ConsExceptionBaseVO {
@ApiModelProperty(value = "异常类型,来自于字典表cons_exception_type", required = true)
@NotNull(message = "异常类型,来自于字典表cons_exception_type不能为空")
private Integer exceptionType;
private String exceptionType;
/**
* 处理人
*/
private Long handlerId;
/**
* 处理时间
*/
@JsonFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private Date handlerTime;
/**
* 处理结果
*/
private String handlerResult;
/**
* 处理备注
*/
private String handlerRemark;
@ApiModelProperty(value = "异常说明")
private String exceptionRemark;
......@@ -35,4 +59,6 @@ public class ConsExceptionBaseVO {
@ApiModelProperty(value = "")
private Integer bpmStatus;
@ApiModelProperty(value = "商品id")
private Long productId;
}
......@@ -12,6 +12,9 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
@ApiModel("管理后台 - 集运异常查询 VO")
public class ConsExceptionQueryVO {
@ApiModelProperty(value = "id")
private Long id;
@ApiModelProperty(value = "包裹id")
private Long consId;
......
......@@ -15,4 +15,10 @@ public class ConsExceptionUpdateReqVO extends ConsExceptionBaseVO {
@NotNull(message = "id不能为空")
private Long id;
/**
* 文件
*/
private List<String> exceptionUrls;
public Integer mediaBusinessType;
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.iocoder.yudao.module.order.dal.mysql.consException.ConsExceptionMapper">
<select id="myCount" resultType="java.lang.Long">
select count(1)
FROM ecw_cons_exception ece
left join ecw_cons cons on cons.id = ece.cons_id
left join ecw_customer ec on cons.customer_id = ec.id
left join ecw_warehouse_line el on cons.warehouse_line_id = el.id
left join ecw_warehouse ew_start ON ew_start.id = el.start_warehouse_id
left join ecw_warehouse ew_dest ON ew_dest.id = el.dest_warehouse_id
left join ecw_cons_item eci on eci.id = ece.cons_item_id
left join ecw_product ep on ep.id = eci.prod_id
WHERE ece.deleted = 0
<include refid="myQuery"/>
</select>
<select id="myPageList" resultType="cn.iocoder.yudao.module.order.vo.consException.ConsExceptionBackVO" parameterType="cn.iocoder.yudao.module.order.vo.consException.ConsExceptionQueryVO">
SELECT ece.*,cons.cons_num,cons.express_no,cons.transport_id,cons.signed_time,ec.number as customer_number,ew_start.title_zh as startTitleZh,ew_start.title_en as startTitleEn,ew_start.title_fr as startTitleFr,
ew_dest.title_zh as destTitleZh,ew_dest.title_en as destTitleEn,ew_dest.title_fr as destTitleFr,ep.title_zh goodTitleZh,ep.title_en goodTitleEn,ep.id as productId
FROM ecw_cons cons
left join ecw_cons_exception ece on ece.cons_id = cons.id
left join ecw_customer ec on cons.customer_id = ec.id
left join ecw_warehouse_line el on cons.warehouse_line_id = el.id
left join ecw_warehouse ew_start ON ew_start.id = el.start_warehouse_id
left join ecw_warehouse ew_dest ON ew_dest.id = el.dest_warehouse_id
left join ecw_cons_item eci on eci.id = ece.cons_item_id
left join ecw_product ep on ep.id = eci.prod_id
WHERE ece.deleted = 0
<include refid="myQuery"/>
order by ece.create_time desc
limit #{start}, #{size}
</select>
<sql id="myQuery">
<if test="query.id != null and query.id != '' ">
AND ece.id = #{query.id}
</if>
<if test="query.consId != null and query.consId != '' ">
AND cons.id = #{query.consId}
</if>
</sql>
</mapper>
......@@ -56,10 +56,8 @@ public class ConsExceptionController {
@GetMapping("/get")
@ApiOperation("获得集运异常")
@ApiImplicitParam(name = "id", value = "编号", required = true, example = "1024", dataTypeClass = Long.class)
public CommonResult<ConsExceptionBackVO> getConsException(@RequestParam("id") Long id) {
ConsExceptionDO consException = consExceptionService.getConsException(id);
return success(ConsExceptionConvert.INSTANCE.convert(consException));
public CommonResult<ConsExceptionBackVO> getConsException(ConsExceptionQueryVO query) {
return success(consExceptionService.getConsException(query));
}
@GetMapping("/list")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment