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