统计接口新增1212
This commit is contained in:
@@ -46,7 +46,7 @@ public class DeliveryOrderController extends BaseController {
|
||||
/**
|
||||
* 新增:详细列表(表头 + 货物明细 + 照片),不分页
|
||||
*/
|
||||
// @PreAuthorize("@ss.hasPermi('document:order:list')")
|
||||
// @PreAuthorize("@ss.hasPermi('document:order:list')")
|
||||
@GetMapping("/listWithDetail")
|
||||
public TableDataInfo listWithDetail(DeliveryOrder deliveryOrder) {
|
||||
|
||||
@@ -56,7 +56,6 @@ public class DeliveryOrderController extends BaseController {
|
||||
|
||||
return getDataTable(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出配送单据主列表
|
||||
*/
|
||||
@@ -187,4 +186,12 @@ public class DeliveryOrderController extends BaseController {
|
||||
List<DeliveryDailyStatVO> list = deliveryOrderService.statByDaily(query);
|
||||
return AjaxResult.success(list);
|
||||
}
|
||||
|
||||
/** 按日期(月维度)统计 */
|
||||
//@PreAuthorize("@ss.hasPermi('document:order:stat')")
|
||||
@PostMapping("/stat/monthly")
|
||||
public AjaxResult statByMonthly(@RequestBody DeliveryOrderStatQuery query) {
|
||||
List<DeliveryMonthlyStatVO> list = deliveryOrderService.statByMonthly(query);
|
||||
return AjaxResult.success(list);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ public class DeliveryOrderStatQuery {
|
||||
|
||||
/** 开始日期(按配送日期过滤) */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
private Date beginDate;
|
||||
private Date statDate;
|
||||
|
||||
/** 结束日期(按配送日期过滤) */
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
|
||||
@@ -108,6 +108,9 @@ public interface DeliveryOrderMapper
|
||||
/** 按日期(日维度)统计 */
|
||||
List<DeliveryDailyStatVO> selectDailyStat(@Param("q") DeliveryOrderStatQuery query);
|
||||
|
||||
/** 按日期(月维度)统计 */
|
||||
List<DeliveryMonthlyStatVO> selectMonthlyStat(@Param("q") DeliveryOrderStatQuery query);
|
||||
|
||||
/** 配送单VO列表 */
|
||||
List<DeliveryOrderVo> selectDeliveryOrderVoList(DeliveryOrder deliveryOrder);
|
||||
}
|
||||
|
||||
@@ -54,6 +54,9 @@ public interface IDeliveryOrderService {
|
||||
/** 按日期(日维度)统计 */
|
||||
List<DeliveryDailyStatVO> statByDaily(DeliveryOrderStatQuery query);
|
||||
|
||||
/** 按日期(月维度)统计 */
|
||||
List<DeliveryMonthlyStatVO> statByMonthly(DeliveryOrderStatQuery query);
|
||||
|
||||
/** 配送单VO列表 */
|
||||
List<DeliveryOrderVo> selectDeliveryOrderVoList(DeliveryOrder deliveryOrder);
|
||||
}
|
||||
|
||||
@@ -190,20 +190,19 @@ public class DeliveryOrderServiceImpl implements IDeliveryOrderService
|
||||
throw new ServiceException("物料明细不能为空");
|
||||
}
|
||||
|
||||
// 取第一条,仍然要求同一出库单据号(暂不支持多出库单合并)
|
||||
// 取第一条 billNoCk,判断是“手动创建”还是“出库单生成”
|
||||
String billNoCk = dto.getItems().get(0).getBillNoCk();
|
||||
if (StringUtils.isBlank(billNoCk)) {
|
||||
throw new ServiceException("明细行缺少出库单据号 billNoCk");
|
||||
}
|
||||
boolean fromWms = StringUtils.isNotBlank(billNoCk); // true = 出库单生成;false = 手动创建
|
||||
|
||||
// 收集 rk_info 主键 id(用于回写 WMS)
|
||||
// 收集 rk_info 主键 id(仅用于出库单生成场景回写 WMS)
|
||||
List<Long> rkInfoIds = dto.getItems().stream()
|
||||
.map(DeliveryOrderLineDTO::getRkInfoId)
|
||||
.filter(Objects::nonNull)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
|
||||
if (rkInfoIds.isEmpty()) {
|
||||
// 出库单生成场景必须有 rkInfoId
|
||||
if (fromWms && rkInfoIds.isEmpty()) {
|
||||
throw new ServiceException("明细行缺少 rk_info 主键 id,无法回写配送状态");
|
||||
}
|
||||
|
||||
@@ -237,7 +236,9 @@ public class DeliveryOrderServiceImpl implements IDeliveryOrderService
|
||||
|
||||
for (DeliveryOrderLineDTO it : dto.getItems()) {
|
||||
|
||||
// 仍然限制同一出库单(你后续要支持多出库单再放开)
|
||||
// ===== 出库单生成场景下的两个判断(手动创建时跳过) =====
|
||||
if (fromWms) {
|
||||
// 限制同一出库单
|
||||
if (!billNoCk.equals(it.getBillNoCk())) {
|
||||
throw new ServiceException("当前接口暂不支持多张出库单合并配送,请确保所有明细 billNoCk 相同");
|
||||
}
|
||||
@@ -245,6 +246,7 @@ public class DeliveryOrderServiceImpl implements IDeliveryOrderService
|
||||
if (it.getRkInfoId() == null) {
|
||||
throw new ServiceException("明细行缺少 rk_info 主键 id");
|
||||
}
|
||||
}
|
||||
|
||||
DeliveryOrder row = new DeliveryOrder();
|
||||
|
||||
@@ -284,7 +286,7 @@ public class DeliveryOrderServiceImpl implements IDeliveryOrderService
|
||||
row.setRemark(dto.getRemark());
|
||||
|
||||
// 2.2 明细字段
|
||||
row.setRkInfoId(it.getRkInfoId()); // 关联 rk_info 主键ID
|
||||
row.setRkInfoId(it.getRkInfoId()); // 关联 rk_info 主键ID(手动单可以为空)
|
||||
row.setBillNoCk(it.getBillNoCk());
|
||||
row.setXmMs(it.getXmMs());
|
||||
row.setXmNo(it.getXmNo());
|
||||
@@ -309,13 +311,15 @@ public class DeliveryOrderServiceImpl implements IDeliveryOrderService
|
||||
deliveryOrderMapper.batchInsert(rows);
|
||||
}
|
||||
|
||||
// ========== 4. 回写 WMS:按 rk_info.id 更新 is_delivery = 2(配送中) ==========
|
||||
// ========== 4. 回写 WMS(仅出库单生成场景,手动创建不回写、不远程调用) ==========
|
||||
|
||||
if (fromWms) {
|
||||
boolean ok = updateWmsIsDeliveryByIds(rkInfoIds, 2);
|
||||
if (!ok) {
|
||||
// 回写失败,整单回滚,避免脏数据
|
||||
throw new ServiceException("已生成配送单,但回写 WMS 配送状态失败");
|
||||
}
|
||||
}
|
||||
|
||||
return orderNo;
|
||||
}
|
||||
@@ -495,4 +499,9 @@ public class DeliveryOrderServiceImpl implements IDeliveryOrderService
|
||||
return deliveryOrderMapper.selectDailyStat(query);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<DeliveryMonthlyStatVO> statByMonthly(DeliveryOrderStatQuery query) {
|
||||
return deliveryOrderMapper.selectMonthlyStat(query);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -874,8 +874,8 @@
|
||||
(dor.is_delete = '0' OR dor.is_delete = 0 OR dor.is_delete IS NULL)
|
||||
|
||||
<!-- 配送日期范围 -->
|
||||
<if test="q.beginDate != null">
|
||||
AND DATE(dor.delivery_date) <![CDATA[>=]]> DATE(#{q.beginDate})
|
||||
<if test="q.statDate != null">
|
||||
AND DATE(dor.delivery_date) <![CDATA[>=]]> DATE(#{q.statDate})
|
||||
</if>
|
||||
<if test="q.endDate != null">
|
||||
AND DATE(dor.delivery_date) <![CDATA[<=]]> DATE(#{q.endDate})
|
||||
@@ -989,4 +989,21 @@
|
||||
GROUP BY DATE(dor.delivery_date)
|
||||
ORDER BY statDate ASC
|
||||
</select>
|
||||
|
||||
<!-- 按日期(月维度)统计 -->
|
||||
<select id="selectMonthlyStat"
|
||||
parameterType="com.delivery.project.document.domain.dto.DeliveryOrderStatQuery"
|
||||
resultType="com.delivery.project.document.domain.vo.DeliveryMonthlyStatVO">
|
||||
SELECT
|
||||
DATE_FORMAT(dor.delivery_date, '%Y-%m') AS statMonth,
|
||||
COUNT(1) AS orderCount,
|
||||
IFNULL(SUM(dor.delivery_ton), 0) AS totalDeliveryTon,
|
||||
IFNULL(SUM(dor.goods_size), 0) AS totalGoodsSize,
|
||||
IFNULL(SUM(dor.actual_fee), 0) AS totalActualFee,
|
||||
IFNULL(SUM(dor.total_km), 0) AS totalKm
|
||||
FROM delivery_order dor
|
||||
<include refid="statWhere"/>
|
||||
GROUP BY DATE_FORMAT(dor.delivery_date, '%Y-%m')
|
||||
ORDER BY statMonth ASC
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
Reference in New Issue
Block a user