历史订单导出,表格中明细一栏把内容分开,便于统计, 如下图,明细分成:类别、处置费和中转运营费三列,其中中转运营费仅为数字,便于统计

master
ljw 2026-01-04 16:21:58 +08:00
parent ff2c600ae7
commit 14ae1d0e39
6 changed files with 51 additions and 15 deletions

View File

@ -15,6 +15,7 @@ public enum ExpenseItemCategory implements DictStr {
ChanPin("ChanPin", "产品"),
QingYunFuWuFei("QingYunFuWuFei", "清运服务费"),
YunFei("YunFei", "运费"),
ZhongZhuanYunYingFei("ZhongZhuanYunYingFei", "中转运营费"),
;
private final String val;
private final String txt;

View File

@ -25,7 +25,7 @@ public class ExpenseItemsConfigService extends ServiceImpl<ExpenseItemsConfigMap
*
*/
public void add(ExpenseItemsConfigEntity expenseItemsConfigEntity) {
expenseItemsConfigEntity.setExpenseItemCategory(ExpenseItemCategory.QingYunFuWuFei.getVal());
// expenseItemsConfigEntity.setExpenseItemCategory(ExpenseItemCategory.QingYunFuWuFei.getVal());
this.save(expenseItemsConfigEntity);
}
@ -55,7 +55,8 @@ public class ExpenseItemsConfigService extends ServiceImpl<ExpenseItemsConfigMap
*
*/
public PageResult<ExpenseItemsConfigEntity> paging(PageParam pageParam, ExpenseItemsConfigEntity expenseItemsConfigEntity) {
return PageResult.of(this.page(pageParam.toPage(), Wrappers.<ExpenseItemsConfigEntity>query(expenseItemsConfigEntity)));
expenseItemsConfigEntity.setDeleted(Boolean.FALSE);
return PageResult.of(this.page(pageParam.toPage(), Wrappers.query(expenseItemsConfigEntity)));
}
}

View File

@ -18,6 +18,11 @@ public class OrderExportDetailResult {
*/
private Long orderId;
/**
*
*/
private String expenseItemCategory;
/**
*
*/

View File

@ -95,4 +95,9 @@ public class OrderExportResult {
*/
private String checkerMemo;
/**
*
*/
private String goodsName;
}

View File

@ -56,6 +56,8 @@ import com.njzscloud.supervisory.order.utils.FileUtil;
import com.njzscloud.supervisory.station.pojo.entity.StationManageEntity;
import com.njzscloud.supervisory.station.service.StationManageService;
import com.njzscloud.supervisory.sys.auth.pojo.result.MyResult;
import com.njzscloud.supervisory.sys.dict.pojo.DictItemEntity;
import com.njzscloud.supervisory.sys.dict.service.DictItemService;
import com.njzscloud.supervisory.sys.role.pojo.entity.RoleEntity;
import com.njzscloud.supervisory.sys.role.service.RoleService;
import com.njzscloud.supervisory.sys.stationletter.constant.WarnCategory;
@ -117,6 +119,7 @@ public class OrderInfoService extends ServiceImpl<OrderInfoMapper, OrderInfoEnti
private final BizTruckService bizTruckService;
private final DiscountManageService discountManageService;
private final HsoaService hsoaService;
private final DictItemService dictItemService;
private final AtomicBoolean test_thread_running = new AtomicBoolean(false);
Thread test_thread = null;
@Value("${app.check-gps:false}")
@ -1362,7 +1365,8 @@ public class OrderInfoService extends ServiceImpl<OrderInfoMapper, OrderInfoEnti
*/
private BigDecimal calculateItemTotalMoney(OrderExpenseItemsEntity item) {
// 判断是否为清运服务费的弹性计费
if (ExpenseItemCategory.QingYunFuWuFei.getVal().equals(item.getExpenseItemCategory())
if ((ExpenseItemCategory.QingYunFuWuFei.getVal().equals(item.getExpenseItemCategory())
|| ExpenseItemCategory.ZhongZhuanYunYingFei.getVal().equals(item.getExpenseItemCategory()))
&& MoneyStrategy.Dun.getVal().equals(item.getMoneyStrategy())
&& BillingType.ELASTICITY.getVal().equals(item.getBillingType())) {
// 弹性计费逻辑
@ -1416,7 +1420,8 @@ public class OrderInfoService extends ServiceImpl<OrderInfoMapper, OrderInfoEnti
return discountMoney;
}
goodsId = entity.getOriginGoodsId();
} else if (ExpenseItemCategory.QingYunFuWuFei.getVal().equals(item.getExpenseItemCategory())) {
} else if (ExpenseItemCategory.QingYunFuWuFei.getVal().equals(item.getExpenseItemCategory())
|| ExpenseItemCategory.ZhongZhuanYunYingFei.getVal().equals(item.getExpenseItemCategory())) {
itemId = item.getOriginExpenseItemId();
}
List<DiscountManageEntity> discountList = discountManageService.list(Wrappers.lambdaQuery(DiscountManageEntity.class)
@ -1766,6 +1771,10 @@ public class OrderInfoService extends ServiceImpl<OrderInfoMapper, OrderInfoEnti
List<OrderExportResult> list = baseMapper.exportList(ew);
List<OrderExportDetailResult> detailResults = baseMapper.exportDetailList(ew);
List<Map<String, Object>> downList = new ArrayList<>();
List<DictItemEntity> dictItems = dictItemService.list(Wrappers.<DictItemEntity>lambdaQuery()
.eq(DictItemEntity::getDictKey, "expense_item_category")
.eq(DictItemEntity::getDeleted, Boolean.FALSE)
.orderByAsc(DictItemEntity::getSort));
int i = 1;
for (OrderExportResult result : list) {
Map<String, Object> map = new LinkedHashMap<>();
@ -1784,19 +1793,29 @@ public class OrderInfoService extends ServiceImpl<OrderInfoMapper, OrderInfoEnti
map.put("皮重(吨)", result.getTareWeight());
map.put("净重(吨)", result.getSettleWeight());
map.put("驾驶员", result.getDriverName());
if (null != detailResults && detailResults.size() > 0) {
List<OrderExportDetailResult> details = detailResults.stream().filter(t -> t.getOrderId()
.equals(result.getId())).collect(Collectors.toList());
List<String> detailList = new ArrayList<>();
if (details.size() > 0) {
for (OrderExportDetailResult detailResult : details) {
detailList.add(detailResult.getExpenseItemName() + detailResult.getSettleMoney() + "元");
}
map.put("明细", JSONObject.toJSONString(detailList));
} else {
map.put("明细", "");
map.put("产品", result.getGoodsName());
List<OrderExportDetailResult> details = detailResults.stream()
.filter(t -> t.getOrderId().equals(result.getId()))
.collect(Collectors.toList());
// 根据dictItems动态添加费用列
if (null != dictItems && !dictItems.isEmpty()) {
for (DictItemEntity dictItem : dictItems) {
String headerName = "ChanPin".equals(dictItem.getVal()) ? "处置费" : dictItem.getTxt();
BigDecimal amount = BigDecimal.ZERO;
if (!details.isEmpty()) {
Optional<OrderExportDetailResult> matchedDetail = details.stream()
.filter(detail -> dictItem.getVal().equals(detail.getExpenseItemCategory()))
.findFirst();
if (matchedDetail.isPresent()) {
amount = matchedDetail.get().getSettleMoney();
}
}
map.put(headerName, amount);
}
}
map.put("备注", result.getCheckerMemo());
downList.add(map);
i++;

View File

@ -228,10 +228,12 @@
<result property="settleWeight" column="settle_weight"/>
<result property="driverName" column="driver_name"/>
<result property="checkerMemo" column="checker_memo"/>
<result property="goodsName" column="goods_name"/>
</resultMap>
<resultMap id="OrderExportDetailResultMap" type="com.njzscloud.supervisory.order.pojo.result.OrderExportDetailResult">
<result property="orderId" column="order_id"/>
<result property="expenseItemCategory" column="expense_item_category"/>
<result property="expenseItemName" column="expense_item_name"/>
<result property="settleMoney" column="settle_money"/>
</resultMap>
@ -261,7 +263,8 @@
ROUND( ocio.tare_weight / 1000, 2 ) AS tare_weight,
ROUND( ocio.settle_weight / 1000, 2 ) AS settle_weight,
f.driver_name,
a.checker_memo
a.checker_memo,
og.goods_name
FROM
order_info a
LEFT JOIN biz_company b ON b.id = a.station_id
@ -273,6 +276,7 @@
LEFT JOIN sys_user su ON a.user_id = su.id
LEFT JOIN order_cargo_place h ON h.id = a.cargo_place_id
LEFT JOIN biz_driver f ON f.id = a.driver_id
LEFT JOIN order_goods og ON og.id = a.goods_id
<if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
${ew.customSqlSegment}
</if>
@ -283,6 +287,7 @@
<select id="exportDetailList" resultMap="OrderExportDetailResultMap">
SELECT
oei.order_id,
oei.expense_item_category,
oei.expense_item_name,
oei.settle_money
FROM