Commit c34d4b18 authored by Smile's avatar Smile

需求129 后台-集运-包裹列表-编辑包裹

parent 7efebc71
...@@ -109,3 +109,4 @@ alter table ecw_cons_tracking_record comment '包裹动态跟踪表'; ...@@ -109,3 +109,4 @@ alter table ecw_cons_tracking_record comment '包裹动态跟踪表';
ALTER TABLE jiedao.ecw_cons_item MODIFY COLUMN id bigint auto_increment NOT NULL; ALTER TABLE jiedao.ecw_cons_item MODIFY COLUMN id bigint auto_increment NOT NULL;
ALTER TABLE jiedao.ecw_cons_tracking_record MODIFY COLUMN id bigint auto_increment NOT NULL;
...@@ -6,25 +6,34 @@ import java.util.*; ...@@ -6,25 +6,34 @@ import java.util.*;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import javax.annotation.Resource; import javax.annotation.Resource;
import cn.iocoder.yudao.framework.common.util.code.CodeUtils; import cn.iocoder.yudao.framework.dict.core.dto.DictDataRespDTO;
import cn.iocoder.yudao.framework.i18n.core.I18nMessage; import cn.iocoder.yudao.framework.i18n.core.I18nMessage;
import cn.iocoder.yudao.framework.i18n.core.LangEnum;
import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils; import cn.iocoder.yudao.framework.mybatis.core.util.MyBatisUtils;
import cn.iocoder.yudao.module.order.convert.cons.ConsConvert; import cn.iocoder.yudao.module.order.convert.cons.ConsConvert;
import cn.iocoder.yudao.module.order.convert.consItem.ConsItemConvert; import cn.iocoder.yudao.module.order.convert.consMedia.ConsMediaConvert;
import cn.iocoder.yudao.module.order.dal.dataobject.cons.ConsDO; import cn.iocoder.yudao.module.order.dal.dataobject.cons.ConsDO;
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.cons.ConsMapper;
import cn.iocoder.yudao.module.order.dal.mysql.consMedia.ConsMediaMapper;
import cn.iocoder.yudao.module.order.service.consItem.ConsItemService; import cn.iocoder.yudao.module.order.service.consItem.ConsItemService;
import cn.iocoder.yudao.module.order.service.consMedia.ConsMediaService;
import cn.iocoder.yudao.module.order.service.consTrackingRecord.ConsTrackingRecordService;
import cn.iocoder.yudao.module.order.vo.cons.ConsBackVO; import cn.iocoder.yudao.module.order.vo.cons.ConsBackVO;
import cn.iocoder.yudao.module.order.vo.cons.ConsCreateReqVO; import cn.iocoder.yudao.module.order.vo.cons.ConsCreateReqVO;
import cn.iocoder.yudao.module.order.vo.cons.ConsQueryVO; import cn.iocoder.yudao.module.order.vo.cons.ConsQueryVO;
import cn.iocoder.yudao.module.order.vo.cons.ConsUpdateReqVO; import cn.iocoder.yudao.module.order.vo.cons.ConsUpdateReqVO;
import cn.iocoder.yudao.module.order.vo.consItem.ConsItemBackVO; import cn.iocoder.yudao.module.order.vo.consItem.ConsItemBackVO;
import cn.iocoder.yudao.module.order.vo.consItem.ConsItemQueryVO; import cn.iocoder.yudao.module.order.vo.consItem.ConsItemQueryVO;
import cn.iocoder.yudao.module.order.vo.consMedia.ConsMediaBackVO;
import cn.iocoder.yudao.module.order.vo.consMedia.ConsMediaCreateReqVO;
import cn.iocoder.yudao.module.order.vo.consTrackingRecord.ConsTrackingRecordCreateReqVO;
import cn.iocoder.yudao.module.system.api.dict.DictDataApi;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import org.redisson.api.RAtomicLong; import org.redisson.api.RAtomicLong;
import org.redisson.api.RLock; import org.redisson.api.RLock;
import org.redisson.api.RedissonClient; import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
...@@ -48,13 +57,33 @@ public class ConsServiceImpl extends AbstractService<ConsMapper, ConsDO> impleme ...@@ -48,13 +57,33 @@ public class ConsServiceImpl extends AbstractService<ConsMapper, ConsDO> impleme
@Resource @Resource
private ConsItemService consItemService; private ConsItemService consItemService;
@Resource
private ConsMediaService consMediaService;
@Resource
private ConsTrackingRecordService consTrackingRecordService;
@Resource @Resource
private RedissonClient redissonClient; private RedissonClient redissonClient;
@Override @Override
@Transactional @Transactional
public Long createCons(ConsCreateReqVO createReqVO) { public Long createCons(ConsCreateReqVO createReqVO) {
validateCons(createReqVO); if (createReqVO.getWareId()==null){
throw exception(30004,"请选择仓库");
}
if (createReqVO.getExpressNo()==null){
throw exception(30004,"包裹快递号不能为空");
}
if (createReqVO.getExpressId()==null){
throw exception(30004,"请选择快递公司");
}
if (createReqVO.getTransportId()==null&&createReqVO.getConsigneeCityId()==null){
throw exception(30004,"请选择运输方式或目的城市");
}
if (createReqVO.getConsItemVOList().isEmpty()){
throw exception(30004,"包裹项不能为空");
}
if (consMapper.selectOne("express_no", createReqVO.getExpressNo()) != null) { if (consMapper.selectOne("express_no", createReqVO.getExpressNo()) != null) {
throw exception(30004,"包裹快递号已存在"); throw exception(30004,"包裹快递号已存在");
} }
...@@ -74,13 +103,75 @@ public class ConsServiceImpl extends AbstractService<ConsMapper, ConsDO> impleme ...@@ -74,13 +103,75 @@ public class ConsServiceImpl extends AbstractService<ConsMapper, ConsDO> impleme
consItemVO.setConsId(cons.getId()); consItemVO.setConsId(cons.getId());
consItemService.createConsItem(consItemVO); consItemService.createConsItem(consItemVO);
}); });
ConsTrackingRecordCreateReqVO consTrackingRecordCreateReqVO = new ConsTrackingRecordCreateReqVO();
consTrackingRecordCreateReqVO.setConsId(cons.getId());
consTrackingRecordCreateReqVO.setBusinessNode(0);
consTrackingRecordCreateReqVO.setStatus(0);
consTrackingRecordCreateReqVO.setTrackingTime(new Date());
consTrackingRecordCreateReqVO.setIsShow(0);
consTrackingRecordService.createConsTrackingRecord(consTrackingRecordCreateReqVO);
if (createReqVO.getMediaUrl()!=null){
ConsMediaCreateReqVO consMediaCreateReqVO = new ConsMediaCreateReqVO();
consMediaCreateReqVO.setConsId(cons.getId());
consMediaCreateReqVO.setMediaUrl(createReqVO.getMediaUrl());
consMediaCreateReqVO.setMediaBusinessType(0);
consMediaCreateReqVO.setBizId(cons.getId());
consMediaCreateReqVO.setTableName("ecw_cons");
consMediaCreateReqVO.setColumnName("files");
consMediaCreateReqVO.setOriginalFileName("签收图片");
consMediaService.createConsMedia(consMediaCreateReqVO);
}
return cons.getId(); return cons.getId();
} }
@Override @Override
public void updateCons(ConsUpdateReqVO updateReqVO) { public void updateCons(ConsUpdateReqVO updateReqVO) {
if (updateReqVO.getWareId()==null){
throw exception(30004,"请选择仓库");
}
if (updateReqVO.getExpressNo()==null){
throw exception(30004,"包裹快递号不能为空");
}
if (updateReqVO.getExpressId()==null){
throw exception(30004,"请选择快递公司");
}
if (updateReqVO.getTransportId()==null&&updateReqVO.getConsigneeCityId()==null){
throw exception(30004,"请选择运输方式或目的城市");
}
if (updateReqVO.getConsItemVOList().isEmpty()){
throw exception(30004,"包裹项不能为空");
}
// 校验存在 // 校验存在
this.validateConsExists(updateReqVO.getId()); this.validateConsExists(updateReqVO.getId());
List<ConsItemDO> consItemBackVOList = consItemService.selectList(ConsItemDO::getConsId, updateReqVO.getId());
for (ConsItemDO consItemDO : consItemBackVOList) {
consItemService.deleteConsItem(consItemDO.getId());
}
updateReqVO.getConsItemVOList().forEach(consItemVO -> {
consItemVO.setConsId(updateReqVO.getId());
consItemService.createConsItem(consItemVO);
});
//更新图片地址
if (updateReqVO.getMediaUrl()!=null){
ConsMediaDO consMedia = consMediaService.selectOne(ConsMediaDO::getBizId, updateReqVO.getId());
if (consMedia!=null){
consMedia.setMediaUrl(updateReqVO.getMediaUrl());
consMediaService.updateById(consMedia);
}else{
ConsMediaCreateReqVO consMediaCreateReqVO = new ConsMediaCreateReqVO();
consMediaCreateReqVO.setConsId(updateReqVO.getId());
consMediaCreateReqVO.setMediaUrl(updateReqVO.getMediaUrl());
consMediaCreateReqVO.setMediaBusinessType(0);
consMediaCreateReqVO.setBizId(updateReqVO.getId());
consMediaCreateReqVO.setTableName("ecw_cons");
consMediaCreateReqVO.setColumnName("files");
consMediaCreateReqVO.setOriginalFileName("签收图片");
consMediaService.createConsMedia(consMediaCreateReqVO);
}
}else {
consMediaService.deleteConsMedia(updateReqVO.getId());
}
// 更新 // 更新
ConsDO updateObj = ConsConvert.INSTANCE.convert(updateReqVO); ConsDO updateObj = ConsConvert.INSTANCE.convert(updateReqVO);
consMapper.updateById(updateObj); consMapper.updateById(updateObj);
...@@ -93,23 +184,6 @@ public class ConsServiceImpl extends AbstractService<ConsMapper, ConsDO> impleme ...@@ -93,23 +184,6 @@ public class ConsServiceImpl extends AbstractService<ConsMapper, ConsDO> impleme
// 删除 // 删除
consMapper.deleteById(id); consMapper.deleteById(id);
} }
private void validateCons(ConsCreateReqVO createReqVO){
if (createReqVO.getWareId()==null){
throw exception(30004,"请选择仓库");
}
if (createReqVO.getExpressNo()==null){
throw exception(30004,"包裹快递号不能为空");
}
if (createReqVO.getExpressId()==null){
throw exception(30004,"请选择快递公司");
}
if (createReqVO.getTransportId()==null&&createReqVO.getConsigneeCityId()==null){
throw exception(30004,"请选择运输方式或目的城市");
}
if (createReqVO.getConsItemVOList().isEmpty()){
throw exception(30004,"包裹项不能为空");
}
}
private void validateConsExists(Long id) { private void validateConsExists(Long id) {
if (consMapper.selectById(id) == null) { if (consMapper.selectById(id) == null) {
throw exception(30004,"包裹不存在"); throw exception(30004,"包裹不存在");
...@@ -141,7 +215,7 @@ public class ConsServiceImpl extends AbstractService<ConsMapper, ConsDO> impleme ...@@ -141,7 +215,7 @@ public class ConsServiceImpl extends AbstractService<ConsMapper, ConsDO> impleme
consBackVOS.forEach(consBackVO -> { consBackVOS.forEach(consBackVO -> {
consItemQueryVO.setConsId(consBackVO.getId()); consItemQueryVO.setConsId(consBackVO.getId());
List<ConsItemBackVO> consItemBackVOList = consItemService.getConsItemBackVOList(consItemQueryVO); List<ConsItemBackVO> consItemBackVOList = consItemService.getConsItemBackVOList(consItemQueryVO);
consBackVO.setConsItemList(consItemBackVOList); consBackVO.setConsItemVOList(consItemBackVOList);
}); });
return new PageResult<>(consBackVOS, total, mpPage.getSize(), page.getPage(), (total + mpPage.getSize() - 1) / mpPage.getSize()); return new PageResult<>(consBackVOS, total, mpPage.getSize(), page.getPage(), (total + mpPage.getSize() - 1) / mpPage.getSize());
} }
......
...@@ -171,7 +171,7 @@ public class ConsBackVO { ...@@ -171,7 +171,7 @@ public class ConsBackVO {
@ExcelProperty("包裹项") @ExcelProperty("包裹项")
@ApiModelProperty(value = "包裹项") @ApiModelProperty(value = "包裹项")
private List<ConsItemBackVO> consItemList; private List<ConsItemBackVO> consItemVOList;
@ExcelProperty("始发仓(中文)") @ExcelProperty("始发仓(中文)")
@ApiModelProperty(value = "始发仓(中文)") @ApiModelProperty(value = "始发仓(中文)")
...@@ -214,4 +214,13 @@ public class ConsBackVO { ...@@ -214,4 +214,13 @@ public class ConsBackVO {
@ApiModelProperty(value = "退仓状态") @ApiModelProperty(value = "退仓状态")
private Integer returnStatus; private Integer returnStatus;
@ExcelProperty("客户区号")
@ApiModelProperty(value = "客户区号")
private String areaCode;
@ExcelProperty("客户手机号")
@ApiModelProperty(value = "客户手机号")
private String phoneNew;
} }
...@@ -4,6 +4,7 @@ import cn.iocoder.yudao.module.order.vo.consItem.ConsItemCreateReqVO; ...@@ -4,6 +4,7 @@ import cn.iocoder.yudao.module.order.vo.consItem.ConsItemCreateReqVO;
import lombok.*; import lombok.*;
import io.swagger.annotations.*; import io.swagger.annotations.*;
import javax.validation.constraints.NotNull;
import java.util.List; import java.util.List;
@Data @Data
...@@ -13,4 +14,8 @@ import java.util.List; ...@@ -13,4 +14,8 @@ import java.util.List;
public class ConsCreateReqVO extends ConsBaseVO { public class ConsCreateReqVO extends ConsBaseVO {
@ApiModelProperty(value = "包裹项") @ApiModelProperty(value = "包裹项")
private List<ConsItemCreateReqVO> consItemVOList; private List<ConsItemCreateReqVO> consItemVOList;
@ApiModelProperty(value = "影像文件地址", required = true)
@NotNull(message = "影像文件地址不能为空")
private String mediaUrl;
} }
package cn.iocoder.yudao.module.order.vo.cons; package cn.iocoder.yudao.module.order.vo.cons;
import cn.iocoder.yudao.module.order.vo.consItem.ConsItemCreateReqVO;
import lombok.*; import lombok.*;
import java.util.*; import java.util.*;
import io.swagger.annotations.*; import io.swagger.annotations.*;
...@@ -15,4 +16,10 @@ public class ConsUpdateReqVO extends ConsBaseVO { ...@@ -15,4 +16,10 @@ public class ConsUpdateReqVO extends ConsBaseVO {
@NotNull(message = "不能为空") @NotNull(message = "不能为空")
private Long id; private Long id;
@ApiModelProperty(value = "包裹项")
private List<ConsItemCreateReqVO> consItemVOList;
@ApiModelProperty(value = "影像文件地址", required = true)
@NotNull(message = "影像文件地址不能为空")
private String mediaUrl;
} }
...@@ -2,9 +2,14 @@ package cn.iocoder.yudao.module.order.controller.admin.cons; ...@@ -2,9 +2,14 @@ package cn.iocoder.yudao.module.order.controller.admin.cons;
import cn.iocoder.yudao.framework.common.util.code.CodeUtils; import cn.iocoder.yudao.framework.common.util.code.CodeUtils;
import cn.iocoder.yudao.framework.mybatis.core.vo.PageVO; import cn.iocoder.yudao.framework.mybatis.core.vo.PageVO;
import cn.iocoder.yudao.module.customer.dal.dataobject.customerContacts.CustomerContactsDO;
import cn.iocoder.yudao.module.customer.service.customerContacts.CustomerContactsService;
import cn.iocoder.yudao.module.order.convert.cons.ConsConvert; import cn.iocoder.yudao.module.order.convert.cons.ConsConvert;
import cn.iocoder.yudao.module.order.convert.consItem.ConsItemConvert;
import cn.iocoder.yudao.module.order.dal.dataobject.cons.ConsDO; import cn.iocoder.yudao.module.order.dal.dataobject.cons.ConsDO;
import cn.iocoder.yudao.module.order.dal.dataobject.consItem.ConsItemDO;
import cn.iocoder.yudao.module.order.service.cons.ConsService; import cn.iocoder.yudao.module.order.service.cons.ConsService;
import cn.iocoder.yudao.module.order.service.consItem.ConsItemService;
import cn.iocoder.yudao.module.order.vo.cons.ConsBackVO; import cn.iocoder.yudao.module.order.vo.cons.ConsBackVO;
import cn.iocoder.yudao.module.order.vo.cons.ConsCreateReqVO; import cn.iocoder.yudao.module.order.vo.cons.ConsCreateReqVO;
import cn.iocoder.yudao.module.order.vo.cons.ConsQueryVO; import cn.iocoder.yudao.module.order.vo.cons.ConsQueryVO;
...@@ -35,6 +40,12 @@ public class ConsController { ...@@ -35,6 +40,12 @@ public class ConsController {
@Resource @Resource
private ConsService consService; private ConsService consService;
@Resource
private CustomerContactsService customerContactsService;
@Resource
private ConsItemService consItemService;
@PostMapping("/create") @PostMapping("/create")
@ApiOperation("创建集运包裹主") @ApiOperation("创建集运包裹主")
@PreAuthorize("@ss.hasPermission('ecw:cons:create')") @PreAuthorize("@ss.hasPermission('ecw:cons:create')")
...@@ -65,7 +76,13 @@ public class ConsController { ...@@ -65,7 +76,13 @@ public class ConsController {
@PreAuthorize("@ss.hasPermission('ecw:cons:query')") @PreAuthorize("@ss.hasPermission('ecw:cons:query')")
public CommonResult<ConsBackVO> getCons(@RequestParam("id") Long id) { public CommonResult<ConsBackVO> getCons(@RequestParam("id") Long id) {
ConsDO cons = consService.getCons(id); ConsDO cons = consService.getCons(id);
return success(ConsConvert.INSTANCE.convert(cons)); CustomerContactsDO customerContacts = customerContactsService.getDefaultContacts(cons.getCustomerId());
List<ConsItemDO> consItemDOS = consItemService.selectList(ConsItemDO::getConsId, cons.getId());
ConsBackVO consBackVO = ConsConvert.INSTANCE.convert(cons);
consBackVO.setConsItemVOList(ConsItemConvert.INSTANCE.convertList(consItemDOS));
consBackVO.setAreaCode(customerContacts.getAreaCode());
consBackVO.setPhoneNew(customerContacts.getPhoneNew());
return success(consBackVO);
} }
@GetMapping("/list") @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