指派清运公司

master
ljw 2025-12-24 13:29:13 +08:00
parent d49d6bfc9b
commit 6f33757bfb
19 changed files with 774 additions and 426 deletions

View File

@ -13,6 +13,7 @@ import java.util.List;
/**
* /
*
* @author ljw
*/
@Slf4j

View File

@ -4,6 +4,8 @@ import com.njzscloud.common.core.utils.R;
import com.njzscloud.common.mp.support.PageParam;
import com.njzscloud.common.mp.support.PageResult;
import com.njzscloud.dispose.cst.order.pojo.entity.OrderEntity;
import com.njzscloud.dispose.cst.order.pojo.param.AssignmentDriverParam;
import com.njzscloud.dispose.cst.order.pojo.param.AssignmentOrgParam;
import com.njzscloud.dispose.cst.order.pojo.param.CreateOrderParam;
import com.njzscloud.dispose.cst.order.service.OrderService;
import lombok.RequiredArgsConstructor;
@ -67,6 +69,25 @@ public class OrderController {
public R<PageResult<OrderEntity>> paging(PageParam pageParam, OrderEntity orderEntity) {
return R.success(orderService.paging(pageParam, orderEntity));
}
/**
*
*/
@GetMapping("/assignmentOrg")
public R<?> assignmentOrg(@RequestBody AssignmentOrgParam orgParam) {
orderService.assignmentOrg(orgParam);
return R.success();
}
/**
*
*/
@GetMapping("/assignmentDriver")
public R<?> assignmentDriver(@RequestBody AssignmentDriverParam driverParam) {
orderService.assignmentDriver(driverParam);
return R.success();
}
}

View File

@ -13,6 +13,7 @@ import java.util.List;
/**
*
*
* @author ljw
*/
@Slf4j

View File

@ -13,6 +13,7 @@ import java.util.List;
/**
*
*
* @author ljw
*/
@Slf4j

View File

@ -2,14 +2,19 @@ package com.njzscloud.dispose.cst.order.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.njzscloud.dispose.cst.order.pojo.entity.OrderTransEntity;
import com.njzscloud.dispose.cst.order.pojo.result.OrderTransResult;
import org.apache.ibatis.annotations.Mapper;
/**
*
*
* @author ljw
*/
@Mapper
public interface OrderTransMapper extends BaseMapper<OrderTransEntity> {
OrderTransResult getById(Long id);
}

View File

@ -11,6 +11,7 @@ import java.math.BigDecimal;
/**
*
*
* @author ljw
*/
@Getter
@ -139,6 +140,21 @@ public class OrderExpenseItemsEntity extends BaseEntity {
*/
private String settlementWay;
/**
* Idsys_user.id
*/
private Long payerUserId;
/**
* Idcst_customer.id
*/
private Long payerCustomerId;
/**
* Id
*/
private Long payerMoneyAccount;
}

View File

@ -217,6 +217,21 @@ public class OrderTransEntity extends BaseEntity {
*/
private String settlementWay;
/**
* Idsys_user.id
*/
private Long payerUserId;
/**
* Idcst_customer.id
*/
private Long payerCustomerId;
/**
* Id
*/
private Long payerMoneyAccount;
}

View File

@ -0,0 +1,27 @@
package com.njzscloud.dispose.cst.order.pojo.param;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
/**
* @author ljw
*/
@Getter
@Setter
@ToString
@Accessors(chain = true)
public class AssignmentDriverParam {
/**
* ID
*/
private Long orderTransId;
/**
* Id
*/
private Long driverId;
}

View File

@ -0,0 +1,27 @@
package com.njzscloud.dispose.cst.order.pojo.param;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
/**
* @author ljw
*/
@Getter
@Setter
@ToString
@Accessors(chain = true)
public class AssignmentOrgParam {
/**
* ID
*/
private Long orderTransId;
/**
* Id
*/
private Long transCompanyId;
}

View File

@ -0,0 +1,275 @@
package com.njzscloud.dispose.cst.order.pojo.result;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
*
*
* @author ljw
*/
@Data
public class OrderTransResult {
private Long id;
/**
*
*/
private Integer trainNum;
/**
* Id
*/
private Long orderId;
/**
* trans_statusDaiPaiDan-->DaiJieDan-->YiJieDan-->YunShuZhong-->YiJinChang-->YiChuChang-->YiWanCheng-->YiQuXiao-->
*/
private String transStatus;
/**
*
*/
private String lane;
/**
*
*/
private LocalDateTime assignmentDriverTime;
/**
*
*/
private LocalDateTime driverConfirmTime;
/**
*
*/
private LocalDateTime transTime;
/**
*
*/
private LocalDateTime finishTime;
/**
* Idsys_user.id
*/
private Long checkerId;
/**
* check_statusWu-->YiKanLiao-->WeiKanLiao-->
*/
private String checkStatus;
/**
*
*/
private LocalDateTime checkTime;
/**
*
*/
private String checkPhoto;
/**
*
*/
private String checkerMemo;
/**
* Id
*/
private Long driverId;
/**
* Idcst_customer.id
*/
private Long driverCustomerId;
/**
* Id
*/
private Long driverUserId;
/**
* Idcst_customer.id
*/
private Long truckCustomerId;
/**
*
*/
private Long truckOrgId;
/**
* Id
*/
private Long truckId;
/**
*
*/
private String truckLicensePlate;
/**
*
*/
private Integer historyTareWeight;
/**
*
*/
private Integer roughWeight;
/**
*
*/
private Integer tareWeight;
/**
*
*/
private Integer settleWeight;
/**
*
*/
private Integer transDistance;
/**
*
*/
private String inFrontPhoto;
/**
*
*/
private String inBodyPhoto;
/**
*
*/
private String outFrontPhoto;
/**
*
*/
private String outBodyPhoto;
/**
*
*/
private LocalDateTime inTime;
/**
*
*/
private LocalDateTime outTime;
/**
* MianFei-->WeiZhiFu-->YiZhiFu-->YiTuiKuan-->退
*/
private String paymentStatus;
/**
*
*/
private BigDecimal payTime;
/**
* 退
*/
private BigDecimal refundTime;
/**
*
*/
private BigDecimal totalMoney;
/**
*
*/
private BigDecimal discountMoney;
/**
*
*/
private BigDecimal reviseMoney;
/**
*
*/
private BigDecimal settleMoney;
/**
* YueJie-->YuE-->XianFu-->
*/
private String settlementWay;
/**
* Idsys_user.id
*/
private Long payerUserId;
/**
* Idcst_customer.id
*/
private Long payerCustomerId;
/**
* Id
*/
private Long payerMoneyAccount;
/**
* Idsys_user.id
*/
private Long creatorId;
/**
* Id sys_user.id
*/
private Long modifierId;
/**
*
*/
private LocalDateTime createTime;
/**
*
*/
private LocalDateTime modifyTime;
/**
* 0-->1-->
*/
private Boolean deleted;
/**
* Idcst_org.id
*/
private Long transOrgId;
/**
* Id
*/
private Long transCustomerId;
/**
*
*/
private LocalDateTime assignmentTransTime;
/**
* order_statusYiYuYue-->JinXingZhong-->YiWanCheng-->YiQuXiao-->
*/
private String orderStatus;
}

View File

@ -1,27 +1,50 @@
package com.njzscloud.dispose.cst.order.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njzscloud.common.mp.support.PageParam;
import com.njzscloud.common.mp.support.PageResult;
import com.njzscloud.dispose.cst.order.mapper.OrderCargoPlaceMapper;
import com.njzscloud.dispose.cst.order.pojo.entity.OrderCargoPlaceEntity;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* /
*
* @author ljw
*/
public interface OrderCargoPlaceService extends IService<OrderCargoPlaceEntity> {
@Slf4j
@Service
@RequiredArgsConstructor
public class OrderCargoPlaceService extends ServiceImpl<OrderCargoPlaceMapper, OrderCargoPlaceEntity> {
void add(OrderCargoPlaceEntity orderCargoPlaceEntity);
@Transactional(rollbackFor = Exception.class)
public void add(OrderCargoPlaceEntity orderCargoPlaceEntity) {
this.save(orderCargoPlaceEntity);
}
void modify(OrderCargoPlaceEntity orderCargoPlaceEntity);
@Transactional(rollbackFor = Exception.class)
public void modify(OrderCargoPlaceEntity orderCargoPlaceEntity) {
this.updateById(orderCargoPlaceEntity);
}
void del(List<Long> ids);
@Transactional(rollbackFor = Exception.class)
public void del(List<Long> ids) {
this.removeBatchByIds(ids);
}
OrderCargoPlaceEntity detail(Long id);
public OrderCargoPlaceEntity detail(Long id) {
return this.getById(id);
}
PageResult<OrderCargoPlaceEntity> paging(PageParam pageParam, OrderCargoPlaceEntity orderCargoPlaceEntity);
public PageResult<OrderCargoPlaceEntity> paging(PageParam pageParam, OrderCargoPlaceEntity orderCargoPlaceEntity) {
return PageResult.of(this.page(pageParam.toPage(), Wrappers.query(orderCargoPlaceEntity)));
}
}

View File

@ -1,27 +1,50 @@
package com.njzscloud.dispose.cst.order.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njzscloud.common.mp.support.PageParam;
import com.njzscloud.common.mp.support.PageResult;
import com.njzscloud.dispose.cst.order.mapper.OrderExpenseItemsMapper;
import com.njzscloud.dispose.cst.order.pojo.entity.OrderExpenseItemsEntity;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
*
*
* @author ljw
*/
public interface OrderExpenseItemsService extends IService<OrderExpenseItemsEntity> {
@Slf4j
@Service
@RequiredArgsConstructor
public class OrderExpenseItemsService extends ServiceImpl<OrderExpenseItemsMapper, OrderExpenseItemsEntity> {
void add(OrderExpenseItemsEntity orderExpenseItemsEntity);
@Transactional(rollbackFor = Exception.class)
public void add(OrderExpenseItemsEntity orderExpenseItemsEntity) {
this.save(orderExpenseItemsEntity);
}
void modify(OrderExpenseItemsEntity orderExpenseItemsEntity);
@Transactional(rollbackFor = Exception.class)
public void modify(OrderExpenseItemsEntity orderExpenseItemsEntity) {
this.updateById(orderExpenseItemsEntity);
}
void del(List<Long> ids);
@Transactional(rollbackFor = Exception.class)
public void del(List<Long> ids) {
this.removeBatchByIds(ids);
}
OrderExpenseItemsEntity detail(Long id);
public OrderExpenseItemsEntity detail(Long id) {
return this.getById(id);
}
PageResult<OrderExpenseItemsEntity> paging(PageParam pageParam, OrderExpenseItemsEntity orderExpenseItemsEntity);
public PageResult<OrderExpenseItemsEntity> paging(PageParam pageParam, OrderExpenseItemsEntity orderExpenseItemsEntity) {
return PageResult.of(this.page(pageParam.toPage(), Wrappers.query(orderExpenseItemsEntity)));
}
}

View File

@ -1,29 +1,244 @@
package com.njzscloud.dispose.cst.order.service;
import com.baomidou.mybatisplus.extension.service.IService;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.lang.Assert;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njzscloud.common.core.ex.Exceptions;
import com.njzscloud.common.core.fastjson.Fastjson;
import com.njzscloud.common.mp.support.PageParam;
import com.njzscloud.common.mp.support.PageResult;
import com.njzscloud.common.security.util.SecurityUtil;
import com.njzscloud.common.sn.support.SnUtil;
import com.njzscloud.dispose.cst.order.constant.*;
import com.njzscloud.dispose.cst.order.mapper.OrderMapper;
import com.njzscloud.dispose.cst.order.mapper.OrderTransMapper;
import com.njzscloud.dispose.cst.order.pojo.entity.OrderCargoPlaceEntity;
import com.njzscloud.dispose.cst.order.pojo.entity.OrderEntity;
import com.njzscloud.dispose.cst.order.pojo.entity.OrderExpenseItemsEntity;
import com.njzscloud.dispose.cst.order.pojo.entity.OrderTransEntity;
import com.njzscloud.dispose.cst.order.pojo.param.AssignmentDriverParam;
import com.njzscloud.dispose.cst.order.pojo.param.AssignmentOrgParam;
import com.njzscloud.dispose.cst.order.pojo.param.CreateOrderCargoPlaceParam;
import com.njzscloud.dispose.cst.order.pojo.param.CreateOrderParam;
import com.njzscloud.dispose.cst.order.pojo.result.OrderTransResult;
import com.njzscloud.dispose.cst.order.pojo.vo.Scope;
import com.njzscloud.dispose.finance.constant.ScopeStrategy;
import com.njzscloud.dispose.finance.pojo.entity.ExpenseItemEntity;
import com.njzscloud.dispose.finance.service.ExpenseItemService;
import com.njzscloud.dispose.sys.auth.pojo.result.MyResult;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.List;
import java.util.stream.Collectors;
/**
* /
*
* @author ljw
*/
public interface OrderService extends IService<OrderEntity> {
@Slf4j
@Service
@RequiredArgsConstructor
public class OrderService extends ServiceImpl<OrderMapper, OrderEntity> {
void add(CreateOrderParam param);
private final OrderCargoPlaceService orderCargoPlaceService;
private final OrderTransMapper orderTransMapper;
private final ExpenseItemService expenseItemService;
private final OrderExpenseItemsService orderExpenseItemsService;
void modify(OrderEntity orderEntity);
@Transactional(rollbackFor = Exception.class)
public void add(CreateOrderParam param) {
// 订单信息
param.setOrderStatus(OrderStatus.YiYuYue.getVal());
Long transOrgId = param.getTransOrgId();
OrderStatus orderStatus = transOrgId == null ? OrderStatus.YiYuYue : OrderStatus.JinXingZhong;
MyResult userDetail = SecurityUtil.loginUser();
OrderEntity orderEntity = BeanUtil.copyProperties(param, OrderEntity.class)
.setSn(this.generateSn())
.setUserId(SecurityUtil.currentUserId())
.setCustomerId(userDetail.getCurrentCustomerId())
.setOrderTime(LocalDateTime.now())
.setOrderStatus(orderStatus.getVal())
.setAssignmentTransTime(transOrgId == null ? null : LocalDateTime.now());
this.save(orderEntity);
void del(List<Long> ids);
// 装卸货信息
CreateOrderCargoPlaceParam cargoPlace = param.getCargoPlaceParam();
OrderCargoPlaceEntity placeEntity = BeanUtil.copyProperties(cargoPlace, OrderCargoPlaceEntity.class)
.setOrderId(orderEntity.getId());
if (OrderCategory.HuiShouYuYue.getVal().equals(param.getOrderCategory())) {
placeEntity.setZx(Zx.ZhuangHuo.getVal());
} else if (OrderCategory.XiaoShouYuYue.getVal().equals(param.getOrderCategory())) {
placeEntity.setZx(Zx.XieHuo.getVal());
}
orderCargoPlaceService.add(placeEntity);
OrderEntity detail(Long id);
// 运输信息
int transNum = orderEntity.getEstimatedTrainNum();
OrderTransEntity transEntity = new OrderTransEntity();
transEntity.setOrderId(orderEntity.getId());
for (int i = 1; i <= transNum; i++) {
transEntity.setTrainNum(i);
transEntity.setTransStatus(transOrgId == null ? null : TransStatus.DaiPaiDan.getVal());
transEntity.setTransTime(transOrgId == null ? null : LocalDateTime.now());
transEntity.setCheckStatus(CheckStatus.WeiKanLiao.getVal());
transEntity.setPaymentStatus(PaymentStatus.WeiZhiFu.getVal());
orderTransMapper.insert(transEntity);
}
// 付费项
if (transOrgId != null) {
this.createOrderExpenseItems(orderEntity);
}
}
PageResult<OrderEntity> paging(PageParam pageParam, OrderEntity orderEntity);
@Transactional(rollbackFor = Exception.class)
public void modify(OrderEntity orderEntity) {
this.updateById(orderEntity);
}
@Transactional(rollbackFor = Exception.class)
public void del(List<Long> ids) {
this.removeBatchByIds(ids);
}
public OrderEntity detail(Long id) {
return this.getById(id);
}
public PageResult<OrderEntity> paging(PageParam pageParam, OrderEntity orderEntity) {
return PageResult.of(this.page(pageParam.toPage(), Wrappers.query(orderEntity)));
}
public void assignmentOrg(AssignmentOrgParam orgParam) {
Assert.notNull(orgParam, () -> Exceptions.clierr("请填写参数"));
Assert.notNull(orgParam.getOrderTransId(), () -> Exceptions.clierr("订单运输ID不可为空"));
Assert.notNull(orgParam.getTransCompanyId(), () -> Exceptions.clierr("清运公司ID不可为空"));
OrderTransResult result = orderTransMapper.getById(orgParam.getOrderTransId());
Assert.notNull(result, () -> Exceptions.clierr("订单不存在"));
Assert.isNull(result.getTransOrgId(), () -> Exceptions.clierr("当前订单已分配清运公司,无需重复分配"));
Assert.isTrue(OrderStatus.YiYuYue.getVal().equals(result.getOrderStatus()), () -> Exceptions.clierr("当前订单状态,无法分配清运公司"));
// 更新订单表 cst_order 的运输公司与状态信息
OrderEntity orderEntity = new OrderEntity();
orderEntity.setTransOrgId(orgParam.getTransCompanyId())
.setTransCustomerId(orgParam.getTransCompanyId())
.setAssignmentTransTime(LocalDateTime.now())
.setOrderStatus(OrderStatus.JinXingZhong.getVal())
.setId(result.getOrderId());
this.updateById(orderEntity);
}
public void assignmentDriver(AssignmentDriverParam driverParam) {
Assert.notNull(driverParam, () -> Exceptions.clierr("请填写参数"));
Assert.notNull(driverParam.getOrderTransId(), () -> Exceptions.clierr("订单运输ID不可为空"));
Assert.notNull(driverParam.getDriverId(), () -> Exceptions.clierr("司机Id不可为空"));
OrderTransResult result = orderTransMapper.getById(driverParam.getOrderTransId());
Assert.notNull(result, () -> Exceptions.clierr("订单不存在"));
Assert.isNull(result.getDriverId(), () -> Exceptions.clierr("当前订单已分配司机,无需重复分配"));
Assert.isTrue(TransStatus.DaiPaiDan.getVal().equals(result.getTransStatus()), () -> Exceptions.clierr("当前订单状态,无法分配司机"));
}
/**
*
*
* @return sn
*/
public String generateSn() {
String sn = SnUtil.next("Booking-Order-SN");
if (this.exists(Wrappers.<OrderEntity>lambdaQuery().eq(OrderEntity::getSn, sn).eq(OrderEntity::getDeleted, Boolean.FALSE))) {
this.generateSn();
}
return sn;
}
/**
*
*
* @param orderEntity
*/
public void createOrderExpenseItems(OrderEntity orderEntity) {
// 读取启用的付费项配置,并按过滤
List<ExpenseItemEntity> itemEntityList = expenseItemService.list(Wrappers.<ExpenseItemEntity>lambdaQuery()
.eq(ExpenseItemEntity::getCanuse, Boolean.TRUE)
.eq(ExpenseItemEntity::getDeleted, Boolean.FALSE));
Long transOrgId = orderEntity.getTransOrgId();
Long goodsId = orderEntity.getGoodsId();
Long stationId = orderEntity.getStationId();
List<ExpenseItemEntity> goodsItems = itemEntityList.stream().filter(item ->
item.getGoodsId().equals(goodsId)).toList();
OrderExpenseItemsEntity goodsOrderItem = null;
if (!goodsItems.isEmpty()) {
goodsOrderItem = BeanUtil.copyProperties(goodsItems.getFirst(), OrderExpenseItemsEntity.class)
.setOrderId(orderEntity.getId())
.setPaymentStatus(PaymentStatus.WeiZhiFu.getVal());
}
List<OrderExpenseItemsEntity> extraItems = itemEntityList.stream()
.filter(cfg -> {
Scope userScope = Fastjson.toBean(cfg.getUserScope(), Scope.class);
Scope goodsScope = Fastjson.toBean(cfg.getGoodsScope(), Scope.class);
Scope stationsScope = Fastjson.toBean(cfg.getStationScope(), Scope.class);
List<Long> companyIds = userScope != null ? userScope.getIds() : null;
List<Long> goodsIds = goodsScope != null ? goodsScope.getIds() : null;
List<Long> stationsIds = stationsScope != null ? stationsScope.getIds() : null;
// 判断客户范围
boolean isComTrue;
if (userScope != null && ScopeStrategy.SuoYou.getVal().equals(userScope.getStrategy())) {
isComTrue = true; // 所有客户都匹配
} else {
isComTrue = companyIds != null && transOrgId != null && companyIds.contains(transOrgId);
}
// 判断产品范围
boolean isGoodsTrue;
if (goodsScope != null && ScopeStrategy.SuoYou.getVal().equals(goodsScope.getStrategy())) {
isGoodsTrue = true; // 所有产品都匹配
} else {
isGoodsTrue = goodsIds != null && goodsId != null && goodsIds.contains(goodsId);
}
// 判断站点范围
boolean isStationsTrue;
if (stationsScope != null && ScopeStrategy.SuoYou.getVal().equals(stationsScope.getStrategy())) {
isStationsTrue = true; // 所有站点都匹配
} else {
isStationsTrue = stationsIds != null && stationId != null && stationsIds.contains(stationId);
}
// 只有当三个条件都为true时才返回true
return isComTrue && isGoodsTrue && isStationsTrue;
})
// 复制配置为订单付费项(数量口径与产品一致:按车=1否则=settleWeight
.map(cfg -> {
OrderExpenseItemsEntity entity = BeanUtil.copyProperties(cfg, OrderExpenseItemsEntity.class);
entity.setOrderId(orderEntity.getId());
entity.setPaymentStatus(PaymentStatus.WeiZhiFu.getVal());
return entity;
})
.collect(Collectors.toList());
// 第三步:合并集合并计算金额,然后批量落库
if (goodsOrderItem != null) {
extraItems.addFirst(goodsOrderItem);
}
if (extraItems.isEmpty()) {
return;
}
// 批量保存付费项
orderExpenseItemsService.saveBatch(extraItems);
}
}

View File

@ -1,27 +1,50 @@
package com.njzscloud.dispose.cst.order.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njzscloud.common.mp.support.PageParam;
import com.njzscloud.common.mp.support.PageResult;
import com.njzscloud.dispose.cst.order.mapper.OrderTransMapper;
import com.njzscloud.dispose.cst.order.pojo.entity.OrderTransEntity;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
*
*
* @author ljw
*/
public interface OrderTransService extends IService<OrderTransEntity> {
@Slf4j
@Service
@RequiredArgsConstructor
public class OrderTransService extends ServiceImpl<OrderTransMapper, OrderTransEntity> {
void add(OrderTransEntity orderTransEntity);
@Transactional(rollbackFor = Exception.class)
public void add(OrderTransEntity orderTransEntity) {
this.save(orderTransEntity);
}
void modify(OrderTransEntity orderTransEntity);
@Transactional(rollbackFor = Exception.class)
public void modify(OrderTransEntity orderTransEntity) {
this.updateById(orderTransEntity);
}
void del(List<Long> ids);
@Transactional(rollbackFor = Exception.class)
public void del(List<Long> ids) {
this.removeBatchByIds(ids);
}
OrderTransEntity detail(Long id);
public OrderTransEntity detail(Long id) {
return this.getById(id);
}
PageResult<OrderTransEntity> paging(PageParam pageParam, OrderTransEntity orderTransEntity);
public PageResult<OrderTransEntity> paging(PageParam pageParam, OrderTransEntity orderTransEntity) {
return PageResult.of(this.page(pageParam.toPage(), Wrappers.query(orderTransEntity)));
}
}

View File

@ -1,55 +0,0 @@
package com.njzscloud.dispose.cst.order.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njzscloud.common.mp.support.PageParam;
import com.njzscloud.common.mp.support.PageResult;
import com.njzscloud.dispose.cst.order.mapper.OrderCargoPlaceMapper;
import com.njzscloud.dispose.cst.order.pojo.entity.OrderCargoPlaceEntity;
import com.njzscloud.dispose.cst.order.service.OrderCargoPlaceService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* /
* @author ljw
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class OrderCargoPlaceServiceImpl extends ServiceImpl<OrderCargoPlaceMapper, OrderCargoPlaceEntity> implements OrderCargoPlaceService {
@Override
@Transactional(rollbackFor = Exception.class)
public void add(OrderCargoPlaceEntity orderCargoPlaceEntity) {
this.save(orderCargoPlaceEntity);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void modify(OrderCargoPlaceEntity orderCargoPlaceEntity) {
this.updateById(orderCargoPlaceEntity);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void del(List<Long> ids) {
this.removeBatchByIds(ids);
}
@Override
public OrderCargoPlaceEntity detail(Long id) {
return this.getById(id);
}
@Override
public PageResult<OrderCargoPlaceEntity> paging(PageParam pageParam, OrderCargoPlaceEntity orderCargoPlaceEntity) {
return PageResult.of(this.page(pageParam.toPage(), Wrappers.query(orderCargoPlaceEntity)));
}
}

View File

@ -1,55 +0,0 @@
package com.njzscloud.dispose.cst.order.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njzscloud.common.mp.support.PageParam;
import com.njzscloud.common.mp.support.PageResult;
import com.njzscloud.dispose.cst.order.mapper.OrderExpenseItemsMapper;
import com.njzscloud.dispose.cst.order.pojo.entity.OrderExpenseItemsEntity;
import com.njzscloud.dispose.cst.order.service.OrderExpenseItemsService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
*
* @author ljw
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class OrderExpenseItemsServiceImpl extends ServiceImpl<OrderExpenseItemsMapper, OrderExpenseItemsEntity> implements OrderExpenseItemsService {
@Override
@Transactional(rollbackFor = Exception.class)
public void add(OrderExpenseItemsEntity orderExpenseItemsEntity) {
this.save(orderExpenseItemsEntity);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void modify(OrderExpenseItemsEntity orderExpenseItemsEntity) {
this.updateById(orderExpenseItemsEntity);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void del(List<Long> ids) {
this.removeBatchByIds(ids);
}
@Override
public OrderExpenseItemsEntity detail(Long id) {
return this.getById(id);
}
@Override
public PageResult<OrderExpenseItemsEntity> paging(PageParam pageParam, OrderExpenseItemsEntity orderExpenseItemsEntity) {
return PageResult.of(this.page(pageParam.toPage(), Wrappers.query(orderExpenseItemsEntity)));
}
}

View File

@ -1,216 +0,0 @@
package com.njzscloud.dispose.cst.order.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njzscloud.common.core.fastjson.Fastjson;
import com.njzscloud.common.mp.support.PageParam;
import com.njzscloud.common.mp.support.PageResult;
import com.njzscloud.common.security.util.SecurityUtil;
import com.njzscloud.common.sn.support.SnUtil;
import com.njzscloud.dispose.cst.order.constant.*;
import com.njzscloud.dispose.cst.order.mapper.OrderMapper;
import com.njzscloud.dispose.cst.order.pojo.entity.OrderCargoPlaceEntity;
import com.njzscloud.dispose.cst.order.pojo.entity.OrderEntity;
import com.njzscloud.dispose.cst.order.pojo.entity.OrderExpenseItemsEntity;
import com.njzscloud.dispose.cst.order.pojo.entity.OrderTransEntity;
import com.njzscloud.dispose.cst.order.pojo.param.CreateOrderCargoPlaceParam;
import com.njzscloud.dispose.cst.order.pojo.param.CreateOrderParam;
import com.njzscloud.dispose.cst.order.pojo.vo.Scope;
import com.njzscloud.dispose.cst.order.service.OrderCargoPlaceService;
import com.njzscloud.dispose.cst.order.service.OrderExpenseItemsService;
import com.njzscloud.dispose.cst.order.service.OrderService;
import com.njzscloud.dispose.cst.order.service.OrderTransService;
import com.njzscloud.dispose.finance.constant.ScopeStrategy;
import com.njzscloud.dispose.finance.pojo.entity.ExpenseItemEntity;
import com.njzscloud.dispose.finance.service.ExpenseItemService;
import com.njzscloud.dispose.sys.auth.pojo.result.MyResult;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.List;
import java.util.stream.Collectors;
/**
* /
*
* @author ljw
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class OrderServiceImpl extends ServiceImpl<OrderMapper, OrderEntity> implements OrderService {
private final OrderCargoPlaceService orderCargoPlaceService;
private final OrderTransService orderTransService;
private final ExpenseItemService expenseItemService;
private final OrderExpenseItemsService orderExpenseItemsService;
@Override
@Transactional(rollbackFor = Exception.class)
public void add(CreateOrderParam param) {
// 订单信息
param.setOrderStatus(OrderStatus.YiYuYue.getVal());
Long transOrgId = param.getTransOrgId();
OrderStatus orderStatus = transOrgId == null ? OrderStatus.YiYuYue : OrderStatus.JinXingZhong;
MyResult userDetail = SecurityUtil.loginUser();
OrderEntity orderEntity = BeanUtil.copyProperties(param, OrderEntity.class)
.setSn(this.generateSn())
.setUserId(SecurityUtil.currentUserId())
.setCustomerId(userDetail.getCurrentCustomerId())
.setOrderTime(LocalDateTime.now())
.setOrderStatus(orderStatus.getVal())
.setAssignmentTransTime(transOrgId == null ? null : LocalDateTime.now());
this.save(orderEntity);
// 装卸货信息
CreateOrderCargoPlaceParam cargoPlace = param.getCargoPlaceParam();
OrderCargoPlaceEntity placeEntity = BeanUtil.copyProperties(cargoPlace, OrderCargoPlaceEntity.class)
.setOrderId(orderEntity.getId());
if (OrderCategory.HuiShouYuYue.getVal().equals(param.getOrderCategory())) {
placeEntity.setZx(Zx.ZhuangHuo.getVal());
} else if (OrderCategory.XiaoShouYuYue.getVal().equals(param.getOrderCategory())) {
placeEntity.setZx(Zx.XieHuo.getVal());
}
orderCargoPlaceService.add(placeEntity);
// 运输信息
int transNum = orderEntity.getEstimatedTrainNum();
OrderTransEntity transEntity = new OrderTransEntity();
transEntity.setOrderId(orderEntity.getId());
for (int i = 1; i <= transNum; i++) {
transEntity.setTrainNum(i);
transEntity.setTransStatus(transOrgId == null ? null : TransStatus.DaiPaiDan.getVal());
transEntity.setTransTime(transOrgId == null ? null : LocalDateTime.now());
transEntity.setCheckStatus(CheckStatus.WeiKanLiao.getVal());
transEntity.setPaymentStatus(PaymentStatus.WeiZhiFu.getVal());
orderTransService.add(transEntity);
}
// 付费项
if (transOrgId != null) {
this.createOrderExpenseItems(orderEntity);
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void modify(OrderEntity orderEntity) {
this.updateById(orderEntity);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void del(List<Long> ids) {
this.removeBatchByIds(ids);
}
@Override
public OrderEntity detail(Long id) {
return this.getById(id);
}
@Override
public PageResult<OrderEntity> paging(PageParam pageParam, OrderEntity orderEntity) {
return PageResult.of(this.page(pageParam.toPage(), Wrappers.query(orderEntity)));
}
/**
*
*
* @return sn
*/
public String generateSn() {
String sn = SnUtil.next("Booking-Order-SN");
if (this.exists(Wrappers.<OrderEntity>lambdaQuery().eq(OrderEntity::getSn, sn).eq(OrderEntity::getDeleted, Boolean.FALSE))) {
this.generateSn();
}
return sn;
}
/**
*
*
* @param orderEntity
*/
public void createOrderExpenseItems(OrderEntity orderEntity) {
// 读取启用的付费项配置,并按过滤
List<ExpenseItemEntity> itemEntityList = expenseItemService.list(Wrappers.<ExpenseItemEntity>lambdaQuery()
.eq(ExpenseItemEntity::getCanuse, Boolean.TRUE)
.eq(ExpenseItemEntity::getDeleted, Boolean.FALSE));
Long transOrgId = orderEntity.getTransOrgId();
Long goodsId = orderEntity.getGoodsId();
Long stationId = orderEntity.getStationId();
List<ExpenseItemEntity> goodsItems = itemEntityList.stream().filter(item ->
item.getGoodsId().equals(goodsId)).toList();
OrderExpenseItemsEntity goodsOrderItem = null;
if (!goodsItems.isEmpty()) {
goodsOrderItem = BeanUtil.copyProperties(goodsItems.getFirst(), OrderExpenseItemsEntity.class)
.setOrderId(orderEntity.getId())
.setPaymentStatus(PaymentStatus.WeiZhiFu.getVal());
}
List<OrderExpenseItemsEntity> extraItems = itemEntityList.stream()
.filter(cfg -> {
Scope userScope = Fastjson.toBean(cfg.getUserScope(), Scope.class);
Scope goodsScope = Fastjson.toBean(cfg.getGoodsScope(), Scope.class);
Scope stationsScope = Fastjson.toBean(cfg.getStationScope(), Scope.class);
List<Long> companyIds = userScope != null ? userScope.getIds() : null;
List<Long> goodsIds = goodsScope != null ? goodsScope.getIds() : null;
List<Long> stationsIds = stationsScope != null ? stationsScope.getIds() : null;
// 判断客户范围
boolean isComTrue;
if (userScope != null && ScopeStrategy.SuoYou.getVal().equals(userScope.getStrategy())) {
isComTrue = true; // 所有客户都匹配
} else {
isComTrue = companyIds != null && transOrgId != null && companyIds.contains(transOrgId);
}
// 判断产品范围
boolean isGoodsTrue;
if (goodsScope != null && ScopeStrategy.SuoYou.getVal().equals(goodsScope.getStrategy())) {
isGoodsTrue = true; // 所有产品都匹配
} else {
isGoodsTrue = goodsIds != null && goodsId != null && goodsIds.contains(goodsId);
}
// 判断站点范围
boolean isStationsTrue;
if (stationsScope != null && ScopeStrategy.SuoYou.getVal().equals(stationsScope.getStrategy())) {
isStationsTrue = true; // 所有站点都匹配
} else {
isStationsTrue = stationsIds != null && stationId != null && stationsIds.contains(stationId);
}
// 只有当三个条件都为true时才返回true
return isComTrue && isGoodsTrue && isStationsTrue;
})
// 复制配置为订单付费项(数量口径与产品一致:按车=1否则=settleWeight
.map(cfg -> {
OrderExpenseItemsEntity entity = BeanUtil.copyProperties(cfg, OrderExpenseItemsEntity.class);
entity.setOrderId(orderEntity.getId());
entity.setPaymentStatus(PaymentStatus.WeiZhiFu.getVal());
return entity;
})
.collect(Collectors.toList());
// 第三步:合并集合并计算金额,然后批量落库
if (goodsOrderItem != null) {
extraItems.addFirst(goodsOrderItem);
}
if (extraItems.isEmpty()) {
return;
}
// 批量保存付费项
orderExpenseItemsService.saveBatch(extraItems);
}
}

View File

@ -1,55 +0,0 @@
package com.njzscloud.dispose.cst.order.service.impl;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njzscloud.common.mp.support.PageParam;
import com.njzscloud.common.mp.support.PageResult;
import com.njzscloud.dispose.cst.order.mapper.OrderTransMapper;
import com.njzscloud.dispose.cst.order.pojo.entity.OrderTransEntity;
import com.njzscloud.dispose.cst.order.service.OrderTransService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
*
* @author ljw
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class OrderTransServiceImpl extends ServiceImpl<OrderTransMapper, OrderTransEntity> implements OrderTransService {
@Override
@Transactional(rollbackFor = Exception.class)
public void add(OrderTransEntity orderTransEntity) {
this.save(orderTransEntity);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void modify(OrderTransEntity orderTransEntity) {
this.updateById(orderTransEntity);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void del(List<Long> ids) {
this.removeBatchByIds(ids);
}
@Override
public OrderTransEntity detail(Long id) {
return this.getById(id);
}
@Override
public PageResult<OrderTransEntity> paging(PageParam pageParam, OrderTransEntity orderTransEntity) {
return PageResult.of(this.page(pageParam.toPage(), Wrappers.query(orderTransEntity)));
}
}

View File

@ -1,12 +1,10 @@
<?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="com.njzscloud.dispose.cst.order.mapper.OrderTransMapper">
<resultMap id="BaseResultMap" type="com.njzscloud.dispose.cst.order.pojo.entity.OrderTransEntity">
<resultMap id="BaseResultMap" type="com.njzscloud.dispose.cst.order.pojo.result.OrderTransResult">
<id column="id" property="id"/>
<result column="train_num" property="trainNum"/>
<result column="order_id" property="orderId"/>
<result column="station_id" property="stationId"/>
<result column="trans_status" property="transStatus"/>
<result column="lane" property="lane"/>
<result column="assignment_driver_time" property="assignmentDriverTime"/>
@ -36,6 +34,21 @@
<result column="out_body_photo" property="outBodyPhoto"/>
<result column="in_time" property="inTime"/>
<result column="out_time" property="outTime"/>
<result column="payment_status" property="paymentStatus"/>
<result column="pay_time" property="payTime"/>
<result column="refund_time" property="refundTime"/>
<result column="total_money" property="totalMoney"/>
<result column="discount_money" property="discountMoney"/>
<result column="revise_money" property="reviseMoney"/>
<result column="settle_money" property="settleMoney"/>
<result column="settlement_way" property="settlementWay"/>
<result column="payerUserId" property="payerUserId"/>
<result column="payerCustomerId" property="payerCustomerId"/>
<result column="payerMoneyAccount" property="payerMoneyAccount"/>
<result column="trans_org_id" property="transOrgId"/>
<result column="trans_customer_id" property="transCustomerId"/>
<result column="assignment_trans_time" property="assignmentTransTime"/>
<result column="order_status" property="orderStatus"/>
<result column="creator_id" property="creatorId"/>
<result column="modifier_id" property="modifierId"/>
<result column="create_time" property="createTime"/>
@ -44,16 +57,59 @@
</resultMap>
<sql id="Base_Column_List">
id, train_num, order_id, station_id, trans_status, lane,
assignment_driver_time, driver_confirm_time, trans_time, finish_time,
checker_id, check_status, check_time, check_photo, checker_memo,
driver_id, driver_customer_id, driver_user_id, truck_customer_id,
truck_org_id, truck_id, truck_license_plate, history_tare_weight,
rough_weight, tare_weight, settle_weight, trans_distance,
in_front_photo, in_body_photo, out_front_photo, out_body_photo,
in_time, out_time, creator_id, modifier_id, create_time, modify_time, deleted
cot
.
id
AS id,
cot.train_num AS train_num,
cot.order_id AS order_id,
cot.trans_status AS trans_status,
cot.lane AS lane,
cot.assignment_driver_time AS assignment_driver_time,
cot.driver_confirm_time AS driver_confirm_time,
cot.trans_time AS trans_time,
cot.finish_time AS finish_time,
cot.checker_id AS checker_id,
cot.check_status AS check_status,
cot.check_time AS check_time,
cot.check_photo AS check_photo,
cot.checker_memo AS checker_memo,
cot.driver_id AS driver_id,
cot.driver_customer_id AS driver_customer_id,
cot.driver_user_id AS driver_user_id,
cot.truck_customer_id AS truck_customer_id,
cot.truck_org_id AS truck_org_id,
cot.truck_id AS truck_id,
cot.truck_license_plate AS truck_license_plate,
cot.history_tare_weight AS history_tare_weight,
cot.rough_weight AS rough_weight,
cot.tare_weight AS tare_weight,
cot.settle_weight AS settle_weight,
cot.trans_distance AS trans_distance,
cot.in_front_photo AS in_front_photo,
cot.in_body_photo AS in_body_photo,
cot.out_front_photo AS out_front_photo,
cot.out_body_photo AS out_body_photo,
cot.in_time AS in_time,
cot.out_time AS out_time,
cot.creator_id AS creator_id,
cot.modifier_id AS modifier_id,
cot.create_time AS create_time,
cot.modify_time AS modify_time,
cot.deleted AS deleted,
co.trans_org_id AS trans_org_id,
co.trans_customer_id AS trans_customer_id,
co.assignment_trans_time AS assignment_trans_time,
co.order_status
</sql>
<select id="getById" resultMap="BaseResultMap">
SELECT
<include refid="Base_Column_List"/>
FROM cst_order_trans cot
left join cst_order co on co.id = cot.order_id
WHERE cot.id = #{id}
</select>
</mapper>