Compare commits

..

No commits in common. "f8f361881bc5cc655c929c7fb600fcb7d097a039" and "3f13341a3b7abd9e250a553ccb7c3cc0e946147f" have entirely different histories.

16 changed files with 45 additions and 403 deletions

View File

@ -1,24 +0,0 @@
package com.njzscloud.dispose.cst.order.constant;
import com.njzscloud.common.core.ienum.DictStr;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
/**
* check_status
*
*/
@Getter
@RequiredArgsConstructor
public enum CheckStatus implements DictStr {
Wu("Wu", "无需勘料"),
YiKanLiao("YiKanLiao", "已勘料"),
WeiKanLiao("WeiKanLiao", "未勘料"),
;
private final String val;
private final String txt;
}

View File

@ -1,26 +0,0 @@
package com.njzscloud.dispose.cst.order.constant;
import com.njzscloud.common.core.ienum.DictStr;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
/**
* payment_status
*
*/
@Getter
@RequiredArgsConstructor
public enum PaymentStatus implements DictStr {
MianFei("MianFei", "免费"),
WeiZhiFu("WeiZhiFu", "未支付"),
YiZhiFu("YiZhiFu", "已支付"),
YiTuiKuan("YiTuiKuan", "已退款"),
;
private final String val;
private final String txt;
}

View File

@ -1,24 +0,0 @@
package com.njzscloud.dispose.cst.order.constant;
import com.njzscloud.common.core.ienum.DictStr;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
/**
* settlement_way
*
*/
@Getter
@RequiredArgsConstructor
public enum SettlementWay implements DictStr {
YueJie("YueJie", "月结"),
YuE("YuE", "余额"),
XianFu("XianFu", "现付"),
;
private final String val;
private final String txt;
}

View File

@ -1,34 +0,0 @@
package com.njzscloud.dispose.cst.order.constant;
import com.njzscloud.common.core.ienum.DictStr;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
/**
* trans_status
*
*/
@Getter
@RequiredArgsConstructor
public enum TransStatus implements DictStr {
DaiPaiDan("DaiPaiDan", "待派单"),
DaiJieDan("DaiJieDan", "待接单"),
YiJieDan("YiJieDan", "已接单"),
YunShuZhong("YunShuZhong", "运输中"),
YiJinChang("YiJinChang", "已进场"),
YiChuChang("YiChuChang", "已出场"),
YiWanCheng("YiWanCheng", "已完成"),
YiQuXiao("YiQuXiao", "已取消"),
;
private final String val;
private final String txt;
}

View File

@ -1,22 +0,0 @@
package com.njzscloud.dispose.cst.order.constant;
import com.njzscloud.common.core.ienum.DictStr;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
/**
* zx
* /
*/
@Getter
@RequiredArgsConstructor
public enum Zx implements DictStr {
ZhuangHuo("ZhuangHuo", "装货地址"),
XieHuo("XieHuo", "卸货地址"),
;
private final String val;
private final String txt;
}

View File

@ -4,7 +4,6 @@ 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.CreateOrderParam;
import com.njzscloud.dispose.cst.order.service.OrderService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -14,7 +13,6 @@ import java.util.List;
/**
* /
*
* @author ljw
*/
@Slf4j
@ -29,8 +27,8 @@ public class OrderController {
*
*/
@PostMapping("/add")
public synchronized R<?> add(@RequestBody CreateOrderParam param) {
orderService.add(param);
public R<?> add(@RequestBody OrderEntity orderEntity) {
orderService.add(orderEntity);
return R.success();
}

View File

@ -7,11 +7,11 @@ import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* /
*
* @author ljw
*/
@Getter
@ -84,7 +84,7 @@ public class OrderEntity extends BaseEntity {
/**
*
*/
private LocalDateTime assignmentTransTime;
private BigDecimal assignmentTransTime;
/**
* Idcst_station.id

View File

@ -32,6 +32,11 @@ public class OrderTransEntity extends BaseEntity {
*/
private Long orderId;
/**
* Id
*/
private Long stationId;
/**
* trans_statusDaiPaiDan-->DaiJieDan-->YiJieDan-->YunShuZhong-->YiJinChang-->YiChuChang-->YiWanCheng-->YiQuXiao-->
*/

View File

@ -1,67 +0,0 @@
package com.njzscloud.dispose.cst.order.pojo.param;
import lombok.Data;
/**
* /
*
* @author ljw
*/
@Data
public class CreateOrderCargoPlaceParam {
/**
*
*/
private String province;
/**
*
*/
private String city;
/**
*
*/
private String area;
/**
*
*/
private String town;
/**
*
*/
private String provinceName;
/**
*
*/
private String cityName;
/**
*
*/
private String areaName;
/**
*
*/
private String townName;
/**
*
*/
private String address;
/**
*
*/
private Double lng;
/**
*
*/
private Double lat;
}

View File

@ -1,7 +1,11 @@
package com.njzscloud.dispose.cst.order.pojo.param;
import com.njzscloud.dispose.common.pojo.entity.BaseEntity;
import com.njzscloud.dispose.cst.project.pojo.entity.ProjectEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
@ -11,13 +15,29 @@ import java.time.LocalDateTime;
*/
@Data
public class CreateOrderParam {
@EqualsAndHashCode(callSuper = true)
public class CreateOrderParamEntity extends BaseEntity {
/**
*
*/
private String sn;
/**
* Id
*/
private Long projectId;
/**
* Idsys_user.id
*/
private Long userId;
/**
* Idcst_customer.id
*/
private Long customerId;
/**
*
*/
@ -28,6 +48,11 @@ public class CreateOrderParam {
*/
private String phone;
/**
*
*/
private LocalDateTime orderTime;
/**
* order_categoryHuiShouYuYue-->XiaoShouYuYue-->DuanBoRu-->DuanBoChu-->
*/
@ -56,7 +81,7 @@ public class CreateOrderParam {
/**
*
*/
private LocalDateTime assignmentTransTime;
private BigDecimal assignmentTransTime;
/**
* Idcst_station.id
@ -104,9 +129,9 @@ public class CreateOrderParam {
private String customerMemo;
/**
*
*
*/
private CreateOrderCargoPlaceParam cargoPlaceParam;
private ProjectEntity projectInfo;
}

View File

@ -1,22 +0,0 @@
package com.njzscloud.dispose.cst.order.pojo.vo;
import com.baomidou.mybatisplus.annotation.TableField;
import com.njzscloud.common.mp.support.handler.j.JsonTypeHandler;
import lombok.Data;
import java.util.List;
/**
* @author ljw
* @apiNote
* @date 2025/12/20
*/
@Data
public class Scope {
private String strategy;
@TableField(typeHandler = JsonTypeHandler.class)
private List<Long> ids;
}

View File

@ -4,18 +4,16 @@ import com.baomidou.mybatisplus.extension.service.IService;
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.CreateOrderParam;
import java.util.List;
/**
* /
*
* @author ljw
*/
public interface OrderService extends IService<OrderEntity> {
void add(CreateOrderParam param);
void add(OrderEntity orderEntity);
void modify(OrderEntity orderEntity);

View File

@ -1,42 +1,21 @@
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
@ -44,56 +23,10 @@ import java.util.stream.Collectors;
@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());
public void add(OrderEntity orderEntity) {
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
@ -117,100 +50,6 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, OrderEntity> impl
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,13 +1,11 @@
package com.njzscloud.dispose.finance.constant;
import com.njzscloud.common.core.ienum.DictStr;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import com.njzscloud.common.core.ienum.DictStr;
/**
* payer
*
*
* @author ljw
*/
@Getter
@ -17,7 +15,7 @@ public enum Payer implements DictStr {
ChanFei("ChanFei", "产废方"),
QingYun("YunShuFang", "方"),
QingYun("QingYun", "运方"),
XiaoNa("XiaoNa", "消纳方"),

View File

@ -1,21 +1,17 @@
package com.njzscloud.dispose.finance.constant;
import com.njzscloud.common.core.ienum.DictStr;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import com.njzscloud.common.core.ienum.DictStr;
/**
* scope_strategy
*
*
* @author ljw
*/
@Getter
@RequiredArgsConstructor
public enum ScopeStrategy implements DictStr {
Wu("Wu", "无"),
ZhiDing("ZhiDing", "指定"),
SuoYou("SuoYou", "所有"),

View File

@ -38,6 +38,8 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, GoodsEntity> impl
expenseItem.setGoodsId(goodsEntity.getId());
expenseItem.setExpenseItemCategory(ExpenseItemCategory.ChanPin.getVal());
expenseItem.setExpenseItemName(goodsEntity.getGoodsName());
// goodsScope默认传{strategy: 'ZhiDing',ids:[goodsEntity.getId()]}
expenseItem.setGoodsScope("{\"strategy\":\"ZhiDing\",\"ids\":[" + goodsEntity.getId() + "]}");
expenseItemService.save(expenseItem);
}