demand: tms-统计报表-月结客户出货统计-按运输方式统计-统计增加与前一个时间段比较逻辑 tms-统计报表-月结客户出货统计-按目的国家统计-统计增加与前一个时间段比较逻辑
committer: heyu
This commit is contained in:
parent
362740d903
commit
4a7268b6e3
@ -485,7 +485,7 @@ public class EmisCustomerUserController extends EmisBaseController
|
||||
*/
|
||||
@PreAuthorize("@ss.hasPermi('emis:emisCustomerUser:monthlyShipmentStat')")
|
||||
@GetMapping("/monthlyShipmentStat")
|
||||
public TableDataInfo monthlyShipmentStat(EmisWaybill emisWaybill) {
|
||||
public TableDataInfo monthlyShipmentStat(EmisWaybill emisWaybill) throws EmisBizError {
|
||||
startPage();
|
||||
// 设置权限参数
|
||||
setPrivParams(emisWaybill);
|
||||
@ -513,7 +513,7 @@ public class EmisCustomerUserController extends EmisBaseController
|
||||
@PreAuthorize("@ss.hasPermi('emis:emisCustomerUser:export')")
|
||||
@Log(title = "月结客户出货统计", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/exportMonthlyShipmentStat")
|
||||
public void exportMonthlyShipmentStat(HttpServletResponse response, EmisWaybill emisWaybill) {
|
||||
public void exportMonthlyShipmentStat(HttpServletResponse response, EmisWaybill emisWaybill) throws EmisBizError {
|
||||
// 设置权限参数
|
||||
setPrivParams(emisWaybill);
|
||||
List<MonthlyCustomerShipmentStatVO> list = emisCustomerUserService
|
||||
|
||||
@ -40,6 +40,12 @@ public class MonthlyCustomerShipmentStatVO implements Serializable {
|
||||
/* 总重量 */
|
||||
private BigDecimal totalWeight;
|
||||
|
||||
/* 总票数对比标记:1-大于上一时间段;2-小于上一时间段;0-相等;*/
|
||||
private Integer totalTicketsCompareFlag;
|
||||
|
||||
/* 总重量对比标记:1-大于上一时间段;2-小于上一时间段;0-相等 */
|
||||
private Integer totalWeightCompareFlag;
|
||||
|
||||
/* 销售联系人(多个用/分隔) */
|
||||
private String salesmen;
|
||||
|
||||
@ -49,71 +55,142 @@ public class MonthlyCustomerShipmentStatVO implements Serializable {
|
||||
/* 快递实际重量 */
|
||||
private BigDecimal expressWeight;
|
||||
|
||||
/* 快递票数对比标记 */
|
||||
private Integer expressTicketsCompareFlag;
|
||||
|
||||
/* 快递实际重量对比标记 */
|
||||
private Integer expressWeightCompareFlag;
|
||||
|
||||
/* 空运票数 */
|
||||
private Integer airTickets;
|
||||
|
||||
/* 空运实际重量 */
|
||||
private BigDecimal airWeight;
|
||||
|
||||
/* 空运票数对比标记 */
|
||||
private Integer airTicketsCompareFlag;
|
||||
|
||||
/* 空运实际重量对比标记 */
|
||||
private Integer airWeightCompareFlag;
|
||||
|
||||
/* 陆运票数 */
|
||||
private Integer landTickets;
|
||||
|
||||
/* 陆运实际重量 */
|
||||
private BigDecimal landWeight;
|
||||
|
||||
/* 陆运票数对比标记 */
|
||||
private Integer landTicketsCompareFlag;
|
||||
|
||||
/* 陆运实际重量对比标记 */
|
||||
private Integer landWeightCompareFlag;
|
||||
|
||||
/* 海运票数 */
|
||||
private Integer seaTickets;
|
||||
|
||||
/* 海运实际重量 */
|
||||
private BigDecimal seaWeight;
|
||||
|
||||
/* 海运票数对比标记 */
|
||||
private Integer seaTicketsCompareFlag;
|
||||
|
||||
/* 海运实际重量对比标记 */
|
||||
private Integer seaWeightCompareFlag;
|
||||
|
||||
/* 进口票数 */
|
||||
private Integer importTickets;
|
||||
|
||||
/* 进口实际重量 */
|
||||
private BigDecimal importWeight;
|
||||
|
||||
/* 进口票数对比标记 */
|
||||
private Integer importTicketsCompareFlag;
|
||||
|
||||
/* 进口实际重量对比标记 */
|
||||
private Integer importWeightCompareFlag;
|
||||
|
||||
/* 其他票数 */
|
||||
private Integer otherTickets;
|
||||
|
||||
/* 其他实际重量 */
|
||||
private BigDecimal otherWeight;
|
||||
|
||||
/* 其他票数对比标记 */
|
||||
private Integer otherTicketsCompareFlag;
|
||||
|
||||
/* 其他实际重量对比标记 */
|
||||
private Integer otherWeightCompareFlag;
|
||||
|
||||
/* 中国票数 */
|
||||
private Integer chinaTickets;
|
||||
/* 中国实际重量 */
|
||||
private BigDecimal chinaWeight;
|
||||
|
||||
/* 中国票数对比标记 */
|
||||
private Integer chinaTicketsCompareFlag;
|
||||
/* 中国实际重量对比标记 */
|
||||
private Integer chinaWeightCompareFlag;
|
||||
|
||||
/* 越南票数 */
|
||||
private Integer vietnamTickets;
|
||||
/* 越南实际重量 */
|
||||
private BigDecimal vietnamWeight;
|
||||
|
||||
/* 越南票数对比标记 */
|
||||
private Integer vietnamTicketsCompareFlag;
|
||||
/* 越南实际重量对比标记 */
|
||||
private Integer vietnamWeightCompareFlag;
|
||||
|
||||
/* 柬埔寨票数 */
|
||||
private Integer cambodiaTickets;
|
||||
/* 柬埔寨实际重量 */
|
||||
private BigDecimal cambodiaWeight;
|
||||
|
||||
/* 柬埔寨票数对比标记 */
|
||||
private Integer cambodiaTicketsCompareFlag;
|
||||
/* 柬埔寨实际重量对比标记 */
|
||||
private Integer cambodiaWeightCompareFlag;
|
||||
|
||||
/* 缅甸票数 */
|
||||
private Integer myanmarTickets;
|
||||
/* 缅甸实际重量 */
|
||||
private BigDecimal myanmarWeight;
|
||||
|
||||
/* 缅甸票数对比标记 */
|
||||
private Integer myanmarTicketsCompareFlag;
|
||||
/* 缅甸实际重量对比标记 */
|
||||
private Integer myanmarWeightCompareFlag;
|
||||
|
||||
/* 孟加拉票数 */
|
||||
private Integer bangladeshTickets;
|
||||
/* 孟加拉实际重量 */
|
||||
private BigDecimal bangladeshWeight;
|
||||
|
||||
/* 孟加拉票数对比标记 */
|
||||
private Integer bangladeshTicketsCompareFlag;
|
||||
/* 孟加拉实际重量对比标记 */
|
||||
private Integer bangladeshWeightCompareFlag;
|
||||
|
||||
/* 老挝票数 */
|
||||
private Integer laosTickets;
|
||||
/* 老挝实际重量 */
|
||||
private BigDecimal laosWeight;
|
||||
|
||||
/* 老挝票数对比标记 */
|
||||
private Integer laosTicketsCompareFlag;
|
||||
/* 老挝实际重量对比标记 */
|
||||
private Integer laosWeightCompareFlag;
|
||||
|
||||
/* 泰国票数 */
|
||||
private Integer thailandTickets;
|
||||
/* 泰国实际重量 */
|
||||
private BigDecimal thailandWeight;
|
||||
|
||||
/* 泰国票数对比标记 */
|
||||
private Integer thailandTicketsCompareFlag;
|
||||
/* 泰国实际重量对比标记 */
|
||||
private Integer thailandWeightCompareFlag;
|
||||
|
||||
/* 首次签约日期 */
|
||||
private String firstSigningDay;
|
||||
}
|
||||
|
||||
@ -12,6 +12,7 @@ package com.xdadan.erp.emis.service;
|
||||
import java.util.List;
|
||||
import com.xdadan.erp.emis.domain.EmisCustomerUser;
|
||||
import com.xdadan.erp.emis.domain.EmisWaybill;
|
||||
import com.xdadan.erp.emis.domain.exception.EmisBizError;
|
||||
import com.xdadan.erp.emis.domain.vo.MonthlyCustomerShipmentStatVO;
|
||||
|
||||
/**
|
||||
@ -94,8 +95,9 @@ public interface IEmisCustomerUserService
|
||||
*
|
||||
* @param emisWaybill 查询条件
|
||||
* @return 统计结果列表
|
||||
* @throws com.xdadan.erp.emis.domain.exception.EmisBizError 当statType=3或4时,必需的时间参数缺失时抛出异常
|
||||
*/
|
||||
public List<MonthlyCustomerShipmentStatVO> selectMonthlyCustomerShipmentStat(EmisWaybill emisWaybill);
|
||||
public List<MonthlyCustomerShipmentStatVO> selectMonthlyCustomerShipmentStat(EmisWaybill emisWaybill) throws EmisBizError;
|
||||
|
||||
/**
|
||||
* 查询月结客户出货明细
|
||||
|
||||
@ -10,9 +10,11 @@
|
||||
|
||||
package com.xdadan.erp.emis.service.impl;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.*;
|
||||
|
||||
import com.xdadan.erp.common.utils.SecurityUtils;
|
||||
import com.xdadan.erp.emis.domain.exception.EmisBizError;
|
||||
import com.xdadan.erp.emis.domain.enumtype.EmisBizErrorType;
|
||||
import com.xdadan.erp.emis.service.EmisBaseService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
@ -159,13 +161,184 @@ public class EmisCustomerUserServiceImpl extends EmisBaseService implements IEmi
|
||||
* @return 统计结果列表
|
||||
*/
|
||||
@Override
|
||||
public List<MonthlyCustomerShipmentStatVO> selectMonthlyCustomerShipmentStat(EmisWaybill emisWaybill) {
|
||||
public List<MonthlyCustomerShipmentStatVO> selectMonthlyCustomerShipmentStat(EmisWaybill emisWaybill) throws EmisBizError {
|
||||
if("1".equals(emisWaybill.getParams().get("statType"))){
|
||||
// 按运输方式统计
|
||||
return emisWaybillMapper.selectMonthlyCustomerShipmentStat(emisWaybill);
|
||||
}
|
||||
// 按目的国家统计
|
||||
return emisWaybillMapper.selectMonthlyCustomerShipmentStatByCountry(emisWaybill);
|
||||
if("2".equals(emisWaybill.getParams().get("statType"))){
|
||||
// 按目的国家统计
|
||||
return emisWaybillMapper.selectMonthlyCustomerShipmentStatByCountry(emisWaybill);
|
||||
}
|
||||
if("3".equals(emisWaybill.getParams().get("statType"))){
|
||||
// 按运输方式统计,增加与上一个时间段的票数、重量对比标记
|
||||
return buildShipmentStatWithCompare(emisWaybill, true);
|
||||
}
|
||||
if("4".equals(emisWaybill.getParams().get("statType"))){
|
||||
// 按目的国家统计,增加与上一个时间段的票数、重量对比标记
|
||||
return buildShipmentStatWithCompare(emisWaybill, false);
|
||||
}
|
||||
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建带有对比标记的统计结果
|
||||
*
|
||||
* @param emisWaybill 查询条件(包含当前时间段和对比时间段)
|
||||
* @param byTransType true=按运输方式统计;false=按目的国家统计
|
||||
* @throws EmisBizError 当必需的时间参数缺失时抛出异常
|
||||
*/
|
||||
private List<MonthlyCustomerShipmentStatVO> buildShipmentStatWithCompare(EmisWaybill emisWaybill, boolean byTransType) throws EmisBizError {
|
||||
if (emisWaybill.getParams() == null) {
|
||||
throw new EmisBizError(EmisBizErrorType.PARAM_ERROR, "比对参数不能为空");
|
||||
}
|
||||
|
||||
// 获取当前时间段参数
|
||||
Object beginSendObj = emisWaybill.getParams().get("beginSendDate");
|
||||
Object endSendObj = emisWaybill.getParams().get("endSendDate");
|
||||
|
||||
// 获取对比时间段参数(前端传入)
|
||||
Object beginCompareObj = emisWaybill.getParams().get("beginCompareDate");
|
||||
Object endCompareObj = emisWaybill.getParams().get("endCompareDate");
|
||||
|
||||
// 验证所有时间参数必须存在
|
||||
if (beginSendObj == null || !(beginSendObj instanceof String) || ((String) beginSendObj).trim().isEmpty()) {
|
||||
throw new EmisBizError(EmisBizErrorType.PARAM_ERROR, "请选择寄件日期");
|
||||
}
|
||||
if (endSendObj == null || !(endSendObj instanceof String) || ((String) endSendObj).trim().isEmpty()) {
|
||||
throw new EmisBizError(EmisBizErrorType.PARAM_ERROR, "请选择寄件日期");
|
||||
}
|
||||
if (beginCompareObj == null || !(beginCompareObj instanceof String) || ((String) beginCompareObj).trim().isEmpty()) {
|
||||
throw new EmisBizError(EmisBizErrorType.PARAM_ERROR, "请选择比对日期");
|
||||
}
|
||||
if (endCompareObj == null || !(endCompareObj instanceof String) || ((String) endCompareObj).trim().isEmpty()) {
|
||||
throw new EmisBizError(EmisBizErrorType.PARAM_ERROR, "请选择比对日期");
|
||||
}
|
||||
|
||||
String beginSendDate = ((String) beginSendObj).trim();
|
||||
String endSendDate = ((String) endSendObj).trim();
|
||||
String beginCompareDate = ((String) beginCompareObj).trim();
|
||||
String endCompareDate = ((String) endCompareObj).trim();
|
||||
|
||||
// 当前时间段统计
|
||||
List<MonthlyCustomerShipmentStatVO> currentList = byTransType
|
||||
? emisWaybillMapper.selectMonthlyCustomerShipmentStat(emisWaybill)
|
||||
: emisWaybillMapper.selectMonthlyCustomerShipmentStatByCountry(emisWaybill);
|
||||
|
||||
try {
|
||||
// 使用前端传入的对比时间段参数
|
||||
emisWaybill.getParams().put("beginSendDate", beginCompareDate);
|
||||
emisWaybill.getParams().put("endSendDate", endCompareDate);
|
||||
|
||||
List<MonthlyCustomerShipmentStatVO> prevList = byTransType
|
||||
? emisWaybillMapper.selectMonthlyCustomerShipmentStat(emisWaybill)
|
||||
: emisWaybillMapper.selectMonthlyCustomerShipmentStatByCountry(emisWaybill);
|
||||
|
||||
// 还原时间参数
|
||||
emisWaybill.getParams().put("beginSendDate", beginSendDate);
|
||||
emisWaybill.getParams().put("endSendDate", endSendDate);
|
||||
|
||||
if (currentList == null || currentList.isEmpty()
|
||||
|| prevList == null || prevList.isEmpty()) {
|
||||
return currentList;
|
||||
}
|
||||
|
||||
// 以 custNo 作为 key 进行对比
|
||||
Map<String, MonthlyCustomerShipmentStatVO> prevMap = new HashMap<>();
|
||||
for (MonthlyCustomerShipmentStatVO item : prevList) {
|
||||
if (item.getCustNo() != null) {
|
||||
prevMap.put(item.getCustNo(), item);
|
||||
}
|
||||
}
|
||||
|
||||
for (MonthlyCustomerShipmentStatVO cur : currentList) {
|
||||
if (cur.getCustNo() == null) {
|
||||
continue;
|
||||
}
|
||||
MonthlyCustomerShipmentStatVO prev = prevMap.get(cur.getCustNo());
|
||||
if (prev == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// 所有票数、重量字段都做对比:1-大于上一时间段;2-小于上一时间段;0-相等
|
||||
cur.setTotalTicketsCompareFlag(compareInteger(cur.getTotalTickets(), prev.getTotalTickets()));
|
||||
cur.setTotalWeightCompareFlag(compareBigDecimal(cur.getTotalWeight(), prev.getTotalWeight()));
|
||||
|
||||
// 按运输方式的票数、重量
|
||||
cur.setExpressTicketsCompareFlag(compareInteger(cur.getExpressTickets(), prev.getExpressTickets()));
|
||||
cur.setExpressWeightCompareFlag(compareBigDecimal(cur.getExpressWeight(), prev.getExpressWeight()));
|
||||
|
||||
cur.setAirTicketsCompareFlag(compareInteger(cur.getAirTickets(), prev.getAirTickets()));
|
||||
cur.setAirWeightCompareFlag(compareBigDecimal(cur.getAirWeight(), prev.getAirWeight()));
|
||||
|
||||
cur.setLandTicketsCompareFlag(compareInteger(cur.getLandTickets(), prev.getLandTickets()));
|
||||
cur.setLandWeightCompareFlag(compareBigDecimal(cur.getLandWeight(), prev.getLandWeight()));
|
||||
|
||||
cur.setSeaTicketsCompareFlag(compareInteger(cur.getSeaTickets(), prev.getSeaTickets()));
|
||||
cur.setSeaWeightCompareFlag(compareBigDecimal(cur.getSeaWeight(), prev.getSeaWeight()));
|
||||
|
||||
cur.setImportTicketsCompareFlag(compareInteger(cur.getImportTickets(), prev.getImportTickets()));
|
||||
cur.setImportWeightCompareFlag(compareBigDecimal(cur.getImportWeight(), prev.getImportWeight()));
|
||||
|
||||
cur.setOtherTicketsCompareFlag(compareInteger(cur.getOtherTickets(), prev.getOtherTickets()));
|
||||
cur.setOtherWeightCompareFlag(compareBigDecimal(cur.getOtherWeight(), prev.getOtherWeight()));
|
||||
|
||||
// 按目的国家的票数、重量(statType=4 时使用)
|
||||
cur.setChinaTicketsCompareFlag(compareInteger(cur.getChinaTickets(), prev.getChinaTickets()));
|
||||
cur.setChinaWeightCompareFlag(compareBigDecimal(cur.getChinaWeight(), prev.getChinaWeight()));
|
||||
|
||||
cur.setVietnamTicketsCompareFlag(compareInteger(cur.getVietnamTickets(), prev.getVietnamTickets()));
|
||||
cur.setVietnamWeightCompareFlag(compareBigDecimal(cur.getVietnamWeight(), prev.getVietnamWeight()));
|
||||
|
||||
cur.setCambodiaTicketsCompareFlag(compareInteger(cur.getCambodiaTickets(), prev.getCambodiaTickets()));
|
||||
cur.setCambodiaWeightCompareFlag(compareBigDecimal(cur.getCambodiaWeight(), prev.getCambodiaWeight()));
|
||||
|
||||
cur.setMyanmarTicketsCompareFlag(compareInteger(cur.getMyanmarTickets(), prev.getMyanmarTickets()));
|
||||
cur.setMyanmarWeightCompareFlag(compareBigDecimal(cur.getMyanmarWeight(), prev.getMyanmarWeight()));
|
||||
|
||||
cur.setBangladeshTicketsCompareFlag(compareInteger(cur.getBangladeshTickets(), prev.getBangladeshTickets()));
|
||||
cur.setBangladeshWeightCompareFlag(compareBigDecimal(cur.getBangladeshWeight(), prev.getBangladeshWeight()));
|
||||
|
||||
cur.setLaosTicketsCompareFlag(compareInteger(cur.getLaosTickets(), prev.getLaosTickets()));
|
||||
cur.setLaosWeightCompareFlag(compareBigDecimal(cur.getLaosWeight(), prev.getLaosWeight()));
|
||||
|
||||
cur.setThailandTicketsCompareFlag(compareInteger(cur.getThailandTickets(), prev.getThailandTickets()));
|
||||
cur.setThailandWeightCompareFlag(compareBigDecimal(cur.getThailandWeight(), prev.getThailandWeight()));
|
||||
}
|
||||
|
||||
return currentList;
|
||||
} finally {
|
||||
// 防御性措施:确保还原时间参数
|
||||
emisWaybill.getParams().put("beginSendDate", beginSendDate);
|
||||
emisWaybill.getParams().put("endSendDate", endSendDate);
|
||||
}
|
||||
}
|
||||
|
||||
private Integer compareInteger(Integer current, Integer previous) {
|
||||
if (current == null || previous == null) {
|
||||
return null;
|
||||
}
|
||||
int cmp = current.compareTo(previous);
|
||||
if (cmp > 0) {
|
||||
return 1;
|
||||
} else if (cmp < 0) {
|
||||
return 2;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
private Integer compareBigDecimal(java.math.BigDecimal current, java.math.BigDecimal previous) {
|
||||
if (current == null || previous == null) {
|
||||
return null;
|
||||
}
|
||||
int cmp = current.compareTo(previous);
|
||||
if (cmp > 0) {
|
||||
return 1;
|
||||
} else if (cmp < 0) {
|
||||
return 2;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Loading…
Reference in New Issue
Block a user