feat(wms): 新增合同挂接钢卷统计功能

- 在IWmsCoilContractRelService接口中添加queryContractCoilStatistics方法
- 在WmsCoilContractRelController控制器中添加统计查询和导出接口
- 在WmsCoilContractRelMapper中添加selectContractCoilStatistics查询方法
- 实现合同挂接钢卷统计的SQL查询逻辑,支持多条件筛选
- 创建ContractCoilStatisticsBo查询对象和ContractCoilStatisticsVo视图对象
- 开发前端统计页面,包含搜索筛选、统计卡片、图表展示和数据表格
- 集成ECharts实现合同状态分布饼图和销售员挂接钢卷柱状图
- 实现统计数据的Excel导出功能
- 添加响应式设计适配移动端显示
This commit is contained in:
2026-06-30 15:31:35 +08:00
parent 524f8f3333
commit 64d52f1ecf
9 changed files with 837 additions and 0 deletions

View File

@@ -18,7 +18,9 @@ import com.klp.common.core.validate.EditGroup;
import com.klp.common.enums.BusinessType;
import com.klp.common.utils.poi.ExcelUtil;
import com.klp.domain.vo.WmsCoilContractRelVo;
import com.klp.domain.vo.ContractCoilStatisticsVo;
import com.klp.domain.bo.WmsCoilContractRelBo;
import com.klp.domain.bo.ContractCoilStatisticsBo;
import com.klp.service.IWmsCoilContractRelService;
import com.klp.common.core.page.TableDataInfo;
@@ -97,6 +99,25 @@ public class WmsCoilContractRelController extends BaseController {
return R.ok(updated);
}
/**
* 查询合同挂接情况统计
*/
@GetMapping("/statistics")
public R<List<ContractCoilStatisticsVo>> statistics(ContractCoilStatisticsBo bo) {
List<ContractCoilStatisticsVo> list = iWmsCoilContractRelService.queryContractCoilStatistics(bo);
return R.ok(list);
}
/**
* 导出合同挂接情况统计
*/
@Log(title = "合同挂接情况统计", businessType = BusinessType.EXPORT)
@PostMapping("/statistics/export")
public void statisticsExport(ContractCoilStatisticsBo bo, HttpServletResponse response) {
List<ContractCoilStatisticsVo> list = iWmsCoilContractRelService.queryContractCoilStatistics(bo);
ExcelUtil.exportExcel(list, "合同挂接情况统计", ContractCoilStatisticsVo.class, response);
}
/**
* 删除钢卷与合同关联关系
*

View File

@@ -0,0 +1,36 @@
package com.klp.domain.bo;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 合同挂接情况统计查询对象
*
* @author klp
* @date 2026-06-30
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class ContractCoilStatisticsBo extends BaseEntity {
private static final long serialVersionUID = 1L;
/** 合同号 */
private String contractCode;
/** 合同名称 */
private String contractName;
/** 需方(客户) */
private String customer;
/** 销售员 */
private String salesman;
/** 合同状态 0=草稿 1=生效 2=作废 3=已完成 */
private Long status;
/** 订单编号 */
private String orderCode;
}

View File

@@ -0,0 +1,85 @@
package com.klp.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
/**
* 合同挂接情况统计视图对象
* 基于 crm_order + wms_coil_contract_rel + wms_material_coil 三表联合统计
*
* @author klp
* @date 2026-06-30
*/
@Data
@ExcelIgnoreUnannotated
public class ContractCoilStatisticsVo {
private static final long serialVersionUID = 1L;
// ========== 合同信息(来自 crm_order==========
/** 订单ID */
@ExcelProperty(value = "订单ID")
private Long orderId;
/** 订单编号 */
@ExcelProperty(value = "订单编号")
private String orderCode;
/** 合同号 */
@ExcelProperty(value = "合同号")
private String contractCode;
/** 合同名称 */
@ExcelProperty(value = "合同名称")
private String contractName;
/** 需方(客户) */
@ExcelProperty(value = "需方")
private String customer;
/** 供方 */
@ExcelProperty(value = "供方")
private String supplier;
/** 销售员 */
@ExcelProperty(value = "销售员")
private String salesman;
/** 合同状态 0=草稿 1=生效 2=作废 3=已完成 */
@ExcelProperty(value = "合同状态")
private Long status;
/** 订单总额 */
@ExcelProperty(value = "订单总额")
private BigDecimal orderAmount;
/** 签订时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ExcelProperty(value = "签订时间")
private Date signTime;
/** 交货日期 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ExcelProperty(value = "交货日期")
private Date deliveryDate;
// ========== 统计字段 ==========
/** 挂接钢卷数量 */
@ExcelProperty(value = "挂接钢卷数")
private Long coilCount;
/** 钢卷总净重kg */
@ExcelProperty(value = "钢卷总净重(kg)")
private BigDecimal totalNetWeight;
/** 钢卷总毛重kg */
@ExcelProperty(value = "钢卷总毛重(kg)")
private BigDecimal totalGrossWeight;
}

View File

@@ -2,6 +2,8 @@ package com.klp.mapper;
import com.klp.domain.WmsCoilContractRel;
import com.klp.domain.vo.WmsCoilContractRelVo;
import com.klp.domain.vo.ContractCoilStatisticsVo;
import com.klp.domain.bo.ContractCoilStatisticsBo;
import com.klp.common.core.mapper.BaseMapperPlus;
import org.apache.ibatis.annotations.Param;
@@ -34,4 +36,9 @@ public interface WmsCoilContractRelMapper extends BaseMapperPlus<WmsCoilContract
* 根据订单ID查询合同信息业务员姓名 + 合同编号)
*/
java.util.Map<String, String> selectContractInfoByOrderId(@Param("orderId") Long orderId);
/**
* 查询合同挂接钢卷统计(按合同分组统计钢卷数量和重量)
*/
List<ContractCoilStatisticsVo> selectContractCoilStatistics(@Param("bo") ContractCoilStatisticsBo bo);
}

View File

@@ -2,7 +2,9 @@ package com.klp.service;
import com.klp.domain.WmsCoilContractRel;
import com.klp.domain.vo.WmsCoilContractRelVo;
import com.klp.domain.vo.ContractCoilStatisticsVo;
import com.klp.domain.bo.WmsCoilContractRelBo;
import com.klp.domain.bo.ContractCoilStatisticsBo;
import com.klp.common.core.page.TableDataInfo;
import com.klp.common.core.domain.PageQuery;
@@ -55,4 +57,12 @@ public interface IWmsCoilContractRelService {
* @return 实际更新的记录数
*/
int batchUpdateContractId(Long contractId, List<Long> coilIds);
/**
* 查询合同挂接钢卷统计
*
* @param bo 查询参数
* @return 统计列表
*/
List<ContractCoilStatisticsVo> queryContractCoilStatistics(ContractCoilStatisticsBo bo);
}

View File

@@ -11,7 +11,9 @@ import com.klp.common.utils.StringUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.klp.domain.bo.WmsCoilContractRelBo;
import com.klp.domain.bo.ContractCoilStatisticsBo;
import com.klp.domain.vo.WmsCoilContractRelVo;
import com.klp.domain.vo.ContractCoilStatisticsVo;
import com.klp.domain.WmsCoilContractRel;
import com.klp.domain.WmsMaterialCoil;
import com.klp.mapper.WmsCoilContractRelMapper;
@@ -195,4 +197,12 @@ public class WmsCoilContractRelServiceImpl implements IWmsCoilContractRelService
}
return updated;
}
/**
* 查询合同挂接钢卷统计
*/
@Override
public List<ContractCoilStatisticsVo> queryContractCoilStatistics(ContractCoilStatisticsBo bo) {
return baseMapper.selectContractCoilStatistics(bo);
}
}