Compare commits
204 Commits
42e5b6dd2b
...
0.8.X
| Author | SHA1 | Date | |
|---|---|---|---|
| 6436d56ab8 | |||
| eda206a4d5 | |||
| 15703216c3 | |||
| 3e640b4a4d | |||
| b5708ea8f0 | |||
| 1167bc117b | |||
| 5f142050a9 | |||
| 26c834780c | |||
| 0fe9bce02a | |||
| 2e79a5beb0 | |||
| 119b9105c7 | |||
| 4aba91abd9 | |||
| 7ec3f49c73 | |||
| 1a0a904903 | |||
| de5a82d0a7 | |||
| a07ced4b25 | |||
| b939052a88 | |||
| c33b27d174 | |||
| 691c8289dd | |||
| ca094574f5 | |||
| f068daba0b | |||
| 0c05455ae3 | |||
| 274671f309 | |||
| b4fba79838 | |||
| 6910278ba7 | |||
| 491eed3dad | |||
| 66838b6c69 | |||
| c8c2523fe7 | |||
| d0afe5eaaf | |||
| 7374b810c1 | |||
| 041e5aef0e | |||
| 6120e87966 | |||
| 5828dbd133 | |||
| ee49fbdcc0 | |||
| 7f1a89eb61 | |||
| 759bbbed63 | |||
| 5b0cb314e4 | |||
| 2fc4bf4043 | |||
| 2fb5a64124 | |||
| 379aa9d44b | |||
| b4a9a48ae6 | |||
| 41716b3430 | |||
| 585017873c | |||
| 605f7b85a1 | |||
| 192a27afbc | |||
| 768b18c22a | |||
| 3719416cbf | |||
| 791be3e1a5 | |||
| 7b7f4b902e | |||
| c547456108 | |||
| 931fc74ed7 | |||
| e7f1e584eb | |||
| b43b44d044 | |||
| d053dd0319 | |||
| 3b1ce45043 | |||
| 5473fbf28f | |||
| 2874f1727a | |||
| a3a4986cb8 | |||
| f525770094 | |||
| 25beef5517 | |||
| e6b1e31bd1 | |||
| 8c3a3eec28 | |||
| 1510f43aee | |||
| cb8fce435c | |||
| 7bb68483e6 | |||
| 696280bd47 | |||
| bdf01feacb | |||
| 120320c800 | |||
| 3db1651efd | |||
| 9d679954fa | |||
| a2844ec54a | |||
| 91ddc8602a | |||
| 22fd3c4a58 | |||
| ceab5d4be3 | |||
| bf8b69d193 | |||
| 7feaf8021b | |||
| 6328b4ac7a | |||
| 183e6d08d8 | |||
| a037c56122 | |||
| 857daa24af | |||
| 0968dcaded | |||
| cced2ff4aa | |||
| f197462b11 | |||
| 9559e5810e | |||
| 92ad229104 | |||
| ee1cb31321 | |||
| f0de25a3a2 | |||
| 0d40774194 | |||
| 948e62daae | |||
| 48d12fe056 | |||
| 6edc6e1100 | |||
| 12ea9b0b83 | |||
| c149216ebd | |||
| 325a93fd84 | |||
| f0656b57d4 | |||
| 9c7d2dca65 | |||
| 36b1e3da82 | |||
| c83eb79d25 | |||
| e0cf4b46b6 | |||
| 00972112d2 | |||
| 2559dc27cb | |||
| 7a0d7e1b12 | |||
| 1cd2cf2b9a | |||
| 98116fa042 | |||
| d3c6790603 | |||
| c1e3fa5141 | |||
| f319308196 | |||
| 185745b7da | |||
| 7440706e2e | |||
| 0adb29139e | |||
| 2148a068f8 | |||
| e1bb9e5431 | |||
| 8b2039f06a | |||
| 9761faa2d2 | |||
| d5f00a4b0b | |||
| b9fb4b4611 | |||
| 7d76ef0c52 | |||
| ea71a6dd93 | |||
| b9b6ae7e79 | |||
| 20a75aec4b | |||
| 3ad7bf40b5 | |||
| 196e628665 | |||
| 7c61c42eb5 | |||
| 1223b634b7 | |||
| 87913ba0a0 | |||
| eab45a8706 | |||
| a9a7a0889e | |||
| cd2e4016a6 | |||
| 87d72b2a0d | |||
| 4342215c00 | |||
| 7bf7d24f29 | |||
| 4da8d8d297 | |||
| c4eab467ee | |||
| fd50118161 | |||
| cc63aa80b2 | |||
| c95ea7db61 | |||
| f50c240bbe | |||
| 66278e635b | |||
| 74d0ba57e2 | |||
| e00d1357b0 | |||
| b9f87c6cc4 | |||
| 7c9c99bf45 | |||
| fdb13b7261 | |||
| 74a3803290 | |||
| 76497eece7 | |||
| d231d3619a | |||
| 20966157c5 | |||
| 59e58e5206 | |||
| 59ceeed4a4 | |||
| fac59f4346 | |||
| f6a74e58ea | |||
| 857a3948d6 | |||
| 47b3fb24b7 | |||
| 97e0df7ae1 | |||
| 7c87670896 | |||
| cd3cc85c0a | |||
| d70bb77755 | |||
| b00db10a37 | |||
| dbeb99d9e5 | |||
| 1a2fc9852d | |||
| 7aaa59cee1 | |||
| cbebd5b6d6 | |||
| 24a9784035 | |||
| de7ec604dd | |||
| 696f6d9ee0 | |||
| 050dd1a965 | |||
| 724c1dd16f | |||
| 0e85153b3d | |||
| af728f8ea6 | |||
| 7e07b6f970 | |||
| 8a0f5e65bb | |||
| 1947a5c2d5 | |||
| d8498728ee | |||
| 53e948b3e0 | |||
| 3ebc0cb86a | |||
| 8059b0a0bb | |||
| 1792196dc7 | |||
| d8051abf8e | |||
| 5e0cb69bb8 | |||
| 37a69b563b | |||
| 66f0b3fdd7 | |||
| 5e0dc848bb | |||
| a5323aea76 | |||
| cac747d158 | |||
| 705d929d6e | |||
| 29c21fd64f | |||
| 5236500f04 | |||
| 600867f386 | |||
| 8183bae824 | |||
| 37d6830947 | |||
| c71dfe3ff2 | |||
| ff139759d4 | |||
| 5176c80344 | |||
| 31f7a9c0cb | |||
| 9d208770d8 | |||
| 31d8d1ee16 | |||
| b4fbb8dfc8 | |||
| 40ebca2573 | |||
| ec08a360a0 | |||
| 977ea2b021 | |||
| e507887a27 | |||
| 12a887e074 | |||
| 577de8eb64 | |||
| 03add7c96b |
@@ -1,9 +0,0 @@
|
||||
---
|
||||
alwaysApply: true
|
||||
scene: git_message
|
||||
---
|
||||
|
||||
使用中文编写提交信息, 提交信息格式为:
|
||||
```
|
||||
<type>(<scope>): <subject>
|
||||
```
|
||||
@@ -129,6 +129,10 @@
|
||||
<artifactId>klp-cost</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.klp</groupId>
|
||||
<artifactId>klp-flow</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
|
||||
@@ -361,6 +361,15 @@ public class SqlServerApiClient {
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
public ExecuteSqlResponse queryExcoilByHotCoilId(String hotCoilId) {
|
||||
return executeSql(
|
||||
"oracle",
|
||||
"select * from JXPLTCM.PLTCM_PDO_EXCOIL where HOT_COILID = :hotCoilId",
|
||||
singletonParam("hotCoilId", hotCoilId)
|
||||
);
|
||||
}
|
||||
|
||||
public ExecuteSqlResponse queryPlanListByHotCoilIdLike(String hotCoilId, int page, int pageSize) {
|
||||
int endRow = page * pageSize;
|
||||
int startRow = endRow - pageSize;
|
||||
|
||||
@@ -122,7 +122,10 @@ public class SqlServerApiBusinessService {
|
||||
* 计划详情:按热卷号查询。
|
||||
*/
|
||||
public PlanDetailView getPlanByHotCoilId(String hotCoilId) {
|
||||
return PlanDetailView.fromExecuteSqlResponse(hotCoilId, client.queryPlanByHotCoilId(hotCoilId));
|
||||
SqlServerApiClient.ExecuteSqlResponse planResponse = client.queryPlanByHotCoilId(hotCoilId);
|
||||
SqlServerApiClient.ExecuteSqlResponse excoilResponse = null;
|
||||
excoilResponse = client.queryExcoilByHotCoilId(hotCoilId);
|
||||
return PlanDetailView.fromExecuteSqlResponse(hotCoilId, planResponse, excoilResponse);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -249,6 +252,49 @@ public class SqlServerApiBusinessService {
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试用:统计 V_VBDA_GAUGE 中各 THICK 列的非空/非零数量,
|
||||
* 用于排查"末架出口厚度恒为 0"问题——确认实际数据落在哪一列。
|
||||
*/
|
||||
public Map<String, Object> getGaugeStats(String matId) {
|
||||
List<Map<String, Object>> rows = asRowList(client.queryGaugeByMatId(matId));
|
||||
String[] cols = {"THICK0", "THICK1", "THICK4", "THICK5",
|
||||
"THICK0REF", "THICK1REF", "THICK4REF", "THICK5REF"};
|
||||
Map<String, Object> stats = new LinkedHashMap<>();
|
||||
for (String col : cols) {
|
||||
long nonNull = 0, nonZero = 0;
|
||||
Double min = null, max = null;
|
||||
for (Map<String, Object> r : rows) {
|
||||
Object raw = r.get(col);
|
||||
if (raw == null) raw = r.get(col.toLowerCase());
|
||||
if (raw == null) continue;
|
||||
nonNull++;
|
||||
Number n = asNumber(raw);
|
||||
if (n == null) continue;
|
||||
double d = n.doubleValue();
|
||||
if (d != 0.0) nonZero++;
|
||||
if (min == null || d < min) min = d;
|
||||
if (max == null || d > max) max = d;
|
||||
}
|
||||
Map<String, Object> info = new LinkedHashMap<>();
|
||||
info.put("nonNullCount", nonNull);
|
||||
info.put("nonZeroCount", nonZero);
|
||||
info.put("min", min);
|
||||
info.put("max", max);
|
||||
stats.put(col, info);
|
||||
}
|
||||
Map<String, Object> result = new LinkedHashMap<>();
|
||||
result.put("matId", matId);
|
||||
result.put("totalRows", rows.size());
|
||||
result.put("columnStats", stats);
|
||||
List<Map<String, Object>> samples = new ArrayList<>();
|
||||
if (!rows.isEmpty()) samples.add(rows.get(0));
|
||||
if (rows.size() > 1) samples.add(rows.get(rows.size() / 2));
|
||||
if (rows.size() > 2) samples.add(rows.get(rows.size() - 1));
|
||||
result.put("sampleRows", samples);
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* 轧辊数据:返回全部在辊/备辊数据。
|
||||
*/
|
||||
@@ -378,11 +424,13 @@ public class SqlServerApiBusinessService {
|
||||
private final String coilId;
|
||||
private final List<Map<String, Object>> rows;
|
||||
private final Map<String, Object> firstRow;
|
||||
private final List<Map<String, Object>> excoilRows;
|
||||
|
||||
public PlanDetailView(String coilId, List<Map<String, Object>> rows, Map<String, Object> firstRow) {
|
||||
public PlanDetailView(String coilId, List<Map<String, Object>> rows, Map<String, Object> firstRow, List<Map<String, Object>> excoilRows) {
|
||||
this.coilId = coilId;
|
||||
this.rows = rows;
|
||||
this.firstRow = firstRow;
|
||||
this.excoilRows = excoilRows;
|
||||
}
|
||||
|
||||
public String getCoilId() {
|
||||
@@ -397,10 +445,21 @@ public class SqlServerApiBusinessService {
|
||||
return firstRow;
|
||||
}
|
||||
|
||||
public List<Map<String, Object>> getExcoilRows() {
|
||||
return excoilRows;
|
||||
}
|
||||
|
||||
public static PlanDetailView fromExecuteSqlResponse(String coilId, SqlServerApiClient.ExecuteSqlResponse response) {
|
||||
List<Map<String, Object>> rows = asRowList(response);
|
||||
Map<String, Object> firstRow = rows.isEmpty() ? Collections.<String, Object>emptyMap() : rows.get(0);
|
||||
return new PlanDetailView(coilId, rows, firstRow);
|
||||
return new PlanDetailView(coilId, rows, firstRow, Collections.<Map<String, Object>>emptyList());
|
||||
}
|
||||
|
||||
public static PlanDetailView fromExecuteSqlResponse(String coilId, SqlServerApiClient.ExecuteSqlResponse response, SqlServerApiClient.ExecuteSqlResponse excoilResponse) {
|
||||
List<Map<String, Object>> rows = asRowList(response);
|
||||
Map<String, Object> firstRow = rows.isEmpty() ? Collections.<String, Object>emptyMap() : rows.get(0);
|
||||
List<Map<String, Object>> excoilRows = asRowList(excoilResponse);
|
||||
return new PlanDetailView(coilId, rows, firstRow, excoilRows);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -94,6 +94,15 @@ public class SqlServerApiController {
|
||||
return R.ok(businessService.getRealtimeData(matId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试用:V_VBDA_GAUGE 各 THICK 列非空/非零统计 + 样本行。
|
||||
* 用于定位"末架出口厚度恒为 0"问题。
|
||||
*/
|
||||
@GetMapping("/test/gauge-stats/{matId}")
|
||||
public R<Map<String, Object>> testGaugeStats(@PathVariable String matId) {
|
||||
return R.ok(businessService.getGaugeStats(matId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 轧辊数据:type / status 均可选,不传则返回全量。
|
||||
*/
|
||||
|
||||
@@ -52,6 +52,11 @@ public class ApsPlanSheetBo extends BaseEntity {
|
||||
*/
|
||||
private String planType;
|
||||
|
||||
/**
|
||||
* 排产文件
|
||||
*/
|
||||
private String apsUrl;
|
||||
|
||||
/**
|
||||
* 排产人
|
||||
*/
|
||||
|
||||
@@ -49,6 +49,10 @@ public class ApsPlanSheet extends BaseEntity {
|
||||
* 排产类型
|
||||
*/
|
||||
private String planType;
|
||||
/**
|
||||
* 排产文件
|
||||
*/
|
||||
private String apsUrl;
|
||||
/**
|
||||
* 排产人
|
||||
*/
|
||||
|
||||
@@ -60,6 +60,12 @@ public class ApsPlanSheetVo {
|
||||
@ExcelProperty(value = "排产类型")
|
||||
private String planType;
|
||||
|
||||
/**
|
||||
* 排产文件
|
||||
*/
|
||||
@ExcelProperty(value = "排产文件")
|
||||
private String apsUrl;
|
||||
|
||||
/**
|
||||
* 排产人
|
||||
*/
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
<result property="lineName" column="line_name"/>
|
||||
<result property="planCode" column="plan_code"/>
|
||||
<result property="planType" column="plan_type"/>
|
||||
<result property="apsUrl" column="aps_url"/>
|
||||
<result property="scheduler" column="scheduler"/>
|
||||
<result property="remark" column="remark"/>
|
||||
<result property="delFlag" column="del_flag"/>
|
||||
@@ -27,6 +28,7 @@
|
||||
s.line_name AS lineName,
|
||||
s.plan_code AS planCode,
|
||||
s.plan_type AS planType,
|
||||
s.aps_url AS apsUrl,
|
||||
s.scheduler AS scheduler,
|
||||
s.remark AS masterRemark,
|
||||
d.remark AS detailRemark,
|
||||
|
||||
@@ -0,0 +1,109 @@
|
||||
package com.klp.cost.controller;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Arrays;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.constraints.*;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import com.klp.common.annotation.RepeatSubmit;
|
||||
import com.klp.common.annotation.Log;
|
||||
import com.klp.common.core.controller.BaseController;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.domain.R;
|
||||
import com.klp.common.core.validate.AddGroup;
|
||||
import com.klp.common.core.validate.EditGroup;
|
||||
import com.klp.common.enums.BusinessType;
|
||||
import com.klp.common.utils.poi.ExcelUtil;
|
||||
import com.klp.cost.domain.vo.CostProdMetricResultVo;
|
||||
import com.klp.cost.domain.bo.CostProdMetricResultBo;
|
||||
import com.klp.cost.service.ICostProdMetricResultService;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
|
||||
/**
|
||||
* 生产指标计算结果
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-17
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/cost/prodMetricResult")
|
||||
public class CostProdMetricResultController extends BaseController {
|
||||
|
||||
private final ICostProdMetricResultService iCostProdMetricResultService;
|
||||
|
||||
/**
|
||||
* 查询生产指标计算结果列表
|
||||
*/
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<CostProdMetricResultVo> list(CostProdMetricResultBo bo, PageQuery pageQuery) {
|
||||
return iCostProdMetricResultService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出生产指标计算结果列表
|
||||
*/
|
||||
@Log(title = "生产指标计算结果", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(CostProdMetricResultBo bo, HttpServletResponse response) {
|
||||
List<CostProdMetricResultVo> list = iCostProdMetricResultService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "生产指标计算结果", CostProdMetricResultVo.class, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取生产指标计算结果详细信息
|
||||
*
|
||||
* @param resultId 主键
|
||||
*/
|
||||
@GetMapping("/{resultId}")
|
||||
public R<CostProdMetricResultVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long resultId) {
|
||||
return R.ok(iCostProdMetricResultService.queryById(resultId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增生产指标计算结果
|
||||
*/
|
||||
@Log(title = "生产指标计算结果", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody CostProdMetricResultBo bo) {
|
||||
return toAjax(iCostProdMetricResultService.insertByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量保存生产指标计算结果(先删除再插入)
|
||||
*/
|
||||
@Log(title = "生产指标计算结果", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping("/batch")
|
||||
public R<Void> batchSave(@RequestBody CostProdMetricResultBo bo) {
|
||||
return toAjax(iCostProdMetricResultService.batchSaveWithDelete(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改生产指标计算结果
|
||||
*/
|
||||
@Log(title = "生产指标计算结果", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping()
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody CostProdMetricResultBo bo) {
|
||||
return toAjax(iCostProdMetricResultService.updateByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除生产指标计算结果
|
||||
*
|
||||
* @param resultIds 主键串
|
||||
*/
|
||||
@Log(title = "生产指标计算结果", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{resultIds}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable Long[] resultIds) {
|
||||
return toAjax(iCostProdMetricResultService.deleteWithValidByIds(Arrays.asList(resultIds), true));
|
||||
}
|
||||
}
|
||||
@@ -42,13 +42,21 @@ public class CostProdMetric extends BaseEntity {
|
||||
*/
|
||||
private String metricFormula;
|
||||
/**
|
||||
* 指标计算结果值
|
||||
* 单价
|
||||
*/
|
||||
private BigDecimal metricValue;
|
||||
/**
|
||||
* 是否使用单价 0=否 1=是
|
||||
*/
|
||||
private Integer usePrice;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
/**
|
||||
* 标签
|
||||
*/
|
||||
private String tags;
|
||||
/**
|
||||
* 删除标识 0=正常 2=删除
|
||||
*/
|
||||
|
||||
@@ -0,0 +1,60 @@
|
||||
package com.klp.cost.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
/**
|
||||
* 生产指标计算结果对象 cost_prod_metric_result
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-17
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("cost_prod_metric_result")
|
||||
public class CostProdMetricResult extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID=1L;
|
||||
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
@TableId(value = "result_id")
|
||||
private Long resultId;
|
||||
/**
|
||||
* 报表ID(关联生产日报)
|
||||
*/
|
||||
private Long reportId;
|
||||
/**
|
||||
* 指标ID(关联cost_prod_metric)
|
||||
*/
|
||||
private Long metricId;
|
||||
/**
|
||||
* 计算日期
|
||||
*/
|
||||
private Date metricDate;
|
||||
/**
|
||||
* 班组
|
||||
*/
|
||||
private String teamGroup;
|
||||
/**
|
||||
* 计算值
|
||||
*/
|
||||
private BigDecimal calcValue;
|
||||
/**
|
||||
* 标签
|
||||
*/
|
||||
private String tags;
|
||||
/**
|
||||
* 删除标识 0=正常 2=删除
|
||||
*/
|
||||
@TableLogic
|
||||
private Long delFlag;
|
||||
|
||||
}
|
||||
@@ -44,14 +44,23 @@ public class CostProdMetricBo extends BaseEntity {
|
||||
private String metricFormula;
|
||||
|
||||
/**
|
||||
* 指标计算结果值
|
||||
* 单价
|
||||
*/
|
||||
private BigDecimal metricValue;
|
||||
|
||||
/**
|
||||
* 是否使用单价 0=否 1=是
|
||||
*/
|
||||
private Integer usePrice;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 标签
|
||||
*/
|
||||
private String tags;
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
package com.klp.cost.domain.bo;
|
||||
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import javax.validation.constraints.*;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
/**
|
||||
* 生产指标计算结果业务对象 cost_prod_metric_result
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-17
|
||||
*/
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class CostProdMetricResultBo extends BaseEntity {
|
||||
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
private Long resultId;
|
||||
|
||||
/**
|
||||
* 报表ID(关联生产日报)
|
||||
*/
|
||||
private Long reportId;
|
||||
|
||||
/**
|
||||
* 指标ID(关联cost_prod_metric)
|
||||
*/
|
||||
private Long metricId;
|
||||
|
||||
/**
|
||||
* 计算日期
|
||||
*/
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
private Date metricDate;
|
||||
|
||||
/**
|
||||
* 班组
|
||||
*/
|
||||
private String teamGroup;
|
||||
|
||||
/**
|
||||
* 计算值
|
||||
*/
|
||||
private BigDecimal calcValue;
|
||||
|
||||
/**
|
||||
* 标签
|
||||
*/
|
||||
private String tags;
|
||||
|
||||
/**
|
||||
* 要删除的主键ID集合
|
||||
*/
|
||||
private List<Long> resultIds;
|
||||
|
||||
/**
|
||||
* 要批量插入的数据集合
|
||||
*/
|
||||
private List<CostProdMetricResultBo> prodMetricResultList;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
package com.klp.cost.domain.vo;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.klp.common.annotation.ExcelDictFormat;
|
||||
import com.klp.common.convert.ExcelDictConvert;
|
||||
import lombok.Data;
|
||||
|
||||
|
||||
/**
|
||||
* 生产指标计算结果视图对象 cost_prod_metric_result
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-17
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class CostProdMetricResultVo {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
@ExcelProperty(value = "主键ID")
|
||||
private Long resultId;
|
||||
|
||||
/**
|
||||
* 报表ID(关联生产日报)
|
||||
*/
|
||||
@ExcelProperty(value = "报表ID", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "关=联生产日报")
|
||||
private Long reportId;
|
||||
|
||||
/**
|
||||
* 指标ID(关联cost_prod_metric)
|
||||
*/
|
||||
@ExcelProperty(value = "指标ID", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "关=联cost_prod_metric")
|
||||
private Long metricId;
|
||||
|
||||
/**
|
||||
* 计算日期
|
||||
*/
|
||||
@ExcelProperty(value = "计算日期")
|
||||
private Date metricDate;
|
||||
|
||||
/**
|
||||
* 班组
|
||||
*/
|
||||
@ExcelProperty(value = "班组")
|
||||
private String teamGroup;
|
||||
|
||||
/**
|
||||
* 计算值
|
||||
*/
|
||||
@ExcelProperty(value = "计算值")
|
||||
private BigDecimal calcValue;
|
||||
|
||||
/**
|
||||
* 标签
|
||||
*/
|
||||
@ExcelProperty(value = "标签")
|
||||
private String tags;
|
||||
|
||||
|
||||
}
|
||||
@@ -52,16 +52,27 @@ public class CostProdMetricVo {
|
||||
private String metricFormula;
|
||||
|
||||
/**
|
||||
* 指标计算结果值
|
||||
* 单价
|
||||
*/
|
||||
@ExcelProperty(value = "指标计算结果值")
|
||||
@ExcelProperty(value = "单价")
|
||||
private BigDecimal metricValue;
|
||||
|
||||
/**
|
||||
* 是否使用单价 0=否 1=是
|
||||
*/
|
||||
@ExcelProperty(value = "是否使用单价")
|
||||
private Integer usePrice;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
@ExcelProperty(value = "备注")
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 标签
|
||||
*/
|
||||
@ExcelProperty(value = "标签")
|
||||
private String tags;
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.klp.cost.mapper;
|
||||
|
||||
import com.klp.cost.domain.CostProdMetricResult;
|
||||
import com.klp.cost.domain.vo.CostProdMetricResultVo;
|
||||
import com.klp.common.core.mapper.BaseMapperPlus;
|
||||
|
||||
/**
|
||||
* 生产指标计算结果Mapper接口
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-17
|
||||
*/
|
||||
public interface CostProdMetricResultMapper extends BaseMapperPlus<CostProdMetricResultMapper, CostProdMetricResult, CostProdMetricResultVo> {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
package com.klp.cost.service;
|
||||
|
||||
import com.klp.cost.domain.CostProdMetricResult;
|
||||
import com.klp.cost.domain.vo.CostProdMetricResultVo;
|
||||
import com.klp.cost.domain.bo.CostProdMetricResultBo;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 生产指标计算结果Service接口
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-17
|
||||
*/
|
||||
public interface ICostProdMetricResultService {
|
||||
|
||||
/**
|
||||
* 查询生产指标计算结果
|
||||
*/
|
||||
CostProdMetricResultVo queryById(Long resultId);
|
||||
|
||||
/**
|
||||
* 查询生产指标计算结果列表
|
||||
*/
|
||||
TableDataInfo<CostProdMetricResultVo> queryPageList(CostProdMetricResultBo bo, PageQuery pageQuery);
|
||||
|
||||
/**
|
||||
* 查询生产指标计算结果列表
|
||||
*/
|
||||
List<CostProdMetricResultVo> queryList(CostProdMetricResultBo bo);
|
||||
|
||||
/**
|
||||
* 新增生产指标计算结果
|
||||
*/
|
||||
Boolean insertByBo(CostProdMetricResultBo bo);
|
||||
|
||||
/**
|
||||
* 修改生产指标计算结果
|
||||
*/
|
||||
Boolean updateByBo(CostProdMetricResultBo bo);
|
||||
|
||||
/**
|
||||
* 校验并批量删除生产指标计算结果信息
|
||||
*/
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
|
||||
/**
|
||||
* 批量保存生产指标计算结果(先删除再插入)
|
||||
*/
|
||||
Boolean batchSaveWithDelete(CostProdMetricResultBo bo);
|
||||
}
|
||||
@@ -0,0 +1,135 @@
|
||||
package com.klp.cost.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.klp.common.utils.StringUtils;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import com.klp.cost.domain.bo.CostProdMetricResultBo;
|
||||
import com.klp.cost.domain.vo.CostProdMetricResultVo;
|
||||
import com.klp.cost.domain.CostProdMetricResult;
|
||||
import com.klp.cost.mapper.CostProdMetricResultMapper;
|
||||
import com.klp.cost.service.ICostProdMetricResultService;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Collection;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 生产指标计算结果Service业务层处理
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-17
|
||||
*/
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class CostProdMetricResultServiceImpl implements ICostProdMetricResultService {
|
||||
|
||||
private final CostProdMetricResultMapper baseMapper;
|
||||
|
||||
/**
|
||||
* 查询生产指标计算结果
|
||||
*/
|
||||
@Override
|
||||
public CostProdMetricResultVo queryById(Long resultId){
|
||||
return baseMapper.selectVoById(resultId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询生产指标计算结果列表
|
||||
*/
|
||||
@Override
|
||||
public TableDataInfo<CostProdMetricResultVo> queryPageList(CostProdMetricResultBo bo, PageQuery pageQuery) {
|
||||
LambdaQueryWrapper<CostProdMetricResult> lqw = buildQueryWrapper(bo);
|
||||
Page<CostProdMetricResultVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询生产指标计算结果列表
|
||||
*/
|
||||
@Override
|
||||
public List<CostProdMetricResultVo> queryList(CostProdMetricResultBo bo) {
|
||||
LambdaQueryWrapper<CostProdMetricResult> lqw = buildQueryWrapper(bo);
|
||||
return baseMapper.selectVoList(lqw);
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<CostProdMetricResult> buildQueryWrapper(CostProdMetricResultBo bo) {
|
||||
Map<String, Object> params = bo.getParams();
|
||||
LambdaQueryWrapper<CostProdMetricResult> lqw = Wrappers.lambdaQuery();
|
||||
lqw.eq(bo.getReportId() != null, CostProdMetricResult::getReportId, bo.getReportId());
|
||||
lqw.eq(bo.getMetricId() != null, CostProdMetricResult::getMetricId, bo.getMetricId());
|
||||
lqw.eq(bo.getMetricDate() != null, CostProdMetricResult::getMetricDate, bo.getMetricDate());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getTeamGroup()), CostProdMetricResult::getTeamGroup, bo.getTeamGroup());
|
||||
lqw.eq(bo.getCalcValue() != null, CostProdMetricResult::getCalcValue, bo.getCalcValue());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getTags()), CostProdMetricResult::getTags, bo.getTags());
|
||||
return lqw;
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增生产指标计算结果
|
||||
*/
|
||||
@Override
|
||||
public Boolean insertByBo(CostProdMetricResultBo bo) {
|
||||
CostProdMetricResult add = BeanUtil.toBean(bo, CostProdMetricResult.class);
|
||||
validEntityBeforeSave(add);
|
||||
boolean flag = baseMapper.insert(add) > 0;
|
||||
if (flag) {
|
||||
bo.setResultId(add.getResultId());
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改生产指标计算结果
|
||||
*/
|
||||
@Override
|
||||
public Boolean updateByBo(CostProdMetricResultBo bo) {
|
||||
CostProdMetricResult update = BeanUtil.toBean(bo, CostProdMetricResult.class);
|
||||
validEntityBeforeSave(update);
|
||||
return baseMapper.updateById(update) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存前的数据校验
|
||||
*/
|
||||
private void validEntityBeforeSave(CostProdMetricResult entity){
|
||||
//TODO 做一些数据校验,如唯一约束
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除生产指标计算结果
|
||||
*/
|
||||
@Override
|
||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||
if(isValid){
|
||||
//TODO 做一些业务上的校验,判断是否需要校验
|
||||
}
|
||||
return baseMapper.deleteBatchIds(ids) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量保存(先删除再插入)
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean batchSaveWithDelete(CostProdMetricResultBo bo) {
|
||||
if (CollUtil.isNotEmpty(bo.getProdMetricResultList())) {
|
||||
if (CollUtil.isNotEmpty(bo.getResultIds())) {
|
||||
baseMapper.deleteBatchIds(bo.getResultIds());
|
||||
}
|
||||
List<CostProdMetricResult> list = bo.getProdMetricResultList().stream()
|
||||
.map(item -> BeanUtil.toBean(item, CostProdMetricResult.class))
|
||||
.collect(Collectors.toList());
|
||||
return baseMapper.insertBatch(list);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -66,6 +66,8 @@ public class CostProdMetricServiceImpl implements ICostProdMetricService {
|
||||
lqw.like(StringUtils.isNotBlank(bo.getMetricName()), CostProdMetric::getMetricName, bo.getMetricName());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getMetricFormula()), CostProdMetric::getMetricFormula, bo.getMetricFormula());
|
||||
lqw.eq(bo.getMetricValue() != null, CostProdMetric::getMetricValue, bo.getMetricValue());
|
||||
lqw.eq(bo.getUsePrice() != null, CostProdMetric::getUsePrice, bo.getUsePrice());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getTags()), CostProdMetric::getTags, bo.getTags());
|
||||
return lqw;
|
||||
}
|
||||
|
||||
|
||||
@@ -71,7 +71,10 @@ public class CostProdReportServiceImpl implements ICostProdReportService {
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getLineType()), CostProdReport::getLineType, bo.getLineType());
|
||||
lqw.eq(bo.getInputWeight() != null, CostProdReport::getInputWeight, bo.getInputWeight());
|
||||
lqw.eq(bo.getOutputWeight() != null, CostProdReport::getOutputWeight, bo.getOutputWeight());
|
||||
lqw.apply(bo.getReportDate() != null, "DATE_FORMAT(report_date, '%Y-%m') = {0}", bo.getReportDate());
|
||||
if (bo.getReportDate() != null) {
|
||||
String monthStr = new java.text.SimpleDateFormat("yyyy-MM").format(bo.getReportDate());
|
||||
lqw.apply("DATE_FORMAT(report_date, '%Y-%m') = {0}", monthStr);
|
||||
}
|
||||
return lqw;
|
||||
}
|
||||
|
||||
|
||||
@@ -11,7 +11,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<result property="metricName" column="metric_name"/>
|
||||
<result property="metricFormula" column="metric_formula"/>
|
||||
<result property="metricValue" column="metric_value"/>
|
||||
<result property="usePrice" column="use_price"/>
|
||||
<result property="remark" column="remark"/>
|
||||
<result property="tags" column="tags"/>
|
||||
<result property="delFlag" column="del_flag"/>
|
||||
<result property="createBy" column="create_by"/>
|
||||
<result property="createTime" column="create_time"/>
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.klp.cost.mapper.CostProdMetricResultMapper">
|
||||
|
||||
<resultMap type="com.klp.cost.domain.CostProdMetricResult" id="CostProdMetricResultResult">
|
||||
<result property="resultId" column="result_id"/>
|
||||
<result property="reportId" column="report_id"/>
|
||||
<result property="metricId" column="metric_id"/>
|
||||
<result property="metricDate" column="metric_date"/>
|
||||
<result property="teamGroup" column="team_group"/>
|
||||
<result property="calcValue" column="calc_value"/>
|
||||
<result property="tags" column="tags"/>
|
||||
<result property="delFlag" column="del_flag"/>
|
||||
<result property="createTime" column="create_time"/>
|
||||
<result property="updateTime" column="update_time"/>
|
||||
<result property="createBy" column="create_by"/>
|
||||
<result property="updateBy" column="update_by"/>
|
||||
</resultMap>
|
||||
|
||||
|
||||
</mapper>
|
||||
@@ -12,4 +12,9 @@ import com.klp.common.core.mapper.BaseMapperPlus;
|
||||
*/
|
||||
public interface CrmCustomerMapper extends BaseMapperPlus<CrmCustomerMapper, CrmCustomer, CrmCustomerVo> {
|
||||
|
||||
/**
|
||||
* 查询当前最大的customer_code,用于自动生成新编码
|
||||
*/
|
||||
String selectMaxCustomerCode();
|
||||
|
||||
}
|
||||
|
||||
@@ -91,6 +91,25 @@ public class CrmCustomerServiceImpl implements ICrmCustomerService {
|
||||
@Override
|
||||
public Boolean insertByBo(CrmCustomerBo bo) {
|
||||
CrmCustomer add = BeanUtil.toBean(bo, CrmCustomer.class);
|
||||
// 自动生成customer_code:查询最大编码并加1
|
||||
if (StringUtils.isBlank(add.getCustomerCode())) {
|
||||
String maxCode = baseMapper.selectMaxCustomerCode();
|
||||
if (StringUtils.isBlank(maxCode)) {
|
||||
add.setCustomerCode("00001");
|
||||
} else {
|
||||
// 提取末尾数字后缀并递增,支持纯数字("00001")和带前缀("KH00001")两种格式
|
||||
java.util.regex.Pattern pattern = java.util.regex.Pattern.compile("^(.*?)(\\d+)$");
|
||||
java.util.regex.Matcher matcher = pattern.matcher(maxCode);
|
||||
if (matcher.matches()) {
|
||||
String prefix = matcher.group(1);
|
||||
String numStr = matcher.group(2);
|
||||
long num = Long.parseLong(numStr) + 1;
|
||||
add.setCustomerCode(prefix + String.format("%0" + numStr.length() + "d", num));
|
||||
} else {
|
||||
add.setCustomerCode(maxCode + "1");
|
||||
}
|
||||
}
|
||||
}
|
||||
validEntityBeforeSave(add);
|
||||
boolean flag = baseMapper.insert(add) > 0;
|
||||
if (flag) {
|
||||
|
||||
@@ -250,11 +250,9 @@ public class CrmOrderServiceImpl implements ICrmOrderService {
|
||||
qw.eq("co.del_flag", 0);
|
||||
//排序规则:
|
||||
// 1. 置顶优先 (is_top=1 排在前面)
|
||||
// 2. 状态为1(已生效)的排在前面
|
||||
// 3. 创建时间倒序
|
||||
// 2. 合同号倒序(KLPY+年月日+序号,降序最新在前)
|
||||
qw.orderByDesc("co.is_top")
|
||||
.orderByDesc("CASE WHEN co.status = 1 THEN 1 ELSE 0 END")
|
||||
.orderByDesc("co.create_time");
|
||||
.orderByDesc("co.contract_code");
|
||||
return qw;
|
||||
}
|
||||
|
||||
@@ -287,9 +285,37 @@ public class CrmOrderServiceImpl implements ICrmOrderService {
|
||||
*/
|
||||
@Override
|
||||
public Boolean updateByBo(CrmOrderBo bo) {
|
||||
// 查询旧订单获取原销售员和原合同编号,用于判断是否需要同步钢卷
|
||||
CrmOrder oldOrder = null;
|
||||
String oldSalesman = null;
|
||||
String oldContractCode = null;
|
||||
if (bo.getOrderId() != null) {
|
||||
oldOrder = baseMapper.selectById(bo.getOrderId());
|
||||
if (oldOrder != null) {
|
||||
oldSalesman = oldOrder.getSalesman();
|
||||
oldContractCode = oldOrder.getContractCode();
|
||||
}
|
||||
}
|
||||
|
||||
CrmOrder update = BeanUtil.toBean(bo, CrmOrder.class);
|
||||
validEntityBeforeSave(update);
|
||||
return baseMapper.updateById(update) > 0;
|
||||
boolean result = baseMapper.updateById(update) > 0;
|
||||
|
||||
// 如果销售员或合同编号变更,同步更新所有关联钢卷
|
||||
if (result && oldOrder != null) {
|
||||
String newSalesman = update.getSalesman();
|
||||
String newContractCode = update.getContractCode();
|
||||
boolean salesmanChanged = !Objects.equals(oldSalesman, newSalesman);
|
||||
boolean contractCodeChanged = !Objects.equals(oldContractCode, newContractCode);
|
||||
if (salesmanChanged || contractCodeChanged) {
|
||||
coilContractRelMapper.updateCoilSaleNameByOrderId(
|
||||
bo.getOrderId(),
|
||||
StringUtils.isNotBlank(newSalesman) ? newSalesman : oldSalesman,
|
||||
StringUtils.isNotBlank(newContractCode) ? newContractCode : oldContractCode);
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -23,5 +23,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<result property="delFlag" column="del_flag"/>
|
||||
</resultMap>
|
||||
|
||||
<select id="selectMaxCustomerCode" resultType="String">
|
||||
SELECT customer_code FROM crm_customer WHERE del_flag = 0 ORDER BY LENGTH(customer_code) DESC, customer_code DESC LIMIT 1
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
||||
23
klp-flow/pom.xml
Normal file
23
klp-flow/pom.xml
Normal file
@@ -0,0 +1,23 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>com.klp</groupId>
|
||||
<artifactId>klp-oa</artifactId>
|
||||
<version>0.8.3</version>
|
||||
</parent>
|
||||
<artifactId>klp-flow</artifactId>
|
||||
<name>klp-flow</name>
|
||||
<description>流程管理模块</description>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.klp</groupId>
|
||||
<artifactId>klp-common</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.klp</groupId>
|
||||
<artifactId>klp-wms</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
@@ -0,0 +1,99 @@
|
||||
package com.klp.flow.controller;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Arrays;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.constraints.*;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import com.klp.common.annotation.RepeatSubmit;
|
||||
import com.klp.common.annotation.Log;
|
||||
import com.klp.common.core.controller.BaseController;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.domain.R;
|
||||
import com.klp.common.core.validate.AddGroup;
|
||||
import com.klp.common.core.validate.EditGroup;
|
||||
import com.klp.common.enums.BusinessType;
|
||||
import com.klp.common.utils.poi.ExcelUtil;
|
||||
import com.klp.flow.domain.vo.InvCountDiscrepancyVo;
|
||||
import com.klp.flow.domain.bo.InvCountDiscrepancyBo;
|
||||
import com.klp.flow.service.IInvCountDiscrepancyService;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
|
||||
/**
|
||||
* 盘库差异记录
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/flow/countDiscrepancy")
|
||||
public class InvCountDiscrepancyController extends BaseController {
|
||||
|
||||
private final IInvCountDiscrepancyService iInvCountDiscrepancyService;
|
||||
|
||||
/**
|
||||
* 查询盘库差异记录列表
|
||||
*/
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<InvCountDiscrepancyVo> list(InvCountDiscrepancyBo bo, PageQuery pageQuery) {
|
||||
return iInvCountDiscrepancyService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出盘库差异记录列表
|
||||
*/
|
||||
@Log(title = "盘库差异记录", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(InvCountDiscrepancyBo bo, HttpServletResponse response) {
|
||||
List<InvCountDiscrepancyVo> list = iInvCountDiscrepancyService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "盘库差异记录", InvCountDiscrepancyVo.class, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取盘库差异记录详细信息
|
||||
*
|
||||
* @param discrepancyId 主键
|
||||
*/
|
||||
@GetMapping("/{discrepancyId}")
|
||||
public R<InvCountDiscrepancyVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long discrepancyId) {
|
||||
return R.ok(iInvCountDiscrepancyService.queryById(discrepancyId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增盘库差异记录
|
||||
*/
|
||||
@Log(title = "盘库差异记录", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody InvCountDiscrepancyBo bo) {
|
||||
return toAjax(iInvCountDiscrepancyService.insertByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改盘库差异记录
|
||||
*/
|
||||
@Log(title = "盘库差异记录", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping()
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody InvCountDiscrepancyBo bo) {
|
||||
return toAjax(iInvCountDiscrepancyService.updateByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除盘库差异记录
|
||||
*
|
||||
* @param discrepancyIds 主键串
|
||||
*/
|
||||
@Log(title = "盘库差异记录", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{discrepancyIds}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable Long[] discrepancyIds) {
|
||||
return toAjax(iInvCountDiscrepancyService.deleteWithValidByIds(Arrays.asList(discrepancyIds), true));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
package com.klp.flow.controller;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Arrays;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.constraints.*;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import com.klp.common.annotation.RepeatSubmit;
|
||||
import com.klp.common.annotation.Log;
|
||||
import com.klp.common.core.controller.BaseController;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.domain.R;
|
||||
import com.klp.common.core.validate.AddGroup;
|
||||
import com.klp.common.core.validate.EditGroup;
|
||||
import com.klp.common.enums.BusinessType;
|
||||
import com.klp.common.utils.poi.ExcelUtil;
|
||||
import com.klp.flow.domain.vo.InvCountPlanVo;
|
||||
import com.klp.flow.domain.bo.InvCountPlanBo;
|
||||
import com.klp.flow.service.IInvCountPlanService;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
|
||||
/**
|
||||
* 盘库计划主
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/flow/countPlan")
|
||||
public class InvCountPlanController extends BaseController {
|
||||
|
||||
private final IInvCountPlanService iInvCountPlanService;
|
||||
|
||||
/**
|
||||
* 查询盘库计划主列表
|
||||
*/
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<InvCountPlanVo> list(InvCountPlanBo bo, PageQuery pageQuery) {
|
||||
return iInvCountPlanService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出盘库计划主列表
|
||||
*/
|
||||
@Log(title = "盘库计划主", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(InvCountPlanBo bo, HttpServletResponse response) {
|
||||
List<InvCountPlanVo> list = iInvCountPlanService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "盘库计划主", InvCountPlanVo.class, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取盘库计划主详细信息
|
||||
*
|
||||
* @param planId 主键
|
||||
*/
|
||||
@GetMapping("/{planId}")
|
||||
public R<InvCountPlanVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long planId) {
|
||||
return R.ok(iInvCountPlanService.queryById(planId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增盘库计划主
|
||||
*/
|
||||
@Log(title = "盘库计划主", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody InvCountPlanBo bo) {
|
||||
return toAjax(iInvCountPlanService.insertByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改盘库计划主
|
||||
*/
|
||||
@Log(title = "盘库计划主", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping()
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody InvCountPlanBo bo) {
|
||||
return toAjax(iInvCountPlanService.updateByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除盘库计划主
|
||||
*
|
||||
* @param planIds 主键串
|
||||
*/
|
||||
@Log(title = "盘库计划主", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{planIds}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable Long[] planIds) {
|
||||
return toAjax(iInvCountPlanService.deleteWithValidByIds(Arrays.asList(planIds), true));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
package com.klp.flow.controller;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Arrays;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.constraints.*;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import com.klp.common.annotation.RepeatSubmit;
|
||||
import com.klp.common.annotation.Log;
|
||||
import com.klp.common.core.controller.BaseController;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.domain.R;
|
||||
import com.klp.common.core.validate.AddGroup;
|
||||
import com.klp.common.core.validate.EditGroup;
|
||||
import com.klp.common.enums.BusinessType;
|
||||
import com.klp.common.utils.poi.ExcelUtil;
|
||||
import com.klp.flow.domain.vo.InvCountPlanWarehouseVo;
|
||||
import com.klp.flow.domain.bo.InvCountPlanWarehouseBo;
|
||||
import com.klp.flow.service.IInvCountPlanWarehouseService;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
|
||||
/**
|
||||
* 盘库计划-库区关联
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/flow/countPlanWarehouse")
|
||||
public class InvCountPlanWarehouseController extends BaseController {
|
||||
|
||||
private final IInvCountPlanWarehouseService iInvCountPlanWarehouseService;
|
||||
|
||||
/**
|
||||
* 查询盘库计划-库区关联列表
|
||||
*/
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<InvCountPlanWarehouseVo> list(InvCountPlanWarehouseBo bo, PageQuery pageQuery) {
|
||||
return iInvCountPlanWarehouseService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出盘库计划-库区关联列表
|
||||
*/
|
||||
@Log(title = "盘库计划-库区关联", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(InvCountPlanWarehouseBo bo, HttpServletResponse response) {
|
||||
List<InvCountPlanWarehouseVo> list = iInvCountPlanWarehouseService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "盘库计划-库区关联", InvCountPlanWarehouseVo.class, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取盘库计划-库区关联详细信息
|
||||
*
|
||||
* @param relId 主键
|
||||
*/
|
||||
@GetMapping("/{relId}")
|
||||
public R<InvCountPlanWarehouseVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long relId) {
|
||||
return R.ok(iInvCountPlanWarehouseService.queryById(relId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增盘库计划-库区关联
|
||||
*/
|
||||
@Log(title = "盘库计划-库区关联", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody InvCountPlanWarehouseBo bo) {
|
||||
return toAjax(iInvCountPlanWarehouseService.insertByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改盘库计划-库区关联
|
||||
*/
|
||||
@Log(title = "盘库计划-库区关联", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping()
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody InvCountPlanWarehouseBo bo) {
|
||||
return toAjax(iInvCountPlanWarehouseService.updateByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除盘库计划-库区关联
|
||||
*
|
||||
* @param relIds 主键串
|
||||
*/
|
||||
@Log(title = "盘库计划-库区关联", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{relIds}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable Long[] relIds) {
|
||||
return toAjax(iInvCountPlanWarehouseService.deleteWithValidByIds(Arrays.asList(relIds), true));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
package com.klp.flow.controller;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Arrays;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.constraints.*;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import com.klp.common.annotation.RepeatSubmit;
|
||||
import com.klp.common.annotation.Log;
|
||||
import com.klp.common.core.controller.BaseController;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.domain.R;
|
||||
import com.klp.common.core.validate.AddGroup;
|
||||
import com.klp.common.core.validate.EditGroup;
|
||||
import com.klp.common.enums.BusinessType;
|
||||
import com.klp.common.utils.poi.ExcelUtil;
|
||||
import com.klp.flow.domain.vo.TsAcceptCoilRelVo;
|
||||
import com.klp.flow.domain.bo.TsAcceptCoilRelBo;
|
||||
import com.klp.flow.service.ITsAcceptCoilRelService;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
|
||||
/**
|
||||
* 受理单关联钢卷中间
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-18
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/flow/acceptCoilRel")
|
||||
public class TsAcceptCoilRelController extends BaseController {
|
||||
|
||||
private final ITsAcceptCoilRelService iTsAcceptCoilRelService;
|
||||
|
||||
/**
|
||||
* 查询受理单关联钢卷中间列表
|
||||
*/
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<TsAcceptCoilRelVo> list(TsAcceptCoilRelBo bo, PageQuery pageQuery) {
|
||||
return iTsAcceptCoilRelService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出受理单关联钢卷中间列表
|
||||
*/
|
||||
@Log(title = "受理单关联钢卷中间", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(TsAcceptCoilRelBo bo, HttpServletResponse response) {
|
||||
List<TsAcceptCoilRelVo> list = iTsAcceptCoilRelService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "受理单关联钢卷中间", TsAcceptCoilRelVo.class, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取受理单关联钢卷中间详细信息
|
||||
*
|
||||
* @param relId 主键
|
||||
*/
|
||||
@GetMapping("/{relId}")
|
||||
public R<TsAcceptCoilRelVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long relId) {
|
||||
return R.ok(iTsAcceptCoilRelService.queryById(relId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增受理单关联钢卷中间
|
||||
*/
|
||||
@Log(title = "受理单关联钢卷中间", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody TsAcceptCoilRelBo bo) {
|
||||
return toAjax(iTsAcceptCoilRelService.insertByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改受理单关联钢卷中间
|
||||
*/
|
||||
@Log(title = "受理单关联钢卷中间", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping()
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody TsAcceptCoilRelBo bo) {
|
||||
return toAjax(iTsAcceptCoilRelService.updateByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除受理单关联钢卷中间
|
||||
*
|
||||
* @param relIds 主键串
|
||||
*/
|
||||
@Log(title = "受理单关联钢卷中间", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{relIds}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable Long[] relIds) {
|
||||
return toAjax(iTsAcceptCoilRelService.deleteWithValidByIds(Arrays.asList(relIds), true));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,125 @@
|
||||
package com.klp.flow.controller;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Arrays;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.constraints.*;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import com.klp.common.annotation.RepeatSubmit;
|
||||
import com.klp.common.annotation.Log;
|
||||
import com.klp.common.core.controller.BaseController;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.domain.R;
|
||||
import com.klp.common.core.validate.AddGroup;
|
||||
import com.klp.common.core.validate.EditGroup;
|
||||
import com.klp.common.enums.BusinessType;
|
||||
import com.klp.common.utils.poi.ExcelUtil;
|
||||
import com.klp.flow.domain.vo.TsComplaintAcceptVo;
|
||||
import com.klp.flow.domain.bo.TsComplaintAcceptBo;
|
||||
import com.klp.flow.service.ITsComplaintAcceptService;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
|
||||
/**
|
||||
* 投诉受理单主
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-18
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/flow/complaintAccept")
|
||||
public class TsComplaintAcceptController extends BaseController {
|
||||
|
||||
private final ITsComplaintAcceptService iTsComplaintAcceptService;
|
||||
|
||||
/**
|
||||
* 查询投诉受理单主列表
|
||||
*/
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<TsComplaintAcceptVo> list(TsComplaintAcceptBo bo, PageQuery pageQuery) {
|
||||
return iTsComplaintAcceptService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出投诉受理单主列表
|
||||
*/
|
||||
@Log(title = "投诉受理单主", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(TsComplaintAcceptBo bo, HttpServletResponse response) {
|
||||
List<TsComplaintAcceptVo> list = iTsComplaintAcceptService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "投诉受理单主", TsComplaintAcceptVo.class, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取投诉受理单主详细信息
|
||||
*
|
||||
* @param acceptId 主键
|
||||
*/
|
||||
@GetMapping("/{acceptId}")
|
||||
public R<TsComplaintAcceptVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long acceptId) {
|
||||
return R.ok(iTsComplaintAcceptService.queryById(acceptId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增投诉受理单主
|
||||
*/
|
||||
@Log(title = "投诉受理单主", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody TsComplaintAcceptBo bo) {
|
||||
return toAjax(iTsComplaintAcceptService.insertByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改投诉受理单主
|
||||
*/
|
||||
@Log(title = "投诉受理单主", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping()
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody TsComplaintAcceptBo bo) {
|
||||
return toAjax(iTsComplaintAcceptService.updateByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除投诉受理单主
|
||||
*
|
||||
* @param acceptIds 主键串
|
||||
*/
|
||||
@Log(title = "投诉受理单主", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{acceptIds}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable Long[] acceptIds) {
|
||||
return toAjax(iTsComplaintAcceptService.deleteWithValidByIds(Arrays.asList(acceptIds), true));
|
||||
}
|
||||
|
||||
/**
|
||||
* 意见下发:修改flow_status=2,按字典部门创建代办任务
|
||||
*
|
||||
* @param acceptId 受理单ID
|
||||
*/
|
||||
@Log(title = "意见下发", businessType = BusinessType.UPDATE)
|
||||
@PostMapping("/opinionDispatch/{acceptId}")
|
||||
public R<Void> opinionDispatch(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long acceptId) {
|
||||
return toAjax(iTsComplaintAcceptService.opinionDispatch(acceptId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 反馈下发:修改flow_status=4,按字典部门创建执行反馈记录
|
||||
*
|
||||
* @param acceptId 受理单ID
|
||||
*/
|
||||
@Log(title = "反馈下发", businessType = BusinessType.UPDATE)
|
||||
@PostMapping("/feedbackDispatch")
|
||||
public R<Void> feedbackDispatch(@RequestParam Long acceptId,
|
||||
@RequestParam String deptIds) {
|
||||
List<Long> deptIdList = Arrays.stream(deptIds.split(",")).map(Long::parseLong).collect(Collectors.toList());
|
||||
return toAjax(iTsComplaintAcceptService.feedbackDispatch(acceptId, deptIdList));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
package com.klp.flow.controller;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Arrays;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.constraints.*;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import com.klp.common.annotation.RepeatSubmit;
|
||||
import com.klp.common.annotation.Log;
|
||||
import com.klp.common.core.controller.BaseController;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.domain.R;
|
||||
import com.klp.common.core.validate.AddGroup;
|
||||
import com.klp.common.core.validate.EditGroup;
|
||||
import com.klp.common.enums.BusinessType;
|
||||
import com.klp.common.utils.poi.ExcelUtil;
|
||||
import com.klp.flow.domain.vo.TsComplaintTaskVo;
|
||||
import com.klp.flow.domain.bo.TsComplaintTaskBo;
|
||||
import com.klp.flow.service.ITsComplaintTaskService;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
|
||||
/**
|
||||
* 各部门投诉代办任务&意见
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-18
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/flow/complaintTask")
|
||||
public class TsComplaintTaskController extends BaseController {
|
||||
|
||||
private final ITsComplaintTaskService iTsComplaintTaskService;
|
||||
|
||||
/**
|
||||
* 查询各部门投诉代办任务&意见列表
|
||||
*/
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<TsComplaintTaskVo> list(TsComplaintTaskBo bo, PageQuery pageQuery) {
|
||||
return iTsComplaintTaskService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出各部门投诉代办任务&意见列表
|
||||
*/
|
||||
@Log(title = "各部门投诉代办任务&意见", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(TsComplaintTaskBo bo, HttpServletResponse response) {
|
||||
List<TsComplaintTaskVo> list = iTsComplaintTaskService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "各部门投诉代办任务&意见", TsComplaintTaskVo.class, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取各部门投诉代办任务&意见详细信息
|
||||
*
|
||||
* @param taskId 主键
|
||||
*/
|
||||
@GetMapping("/{taskId}")
|
||||
public R<TsComplaintTaskVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long taskId) {
|
||||
return R.ok(iTsComplaintTaskService.queryById(taskId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增各部门投诉代办任务&意见
|
||||
*/
|
||||
@Log(title = "各部门投诉代办任务&意见", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody TsComplaintTaskBo bo) {
|
||||
return toAjax(iTsComplaintTaskService.insertByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改各部门投诉代办任务&意见
|
||||
*/
|
||||
@Log(title = "各部门投诉代办任务&意见", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping()
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody TsComplaintTaskBo bo) {
|
||||
return toAjax(iTsComplaintTaskService.updateByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除各部门投诉代办任务&意见
|
||||
*
|
||||
* @param taskIds 主键串
|
||||
*/
|
||||
@Log(title = "各部门投诉代办任务&意见", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{taskIds}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable Long[] taskIds) {
|
||||
return toAjax(iTsComplaintTaskService.deleteWithValidByIds(Arrays.asList(taskIds), true));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,99 @@
|
||||
package com.klp.flow.controller;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Arrays;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.constraints.*;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import com.klp.common.annotation.RepeatSubmit;
|
||||
import com.klp.common.annotation.Log;
|
||||
import com.klp.common.core.controller.BaseController;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.klp.common.core.domain.R;
|
||||
import com.klp.common.core.validate.AddGroup;
|
||||
import com.klp.common.core.validate.EditGroup;
|
||||
import com.klp.common.enums.BusinessType;
|
||||
import com.klp.common.utils.poi.ExcelUtil;
|
||||
import com.klp.flow.domain.vo.TsPlanExecuteRelVo;
|
||||
import com.klp.flow.domain.bo.TsPlanExecuteRelBo;
|
||||
import com.klp.flow.service.ITsPlanExecuteRelService;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
|
||||
/**
|
||||
* 最终方案下发部门及执行反馈
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-18
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/flow/planExecuteRel")
|
||||
public class TsPlanExecuteRelController extends BaseController {
|
||||
|
||||
private final ITsPlanExecuteRelService iTsPlanExecuteRelService;
|
||||
|
||||
/**
|
||||
* 查询最终方案下发部门及执行反馈列表
|
||||
*/
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<TsPlanExecuteRelVo> list(TsPlanExecuteRelBo bo, PageQuery pageQuery) {
|
||||
return iTsPlanExecuteRelService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出最终方案下发部门及执行反馈列表
|
||||
*/
|
||||
@Log(title = "最终方案下发部门及执行反馈", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(TsPlanExecuteRelBo bo, HttpServletResponse response) {
|
||||
List<TsPlanExecuteRelVo> list = iTsPlanExecuteRelService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "最终方案下发部门及执行反馈", TsPlanExecuteRelVo.class, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取最终方案下发部门及执行反馈详细信息
|
||||
*
|
||||
* @param relId 主键
|
||||
*/
|
||||
@GetMapping("/{relId}")
|
||||
public R<TsPlanExecuteRelVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long relId) {
|
||||
return R.ok(iTsPlanExecuteRelService.queryById(relId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增最终方案下发部门及执行反馈
|
||||
*/
|
||||
@Log(title = "最终方案下发部门及执行反馈", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody TsPlanExecuteRelBo bo) {
|
||||
return toAjax(iTsPlanExecuteRelService.insertByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改最终方案下发部门及执行反馈
|
||||
*/
|
||||
@Log(title = "最终方案下发部门及执行反馈", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping()
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody TsPlanExecuteRelBo bo) {
|
||||
return toAjax(iTsPlanExecuteRelService.updateByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除最终方案下发部门及执行反馈
|
||||
*
|
||||
* @param relIds 主键串
|
||||
*/
|
||||
@Log(title = "最终方案下发部门及执行反馈", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{relIds}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable Long[] relIds) {
|
||||
return toAjax(iTsPlanExecuteRelService.deleteWithValidByIds(Arrays.asList(relIds), true));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
package com.klp.flow.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
/**
|
||||
* 盘库差异记录对象 inv_count_discrepancy
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("inv_count_discrepancy")
|
||||
public class InvCountDiscrepancy extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID=1L;
|
||||
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
@TableId(value = "discrepancy_id")
|
||||
private Long discrepancyId;
|
||||
/**
|
||||
* 盘库计划明细ID
|
||||
*/
|
||||
private Long relId;
|
||||
/**
|
||||
* 差异类型:1=盘盈, 2=盘亏, 3=状态不符, 4=重量偏差
|
||||
*/
|
||||
private Integer discrepancyType;
|
||||
/**
|
||||
* 钢卷ID
|
||||
*/
|
||||
private Long coilId;
|
||||
/**
|
||||
* 钢卷号
|
||||
*/
|
||||
private String enterCoilNo;
|
||||
/**
|
||||
* 差异详情(JSON:含系统值、实盘值对比)
|
||||
*/
|
||||
private String discrepancyDetail;
|
||||
/**
|
||||
* 原因分析
|
||||
*/
|
||||
private String reasonAnalysis;
|
||||
/**
|
||||
* 处理建议
|
||||
*/
|
||||
private String processSuggestion;
|
||||
/**
|
||||
* 处理结果
|
||||
*/
|
||||
private String processResult;
|
||||
/**
|
||||
* 处理状态:0=待处理, 1=处理中, 2=已处理
|
||||
*/
|
||||
private Integer processStatus;
|
||||
/**
|
||||
* 处理人ID
|
||||
*/
|
||||
private Long processUserId;
|
||||
/**
|
||||
* 处理人姓名
|
||||
*/
|
||||
private String processUserName;
|
||||
/**
|
||||
* 处理时间
|
||||
*/
|
||||
private Date processTime;
|
||||
/**
|
||||
* 附件文件名称集合,多文件逗号分隔,前端展示
|
||||
*/
|
||||
private String attachFile;
|
||||
/**
|
||||
* 删除标志(0=正常,1=已删除)
|
||||
*/
|
||||
@TableLogic
|
||||
private Integer delFlag;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
}
|
||||
87
klp-flow/src/main/java/com/klp/flow/domain/InvCountPlan.java
Normal file
87
klp-flow/src/main/java/com/klp/flow/domain/InvCountPlan.java
Normal file
@@ -0,0 +1,87 @@
|
||||
package com.klp.flow.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
/**
|
||||
* 盘库计划主对象 inv_count_plan
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("inv_count_plan")
|
||||
public class InvCountPlan extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID=1L;
|
||||
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
@TableId(value = "plan_id")
|
||||
private Long planId;
|
||||
/**
|
||||
* 盘库计划编号(如 PD-20260622-001)
|
||||
*/
|
||||
private String planCode;
|
||||
/**
|
||||
* 盘库计划名称
|
||||
*/
|
||||
private String planName;
|
||||
/**
|
||||
* 盘库日期
|
||||
*/
|
||||
private Date countDate;
|
||||
/**
|
||||
* 截止时间
|
||||
*/
|
||||
private Date deadlineTime;
|
||||
/**
|
||||
* 盘点人ID
|
||||
*/
|
||||
private Long countUserId;
|
||||
/**
|
||||
* 盘点人姓名
|
||||
*/
|
||||
private String countUserName;
|
||||
/**
|
||||
* 负责人ID
|
||||
*/
|
||||
private Long principalUserId;
|
||||
/**
|
||||
* 负责人姓名
|
||||
*/
|
||||
private String principalUserName;
|
||||
/**
|
||||
* 参与人员ID列表(逗号分隔)
|
||||
*/
|
||||
private String participantIds;
|
||||
/**
|
||||
* 参与人员姓名列表(逗号分隔)
|
||||
*/
|
||||
private String participantNames;
|
||||
/**
|
||||
* 计划状态:0=草稿, 1=待审批, 2=执行中, 3=差异处理中, 4=已归档
|
||||
*/
|
||||
private Integer planStatus;
|
||||
/**
|
||||
* 附件文件名称集合,多文件逗号分隔,前端展示
|
||||
*/
|
||||
private String attachFile;
|
||||
/**
|
||||
* 删除标志(0=正常,1=已删除)
|
||||
*/
|
||||
@TableLogic
|
||||
private Integer delFlag;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,104 @@
|
||||
package com.klp.flow.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
/**
|
||||
* 盘库计划-库区关联对象 inv_count_plan_warehouse
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("inv_count_plan_warehouse")
|
||||
public class InvCountPlanWarehouse extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID=1L;
|
||||
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
@TableId(value = "rel_id")
|
||||
private Long relId;
|
||||
/**
|
||||
* 盘库计划ID
|
||||
*/
|
||||
private Long planId;
|
||||
/**
|
||||
* 逻辑库区ID
|
||||
*/
|
||||
private Long warehouseId;
|
||||
/**
|
||||
* 逻辑库区名称(冗余)
|
||||
*/
|
||||
private String warehouseName;
|
||||
/**
|
||||
* 实际库区ID
|
||||
*/
|
||||
private Long actualWarehouseId;
|
||||
/**
|
||||
* 实际库区名称(冗余)
|
||||
*/
|
||||
private String actualWarehouseName;
|
||||
/**
|
||||
* 系统钢卷数量
|
||||
*/
|
||||
private Long systemCoilCount;
|
||||
/**
|
||||
* 系统总重量(kg)
|
||||
*/
|
||||
private BigDecimal systemTotalWeight;
|
||||
/**
|
||||
* 实际盘点数量
|
||||
*/
|
||||
private Long actualCoilCount;
|
||||
/**
|
||||
* 实际盘点总重量(kg)
|
||||
*/
|
||||
private BigDecimal actualTotalWeight;
|
||||
/**
|
||||
* 是否账实一致(0=不一致, 1=一致, NULL=未盘点)
|
||||
*/
|
||||
private Integer isConsistent;
|
||||
/**
|
||||
* 出入库记录查询起始时间
|
||||
*/
|
||||
private Date ioStartTime;
|
||||
/**
|
||||
* 出入库记录查询截止时间
|
||||
*/
|
||||
private Date ioEndTime;
|
||||
/**
|
||||
* 出入库记录快照(JSON)
|
||||
*/
|
||||
private String snapshotIoRecord;
|
||||
/**
|
||||
* 逻辑库区钢卷明细快照(JSON)
|
||||
*/
|
||||
private String snapshotCoilLogic;
|
||||
/**
|
||||
* 实际库区钢卷明细快照(JSON)
|
||||
*/
|
||||
private String snapshotCoilActual;
|
||||
/**
|
||||
* 钢卷数量统计快照(JSON)
|
||||
*/
|
||||
private String snapshotCoilStats;
|
||||
/**
|
||||
* 删除标志(0=正常,1=已删除)
|
||||
*/
|
||||
@TableLogic
|
||||
private Integer delFlag;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,45 @@
|
||||
package com.klp.flow.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
|
||||
/**
|
||||
* 受理单关联钢卷中间对象 ts_accept_coil_rel
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-18
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("ts_accept_coil_rel")
|
||||
public class TsAcceptCoilRel extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID=1L;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
@TableId(value = "rel_id")
|
||||
private Long relId;
|
||||
/**
|
||||
* 投诉受理单ID
|
||||
*/
|
||||
private Long acceptId;
|
||||
/**
|
||||
* 钢卷ID
|
||||
*/
|
||||
private Long coilId;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
/**
|
||||
* 删除标识 0=正常 2=删除
|
||||
*/
|
||||
@TableLogic
|
||||
private Long delFlag;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
package com.klp.flow.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
/**
|
||||
* 投诉受理单主对象 ts_complaint_accept
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-18
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("ts_complaint_accept")
|
||||
public class TsComplaintAccept extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID=1L;
|
||||
|
||||
/**
|
||||
* 受理单主键
|
||||
*/
|
||||
@TableId(value = "accept_id")
|
||||
private Long acceptId;
|
||||
/**
|
||||
* 投诉编号 TS-2026-001
|
||||
*/
|
||||
private String complaintNo;
|
||||
/**
|
||||
* 投诉日期
|
||||
*/
|
||||
private Date complaintDate;
|
||||
/**
|
||||
* 投诉情况描述
|
||||
*/
|
||||
private String complaintContent;
|
||||
/**
|
||||
* 客户诉求
|
||||
*/
|
||||
private String customerDemand;
|
||||
/**
|
||||
* 客户照片凭证等
|
||||
*/
|
||||
private String file;
|
||||
/**
|
||||
* 审核状态 0待审核 1已通过 2未通过
|
||||
*/
|
||||
private Long auditStatus;
|
||||
/**
|
||||
* 审核意见
|
||||
*/
|
||||
private String auditOpinion;
|
||||
/**
|
||||
* 审核人ID
|
||||
*/
|
||||
private Long auditUserId;
|
||||
/**
|
||||
* 审核时间
|
||||
*/
|
||||
private Date auditTime;
|
||||
/**
|
||||
* 流程阶段:
|
||||
1=待审核 2=部门意见填写中 3=待总负责人汇总方案 4=方案下发执行反馈中 5=全部办结
|
||||
*/
|
||||
private Long flowStatus;
|
||||
/**
|
||||
* 总负责人ID
|
||||
*/
|
||||
private Long principalUserId;
|
||||
/**
|
||||
* 总负责人整合后的完整处理方案
|
||||
*/
|
||||
private String planContent;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
/**
|
||||
* 删除标识 0=正常 2=删除
|
||||
*/
|
||||
@TableLogic
|
||||
private Long delFlag;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
package com.klp.flow.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
/**
|
||||
* 各部门投诉代办任务&意见对象 ts_complaint_task
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-18
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("ts_complaint_task")
|
||||
public class TsComplaintTask extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID=1L;
|
||||
|
||||
/**
|
||||
* 代办任务ID
|
||||
*/
|
||||
@TableId(value = "task_id")
|
||||
private Long taskId;
|
||||
/**
|
||||
* 关联投诉受理单ID
|
||||
*/
|
||||
private Long acceptId;
|
||||
/**
|
||||
* 负责部门ID(销售/质量/生产)
|
||||
*/
|
||||
private Long deptId;
|
||||
/**
|
||||
* 任务状态 0待填写意见 1已完成填写
|
||||
*/
|
||||
private Long taskStatus;
|
||||
/**
|
||||
* 意见单号
|
||||
*/
|
||||
private String fillNo;
|
||||
/**
|
||||
* 部门处理意见
|
||||
*/
|
||||
private String deptOpinion;
|
||||
/**
|
||||
* 填写意见的部门员工ID
|
||||
*/
|
||||
private Long fillUserId;
|
||||
/**
|
||||
* 意见填写时间
|
||||
*/
|
||||
private Date fillTime;
|
||||
/**
|
||||
* 意见文件
|
||||
*/
|
||||
private String fillFile;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
/**
|
||||
* 删除标识 0=正常 2=删除
|
||||
*/
|
||||
@TableLogic
|
||||
private Long delFlag;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
package com.klp.flow.domain;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.*;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
/**
|
||||
* 最终方案下发部门及执行反馈对象 ts_plan_execute_rel
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-18
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@TableName("ts_plan_execute_rel")
|
||||
public class TsPlanExecuteRel extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID=1L;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
@TableId(value = "rel_id")
|
||||
private Long relId;
|
||||
/**
|
||||
* 关联最终方案ID
|
||||
*/
|
||||
private Long acceptId;
|
||||
/**
|
||||
* 被下发执行的部门ID
|
||||
*/
|
||||
private Long deptId;
|
||||
/**
|
||||
* 执行状态 0待执行反馈 1已反馈完成
|
||||
*/
|
||||
private Long executeStatus;
|
||||
/**
|
||||
* 部门执行结果反馈
|
||||
*/
|
||||
private String executeResult;
|
||||
/**
|
||||
* 反馈单号
|
||||
*/
|
||||
private String feedbackNo;
|
||||
/**
|
||||
* 反馈人
|
||||
*/
|
||||
private Long feedbackUserId;
|
||||
/**
|
||||
* 反馈时间
|
||||
*/
|
||||
private Date feedbackTime;
|
||||
/**
|
||||
* 反馈文件
|
||||
*/
|
||||
private String feedbackFile;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
/**
|
||||
* 删除标识 0=正常 2=删除
|
||||
*/
|
||||
@TableLogic
|
||||
private Long delFlag;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
package com.klp.flow.domain.bo;
|
||||
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import javax.validation.constraints.*;
|
||||
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
/**
|
||||
* 盘库差异记录业务对象 inv_count_discrepancy
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class InvCountDiscrepancyBo extends BaseEntity {
|
||||
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
private Long discrepancyId;
|
||||
|
||||
/**
|
||||
* 盘库计划明细ID
|
||||
*/
|
||||
private Long relId;
|
||||
|
||||
/**
|
||||
* 差异类型:1=盘盈, 2=盘亏, 3=状态不符, 4=重量偏差
|
||||
*/
|
||||
private Integer discrepancyType;
|
||||
|
||||
/**
|
||||
* 钢卷ID
|
||||
*/
|
||||
private Long coilId;
|
||||
|
||||
/**
|
||||
* 钢卷号
|
||||
*/
|
||||
private String enterCoilNo;
|
||||
|
||||
/**
|
||||
* 差异详情(JSON:含系统值、实盘值对比)
|
||||
*/
|
||||
private String discrepancyDetail;
|
||||
|
||||
/**
|
||||
* 原因分析
|
||||
*/
|
||||
private String reasonAnalysis;
|
||||
|
||||
/**
|
||||
* 处理建议
|
||||
*/
|
||||
private String processSuggestion;
|
||||
|
||||
/**
|
||||
* 处理结果
|
||||
*/
|
||||
private String processResult;
|
||||
|
||||
/**
|
||||
* 处理状态:0=待处理, 1=处理中, 2=已处理
|
||||
*/
|
||||
private Integer processStatus;
|
||||
|
||||
/**
|
||||
* 处理人ID
|
||||
*/
|
||||
private Long processUserId;
|
||||
|
||||
/**
|
||||
* 处理人姓名
|
||||
*/
|
||||
private String processUserName;
|
||||
|
||||
/**
|
||||
* 处理时间
|
||||
*/
|
||||
private Date processTime;
|
||||
|
||||
/**
|
||||
* 附件文件名称集合,多文件逗号分隔,前端展示
|
||||
*/
|
||||
private String attachFile;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
package com.klp.flow.domain.bo;
|
||||
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import javax.validation.constraints.*;
|
||||
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
/**
|
||||
* 盘库计划主业务对象 inv_count_plan
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class InvCountPlanBo extends BaseEntity {
|
||||
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
private Long planId;
|
||||
|
||||
/**
|
||||
* 盘库计划编号(如 PD-20260622-001)
|
||||
*/
|
||||
private String planCode;
|
||||
|
||||
/**
|
||||
* 盘库计划名称
|
||||
*/
|
||||
private String planName;
|
||||
|
||||
/**
|
||||
* 盘库日期
|
||||
*/
|
||||
private Date countDate;
|
||||
|
||||
/**
|
||||
* 截止时间
|
||||
*/
|
||||
private Date deadlineTime;
|
||||
|
||||
/**
|
||||
* 盘点人ID
|
||||
*/
|
||||
private Long countUserId;
|
||||
|
||||
/**
|
||||
* 盘点人姓名
|
||||
*/
|
||||
private String countUserName;
|
||||
|
||||
/**
|
||||
* 负责人ID
|
||||
*/
|
||||
private Long principalUserId;
|
||||
|
||||
/**
|
||||
* 负责人姓名
|
||||
*/
|
||||
private String principalUserName;
|
||||
|
||||
/**
|
||||
* 参与人员ID列表(逗号分隔)
|
||||
*/
|
||||
private String participantIds;
|
||||
|
||||
/**
|
||||
* 参与人员姓名列表(逗号分隔)
|
||||
*/
|
||||
private String participantNames;
|
||||
|
||||
/**
|
||||
* 计划状态:0=草稿, 1=待审批, 2=执行中, 3=差异处理中, 4=已归档
|
||||
*/
|
||||
private Integer planStatus;
|
||||
|
||||
/**
|
||||
* 附件文件名称集合,多文件逗号分隔,前端展示
|
||||
*/
|
||||
private String attachFile;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,114 @@
|
||||
package com.klp.flow.domain.bo;
|
||||
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import javax.validation.constraints.*;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
/**
|
||||
* 盘库计划-库区关联业务对象 inv_count_plan_warehouse
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class InvCountPlanWarehouseBo extends BaseEntity {
|
||||
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
private Long relId;
|
||||
|
||||
/**
|
||||
* 盘库计划ID
|
||||
*/
|
||||
private Long planId;
|
||||
|
||||
/**
|
||||
* 逻辑库区ID
|
||||
*/
|
||||
private Long warehouseId;
|
||||
|
||||
/**
|
||||
* 逻辑库区名称(冗余)
|
||||
*/
|
||||
private String warehouseName;
|
||||
|
||||
/**
|
||||
* 实际库区ID
|
||||
*/
|
||||
private Long actualWarehouseId;
|
||||
|
||||
/**
|
||||
* 实际库区名称(冗余)
|
||||
*/
|
||||
private String actualWarehouseName;
|
||||
|
||||
/**
|
||||
* 系统钢卷数量
|
||||
*/
|
||||
private Long systemCoilCount;
|
||||
|
||||
/**
|
||||
* 系统总重量(kg)
|
||||
*/
|
||||
private BigDecimal systemTotalWeight;
|
||||
|
||||
/**
|
||||
* 实际盘点数量
|
||||
*/
|
||||
private Long actualCoilCount;
|
||||
|
||||
/**
|
||||
* 实际盘点总重量(kg)
|
||||
*/
|
||||
private BigDecimal actualTotalWeight;
|
||||
|
||||
/**
|
||||
* 是否账实一致(0=不一致, 1=一致, NULL=未盘点)
|
||||
*/
|
||||
private Integer isConsistent;
|
||||
|
||||
/**
|
||||
* 出入库记录查询起始时间
|
||||
*/
|
||||
private Date ioStartTime;
|
||||
|
||||
/**
|
||||
* 出入库记录查询截止时间
|
||||
*/
|
||||
private Date ioEndTime;
|
||||
|
||||
/**
|
||||
* 出入库记录快照(JSON)
|
||||
*/
|
||||
private String snapshotIoRecord;
|
||||
|
||||
/**
|
||||
* 逻辑库区钢卷明细快照(JSON)
|
||||
*/
|
||||
private String snapshotCoilLogic;
|
||||
|
||||
/**
|
||||
* 实际库区钢卷明细快照(JSON)
|
||||
*/
|
||||
private String snapshotCoilActual;
|
||||
|
||||
/**
|
||||
* 钢卷数量统计快照(JSON)
|
||||
*/
|
||||
private String snapshotCoilStats;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
package com.klp.flow.domain.bo;
|
||||
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import javax.validation.constraints.*;
|
||||
|
||||
|
||||
/**
|
||||
* 受理单关联钢卷中间业务对象 ts_accept_coil_rel
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-18
|
||||
*/
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class TsAcceptCoilRelBo extends BaseEntity {
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private Long relId;
|
||||
|
||||
/**
|
||||
* 投诉受理单ID
|
||||
*/
|
||||
private Long acceptId;
|
||||
|
||||
/**
|
||||
* 钢卷ID
|
||||
*/
|
||||
private Long coilId;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,108 @@
|
||||
package com.klp.flow.domain.bo;
|
||||
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import javax.validation.constraints.*;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
/**
|
||||
* 投诉受理单主业务对象 ts_complaint_accept
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-18
|
||||
*/
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class TsComplaintAcceptBo extends BaseEntity {
|
||||
|
||||
/**
|
||||
* 受理单主键
|
||||
*/
|
||||
private Long acceptId;
|
||||
|
||||
/**
|
||||
* 投诉编号 TS-2026-001
|
||||
*/
|
||||
private String complaintNo;
|
||||
|
||||
/**
|
||||
* 投诉日期
|
||||
*/
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||
@JsonFormat(pattern = "yyyy-MM-dd")
|
||||
private Date complaintDate;
|
||||
|
||||
/**
|
||||
* 投诉情况描述
|
||||
*/
|
||||
private String complaintContent;
|
||||
|
||||
/**
|
||||
* 客户诉求
|
||||
*/
|
||||
private String customerDemand;
|
||||
|
||||
/**
|
||||
* 客户照片凭证等
|
||||
*/
|
||||
private String file;
|
||||
|
||||
/**
|
||||
* 审核状态 0待审核 1已通过 2未通过
|
||||
*/
|
||||
private Long auditStatus;
|
||||
|
||||
/**
|
||||
* 审核意见
|
||||
*/
|
||||
private String auditOpinion;
|
||||
|
||||
/**
|
||||
* 审核人ID
|
||||
*/
|
||||
private Long auditUserId;
|
||||
|
||||
/**
|
||||
* 审核时间
|
||||
*/
|
||||
private Date auditTime;
|
||||
|
||||
/**
|
||||
* 流程阶段:
|
||||
1=待审核 2=部门意见填写中 3=待总负责人汇总方案 4=方案下发执行反馈中 5=全部办结
|
||||
*/
|
||||
private Long flowStatus;
|
||||
|
||||
/**
|
||||
* 总负责人ID
|
||||
*/
|
||||
private Long principalUserId;
|
||||
|
||||
/**
|
||||
* 总负责人整合后的完整处理方案
|
||||
*/
|
||||
private String planContent;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 关联的钢卷ID列表(新增受理单时一并插入到ts_accept_coil_rel)
|
||||
*/
|
||||
private List<Long> coilIds;
|
||||
|
||||
/**
|
||||
* 受理单ID列表(批量查询用)
|
||||
*/
|
||||
private List<Long> acceptIds;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
package com.klp.flow.domain.bo;
|
||||
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import javax.validation.constraints.*;
|
||||
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
/**
|
||||
* 各部门投诉代办任务&意见业务对象 ts_complaint_task
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-18
|
||||
*/
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class TsComplaintTaskBo extends BaseEntity {
|
||||
|
||||
/**
|
||||
* 代办任务ID
|
||||
*/
|
||||
private Long taskId;
|
||||
|
||||
/**
|
||||
* 关联投诉受理单ID
|
||||
*/
|
||||
private Long acceptId;
|
||||
|
||||
/**
|
||||
* 负责部门ID(销售/质量/生产)
|
||||
*/
|
||||
private Long deptId;
|
||||
|
||||
/**
|
||||
* 任务状态 0待填写意见 1已完成填写
|
||||
*/
|
||||
private Long taskStatus;
|
||||
|
||||
/**
|
||||
* 意见单号
|
||||
*/
|
||||
private String fillNo;
|
||||
|
||||
/**
|
||||
* 部门处理意见
|
||||
*/
|
||||
private String deptOpinion;
|
||||
|
||||
/**
|
||||
* 填写意见的部门员工ID
|
||||
*/
|
||||
private Long fillUserId;
|
||||
|
||||
/**
|
||||
* 意见填写时间
|
||||
*/
|
||||
private Date fillTime;
|
||||
|
||||
/**
|
||||
* 意见文件
|
||||
*/
|
||||
private String fillFile;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
package com.klp.flow.domain.bo;
|
||||
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import javax.validation.constraints.*;
|
||||
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
/**
|
||||
* 最终方案下发部门及执行反馈业务对象 ts_plan_execute_rel
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-18
|
||||
*/
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class TsPlanExecuteRelBo extends BaseEntity {
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
private Long relId;
|
||||
|
||||
/**
|
||||
* 关联最终方案ID
|
||||
*/
|
||||
private Long acceptId;
|
||||
|
||||
/**
|
||||
* 被下发执行的部门ID
|
||||
*/
|
||||
private Long deptId;
|
||||
|
||||
/**
|
||||
* 执行状态 0待执行反馈 1已反馈完成
|
||||
*/
|
||||
private Long executeStatus;
|
||||
|
||||
/**
|
||||
* 部门执行结果反馈
|
||||
*/
|
||||
private String executeResult;
|
||||
|
||||
/**
|
||||
* 反馈单号
|
||||
*/
|
||||
private String feedbackNo;
|
||||
|
||||
/**
|
||||
* 反馈人
|
||||
*/
|
||||
private Long feedbackUserId;
|
||||
|
||||
/**
|
||||
* 反馈时间
|
||||
*/
|
||||
private Date feedbackTime;
|
||||
|
||||
/**
|
||||
* 反馈文件
|
||||
*/
|
||||
private String feedbackFile;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,116 @@
|
||||
package com.klp.flow.domain.vo;
|
||||
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.klp.common.annotation.ExcelDictFormat;
|
||||
import com.klp.common.convert.ExcelDictConvert;
|
||||
import lombok.Data;
|
||||
|
||||
|
||||
/**
|
||||
* 盘库差异记录视图对象 inv_count_discrepancy
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class InvCountDiscrepancyVo {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
@ExcelProperty(value = "主键ID")
|
||||
private Long discrepancyId;
|
||||
|
||||
/**
|
||||
* 盘库计划明细ID
|
||||
*/
|
||||
@ExcelProperty(value = "盘库计划明细ID")
|
||||
private Long relId;
|
||||
|
||||
/**
|
||||
* 差异类型:1=盘盈, 2=盘亏, 3=状态不符, 4=重量偏差
|
||||
*/
|
||||
@ExcelProperty(value = "差异类型:1=盘盈, 2=盘亏, 3=状态不符, 4=重量偏差")
|
||||
private Integer discrepancyType;
|
||||
|
||||
/**
|
||||
* 钢卷ID
|
||||
*/
|
||||
@ExcelProperty(value = "钢卷ID")
|
||||
private Long coilId;
|
||||
|
||||
/**
|
||||
* 钢卷号
|
||||
*/
|
||||
@ExcelProperty(value = "钢卷号")
|
||||
private String enterCoilNo;
|
||||
|
||||
/**
|
||||
* 差异详情(JSON:含系统值、实盘值对比)
|
||||
*/
|
||||
@ExcelProperty(value = "差异详情", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "J=SON:含系统值、实盘值对比")
|
||||
private String discrepancyDetail;
|
||||
|
||||
/**
|
||||
* 原因分析
|
||||
*/
|
||||
@ExcelProperty(value = "原因分析")
|
||||
private String reasonAnalysis;
|
||||
|
||||
/**
|
||||
* 处理建议
|
||||
*/
|
||||
@ExcelProperty(value = "处理建议")
|
||||
private String processSuggestion;
|
||||
|
||||
/**
|
||||
* 处理结果
|
||||
*/
|
||||
@ExcelProperty(value = "处理结果")
|
||||
private String processResult;
|
||||
|
||||
/**
|
||||
* 处理状态:0=待处理, 1=处理中, 2=已处理
|
||||
*/
|
||||
@ExcelProperty(value = "处理状态:0=待处理, 1=处理中, 2=已处理")
|
||||
private Integer processStatus;
|
||||
|
||||
/**
|
||||
* 处理人ID
|
||||
*/
|
||||
@ExcelProperty(value = "处理人ID")
|
||||
private Long processUserId;
|
||||
|
||||
/**
|
||||
* 处理人姓名
|
||||
*/
|
||||
@ExcelProperty(value = "处理人姓名")
|
||||
private String processUserName;
|
||||
|
||||
/**
|
||||
* 处理时间
|
||||
*/
|
||||
@ExcelProperty(value = "处理时间")
|
||||
private Date processTime;
|
||||
|
||||
/**
|
||||
* 附件文件名称集合,多文件逗号分隔,前端展示
|
||||
*/
|
||||
@ExcelProperty(value = "附件文件名称集合,多文件逗号分隔,前端展示")
|
||||
private String attachFile;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
@ExcelProperty(value = "备注")
|
||||
private String remark;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,112 @@
|
||||
package com.klp.flow.domain.vo;
|
||||
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.klp.common.annotation.ExcelDictFormat;
|
||||
import com.klp.common.convert.ExcelDictConvert;
|
||||
import lombok.Data;
|
||||
|
||||
|
||||
/**
|
||||
* 盘库计划主视图对象 inv_count_plan
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class InvCountPlanVo {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
@ExcelProperty(value = "主键ID")
|
||||
private Long planId;
|
||||
|
||||
/**
|
||||
* 盘库计划编号(如 PD-20260622-001)
|
||||
*/
|
||||
@ExcelProperty(value = "盘库计划编号", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "如=,P=D-20260622-001")
|
||||
private String planCode;
|
||||
|
||||
/**
|
||||
* 盘库计划名称
|
||||
*/
|
||||
@ExcelProperty(value = "盘库计划名称")
|
||||
private String planName;
|
||||
|
||||
/**
|
||||
* 盘库日期
|
||||
*/
|
||||
@ExcelProperty(value = "盘库日期")
|
||||
private Date countDate;
|
||||
|
||||
/**
|
||||
* 截止时间
|
||||
*/
|
||||
@ExcelProperty(value = "截止时间")
|
||||
private Date deadlineTime;
|
||||
|
||||
/**
|
||||
* 盘点人ID
|
||||
*/
|
||||
@ExcelProperty(value = "盘点人ID")
|
||||
private Long countUserId;
|
||||
|
||||
/**
|
||||
* 盘点人姓名
|
||||
*/
|
||||
@ExcelProperty(value = "盘点人姓名")
|
||||
private String countUserName;
|
||||
|
||||
/**
|
||||
* 负责人ID
|
||||
*/
|
||||
@ExcelProperty(value = "负责人ID")
|
||||
private Long principalUserId;
|
||||
|
||||
/**
|
||||
* 负责人姓名
|
||||
*/
|
||||
@ExcelProperty(value = "负责人姓名")
|
||||
private String principalUserName;
|
||||
|
||||
/**
|
||||
* 参与人员ID列表(逗号分隔)
|
||||
*/
|
||||
@ExcelProperty(value = "参与人员ID列表", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "逗=号分隔")
|
||||
private String participantIds;
|
||||
|
||||
/**
|
||||
* 参与人员姓名列表(逗号分隔)
|
||||
*/
|
||||
@ExcelProperty(value = "参与人员姓名列表", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "逗=号分隔")
|
||||
private String participantNames;
|
||||
|
||||
/**
|
||||
* 计划状态:0=草稿, 1=待审批, 2=执行中, 3=差异处理中, 4=已归档
|
||||
*/
|
||||
@ExcelProperty(value = "计划状态:0=草稿, 1=待审批, 2=执行中, 3=差异处理中, 4=已归档")
|
||||
private Integer planStatus;
|
||||
|
||||
/**
|
||||
* 附件文件名称集合,多文件逗号分隔,前端展示
|
||||
*/
|
||||
@ExcelProperty(value = "附件文件名称集合,多文件逗号分隔,前端展示")
|
||||
private String attachFile;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
@ExcelProperty(value = "备注")
|
||||
private String remark;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,141 @@
|
||||
package com.klp.flow.domain.vo;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.klp.common.annotation.ExcelDictFormat;
|
||||
import com.klp.common.convert.ExcelDictConvert;
|
||||
import lombok.Data;
|
||||
|
||||
|
||||
/**
|
||||
* 盘库计划-库区关联视图对象 inv_count_plan_warehouse
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class InvCountPlanWarehouseVo {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
@ExcelProperty(value = "主键ID")
|
||||
private Long relId;
|
||||
|
||||
/**
|
||||
* 盘库计划ID
|
||||
*/
|
||||
@ExcelProperty(value = "盘库计划ID")
|
||||
private Long planId;
|
||||
|
||||
/**
|
||||
* 逻辑库区ID
|
||||
*/
|
||||
@ExcelProperty(value = "逻辑库区ID")
|
||||
private Long warehouseId;
|
||||
|
||||
/**
|
||||
* 逻辑库区名称(冗余)
|
||||
*/
|
||||
@ExcelProperty(value = "逻辑库区名称", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "冗=余")
|
||||
private String warehouseName;
|
||||
|
||||
/**
|
||||
* 实际库区ID
|
||||
*/
|
||||
@ExcelProperty(value = "实际库区ID")
|
||||
private Long actualWarehouseId;
|
||||
|
||||
/**
|
||||
* 实际库区名称(冗余)
|
||||
*/
|
||||
@ExcelProperty(value = "实际库区名称", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "冗=余")
|
||||
private String actualWarehouseName;
|
||||
|
||||
/**
|
||||
* 系统钢卷数量
|
||||
*/
|
||||
@ExcelProperty(value = "系统钢卷数量")
|
||||
private Long systemCoilCount;
|
||||
|
||||
/**
|
||||
* 系统总重量(kg)
|
||||
*/
|
||||
@ExcelProperty(value = "系统总重量(kg)")
|
||||
private BigDecimal systemTotalWeight;
|
||||
|
||||
/**
|
||||
* 实际盘点数量
|
||||
*/
|
||||
@ExcelProperty(value = "实际盘点数量")
|
||||
private Long actualCoilCount;
|
||||
|
||||
/**
|
||||
* 实际盘点总重量(kg)
|
||||
*/
|
||||
@ExcelProperty(value = "实际盘点总重量(kg)")
|
||||
private BigDecimal actualTotalWeight;
|
||||
|
||||
/**
|
||||
* 是否账实一致(0=不一致, 1=一致, NULL=未盘点)
|
||||
*/
|
||||
@ExcelProperty(value = "是否账实一致", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "0==不一致,,1==一致,,N=ULL=未盘点")
|
||||
private Integer isConsistent;
|
||||
|
||||
/**
|
||||
* 出入库记录查询起始时间
|
||||
*/
|
||||
@ExcelProperty(value = "出入库记录查询起始时间")
|
||||
private Date ioStartTime;
|
||||
|
||||
/**
|
||||
* 出入库记录查询截止时间
|
||||
*/
|
||||
@ExcelProperty(value = "出入库记录查询截止时间")
|
||||
private Date ioEndTime;
|
||||
|
||||
/**
|
||||
* 出入库记录快照(JSON)
|
||||
*/
|
||||
@ExcelProperty(value = "出入库记录快照", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "J=SON")
|
||||
private String snapshotIoRecord;
|
||||
|
||||
/**
|
||||
* 逻辑库区钢卷明细快照(JSON)
|
||||
*/
|
||||
@ExcelProperty(value = "逻辑库区钢卷明细快照", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "J=SON")
|
||||
private String snapshotCoilLogic;
|
||||
|
||||
/**
|
||||
* 实际库区钢卷明细快照(JSON)
|
||||
*/
|
||||
@ExcelProperty(value = "实际库区钢卷明细快照", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "J=SON")
|
||||
private String snapshotCoilActual;
|
||||
|
||||
/**
|
||||
* 钢卷数量统计快照(JSON)
|
||||
*/
|
||||
@ExcelProperty(value = "钢卷数量统计快照", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "J=SON")
|
||||
private String snapshotCoilStats;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
@ExcelProperty(value = "备注")
|
||||
private String remark;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
package com.klp.flow.domain.vo;
|
||||
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.klp.common.annotation.ExcelDictFormat;
|
||||
import com.klp.common.convert.ExcelDictConvert;
|
||||
import com.klp.domain.vo.WmsMaterialCoilVo;
|
||||
import lombok.Data;
|
||||
|
||||
|
||||
/**
|
||||
* 受理单关联钢卷中间视图对象 ts_accept_coil_rel
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-18
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class TsAcceptCoilRelVo {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
@ExcelProperty(value = "")
|
||||
private Long relId;
|
||||
|
||||
/**
|
||||
* 投诉受理单ID
|
||||
*/
|
||||
@ExcelProperty(value = "投诉受理单ID")
|
||||
private Long acceptId;
|
||||
|
||||
/**
|
||||
* 钢卷ID
|
||||
*/
|
||||
@ExcelProperty(value = "钢卷ID")
|
||||
private Long coilId;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
@ExcelProperty(value = "备注")
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 关联的钢卷信息(丰富返回值)
|
||||
*/
|
||||
private WmsMaterialCoilVo coilInfo;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,111 @@
|
||||
package com.klp.flow.domain.vo;
|
||||
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.klp.common.annotation.ExcelDictFormat;
|
||||
import com.klp.common.convert.ExcelDictConvert;
|
||||
import com.klp.common.core.domain.BaseEntity;
|
||||
import lombok.Data;
|
||||
|
||||
|
||||
/**
|
||||
* 投诉受理单主视图对象 ts_complaint_accept
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-18
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class TsComplaintAcceptVo extends BaseEntity {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 受理单主键
|
||||
*/
|
||||
@ExcelProperty(value = "受理单主键")
|
||||
private Long acceptId;
|
||||
|
||||
/**
|
||||
* 投诉编号 TS-2026-001
|
||||
*/
|
||||
@ExcelProperty(value = "投诉编号 TS-2026-001")
|
||||
private String complaintNo;
|
||||
|
||||
/**
|
||||
* 投诉日期
|
||||
*/
|
||||
@ExcelProperty(value = "投诉日期")
|
||||
private Date complaintDate;
|
||||
|
||||
/**
|
||||
* 投诉情况描述
|
||||
*/
|
||||
@ExcelProperty(value = "投诉情况描述")
|
||||
private String complaintContent;
|
||||
|
||||
/**
|
||||
* 客户诉求
|
||||
*/
|
||||
@ExcelProperty(value = "客户诉求")
|
||||
private String customerDemand;
|
||||
|
||||
/**
|
||||
* 客户照片凭证等
|
||||
*/
|
||||
@ExcelProperty(value = "客户照片凭证等")
|
||||
private String file;
|
||||
|
||||
/**
|
||||
* 审核状态 0待审核 1已通过 2未通过
|
||||
*/
|
||||
@ExcelProperty(value = "审核状态 0待审核 1已通过 2未通过")
|
||||
private Long auditStatus;
|
||||
|
||||
/**
|
||||
* 审核意见
|
||||
*/
|
||||
@ExcelProperty(value = "审核意见")
|
||||
private String auditOpinion;
|
||||
|
||||
/**
|
||||
* 审核人ID
|
||||
*/
|
||||
@ExcelProperty(value = "审核人ID")
|
||||
private Long auditUserId;
|
||||
|
||||
/**
|
||||
* 审核时间
|
||||
*/
|
||||
@ExcelProperty(value = "审核时间")
|
||||
private Date auditTime;
|
||||
|
||||
/**
|
||||
* 流程阶段:
|
||||
1=待审核 2=部门意见填写中 3=待总负责人汇总方案 4=方案下发执行反馈中 5=全部办结
|
||||
*/
|
||||
@ExcelProperty(value = "流程阶段")
|
||||
private Long flowStatus;
|
||||
|
||||
/**
|
||||
* 总负责人ID
|
||||
*/
|
||||
@ExcelProperty(value = "总负责人ID")
|
||||
private Long principalUserId;
|
||||
|
||||
/**
|
||||
* 总负责人整合后的完整处理方案
|
||||
*/
|
||||
@ExcelProperty(value = "总负责人整合后的完整处理方案")
|
||||
private String planContent;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
@ExcelProperty(value = "备注")
|
||||
private String remark;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
package com.klp.flow.domain.vo;
|
||||
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.klp.common.annotation.ExcelDictFormat;
|
||||
import com.klp.common.convert.ExcelDictConvert;
|
||||
import lombok.Data;
|
||||
|
||||
|
||||
/**
|
||||
* 各部门投诉代办任务&意见视图对象 ts_complaint_task
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-18
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class TsComplaintTaskVo {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 代办任务ID
|
||||
*/
|
||||
@ExcelProperty(value = "代办任务ID")
|
||||
private Long taskId;
|
||||
|
||||
/**
|
||||
* 关联投诉受理单ID
|
||||
*/
|
||||
@ExcelProperty(value = "关联投诉受理单ID")
|
||||
private Long acceptId;
|
||||
|
||||
/**
|
||||
* 负责部门ID(销售/质量/生产)
|
||||
*/
|
||||
@ExcelProperty(value = "负责部门ID", converter = ExcelDictConvert.class)
|
||||
@ExcelDictFormat(readConverterExp = "销=售/质量/生产")
|
||||
private Long deptId;
|
||||
|
||||
/**
|
||||
* 任务状态 0待填写意见 1已完成填写
|
||||
*/
|
||||
@ExcelProperty(value = "任务状态 0待填写意见 1已完成填写")
|
||||
private Long taskStatus;
|
||||
|
||||
/**
|
||||
* 意见单号
|
||||
*/
|
||||
@ExcelProperty(value = "意见单号")
|
||||
private String fillNo;
|
||||
|
||||
/**
|
||||
* 部门处理意见
|
||||
*/
|
||||
@ExcelProperty(value = "部门处理意见")
|
||||
private String deptOpinion;
|
||||
|
||||
/**
|
||||
* 填写意见的部门员工ID
|
||||
*/
|
||||
@ExcelProperty(value = "填写意见的部门员工ID")
|
||||
private Long fillUserId;
|
||||
|
||||
/**
|
||||
* 意见填写时间
|
||||
*/
|
||||
@ExcelProperty(value = "意见填写时间")
|
||||
private Date fillTime;
|
||||
|
||||
/**
|
||||
* 意见文件
|
||||
*/
|
||||
@ExcelProperty(value = "意见文件")
|
||||
private String fillFile;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
@ExcelProperty(value = "备注")
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 关联的受理单信息
|
||||
*/
|
||||
private TsComplaintAcceptVo acceptInfo;
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
package com.klp.flow.domain.vo;
|
||||
|
||||
import java.util.Date;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
|
||||
import com.alibaba.excel.annotation.ExcelProperty;
|
||||
import com.klp.common.annotation.ExcelDictFormat;
|
||||
import com.klp.common.convert.ExcelDictConvert;
|
||||
import lombok.Data;
|
||||
|
||||
|
||||
/**
|
||||
* 最终方案下发部门及执行反馈视图对象 ts_plan_execute_rel
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-18
|
||||
*/
|
||||
@Data
|
||||
@ExcelIgnoreUnannotated
|
||||
public class TsPlanExecuteRelVo {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
@ExcelProperty(value = "")
|
||||
private Long relId;
|
||||
|
||||
/**
|
||||
* 关联最终方案ID
|
||||
*/
|
||||
@ExcelProperty(value = "关联最终方案ID")
|
||||
private Long acceptId;
|
||||
|
||||
/**
|
||||
* 被下发执行的部门ID
|
||||
*/
|
||||
@ExcelProperty(value = "被下发执行的部门ID")
|
||||
private Long deptId;
|
||||
|
||||
/**
|
||||
* 执行状态 0待执行反馈 1已反馈完成
|
||||
*/
|
||||
@ExcelProperty(value = "执行状态 0待执行反馈 1已反馈完成")
|
||||
private Long executeStatus;
|
||||
|
||||
/**
|
||||
* 部门执行结果反馈
|
||||
*/
|
||||
@ExcelProperty(value = "部门执行结果反馈")
|
||||
private String executeResult;
|
||||
|
||||
/**
|
||||
* 反馈单号
|
||||
*/
|
||||
@ExcelProperty(value = "反馈单号")
|
||||
private String feedbackNo;
|
||||
|
||||
/**
|
||||
* 反馈人
|
||||
*/
|
||||
@ExcelProperty(value = "反馈人")
|
||||
private Long feedbackUserId;
|
||||
|
||||
/**
|
||||
* 反馈时间
|
||||
*/
|
||||
@ExcelProperty(value = "反馈时间")
|
||||
private Date feedbackTime;
|
||||
|
||||
/**
|
||||
* 反馈文件
|
||||
*/
|
||||
@ExcelProperty(value = "反馈文件")
|
||||
private String feedbackFile;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
@ExcelProperty(value = "备注")
|
||||
private String remark;
|
||||
|
||||
// 受理单
|
||||
private TsComplaintAcceptVo acceptInfo;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.klp.flow.mapper;
|
||||
|
||||
import com.klp.flow.domain.InvCountDiscrepancy;
|
||||
import com.klp.flow.domain.vo.InvCountDiscrepancyVo;
|
||||
import com.klp.common.core.mapper.BaseMapperPlus;
|
||||
|
||||
/**
|
||||
* 盘库差异记录Mapper接口
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
public interface InvCountDiscrepancyMapper extends BaseMapperPlus<InvCountDiscrepancyMapper, InvCountDiscrepancy, InvCountDiscrepancyVo> {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.klp.flow.mapper;
|
||||
|
||||
import com.klp.flow.domain.InvCountPlan;
|
||||
import com.klp.flow.domain.vo.InvCountPlanVo;
|
||||
import com.klp.common.core.mapper.BaseMapperPlus;
|
||||
|
||||
/**
|
||||
* 盘库计划主Mapper接口
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
public interface InvCountPlanMapper extends BaseMapperPlus<InvCountPlanMapper, InvCountPlan, InvCountPlanVo> {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.klp.flow.mapper;
|
||||
|
||||
import com.klp.flow.domain.InvCountPlanWarehouse;
|
||||
import com.klp.flow.domain.vo.InvCountPlanWarehouseVo;
|
||||
import com.klp.common.core.mapper.BaseMapperPlus;
|
||||
|
||||
/**
|
||||
* 盘库计划-库区关联Mapper接口
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
public interface InvCountPlanWarehouseMapper extends BaseMapperPlus<InvCountPlanWarehouseMapper, InvCountPlanWarehouse, InvCountPlanWarehouseVo> {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.klp.flow.mapper;
|
||||
|
||||
import com.klp.flow.domain.TsAcceptCoilRel;
|
||||
import com.klp.flow.domain.vo.TsAcceptCoilRelVo;
|
||||
import com.klp.common.core.mapper.BaseMapperPlus;
|
||||
|
||||
/**
|
||||
* 受理单关联钢卷中间Mapper接口
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-18
|
||||
*/
|
||||
public interface TsAcceptCoilRelMapper extends BaseMapperPlus<TsAcceptCoilRelMapper, TsAcceptCoilRel, TsAcceptCoilRelVo> {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.klp.flow.mapper;
|
||||
|
||||
import com.klp.flow.domain.TsComplaintAccept;
|
||||
import com.klp.flow.domain.vo.TsComplaintAcceptVo;
|
||||
import com.klp.common.core.mapper.BaseMapperPlus;
|
||||
|
||||
/**
|
||||
* 投诉受理单主Mapper接口
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-18
|
||||
*/
|
||||
public interface TsComplaintAcceptMapper extends BaseMapperPlus<TsComplaintAcceptMapper, TsComplaintAccept, TsComplaintAcceptVo> {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.klp.flow.mapper;
|
||||
|
||||
import com.klp.flow.domain.TsComplaintTask;
|
||||
import com.klp.flow.domain.vo.TsComplaintTaskVo;
|
||||
import com.klp.common.core.mapper.BaseMapperPlus;
|
||||
|
||||
/**
|
||||
* 各部门投诉代办任务&意见Mapper接口
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-18
|
||||
*/
|
||||
public interface TsComplaintTaskMapper extends BaseMapperPlus<TsComplaintTaskMapper, TsComplaintTask, TsComplaintTaskVo> {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,15 @@
|
||||
package com.klp.flow.mapper;
|
||||
|
||||
import com.klp.flow.domain.TsPlanExecuteRel;
|
||||
import com.klp.flow.domain.vo.TsPlanExecuteRelVo;
|
||||
import com.klp.common.core.mapper.BaseMapperPlus;
|
||||
|
||||
/**
|
||||
* 最终方案下发部门及执行反馈Mapper接口
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-18
|
||||
*/
|
||||
public interface TsPlanExecuteRelMapper extends BaseMapperPlus<TsPlanExecuteRelMapper, TsPlanExecuteRel, TsPlanExecuteRelVo> {
|
||||
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package com.klp.flow.service;
|
||||
|
||||
import com.klp.flow.domain.InvCountDiscrepancy;
|
||||
import com.klp.flow.domain.vo.InvCountDiscrepancyVo;
|
||||
import com.klp.flow.domain.bo.InvCountDiscrepancyBo;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 盘库差异记录Service接口
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
public interface IInvCountDiscrepancyService {
|
||||
|
||||
/**
|
||||
* 查询盘库差异记录
|
||||
*/
|
||||
InvCountDiscrepancyVo queryById(Long discrepancyId);
|
||||
|
||||
/**
|
||||
* 查询盘库差异记录列表
|
||||
*/
|
||||
TableDataInfo<InvCountDiscrepancyVo> queryPageList(InvCountDiscrepancyBo bo, PageQuery pageQuery);
|
||||
|
||||
/**
|
||||
* 查询盘库差异记录列表
|
||||
*/
|
||||
List<InvCountDiscrepancyVo> queryList(InvCountDiscrepancyBo bo);
|
||||
|
||||
/**
|
||||
* 新增盘库差异记录
|
||||
*/
|
||||
Boolean insertByBo(InvCountDiscrepancyBo bo);
|
||||
|
||||
/**
|
||||
* 修改盘库差异记录
|
||||
*/
|
||||
Boolean updateByBo(InvCountDiscrepancyBo bo);
|
||||
|
||||
/**
|
||||
* 校验并批量删除盘库差异记录信息
|
||||
*/
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package com.klp.flow.service;
|
||||
|
||||
import com.klp.flow.domain.InvCountPlan;
|
||||
import com.klp.flow.domain.vo.InvCountPlanVo;
|
||||
import com.klp.flow.domain.bo.InvCountPlanBo;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 盘库计划主Service接口
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
public interface IInvCountPlanService {
|
||||
|
||||
/**
|
||||
* 查询盘库计划主
|
||||
*/
|
||||
InvCountPlanVo queryById(Long planId);
|
||||
|
||||
/**
|
||||
* 查询盘库计划主列表
|
||||
*/
|
||||
TableDataInfo<InvCountPlanVo> queryPageList(InvCountPlanBo bo, PageQuery pageQuery);
|
||||
|
||||
/**
|
||||
* 查询盘库计划主列表
|
||||
*/
|
||||
List<InvCountPlanVo> queryList(InvCountPlanBo bo);
|
||||
|
||||
/**
|
||||
* 新增盘库计划主
|
||||
*/
|
||||
Boolean insertByBo(InvCountPlanBo bo);
|
||||
|
||||
/**
|
||||
* 修改盘库计划主
|
||||
*/
|
||||
Boolean updateByBo(InvCountPlanBo bo);
|
||||
|
||||
/**
|
||||
* 校验并批量删除盘库计划主信息
|
||||
*/
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package com.klp.flow.service;
|
||||
|
||||
import com.klp.flow.domain.InvCountPlanWarehouse;
|
||||
import com.klp.flow.domain.vo.InvCountPlanWarehouseVo;
|
||||
import com.klp.flow.domain.bo.InvCountPlanWarehouseBo;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 盘库计划-库区关联Service接口
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
public interface IInvCountPlanWarehouseService {
|
||||
|
||||
/**
|
||||
* 查询盘库计划-库区关联
|
||||
*/
|
||||
InvCountPlanWarehouseVo queryById(Long relId);
|
||||
|
||||
/**
|
||||
* 查询盘库计划-库区关联列表
|
||||
*/
|
||||
TableDataInfo<InvCountPlanWarehouseVo> queryPageList(InvCountPlanWarehouseBo bo, PageQuery pageQuery);
|
||||
|
||||
/**
|
||||
* 查询盘库计划-库区关联列表
|
||||
*/
|
||||
List<InvCountPlanWarehouseVo> queryList(InvCountPlanWarehouseBo bo);
|
||||
|
||||
/**
|
||||
* 新增盘库计划-库区关联
|
||||
*/
|
||||
Boolean insertByBo(InvCountPlanWarehouseBo bo);
|
||||
|
||||
/**
|
||||
* 修改盘库计划-库区关联
|
||||
*/
|
||||
Boolean updateByBo(InvCountPlanWarehouseBo bo);
|
||||
|
||||
/**
|
||||
* 校验并批量删除盘库计划-库区关联信息
|
||||
*/
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package com.klp.flow.service;
|
||||
|
||||
import com.klp.flow.domain.TsAcceptCoilRel;
|
||||
import com.klp.flow.domain.vo.TsAcceptCoilRelVo;
|
||||
import com.klp.flow.domain.bo.TsAcceptCoilRelBo;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 受理单关联钢卷中间Service接口
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-18
|
||||
*/
|
||||
public interface ITsAcceptCoilRelService {
|
||||
|
||||
/**
|
||||
* 查询受理单关联钢卷中间
|
||||
*/
|
||||
TsAcceptCoilRelVo queryById(Long relId);
|
||||
|
||||
/**
|
||||
* 查询受理单关联钢卷中间列表
|
||||
*/
|
||||
TableDataInfo<TsAcceptCoilRelVo> queryPageList(TsAcceptCoilRelBo bo, PageQuery pageQuery);
|
||||
|
||||
/**
|
||||
* 查询受理单关联钢卷中间列表
|
||||
*/
|
||||
List<TsAcceptCoilRelVo> queryList(TsAcceptCoilRelBo bo);
|
||||
|
||||
/**
|
||||
* 新增受理单关联钢卷中间
|
||||
*/
|
||||
Boolean insertByBo(TsAcceptCoilRelBo bo);
|
||||
|
||||
/**
|
||||
* 修改受理单关联钢卷中间
|
||||
*/
|
||||
Boolean updateByBo(TsAcceptCoilRelBo bo);
|
||||
|
||||
/**
|
||||
* 校验并批量删除受理单关联钢卷中间信息
|
||||
*/
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
package com.klp.flow.service;
|
||||
|
||||
import com.klp.flow.domain.TsComplaintAccept;
|
||||
import com.klp.flow.domain.vo.TsComplaintAcceptVo;
|
||||
import com.klp.flow.domain.bo.TsComplaintAcceptBo;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 投诉受理单主Service接口
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-18
|
||||
*/
|
||||
public interface ITsComplaintAcceptService {
|
||||
|
||||
/**
|
||||
* 查询投诉受理单主
|
||||
*/
|
||||
TsComplaintAcceptVo queryById(Long acceptId);
|
||||
|
||||
/**
|
||||
* 查询投诉受理单主列表
|
||||
*/
|
||||
TableDataInfo<TsComplaintAcceptVo> queryPageList(TsComplaintAcceptBo bo, PageQuery pageQuery);
|
||||
|
||||
/**
|
||||
* 查询投诉受理单主列表
|
||||
*/
|
||||
List<TsComplaintAcceptVo> queryList(TsComplaintAcceptBo bo);
|
||||
|
||||
/**
|
||||
* 新增投诉受理单主
|
||||
*/
|
||||
Boolean insertByBo(TsComplaintAcceptBo bo);
|
||||
|
||||
/**
|
||||
* 修改投诉受理单主
|
||||
*/
|
||||
Boolean updateByBo(TsComplaintAcceptBo bo);
|
||||
|
||||
/**
|
||||
* 校验并批量删除投诉受理单主信息
|
||||
*/
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
|
||||
/**
|
||||
* 意见下发:修改flow_status=2,按字典flow_coil_objection部门创建代办任务
|
||||
*/
|
||||
Boolean opinionDispatch(Long acceptId);
|
||||
|
||||
/**
|
||||
* 反馈下发:修改flow_status=4,按传入部门创建执行反馈记录
|
||||
*/
|
||||
Boolean feedbackDispatch(Long acceptId, List<Long> deptIds);
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package com.klp.flow.service;
|
||||
|
||||
import com.klp.flow.domain.TsComplaintTask;
|
||||
import com.klp.flow.domain.vo.TsComplaintTaskVo;
|
||||
import com.klp.flow.domain.bo.TsComplaintTaskBo;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 各部门投诉代办任务&意见Service接口
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-18
|
||||
*/
|
||||
public interface ITsComplaintTaskService {
|
||||
|
||||
/**
|
||||
* 查询各部门投诉代办任务&意见
|
||||
*/
|
||||
TsComplaintTaskVo queryById(Long taskId);
|
||||
|
||||
/**
|
||||
* 查询各部门投诉代办任务&意见列表
|
||||
*/
|
||||
TableDataInfo<TsComplaintTaskVo> queryPageList(TsComplaintTaskBo bo, PageQuery pageQuery);
|
||||
|
||||
/**
|
||||
* 查询各部门投诉代办任务&意见列表
|
||||
*/
|
||||
List<TsComplaintTaskVo> queryList(TsComplaintTaskBo bo);
|
||||
|
||||
/**
|
||||
* 新增各部门投诉代办任务&意见
|
||||
*/
|
||||
Boolean insertByBo(TsComplaintTaskBo bo);
|
||||
|
||||
/**
|
||||
* 修改各部门投诉代办任务&意见
|
||||
*/
|
||||
Boolean updateByBo(TsComplaintTaskBo bo);
|
||||
|
||||
/**
|
||||
* 校验并批量删除各部门投诉代办任务&意见信息
|
||||
*/
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package com.klp.flow.service;
|
||||
|
||||
import com.klp.flow.domain.TsPlanExecuteRel;
|
||||
import com.klp.flow.domain.vo.TsPlanExecuteRelVo;
|
||||
import com.klp.flow.domain.bo.TsPlanExecuteRelBo;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 最终方案下发部门及执行反馈Service接口
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-18
|
||||
*/
|
||||
public interface ITsPlanExecuteRelService {
|
||||
|
||||
/**
|
||||
* 查询最终方案下发部门及执行反馈
|
||||
*/
|
||||
TsPlanExecuteRelVo queryById(Long relId);
|
||||
|
||||
/**
|
||||
* 查询最终方案下发部门及执行反馈列表
|
||||
*/
|
||||
TableDataInfo<TsPlanExecuteRelVo> queryPageList(TsPlanExecuteRelBo bo, PageQuery pageQuery);
|
||||
|
||||
/**
|
||||
* 查询最终方案下发部门及执行反馈列表
|
||||
*/
|
||||
List<TsPlanExecuteRelVo> queryList(TsPlanExecuteRelBo bo);
|
||||
|
||||
/**
|
||||
* 新增最终方案下发部门及执行反馈
|
||||
*/
|
||||
Boolean insertByBo(TsPlanExecuteRelBo bo);
|
||||
|
||||
/**
|
||||
* 修改最终方案下发部门及执行反馈
|
||||
*/
|
||||
Boolean updateByBo(TsPlanExecuteRelBo bo);
|
||||
|
||||
/**
|
||||
* 校验并批量删除最终方案下发部门及执行反馈信息
|
||||
*/
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
package com.klp.flow.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.klp.common.utils.StringUtils;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.klp.flow.domain.bo.InvCountDiscrepancyBo;
|
||||
import com.klp.flow.domain.vo.InvCountDiscrepancyVo;
|
||||
import com.klp.flow.domain.InvCountDiscrepancy;
|
||||
import com.klp.flow.mapper.InvCountDiscrepancyMapper;
|
||||
import com.klp.flow.service.IInvCountDiscrepancyService;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* 盘库差异记录Service业务层处理
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class InvCountDiscrepancyServiceImpl implements IInvCountDiscrepancyService {
|
||||
|
||||
private final InvCountDiscrepancyMapper baseMapper;
|
||||
|
||||
/**
|
||||
* 查询盘库差异记录
|
||||
*/
|
||||
@Override
|
||||
public InvCountDiscrepancyVo queryById(Long discrepancyId){
|
||||
return baseMapper.selectVoById(discrepancyId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询盘库差异记录列表
|
||||
*/
|
||||
@Override
|
||||
public TableDataInfo<InvCountDiscrepancyVo> queryPageList(InvCountDiscrepancyBo bo, PageQuery pageQuery) {
|
||||
LambdaQueryWrapper<InvCountDiscrepancy> lqw = buildQueryWrapper(bo);
|
||||
Page<InvCountDiscrepancyVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询盘库差异记录列表
|
||||
*/
|
||||
@Override
|
||||
public List<InvCountDiscrepancyVo> queryList(InvCountDiscrepancyBo bo) {
|
||||
LambdaQueryWrapper<InvCountDiscrepancy> lqw = buildQueryWrapper(bo);
|
||||
return baseMapper.selectVoList(lqw);
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<InvCountDiscrepancy> buildQueryWrapper(InvCountDiscrepancyBo bo) {
|
||||
Map<String, Object> params = bo.getParams();
|
||||
LambdaQueryWrapper<InvCountDiscrepancy> lqw = Wrappers.lambdaQuery();
|
||||
lqw.eq(bo.getRelId() != null, InvCountDiscrepancy::getRelId, bo.getRelId());
|
||||
lqw.eq(bo.getDiscrepancyType() != null, InvCountDiscrepancy::getDiscrepancyType, bo.getDiscrepancyType());
|
||||
lqw.eq(bo.getCoilId() != null, InvCountDiscrepancy::getCoilId, bo.getCoilId());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getEnterCoilNo()), InvCountDiscrepancy::getEnterCoilNo, bo.getEnterCoilNo());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getDiscrepancyDetail()), InvCountDiscrepancy::getDiscrepancyDetail, bo.getDiscrepancyDetail());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getReasonAnalysis()), InvCountDiscrepancy::getReasonAnalysis, bo.getReasonAnalysis());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getProcessSuggestion()), InvCountDiscrepancy::getProcessSuggestion, bo.getProcessSuggestion());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getProcessResult()), InvCountDiscrepancy::getProcessResult, bo.getProcessResult());
|
||||
lqw.eq(bo.getProcessStatus() != null, InvCountDiscrepancy::getProcessStatus, bo.getProcessStatus());
|
||||
lqw.eq(bo.getProcessUserId() != null, InvCountDiscrepancy::getProcessUserId, bo.getProcessUserId());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getProcessUserName()), InvCountDiscrepancy::getProcessUserName, bo.getProcessUserName());
|
||||
lqw.eq(bo.getProcessTime() != null, InvCountDiscrepancy::getProcessTime, bo.getProcessTime());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getAttachFile()), InvCountDiscrepancy::getAttachFile, bo.getAttachFile());
|
||||
return lqw;
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增盘库差异记录
|
||||
*/
|
||||
@Override
|
||||
public Boolean insertByBo(InvCountDiscrepancyBo bo) {
|
||||
InvCountDiscrepancy add = BeanUtil.toBean(bo, InvCountDiscrepancy.class);
|
||||
validEntityBeforeSave(add);
|
||||
boolean flag = baseMapper.insert(add) > 0;
|
||||
if (flag) {
|
||||
bo.setDiscrepancyId(add.getDiscrepancyId());
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改盘库差异记录
|
||||
*/
|
||||
@Override
|
||||
public Boolean updateByBo(InvCountDiscrepancyBo bo) {
|
||||
InvCountDiscrepancy update = BeanUtil.toBean(bo, InvCountDiscrepancy.class);
|
||||
validEntityBeforeSave(update);
|
||||
return baseMapper.updateById(update) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存前的数据校验
|
||||
*/
|
||||
private void validEntityBeforeSave(InvCountDiscrepancy entity){
|
||||
//TODO 做一些数据校验,如唯一约束
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除盘库差异记录
|
||||
*/
|
||||
@Override
|
||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||
if(isValid){
|
||||
//TODO 做一些业务上的校验,判断是否需要校验
|
||||
}
|
||||
return baseMapper.deleteBatchIds(ids) > 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,120 @@
|
||||
package com.klp.flow.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.klp.common.utils.StringUtils;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.klp.flow.domain.bo.InvCountPlanBo;
|
||||
import com.klp.flow.domain.vo.InvCountPlanVo;
|
||||
import com.klp.flow.domain.InvCountPlan;
|
||||
import com.klp.flow.mapper.InvCountPlanMapper;
|
||||
import com.klp.flow.service.IInvCountPlanService;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* 盘库计划主Service业务层处理
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class InvCountPlanServiceImpl implements IInvCountPlanService {
|
||||
|
||||
private final InvCountPlanMapper baseMapper;
|
||||
|
||||
/**
|
||||
* 查询盘库计划主
|
||||
*/
|
||||
@Override
|
||||
public InvCountPlanVo queryById(Long planId){
|
||||
return baseMapper.selectVoById(planId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询盘库计划主列表
|
||||
*/
|
||||
@Override
|
||||
public TableDataInfo<InvCountPlanVo> queryPageList(InvCountPlanBo bo, PageQuery pageQuery) {
|
||||
LambdaQueryWrapper<InvCountPlan> lqw = buildQueryWrapper(bo);
|
||||
Page<InvCountPlanVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询盘库计划主列表
|
||||
*/
|
||||
@Override
|
||||
public List<InvCountPlanVo> queryList(InvCountPlanBo bo) {
|
||||
LambdaQueryWrapper<InvCountPlan> lqw = buildQueryWrapper(bo);
|
||||
return baseMapper.selectVoList(lqw);
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<InvCountPlan> buildQueryWrapper(InvCountPlanBo bo) {
|
||||
Map<String, Object> params = bo.getParams();
|
||||
LambdaQueryWrapper<InvCountPlan> lqw = Wrappers.lambdaQuery();
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getPlanCode()), InvCountPlan::getPlanCode, bo.getPlanCode());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getPlanName()), InvCountPlan::getPlanName, bo.getPlanName());
|
||||
lqw.eq(bo.getCountDate() != null, InvCountPlan::getCountDate, bo.getCountDate());
|
||||
lqw.eq(bo.getDeadlineTime() != null, InvCountPlan::getDeadlineTime, bo.getDeadlineTime());
|
||||
lqw.eq(bo.getCountUserId() != null, InvCountPlan::getCountUserId, bo.getCountUserId());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getCountUserName()), InvCountPlan::getCountUserName, bo.getCountUserName());
|
||||
lqw.eq(bo.getPrincipalUserId() != null, InvCountPlan::getPrincipalUserId, bo.getPrincipalUserId());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getPrincipalUserName()), InvCountPlan::getPrincipalUserName, bo.getPrincipalUserName());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getParticipantIds()), InvCountPlan::getParticipantIds, bo.getParticipantIds());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getParticipantNames()), InvCountPlan::getParticipantNames, bo.getParticipantNames());
|
||||
lqw.eq(bo.getPlanStatus() != null, InvCountPlan::getPlanStatus, bo.getPlanStatus());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getAttachFile()), InvCountPlan::getAttachFile, bo.getAttachFile());
|
||||
return lqw;
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增盘库计划主
|
||||
*/
|
||||
@Override
|
||||
public Boolean insertByBo(InvCountPlanBo bo) {
|
||||
InvCountPlan add = BeanUtil.toBean(bo, InvCountPlan.class);
|
||||
validEntityBeforeSave(add);
|
||||
boolean flag = baseMapper.insert(add) > 0;
|
||||
if (flag) {
|
||||
bo.setPlanId(add.getPlanId());
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改盘库计划主
|
||||
*/
|
||||
@Override
|
||||
public Boolean updateByBo(InvCountPlanBo bo) {
|
||||
InvCountPlan update = BeanUtil.toBean(bo, InvCountPlan.class);
|
||||
validEntityBeforeSave(update);
|
||||
return baseMapper.updateById(update) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存前的数据校验
|
||||
*/
|
||||
private void validEntityBeforeSave(InvCountPlan entity){
|
||||
//TODO 做一些数据校验,如唯一约束
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除盘库计划主
|
||||
*/
|
||||
@Override
|
||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||
if(isValid){
|
||||
//TODO 做一些业务上的校验,判断是否需要校验
|
||||
}
|
||||
return baseMapper.deleteBatchIds(ids) > 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
package com.klp.flow.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.klp.common.utils.StringUtils;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.klp.flow.domain.bo.InvCountPlanWarehouseBo;
|
||||
import com.klp.flow.domain.vo.InvCountPlanWarehouseVo;
|
||||
import com.klp.flow.domain.InvCountPlanWarehouse;
|
||||
import com.klp.flow.mapper.InvCountPlanWarehouseMapper;
|
||||
import com.klp.flow.service.IInvCountPlanWarehouseService;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* 盘库计划-库区关联Service业务层处理
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-22
|
||||
*/
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class InvCountPlanWarehouseServiceImpl implements IInvCountPlanWarehouseService {
|
||||
|
||||
private final InvCountPlanWarehouseMapper baseMapper;
|
||||
|
||||
/**
|
||||
* 查询盘库计划-库区关联
|
||||
*/
|
||||
@Override
|
||||
public InvCountPlanWarehouseVo queryById(Long relId){
|
||||
return baseMapper.selectVoById(relId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询盘库计划-库区关联列表
|
||||
*/
|
||||
@Override
|
||||
public TableDataInfo<InvCountPlanWarehouseVo> queryPageList(InvCountPlanWarehouseBo bo, PageQuery pageQuery) {
|
||||
LambdaQueryWrapper<InvCountPlanWarehouse> lqw = buildQueryWrapper(bo);
|
||||
Page<InvCountPlanWarehouseVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询盘库计划-库区关联列表
|
||||
*/
|
||||
@Override
|
||||
public List<InvCountPlanWarehouseVo> queryList(InvCountPlanWarehouseBo bo) {
|
||||
LambdaQueryWrapper<InvCountPlanWarehouse> lqw = buildQueryWrapper(bo);
|
||||
return baseMapper.selectVoList(lqw);
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<InvCountPlanWarehouse> buildQueryWrapper(InvCountPlanWarehouseBo bo) {
|
||||
Map<String, Object> params = bo.getParams();
|
||||
LambdaQueryWrapper<InvCountPlanWarehouse> lqw = Wrappers.lambdaQuery();
|
||||
lqw.eq(bo.getPlanId() != null, InvCountPlanWarehouse::getPlanId, bo.getPlanId());
|
||||
lqw.eq(bo.getWarehouseId() != null, InvCountPlanWarehouse::getWarehouseId, bo.getWarehouseId());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getWarehouseName()), InvCountPlanWarehouse::getWarehouseName, bo.getWarehouseName());
|
||||
lqw.eq(bo.getActualWarehouseId() != null, InvCountPlanWarehouse::getActualWarehouseId, bo.getActualWarehouseId());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getActualWarehouseName()), InvCountPlanWarehouse::getActualWarehouseName, bo.getActualWarehouseName());
|
||||
lqw.eq(bo.getSystemCoilCount() != null, InvCountPlanWarehouse::getSystemCoilCount, bo.getSystemCoilCount());
|
||||
lqw.eq(bo.getSystemTotalWeight() != null, InvCountPlanWarehouse::getSystemTotalWeight, bo.getSystemTotalWeight());
|
||||
lqw.eq(bo.getActualCoilCount() != null, InvCountPlanWarehouse::getActualCoilCount, bo.getActualCoilCount());
|
||||
lqw.eq(bo.getActualTotalWeight() != null, InvCountPlanWarehouse::getActualTotalWeight, bo.getActualTotalWeight());
|
||||
lqw.eq(bo.getIsConsistent() != null, InvCountPlanWarehouse::getIsConsistent, bo.getIsConsistent());
|
||||
lqw.eq(bo.getIoStartTime() != null, InvCountPlanWarehouse::getIoStartTime, bo.getIoStartTime());
|
||||
lqw.eq(bo.getIoEndTime() != null, InvCountPlanWarehouse::getIoEndTime, bo.getIoEndTime());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getSnapshotIoRecord()), InvCountPlanWarehouse::getSnapshotIoRecord, bo.getSnapshotIoRecord());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getSnapshotCoilLogic()), InvCountPlanWarehouse::getSnapshotCoilLogic, bo.getSnapshotCoilLogic());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getSnapshotCoilActual()), InvCountPlanWarehouse::getSnapshotCoilActual, bo.getSnapshotCoilActual());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getSnapshotCoilStats()), InvCountPlanWarehouse::getSnapshotCoilStats, bo.getSnapshotCoilStats());
|
||||
return lqw;
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增盘库计划-库区关联
|
||||
*/
|
||||
@Override
|
||||
public Boolean insertByBo(InvCountPlanWarehouseBo bo) {
|
||||
InvCountPlanWarehouse add = BeanUtil.toBean(bo, InvCountPlanWarehouse.class);
|
||||
validEntityBeforeSave(add);
|
||||
boolean flag = baseMapper.insert(add) > 0;
|
||||
if (flag) {
|
||||
bo.setRelId(add.getRelId());
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改盘库计划-库区关联
|
||||
*/
|
||||
@Override
|
||||
public Boolean updateByBo(InvCountPlanWarehouseBo bo) {
|
||||
InvCountPlanWarehouse update = BeanUtil.toBean(bo, InvCountPlanWarehouse.class);
|
||||
validEntityBeforeSave(update);
|
||||
return baseMapper.updateById(update) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存前的数据校验
|
||||
*/
|
||||
private void validEntityBeforeSave(InvCountPlanWarehouse entity){
|
||||
//TODO 做一些数据校验,如唯一约束
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除盘库计划-库区关联
|
||||
*/
|
||||
@Override
|
||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||
if(isValid){
|
||||
//TODO 做一些业务上的校验,判断是否需要校验
|
||||
}
|
||||
return baseMapper.deleteBatchIds(ids) > 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,170 @@
|
||||
package com.klp.flow.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.klp.domain.WmsMaterialCoil;
|
||||
import com.klp.domain.vo.WmsMaterialCoilVo;
|
||||
import com.klp.domain.vo.WmsCoilContractRelVo;
|
||||
import com.klp.flow.domain.bo.TsAcceptCoilRelBo;
|
||||
import com.klp.flow.domain.vo.TsAcceptCoilRelVo;
|
||||
import com.klp.flow.domain.TsAcceptCoilRel;
|
||||
import com.klp.flow.mapper.TsAcceptCoilRelMapper;
|
||||
import com.klp.flow.service.ITsAcceptCoilRelService;
|
||||
import com.klp.mapper.WmsMaterialCoilMapper;
|
||||
import com.klp.mapper.WmsCoilContractRelMapper;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 受理单关联钢卷中间Service业务层处理
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-18
|
||||
*/
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class TsAcceptCoilRelServiceImpl implements ITsAcceptCoilRelService {
|
||||
|
||||
private final TsAcceptCoilRelMapper baseMapper;
|
||||
private final WmsMaterialCoilMapper wmsMaterialCoilMapper;
|
||||
private final WmsCoilContractRelMapper wmsCoilContractRelMapper;
|
||||
|
||||
/**
|
||||
* 查询受理单关联钢卷中间
|
||||
*/
|
||||
@Override
|
||||
public TsAcceptCoilRelVo queryById(Long relId){
|
||||
TsAcceptCoilRelVo vo = baseMapper.selectVoById(relId);
|
||||
if (vo != null) {
|
||||
enrichWithCoilInfo(Collections.singletonList(vo));
|
||||
}
|
||||
return vo;
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询受理单关联钢卷中间列表
|
||||
*/
|
||||
@Override
|
||||
public TableDataInfo<TsAcceptCoilRelVo> queryPageList(TsAcceptCoilRelBo bo, PageQuery pageQuery) {
|
||||
LambdaQueryWrapper<TsAcceptCoilRel> lqw = buildQueryWrapper(bo);
|
||||
Page<TsAcceptCoilRelVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
enrichWithCoilInfo(result.getRecords());
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询受理单关联钢卷中间列表
|
||||
*/
|
||||
@Override
|
||||
public List<TsAcceptCoilRelVo> queryList(TsAcceptCoilRelBo bo) {
|
||||
LambdaQueryWrapper<TsAcceptCoilRel> lqw = buildQueryWrapper(bo);
|
||||
List<TsAcceptCoilRelVo> list = baseMapper.selectVoList(lqw);
|
||||
enrichWithCoilInfo(list);
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据关联表中的coilId批量查询钢卷信息,并填充到VO中
|
||||
* 同时批量查询钢卷关联的合同/订单信息
|
||||
*/
|
||||
private void enrichWithCoilInfo(List<TsAcceptCoilRelVo> voList) {
|
||||
if (voList == null || voList.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
// 收集所有coilId(去重)
|
||||
List<Long> coilIds = voList.stream()
|
||||
.map(TsAcceptCoilRelVo::getCoilId)
|
||||
.filter(id -> id != null)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
if (coilIds.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
// 批量查询钢卷信息
|
||||
QueryWrapper<WmsMaterialCoil> qw = new QueryWrapper<>();
|
||||
qw.in("mc.coil_id", coilIds);
|
||||
qw.eq("mc.del_flag", 0);
|
||||
qw.orderByDesc("mc.create_time");
|
||||
List<WmsMaterialCoilVo> coilList = wmsMaterialCoilMapper.selectVoListWithDynamicJoin(qw);
|
||||
// 按coilId建立索引
|
||||
Map<Long, WmsMaterialCoilVo> coilMap = coilList.stream()
|
||||
.collect(Collectors.toMap(WmsMaterialCoilVo::getCoilId, c -> c, (a, b) -> a));
|
||||
// 批量查询钢卷关联的合同/订单信息(一次SQL,JOIN crm_order)
|
||||
List<WmsCoilContractRelVo> allOrderList = wmsCoilContractRelMapper.selectOrdersByCoilIds(coilIds);
|
||||
// 按coilId分组
|
||||
Map<Long, List<WmsCoilContractRelVo>> orderMap = allOrderList.stream()
|
||||
.collect(Collectors.groupingBy(WmsCoilContractRelVo::getCoilId));
|
||||
// 填充到VO中
|
||||
for (TsAcceptCoilRelVo vo : voList) {
|
||||
if (vo.getCoilId() != null) {
|
||||
WmsMaterialCoilVo coilInfo = coilMap.get(vo.getCoilId());
|
||||
if (coilInfo != null) {
|
||||
// 填充合同/订单列表
|
||||
coilInfo.setOrderList(orderMap.get(vo.getCoilId()));
|
||||
}
|
||||
vo.setCoilInfo(coilInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<TsAcceptCoilRel> buildQueryWrapper(TsAcceptCoilRelBo bo) {
|
||||
Map<String, Object> params = bo.getParams();
|
||||
LambdaQueryWrapper<TsAcceptCoilRel> lqw = Wrappers.lambdaQuery();
|
||||
lqw.eq(bo.getAcceptId() != null, TsAcceptCoilRel::getAcceptId, bo.getAcceptId());
|
||||
lqw.eq(bo.getCoilId() != null, TsAcceptCoilRel::getCoilId, bo.getCoilId());
|
||||
return lqw;
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增受理单关联钢卷中间
|
||||
*/
|
||||
@Override
|
||||
public Boolean insertByBo(TsAcceptCoilRelBo bo) {
|
||||
TsAcceptCoilRel add = BeanUtil.toBean(bo, TsAcceptCoilRel.class);
|
||||
validEntityBeforeSave(add);
|
||||
boolean flag = baseMapper.insert(add) > 0;
|
||||
if (flag) {
|
||||
bo.setRelId(add.getRelId());
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改受理单关联钢卷中间
|
||||
*/
|
||||
@Override
|
||||
public Boolean updateByBo(TsAcceptCoilRelBo bo) {
|
||||
TsAcceptCoilRel update = BeanUtil.toBean(bo, TsAcceptCoilRel.class);
|
||||
validEntityBeforeSave(update);
|
||||
return baseMapper.updateById(update) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存前的数据校验
|
||||
*/
|
||||
private void validEntityBeforeSave(TsAcceptCoilRel entity){
|
||||
//TODO 做一些数据校验,如唯一约束
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除受理单关联钢卷中间
|
||||
*/
|
||||
@Override
|
||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||
if(isValid){
|
||||
//TODO 做一些业务上的校验,判断是否需要校验
|
||||
}
|
||||
return baseMapper.deleteBatchIds(ids) > 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,204 @@
|
||||
package com.klp.flow.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.klp.common.core.domain.entity.SysDictData;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.klp.common.core.domain.entity.SysDictData;
|
||||
import com.klp.common.utils.StringUtils;
|
||||
import com.klp.system.service.ISysDictDataService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.klp.flow.domain.bo.TsComplaintAcceptBo;
|
||||
import com.klp.flow.domain.vo.TsComplaintAcceptVo;
|
||||
import com.klp.flow.domain.TsComplaintAccept;
|
||||
import com.klp.flow.domain.TsComplaintTask;
|
||||
import com.klp.flow.domain.TsPlanExecuteRel;
|
||||
import com.klp.flow.domain.TsAcceptCoilRel;
|
||||
import com.klp.flow.mapper.TsComplaintAcceptMapper;
|
||||
import com.klp.flow.mapper.TsComplaintTaskMapper;
|
||||
import com.klp.flow.mapper.TsPlanExecuteRelMapper;
|
||||
import com.klp.flow.mapper.TsAcceptCoilRelMapper;
|
||||
import com.klp.flow.service.ITsComplaintAcceptService;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* 投诉受理单主Service业务层处理
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-18
|
||||
*/
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class TsComplaintAcceptServiceImpl implements ITsComplaintAcceptService {
|
||||
|
||||
private final TsComplaintAcceptMapper baseMapper;
|
||||
|
||||
private final TsComplaintTaskMapper tsComplaintTaskMapper;
|
||||
|
||||
private final TsPlanExecuteRelMapper tsPlanExecuteRelMapper;
|
||||
|
||||
private final TsAcceptCoilRelMapper tsAcceptCoilRelMapper;
|
||||
|
||||
private final ISysDictDataService sysDictDataService;
|
||||
|
||||
/**
|
||||
* 查询投诉受理单主
|
||||
*/
|
||||
@Override
|
||||
public TsComplaintAcceptVo queryById(Long acceptId){
|
||||
return baseMapper.selectVoById(acceptId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询投诉受理单主列表
|
||||
*/
|
||||
@Override
|
||||
public TableDataInfo<TsComplaintAcceptVo> queryPageList(TsComplaintAcceptBo bo, PageQuery pageQuery) {
|
||||
LambdaQueryWrapper<TsComplaintAccept> lqw = buildQueryWrapper(bo);
|
||||
Page<TsComplaintAcceptVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询投诉受理单主列表
|
||||
*/
|
||||
@Override
|
||||
public List<TsComplaintAcceptVo> queryList(TsComplaintAcceptBo bo) {
|
||||
LambdaQueryWrapper<TsComplaintAccept> lqw = buildQueryWrapper(bo);
|
||||
return baseMapper.selectVoList(lqw);
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<TsComplaintAccept> buildQueryWrapper(TsComplaintAcceptBo bo) {
|
||||
Map<String, Object> params = bo.getParams();
|
||||
LambdaQueryWrapper<TsComplaintAccept> lqw = Wrappers.lambdaQuery();
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getComplaintNo()), TsComplaintAccept::getComplaintNo, bo.getComplaintNo());
|
||||
lqw.eq(bo.getComplaintDate() != null, TsComplaintAccept::getComplaintDate, bo.getComplaintDate());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getComplaintContent()), TsComplaintAccept::getComplaintContent, bo.getComplaintContent());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getCustomerDemand()), TsComplaintAccept::getCustomerDemand, bo.getCustomerDemand());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getFile()), TsComplaintAccept::getFile, bo.getFile());
|
||||
lqw.eq(bo.getAuditStatus() != null, TsComplaintAccept::getAuditStatus, bo.getAuditStatus());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getAuditOpinion()), TsComplaintAccept::getAuditOpinion, bo.getAuditOpinion());
|
||||
lqw.eq(bo.getAuditUserId() != null, TsComplaintAccept::getAuditUserId, bo.getAuditUserId());
|
||||
lqw.eq(bo.getAuditTime() != null, TsComplaintAccept::getAuditTime, bo.getAuditTime());
|
||||
lqw.eq(bo.getFlowStatus() != null, TsComplaintAccept::getFlowStatus, bo.getFlowStatus());
|
||||
lqw.eq(bo.getPrincipalUserId() != null, TsComplaintAccept::getPrincipalUserId, bo.getPrincipalUserId());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getPlanContent()), TsComplaintAccept::getPlanContent, bo.getPlanContent());
|
||||
lqw.in(bo.getAcceptIds() != null && !bo.getAcceptIds().isEmpty(), TsComplaintAccept::getAcceptId, bo.getAcceptIds());
|
||||
return lqw;
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增投诉受理单主
|
||||
*/
|
||||
@Override
|
||||
public Boolean insertByBo(TsComplaintAcceptBo bo) {
|
||||
TsComplaintAccept add = BeanUtil.toBean(bo, TsComplaintAccept.class);
|
||||
validEntityBeforeSave(add);
|
||||
boolean flag = baseMapper.insert(add) > 0;
|
||||
if (flag) {
|
||||
bo.setAcceptId(add.getAcceptId());
|
||||
// 批量插入关联钢卷
|
||||
if (bo.getCoilIds() != null && !bo.getCoilIds().isEmpty()) {
|
||||
List<TsAcceptCoilRel> relList = bo.getCoilIds().stream().map(coilId -> {
|
||||
TsAcceptCoilRel rel = new TsAcceptCoilRel();
|
||||
rel.setAcceptId(add.getAcceptId());
|
||||
rel.setCoilId(coilId);
|
||||
return rel;
|
||||
}).collect(java.util.stream.Collectors.toList());
|
||||
tsAcceptCoilRelMapper.insertBatch(relList);
|
||||
}
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改投诉受理单主
|
||||
*/
|
||||
@Override
|
||||
public Boolean updateByBo(TsComplaintAcceptBo bo) {
|
||||
TsComplaintAccept update = BeanUtil.toBean(bo, TsComplaintAccept.class);
|
||||
validEntityBeforeSave(update);
|
||||
return baseMapper.updateById(update) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 意见下发
|
||||
* 修改受理单flow_status=2,按字典flow_coil_objection的部门创建代办任务
|
||||
*/
|
||||
@Override
|
||||
public Boolean opinionDispatch(Long acceptId) {
|
||||
if (acceptId == null) {
|
||||
return false;
|
||||
}
|
||||
// 从sys_dict_data直查,根据dict_type=flow_coil_objection获取部门ID列表
|
||||
List<SysDictData> dictList = sysDictDataService.selectDictDataByTypeRealtime("flow_coil_objection");
|
||||
if (dictList == null || dictList.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
// 更新受理单流程状态为2(部门意见填写中)
|
||||
LambdaUpdateWrapper<TsComplaintAccept> uw = Wrappers.lambdaUpdate();
|
||||
uw.eq(TsComplaintAccept::getAcceptId, acceptId)
|
||||
.set(TsComplaintAccept::getFlowStatus, 2L);
|
||||
baseMapper.update(null, uw);
|
||||
// 按部门创建代办任务
|
||||
for (SysDictData dict : dictList) {
|
||||
TsComplaintTask task = new TsComplaintTask();
|
||||
task.setAcceptId(acceptId);
|
||||
task.setDeptId(Long.valueOf(dict.getDictValue()));
|
||||
task.setTaskStatus(0L);
|
||||
tsComplaintTaskMapper.insert(task);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 反馈下发
|
||||
* 修改受理单flow_status=4,按传入部门创建执行反馈记录
|
||||
*/
|
||||
@Override
|
||||
public Boolean feedbackDispatch(Long acceptId, List<Long> deptIds) {
|
||||
if (acceptId == null || deptIds == null || deptIds.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
// 更新受理单流程状态为4(方案下发执行反馈中)
|
||||
LambdaUpdateWrapper<TsComplaintAccept> uw = Wrappers.lambdaUpdate();
|
||||
uw.eq(TsComplaintAccept::getAcceptId, acceptId)
|
||||
.set(TsComplaintAccept::getFlowStatus, 4L);
|
||||
baseMapper.update(null, uw);
|
||||
// 按部门创建执行反馈记录
|
||||
for (Long deptId : deptIds) {
|
||||
TsPlanExecuteRel rel = new TsPlanExecuteRel();
|
||||
rel.setAcceptId(acceptId);
|
||||
rel.setDeptId(deptId);
|
||||
rel.setExecuteStatus(0L);
|
||||
tsPlanExecuteRelMapper.insert(rel);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存前的数据校验
|
||||
*/
|
||||
private void validEntityBeforeSave(TsComplaintAccept entity){
|
||||
//TODO 做一些数据校验,如唯一约束
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除投诉受理单主
|
||||
*/
|
||||
@Override
|
||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||
if(isValid){
|
||||
//TODO 做一些业务上的校验,判断是否需要校验
|
||||
}
|
||||
return baseMapper.deleteBatchIds(ids) > 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,194 @@
|
||||
package com.klp.flow.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.klp.common.utils.StringUtils;
|
||||
import com.klp.flow.domain.TsComplaintAccept;
|
||||
import com.klp.flow.domain.vo.TsComplaintAcceptVo;
|
||||
import com.klp.flow.mapper.TsComplaintAcceptMapper;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.klp.flow.domain.bo.TsComplaintTaskBo;
|
||||
import com.klp.flow.domain.vo.TsComplaintTaskVo;
|
||||
import com.klp.flow.domain.TsComplaintTask;
|
||||
import com.klp.flow.mapper.TsComplaintTaskMapper;
|
||||
import com.klp.flow.service.ITsComplaintTaskService;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Collection;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 各部门投诉代办任务&意见Service业务层处理
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-18
|
||||
*/
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class TsComplaintTaskServiceImpl implements ITsComplaintTaskService {
|
||||
|
||||
private final TsComplaintTaskMapper baseMapper;
|
||||
|
||||
private final TsComplaintAcceptMapper tsComplaintAcceptMapper;
|
||||
|
||||
/**
|
||||
* 查询各部门投诉代办任务&意见
|
||||
*/
|
||||
@Override
|
||||
public TsComplaintTaskVo queryById(Long taskId){
|
||||
TsComplaintTaskVo vo = baseMapper.selectVoById(taskId);
|
||||
if (vo != null) {
|
||||
enrichWithAcceptInfo(Collections.singletonList(vo));
|
||||
}
|
||||
return vo;
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询各部门投诉代办任务&意见列表
|
||||
*/
|
||||
@Override
|
||||
public TableDataInfo<TsComplaintTaskVo> queryPageList(TsComplaintTaskBo bo, PageQuery pageQuery) {
|
||||
LambdaQueryWrapper<TsComplaintTask> lqw = buildQueryWrapper(bo);
|
||||
Page<TsComplaintTaskVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
enrichWithAcceptInfo(result.getRecords());
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询各部门投诉代办任务&意见列表
|
||||
*/
|
||||
@Override
|
||||
public List<TsComplaintTaskVo> queryList(TsComplaintTaskBo bo) {
|
||||
LambdaQueryWrapper<TsComplaintTask> lqw = buildQueryWrapper(bo);
|
||||
List<TsComplaintTaskVo> list = baseMapper.selectVoList(lqw);
|
||||
enrichWithAcceptInfo(list);
|
||||
return list;
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量查询受理单信息并填充到VO中
|
||||
*/
|
||||
private void enrichWithAcceptInfo(List<TsComplaintTaskVo> voList) {
|
||||
if (CollUtil.isEmpty(voList)) {
|
||||
return;
|
||||
}
|
||||
// 收集所有acceptId(去重)
|
||||
List<Long> acceptIds = voList.stream()
|
||||
.map(TsComplaintTaskVo::getAcceptId)
|
||||
.filter(id -> id != null)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
if (acceptIds.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
// 批量查询受理单信息
|
||||
List<TsComplaintAcceptVo> acceptList = tsComplaintAcceptMapper.selectVoBatchIds(acceptIds);
|
||||
// 按acceptId建立索引
|
||||
Map<Long, TsComplaintAcceptVo> acceptMap = acceptList.stream()
|
||||
.collect(Collectors.toMap(TsComplaintAcceptVo::getAcceptId, a -> a, (a, b) -> a));
|
||||
// 填充到VO中
|
||||
for (TsComplaintTaskVo vo : voList) {
|
||||
if (vo.getAcceptId() != null) {
|
||||
vo.setAcceptInfo(acceptMap.get(vo.getAcceptId()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<TsComplaintTask> buildQueryWrapper(TsComplaintTaskBo bo) {
|
||||
Map<String, Object> params = bo.getParams();
|
||||
LambdaQueryWrapper<TsComplaintTask> lqw = Wrappers.lambdaQuery();
|
||||
lqw.eq(bo.getAcceptId() != null, TsComplaintTask::getAcceptId, bo.getAcceptId());
|
||||
lqw.eq(bo.getDeptId() != null, TsComplaintTask::getDeptId, bo.getDeptId());
|
||||
lqw.eq(bo.getTaskStatus() != null, TsComplaintTask::getTaskStatus, bo.getTaskStatus());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getFillNo()), TsComplaintTask::getFillNo, bo.getFillNo());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getDeptOpinion()), TsComplaintTask::getDeptOpinion, bo.getDeptOpinion());
|
||||
lqw.eq(bo.getFillUserId() != null, TsComplaintTask::getFillUserId, bo.getFillUserId());
|
||||
lqw.eq(bo.getFillTime() != null, TsComplaintTask::getFillTime, bo.getFillTime());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getFillFile()), TsComplaintTask::getFillFile, bo.getFillFile());
|
||||
return lqw;
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增各部门投诉代办任务&意见
|
||||
*/
|
||||
@Override
|
||||
public Boolean insertByBo(TsComplaintTaskBo bo) {
|
||||
TsComplaintTask add = BeanUtil.toBean(bo, TsComplaintTask.class);
|
||||
validEntityBeforeSave(add);
|
||||
boolean flag = baseMapper.insert(add) > 0;
|
||||
if (flag) {
|
||||
bo.setTaskId(add.getTaskId());
|
||||
// 同步受理单流程状态
|
||||
syncAcceptFlowStatus(add.getAcceptId());
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改各部门投诉代办任务&意见
|
||||
*/
|
||||
@Override
|
||||
public Boolean updateByBo(TsComplaintTaskBo bo) {
|
||||
TsComplaintTask update = BeanUtil.toBean(bo, TsComplaintTask.class);
|
||||
validEntityBeforeSave(update);
|
||||
boolean flag = baseMapper.updateById(update) > 0;
|
||||
if (flag){
|
||||
syncAcceptFlowStatus(update.getAcceptId());
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* 同步受理单流程状态
|
||||
* 查看当前受理单下所有代办任务:
|
||||
* - 所有task_status都为1 → flow_status = 3(待总负责人汇总方案)
|
||||
* (flow_status=2由意见下发接口设置,此处不再处理)
|
||||
*/
|
||||
private void syncAcceptFlowStatus(Long acceptId) {
|
||||
if (acceptId == null) {
|
||||
return;
|
||||
}
|
||||
// 查询该受理单下所有未删除的代办任务
|
||||
List<TsComplaintTask> taskList = baseMapper.selectList(
|
||||
Wrappers.<TsComplaintTask>lambdaQuery()
|
||||
.eq(TsComplaintTask::getAcceptId, acceptId)
|
||||
);
|
||||
// 判断所有任务是否都已完成(taskStatus = 1)
|
||||
boolean allCompleted = !taskList.isEmpty() && taskList.stream()
|
||||
.allMatch(task -> task.getTaskStatus() != null && task.getTaskStatus() == 1L);
|
||||
if (allCompleted) {
|
||||
// 更新受理单流程状态为3(待总负责人汇总方案)
|
||||
LambdaUpdateWrapper<TsComplaintAccept> uw = Wrappers.lambdaUpdate();
|
||||
uw.eq(TsComplaintAccept::getAcceptId, acceptId)
|
||||
.set(TsComplaintAccept::getFlowStatus, 3L);
|
||||
tsComplaintAcceptMapper.update(null, uw);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存前的数据校验
|
||||
*/
|
||||
private void validEntityBeforeSave(TsComplaintTask entity){
|
||||
//TODO 做一些数据校验,如唯一约束
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除各部门投诉代办任务&意见
|
||||
*/
|
||||
@Override
|
||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||
if(isValid){
|
||||
//TODO 做一些业务上的校验,判断是否需要校验
|
||||
}
|
||||
return baseMapper.deleteBatchIds(ids) > 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,191 @@
|
||||
package com.klp.flow.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import com.klp.common.core.page.TableDataInfo;
|
||||
import com.klp.common.core.domain.PageQuery;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.klp.common.utils.StringUtils;
|
||||
import com.klp.flow.domain.TsComplaintAccept;
|
||||
import com.klp.flow.domain.vo.TsComplaintAcceptVo;
|
||||
import com.klp.flow.domain.vo.TsComplaintTaskVo;
|
||||
import com.klp.flow.mapper.TsComplaintAcceptMapper;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.klp.flow.domain.bo.TsPlanExecuteRelBo;
|
||||
import com.klp.flow.domain.vo.TsPlanExecuteRelVo;
|
||||
import com.klp.flow.domain.TsPlanExecuteRel;
|
||||
import com.klp.flow.mapper.TsPlanExecuteRelMapper;
|
||||
import com.klp.flow.service.ITsPlanExecuteRelService;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Collection;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 最终方案下发部门及执行反馈Service业务层处理
|
||||
*
|
||||
* @author klp
|
||||
* @date 2026-06-18
|
||||
*/
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class TsPlanExecuteRelServiceImpl implements ITsPlanExecuteRelService {
|
||||
|
||||
private final TsPlanExecuteRelMapper baseMapper;
|
||||
|
||||
private final TsComplaintAcceptMapper tsComplaintAcceptMapper;
|
||||
|
||||
/**
|
||||
* 查询最终方案下发部门及执行反馈
|
||||
*/
|
||||
@Override
|
||||
public TsPlanExecuteRelVo queryById(Long relId){
|
||||
return baseMapper.selectVoById(relId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询最终方案下发部门及执行反馈列表
|
||||
*/
|
||||
@Override
|
||||
public TableDataInfo<TsPlanExecuteRelVo> queryPageList(TsPlanExecuteRelBo bo, PageQuery pageQuery) {
|
||||
LambdaQueryWrapper<TsPlanExecuteRel> lqw = buildQueryWrapper(bo);
|
||||
Page<TsPlanExecuteRelVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
enrichWithAcceptInfo(result.getRecords());
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量查询受理单信息并填充到VO中
|
||||
*/
|
||||
private void enrichWithAcceptInfo(List<TsPlanExecuteRelVo> voList) {
|
||||
if (CollUtil.isEmpty(voList)) {
|
||||
return;
|
||||
}
|
||||
// 收集所有acceptId(去重)
|
||||
List<Long> acceptIds = voList.stream()
|
||||
.map(TsPlanExecuteRelVo::getAcceptId)
|
||||
.filter(Objects::nonNull)
|
||||
.distinct()
|
||||
.collect(Collectors.toList());
|
||||
if (acceptIds.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
// 批量查询受理单信息
|
||||
List<TsComplaintAcceptVo> acceptList = tsComplaintAcceptMapper.selectVoBatchIds(acceptIds);
|
||||
// 按acceptId建立索引
|
||||
Map<Long, TsComplaintAcceptVo> acceptMap = acceptList.stream()
|
||||
.collect(Collectors.toMap(TsComplaintAcceptVo::getAcceptId, a -> a, (a, b) -> a));
|
||||
// 填充到VO中
|
||||
for (TsPlanExecuteRelVo vo : voList) {
|
||||
if (vo.getAcceptId() != null) {
|
||||
vo.setAcceptInfo(acceptMap.get(vo.getAcceptId()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询最终方案下发部门及执行反馈列表
|
||||
*/
|
||||
@Override
|
||||
public List<TsPlanExecuteRelVo> queryList(TsPlanExecuteRelBo bo) {
|
||||
LambdaQueryWrapper<TsPlanExecuteRel> lqw = buildQueryWrapper(bo);
|
||||
List<TsPlanExecuteRelVo> tsPlanExecuteRelVos = baseMapper.selectVoList(lqw);
|
||||
enrichWithAcceptInfo(tsPlanExecuteRelVos);
|
||||
return tsPlanExecuteRelVos;
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<TsPlanExecuteRel> buildQueryWrapper(TsPlanExecuteRelBo bo) {
|
||||
Map<String, Object> params = bo.getParams();
|
||||
LambdaQueryWrapper<TsPlanExecuteRel> lqw = Wrappers.lambdaQuery();
|
||||
lqw.eq(bo.getAcceptId() != null, TsPlanExecuteRel::getAcceptId, bo.getAcceptId());
|
||||
lqw.eq(bo.getDeptId() != null, TsPlanExecuteRel::getDeptId, bo.getDeptId());
|
||||
lqw.eq(bo.getExecuteStatus() != null, TsPlanExecuteRel::getExecuteStatus, bo.getExecuteStatus());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getExecuteResult()), TsPlanExecuteRel::getExecuteResult, bo.getExecuteResult());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getFeedbackNo()), TsPlanExecuteRel::getFeedbackNo, bo.getFeedbackNo());
|
||||
lqw.eq(bo.getFeedbackUserId() != null, TsPlanExecuteRel::getFeedbackUserId, bo.getFeedbackUserId());
|
||||
lqw.eq(bo.getFeedbackTime() != null, TsPlanExecuteRel::getFeedbackTime, bo.getFeedbackTime());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getFeedbackFile()), TsPlanExecuteRel::getFeedbackFile, bo.getFeedbackFile());
|
||||
return lqw;
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增最终方案下发部门及执行反馈
|
||||
*/
|
||||
@Override
|
||||
public Boolean insertByBo(TsPlanExecuteRelBo bo) {
|
||||
TsPlanExecuteRel add = BeanUtil.toBean(bo, TsPlanExecuteRel.class);
|
||||
validEntityBeforeSave(add);
|
||||
boolean flag = baseMapper.insert(add) > 0;
|
||||
if (flag) {
|
||||
bo.setRelId(add.getRelId());
|
||||
// 同步受理单流程状态
|
||||
syncAcceptFlowStatus(add.getAcceptId());
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改最终方案下发部门及执行反馈
|
||||
*/
|
||||
@Override
|
||||
public Boolean updateByBo(TsPlanExecuteRelBo bo) {
|
||||
TsPlanExecuteRel update = BeanUtil.toBean(bo, TsPlanExecuteRel.class);
|
||||
validEntityBeforeSave(update);
|
||||
boolean flag = baseMapper.updateById(update) > 0;
|
||||
if (flag) {
|
||||
syncAcceptFlowStatus(update.getAcceptId());
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* 同步受理单流程状态
|
||||
* 查看当前受理单下所有执行反馈:
|
||||
* - 所有execute_status都为1 → flow_status = 5(全部办结)
|
||||
* (flow_status=4由反馈下发接口设置,此处不再处理)
|
||||
*/
|
||||
private void syncAcceptFlowStatus(Long acceptId) {
|
||||
if (acceptId == null) {
|
||||
return;
|
||||
}
|
||||
// 查询该受理单下所有执行反馈记录
|
||||
List<TsPlanExecuteRel> relList = baseMapper.selectList(
|
||||
Wrappers.<TsPlanExecuteRel>lambdaQuery()
|
||||
.eq(TsPlanExecuteRel::getAcceptId, acceptId)
|
||||
);
|
||||
// 判断所有执行反馈是否都已完成(executeStatus = 1)
|
||||
boolean allCompleted = !relList.isEmpty() && relList.stream()
|
||||
.allMatch(rel -> rel.getExecuteStatus() != null && rel.getExecuteStatus() == 1L);
|
||||
if (allCompleted) {
|
||||
// 更新受理单流程状态为5(全部办结)
|
||||
LambdaUpdateWrapper<TsComplaintAccept> uw = Wrappers.lambdaUpdate();
|
||||
uw.eq(TsComplaintAccept::getAcceptId, acceptId)
|
||||
.set(TsComplaintAccept::getFlowStatus, 5L);
|
||||
tsComplaintAcceptMapper.update(null, uw);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存前的数据校验
|
||||
*/
|
||||
private void validEntityBeforeSave(TsPlanExecuteRel entity){
|
||||
//TODO 做一些数据校验,如唯一约束
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除最终方案下发部门及执行反馈
|
||||
*/
|
||||
@Override
|
||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||
if(isValid){
|
||||
//TODO 做一些业务上的校验,判断是否需要校验
|
||||
}
|
||||
return baseMapper.deleteBatchIds(ids) > 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.klp.flow.mapper.InvCountDiscrepancyMapper">
|
||||
|
||||
<resultMap type="com.klp.flow.domain.InvCountDiscrepancy" id="InvCountDiscrepancyResult">
|
||||
<result property="discrepancyId" column="discrepancy_id"/>
|
||||
<result property="relId" column="rel_id"/>
|
||||
<result property="discrepancyType" column="discrepancy_type"/>
|
||||
<result property="coilId" column="coil_id"/>
|
||||
<result property="enterCoilNo" column="enter_coil_no"/>
|
||||
<result property="discrepancyDetail" column="discrepancy_detail"/>
|
||||
<result property="reasonAnalysis" column="reason_analysis"/>
|
||||
<result property="processSuggestion" column="process_suggestion"/>
|
||||
<result property="processResult" column="process_result"/>
|
||||
<result property="processStatus" column="process_status"/>
|
||||
<result property="processUserId" column="process_user_id"/>
|
||||
<result property="processUserName" column="process_user_name"/>
|
||||
<result property="processTime" column="process_time"/>
|
||||
<result property="attachFile" column="attach_file"/>
|
||||
<result property="delFlag" column="del_flag"/>
|
||||
<result property="createTime" column="create_time"/>
|
||||
<result property="createBy" column="create_by"/>
|
||||
<result property="updateTime" column="update_time"/>
|
||||
<result property="updateBy" column="update_by"/>
|
||||
<result property="remark" column="remark"/>
|
||||
</resultMap>
|
||||
|
||||
|
||||
</mapper>
|
||||
@@ -0,0 +1,30 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.klp.flow.mapper.InvCountPlanMapper">
|
||||
|
||||
<resultMap type="com.klp.flow.domain.InvCountPlan" id="InvCountPlanResult">
|
||||
<result property="planId" column="plan_id"/>
|
||||
<result property="planCode" column="plan_code"/>
|
||||
<result property="planName" column="plan_name"/>
|
||||
<result property="countDate" column="count_date"/>
|
||||
<result property="deadlineTime" column="deadline_time"/>
|
||||
<result property="countUserId" column="count_user_id"/>
|
||||
<result property="countUserName" column="count_user_name"/>
|
||||
<result property="principalUserId" column="principal_user_id"/>
|
||||
<result property="principalUserName" column="principal_user_name"/>
|
||||
<result property="participantIds" column="participant_ids"/>
|
||||
<result property="participantNames" column="participant_names"/>
|
||||
<result property="planStatus" column="plan_status"/>
|
||||
<result property="attachFile" column="attach_file"/>
|
||||
<result property="delFlag" column="del_flag"/>
|
||||
<result property="createTime" column="create_time"/>
|
||||
<result property="createBy" column="create_by"/>
|
||||
<result property="updateTime" column="update_time"/>
|
||||
<result property="updateBy" column="update_by"/>
|
||||
<result property="remark" column="remark"/>
|
||||
</resultMap>
|
||||
|
||||
|
||||
</mapper>
|
||||
@@ -0,0 +1,34 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.klp.flow.mapper.InvCountPlanWarehouseMapper">
|
||||
|
||||
<resultMap type="com.klp.flow.domain.InvCountPlanWarehouse" id="InvCountPlanWarehouseResult">
|
||||
<result property="relId" column="rel_id"/>
|
||||
<result property="planId" column="plan_id"/>
|
||||
<result property="warehouseId" column="warehouse_id"/>
|
||||
<result property="warehouseName" column="warehouse_name"/>
|
||||
<result property="actualWarehouseId" column="actual_warehouse_id"/>
|
||||
<result property="actualWarehouseName" column="actual_warehouse_name"/>
|
||||
<result property="systemCoilCount" column="system_coil_count"/>
|
||||
<result property="systemTotalWeight" column="system_total_weight"/>
|
||||
<result property="actualCoilCount" column="actual_coil_count"/>
|
||||
<result property="actualTotalWeight" column="actual_total_weight"/>
|
||||
<result property="isConsistent" column="is_consistent"/>
|
||||
<result property="ioStartTime" column="io_start_time"/>
|
||||
<result property="ioEndTime" column="io_end_time"/>
|
||||
<result property="snapshotIoRecord" column="snapshot_io_record"/>
|
||||
<result property="snapshotCoilLogic" column="snapshot_coil_logic"/>
|
||||
<result property="snapshotCoilActual" column="snapshot_coil_actual"/>
|
||||
<result property="snapshotCoilStats" column="snapshot_coil_stats"/>
|
||||
<result property="delFlag" column="del_flag"/>
|
||||
<result property="createTime" column="create_time"/>
|
||||
<result property="createBy" column="create_by"/>
|
||||
<result property="updateTime" column="update_time"/>
|
||||
<result property="updateBy" column="update_by"/>
|
||||
<result property="remark" column="remark"/>
|
||||
</resultMap>
|
||||
|
||||
|
||||
</mapper>
|
||||
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.klp.flow.mapper.TsAcceptCoilRelMapper">
|
||||
|
||||
<resultMap type="com.klp.flow.domain.TsAcceptCoilRel" id="TsAcceptCoilRelResult">
|
||||
<result property="relId" column="rel_id"/>
|
||||
<result property="acceptId" column="accept_id"/>
|
||||
<result property="coilId" column="coil_id"/>
|
||||
<result property="remark" column="remark"/>
|
||||
<result property="delFlag" column="del_flag"/>
|
||||
<result property="createBy" column="create_by"/>
|
||||
<result property="createTime" column="create_time"/>
|
||||
<result property="updateBy" column="update_by"/>
|
||||
<result property="updateTime" column="update_time"/>
|
||||
</resultMap>
|
||||
|
||||
|
||||
</mapper>
|
||||
@@ -0,0 +1,30 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.klp.flow.mapper.TsComplaintAcceptMapper">
|
||||
|
||||
<resultMap type="com.klp.flow.domain.TsComplaintAccept" id="TsComplaintAcceptResult">
|
||||
<result property="acceptId" column="accept_id"/>
|
||||
<result property="complaintNo" column="complaint_no"/>
|
||||
<result property="complaintDate" column="complaint_date"/>
|
||||
<result property="complaintContent" column="complaint_content"/>
|
||||
<result property="customerDemand" column="customer_demand"/>
|
||||
<result property="file" column="file"/>
|
||||
<result property="auditStatus" column="audit_status"/>
|
||||
<result property="auditOpinion" column="audit_opinion"/>
|
||||
<result property="auditUserId" column="audit_user_id"/>
|
||||
<result property="auditTime" column="audit_time"/>
|
||||
<result property="flowStatus" column="flow_status"/>
|
||||
<result property="principalUserId" column="principal_user_id"/>
|
||||
<result property="planContent" column="plan_content"/>
|
||||
<result property="remark" column="remark"/>
|
||||
<result property="delFlag" column="del_flag"/>
|
||||
<result property="createBy" column="create_by"/>
|
||||
<result property="createTime" column="create_time"/>
|
||||
<result property="updateBy" column="update_by"/>
|
||||
<result property="updateTime" column="update_time"/>
|
||||
</resultMap>
|
||||
|
||||
|
||||
</mapper>
|
||||
@@ -0,0 +1,26 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.klp.flow.mapper.TsComplaintTaskMapper">
|
||||
|
||||
<resultMap type="com.klp.flow.domain.TsComplaintTask" id="TsComplaintTaskResult">
|
||||
<result property="taskId" column="task_id"/>
|
||||
<result property="acceptId" column="accept_id"/>
|
||||
<result property="deptId" column="dept_id"/>
|
||||
<result property="taskStatus" column="task_status"/>
|
||||
<result property="fillNo" column="fill_no"/>
|
||||
<result property="deptOpinion" column="dept_opinion"/>
|
||||
<result property="fillUserId" column="fill_user_id"/>
|
||||
<result property="fillTime" column="fill_time"/>
|
||||
<result property="fillFile" column="fill_file"/>
|
||||
<result property="remark" column="remark"/>
|
||||
<result property="delFlag" column="del_flag"/>
|
||||
<result property="createBy" column="create_by"/>
|
||||
<result property="createTime" column="create_time"/>
|
||||
<result property="updateBy" column="update_by"/>
|
||||
<result property="updateTime" column="update_time"/>
|
||||
</resultMap>
|
||||
|
||||
|
||||
</mapper>
|
||||
@@ -0,0 +1,26 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.klp.flow.mapper.TsPlanExecuteRelMapper">
|
||||
|
||||
<resultMap type="com.klp.flow.domain.TsPlanExecuteRel" id="TsPlanExecuteRelResult">
|
||||
<result property="relId" column="rel_id"/>
|
||||
<result property="acceptId" column="accept_id"/>
|
||||
<result property="deptId" column="dept_id"/>
|
||||
<result property="executeStatus" column="execute_status"/>
|
||||
<result property="executeResult" column="execute_result"/>
|
||||
<result property="feedbackNo" column="feedback_no"/>
|
||||
<result property="feedbackUserId" column="feedback_user_id"/>
|
||||
<result property="feedbackTime" column="feedback_time"/>
|
||||
<result property="feedbackFile" column="feedback_file"/>
|
||||
<result property="remark" column="remark"/>
|
||||
<result property="delFlag" column="del_flag"/>
|
||||
<result property="createBy" column="create_by"/>
|
||||
<result property="createTime" column="create_time"/>
|
||||
<result property="updateBy" column="update_by"/>
|
||||
<result property="updateTime" column="update_time"/>
|
||||
</resultMap>
|
||||
|
||||
|
||||
</mapper>
|
||||
@@ -70,6 +70,10 @@ public class QcCertificate extends BaseEntity {
|
||||
* 质保证明说明(注释)
|
||||
*/
|
||||
private String note;
|
||||
/**
|
||||
* 证书类型(如:出厂合格证、检测报告、质保书等)
|
||||
*/
|
||||
private String certificateType;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
|
||||
@@ -82,6 +82,11 @@ public class QcCertificateBo extends BaseEntity {
|
||||
*/
|
||||
private String note;
|
||||
|
||||
/**
|
||||
* 证书类型(如:出厂合格证、检测报告、质保书等)
|
||||
*/
|
||||
private String certificateType;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
|
||||
@@ -100,5 +100,11 @@ public class QcCertificateVo {
|
||||
@ExcelProperty(value = "备注")
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 证书类型(如:出厂合格证、检测报告、质保书等)
|
||||
*/
|
||||
@ExcelProperty(value = "证书类型")
|
||||
private String certificateType;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -75,6 +75,7 @@ public class QcCertificateServiceImpl implements IQcCertificateService {
|
||||
lqw.le(bo.getApproveTimeEnd() != null, QcCertificate::getApproveTime, bo.getApproveTimeEnd());
|
||||
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getNote()), QcCertificate::getNote, bo.getNote());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getCertificateType()), QcCertificate::getCertificateType, bo.getCertificateType());
|
||||
return lqw;
|
||||
}
|
||||
|
||||
|
||||
@@ -26,6 +26,9 @@ public class MesRollInfo extends BaseEntity {
|
||||
/** 产线ID */
|
||||
private Long lineId;
|
||||
|
||||
/** 机架 */
|
||||
private String frame;
|
||||
|
||||
/** 轧辊编号 */
|
||||
private String rollNo;
|
||||
|
||||
|
||||
@@ -25,6 +25,9 @@ public class MesRollInfoBo extends BaseEntity {
|
||||
/** 产线ID(查询过滤 / 新增归属) */
|
||||
private Long lineId;
|
||||
|
||||
/** 机架 */
|
||||
private String frame;
|
||||
|
||||
@NotBlank(message = "轧辊编号不能为空", groups = {AddGroup.class, EditGroup.class})
|
||||
private String rollNo;
|
||||
|
||||
|
||||
@@ -25,6 +25,9 @@ public class MesRollInfoVo {
|
||||
@ExcelProperty("产线名称")
|
||||
private String lineName;
|
||||
|
||||
@ExcelProperty("机架")
|
||||
private String frame;
|
||||
|
||||
@ExcelProperty("轧辊编号")
|
||||
private String rollNo;
|
||||
|
||||
|
||||
@@ -77,6 +77,7 @@ public class MesRollInfoServiceImpl implements IMesRollInfoService {
|
||||
lqw.like(StringUtils.isNotBlank(bo.getRollNo()), MesRollInfo::getRollNo, bo.getRollNo());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getRollType()), MesRollInfo::getRollType, bo.getRollType());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getStatus()), MesRollInfo::getStatus, bo.getStatus());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getFrame()), MesRollInfo::getFrame, bo.getFrame());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getManufacturer()), MesRollInfo::getManufacturer, bo.getManufacturer());
|
||||
lqw.orderByAsc(MesRollInfo::getRollType, MesRollInfo::getRollId);
|
||||
return lqw;
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
<result property="approveTime" column="approve_time"/>
|
||||
<result property="note" column="note"/>
|
||||
<result property="remark" column="remark"/>
|
||||
<result property="certificateType" column="certificate_type"/>
|
||||
<result property="delFlag" column="del_flag"/>
|
||||
<result property="createTime" column="create_time"/>
|
||||
<result property="createBy" column="create_by"/>
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
"@vue-office/excel": "^1.7.14",
|
||||
"@vue/composition-api": "^1.7.2",
|
||||
"axios": "0.24.0",
|
||||
"beautiful-mermaid": "^1.1.3",
|
||||
"bpmn-js-token-simulation": "0.10.0",
|
||||
"clipboard": "2.0.8",
|
||||
"core-js": "3.25.3",
|
||||
|
||||
430
klp-ui/public/冷轧厂业务流程泳道图(1).html
Normal file
430
klp-ui/public/冷轧厂业务流程泳道图(1).html
Normal file
@@ -0,0 +1,430 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>冷轧厂业务流程泳道图</title>
|
||||
<style>
|
||||
*{margin:0;padding:0;box-sizing:border-box}
|
||||
body{font-family:"Microsoft YaHei","SimHei",sans-serif;background:#f0f4f8;color:#1e293b;overflow-x:hidden}
|
||||
.header{background:linear-gradient(135deg,#0f2b47 0%,#1a4a7a 50%,#2c6fad 100%);color:#fff;padding:14px 28px;display:flex;align-items:center;gap:16px;box-shadow:0 3px 16px rgba(0,0,0,.2)}
|
||||
.header h1{font-size:20px;letter-spacing:2px;font-weight:700}
|
||||
.header .tag{background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.2);border-radius:12px;padding:3px 14px;font-size:11.5px}
|
||||
.tabs-wrap{background:#dde3ec;padding:8px 16px 0;position:sticky;top:0;z-index:200;box-shadow:0 2px 6px rgba(0,0,0,.05)}
|
||||
.tabs{display:flex;gap:3px;overflow-x:auto;padding-bottom:0}
|
||||
.tabs::-webkit-scrollbar{height:0}
|
||||
.tab{flex-shrink:0;padding:9px 16px;font-size:12px;border:none;background:transparent;cursor:pointer;border-radius:7px 7px 0 0;color:#5a6a7a;font-weight:500;transition:all .2s;white-space:nowrap}
|
||||
.tab:hover{background:rgba(255,255,255,.5)}
|
||||
.tab.on{background:#fff;color:#0f2b47;font-weight:700;box-shadow:0 -1px 4px rgba(0,0,0,.05)}
|
||||
.tab .tn{display:inline-block;background:#3b6ea5;color:#fff;border-radius:50%;width:17px;height:17px;line-height:17px;font-size:9.5px;text-align:center;margin-right:4px}
|
||||
.tab.on .tn{background:#1a4a7a}
|
||||
.panel{display:none;padding:18px 20px 36px}
|
||||
.panel.on{display:block}
|
||||
|
||||
/* ========== 公司架构图 ========== */
|
||||
.org-outer{background:#fff;border-radius:10px;box-shadow:0 3px 16px rgba(0,0,0,.06);overflow-x:auto;padding:24px 16px 32px;position:relative}
|
||||
.org-row{display:flex;justify-content:center;gap:10px;flex-wrap:wrap;position:relative;margin-bottom:2px}
|
||||
.org-node{text-align:center;padding:8px 16px;border-radius:9px;font-weight:700;cursor:pointer;transition:all .2s;position:relative;z-index:2;white-space:nowrap}
|
||||
.org-node:hover{transform:translateY(-2px);box-shadow:0 6px 20px rgba(0,0,0,.15)}
|
||||
.org-node.lv0{background:linear-gradient(135deg,#0f2b47,#1a4a7a);color:#fff;font-size:15px;padding:13px 28px;min-width:220px}
|
||||
.org-node.lv1{background:linear-gradient(135deg,#1e3a5f,#2563eb);color:#fff;font-size:13px;padding:9px 20px;min-width:160px}
|
||||
.org-node.lv2{background:linear-gradient(135deg,#1d4ed8,#3b82f6);color:#fff;font-size:12px;padding:8px 14px;min-width:155px}
|
||||
.org-node.lv3{background:#dbeafe;border:1.5px solid #60a5fa;color:#1e40af;font-size:11.5px;padding:6px 11px;min-width:120px;font-weight:600}
|
||||
.org-node .nd-sub{font-size:9.5px;font-weight:400;opacity:.7;display:block;margin-top:2px}
|
||||
.org-vline{width:2px;height:16px;background:#93c5fd;margin:0 auto}
|
||||
.org-tip{text-align:center;font-size:11px;color:#94a3b8;margin-top:10px}
|
||||
|
||||
/* ========== 岗位职责 ========== */
|
||||
.resp-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(370px,1fr));gap:16px}
|
||||
.resp-card{background:#fff;border-radius:10px;box-shadow:0 2px 12px rgba(0,0,0,.05);overflow:hidden;transition:all .2s}
|
||||
.resp-card:hover{box-shadow:0 4px 20px rgba(0,0,0,.1)}
|
||||
.resp-hd{padding:14px 18px;cursor:pointer;display:flex;align-items:center;gap:12px;user-select:none;transition:background .2s}
|
||||
.resp-hd:hover{background:#f0f5ff}
|
||||
.resp-icon{width:42px;height:42px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:18px;flex-shrink:0}
|
||||
.resp-title{font-size:14px;font-weight:700;color:#1e293b}
|
||||
.resp-sub{font-size:11px;color:#64748b;margin-top:2px}
|
||||
.resp-arrow{margin-left:auto;font-size:12px;color:#94a3b8;transition:transform .3s}
|
||||
.resp-card.open .resp-arrow{transform:rotate(90deg)}
|
||||
.resp-bd{display:none;padding:0 18px 16px;border-top:1px solid #f1f5f9}
|
||||
.resp-card.open .resp-bd{display:block}
|
||||
.resp-item{padding:8px 0;border-bottom:1px solid #f8fafc;display:flex;gap:8px;font-size:12.5px;line-height:1.6}
|
||||
.resp-item:last-child{border-bottom:none}
|
||||
.resp-bullet{color:#3b82f6;font-weight:700;flex-shrink:0;margin-top:1px}
|
||||
.resp-tag{display:inline-block;font-size:10px;padding:2px 8px;border-radius:4px;margin-left:8px;font-weight:500}
|
||||
.resp-tag.core{background:#dbeafe;color:#1e40af}
|
||||
.resp-tag.support{background:#dcfce7;color:#166534}
|
||||
.resp-tag.check{background:#fef3c7;color:#92400e}
|
||||
|
||||
/* SVG连线动画 */
|
||||
.sw-svg path{transition:opacity .3s}
|
||||
.sw-svg path.line-walk{opacity:.85!important;stroke-width:2.8!important}
|
||||
.sw-svg path.line-walk-done{opacity:.5!important}
|
||||
.sw-svg path.line-dimmed{opacity:.08!important}
|
||||
|
||||
.footer{text-align:center;padding:18px;color:#94a3b8;font-size:10.5px}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<!-- <div class="header">
|
||||
<h1>⚙️ 冷轧厂业务流程泳道图</h1>
|
||||
<span class="tag">架构 · 岗位 · 10 条流程 · 步进回放</span>
|
||||
</div> -->
|
||||
<div class="tabs-wrap"><div class="tabs" id="tabs"></div></div>
|
||||
<div id="panels"></div>
|
||||
<!-- <div class="footer">冷轧厂业务流程泳道图 · 冶金自动化工程</div> -->
|
||||
|
||||
<script>
|
||||
// ═══════════════════════════════════
|
||||
// 数据定义
|
||||
// ═══════════════════════════════════
|
||||
|
||||
const ORG_TREE = {
|
||||
name:"股东大会 / 董事会", lv:0, sub:"最高决策层",
|
||||
children:[
|
||||
{name:"监事会", lv:1, sub:"监督审计", children:[]},
|
||||
{name:"总经理", lv:1, sub:"全面经营管理", children:[
|
||||
{name:"副总经理(生产/设备)", lv:2, sub:"生产运营+设备保障", children:[
|
||||
{name:"生产部", lv:3, sub:"计划·调度·酸轧·连退·精整"},
|
||||
{name:"设备部", lv:3, sub:"机械·电气·液压·点检"},
|
||||
{name:"安全环保部", lv:3, sub:"安监·环保·培训"},
|
||||
{name:"工厂/分厂厂长", lv:3, sub:"酸轧·连退·镀锌等车间"}
|
||||
]},
|
||||
{name:"副总经理(技术/质量)", lv:2, sub:"技术+质量管控", children:[
|
||||
{name:"技术中心/研发部", lv:3, sub:"工艺标准·新产品开发"},
|
||||
{name:"质量检验部", lv:3, sub:"来料检·过程检·成品检·实验室"},
|
||||
{name:"理化检测中心", lv:3, sub:"力学·化学·金相分析"}
|
||||
]},
|
||||
{name:"副总经理(营销/供应链)", lv:2, sub:"销售+采购+物流", children:[
|
||||
{name:"销售部", lv:3, sub:"国内·海外·大客户"},
|
||||
{name:"采购部", lv:3, sub:"热轧卷·辅料·备件"},
|
||||
{name:"物流仓储部", lv:3, sub:"原料库·成品库·运输调度"},
|
||||
{name:"市场部", lv:3, sub:"市场分析·行业研究"}
|
||||
]},
|
||||
{name:"总工程师", lv:2, sub:"技术总负责", children:[
|
||||
{name:"工艺技术科", lv:3, sub:"工艺规程·技术攻关"},
|
||||
{name:"自动化信息科", lv:3, sub:"L2/MES·信息化"}
|
||||
]},
|
||||
{name:"财务总监", lv:2, sub:"资金+成本管控", children:[
|
||||
{name:"财务部", lv:3, sub:"成本·预算·资金·税务"}
|
||||
]},
|
||||
{name:"职能支撑部门", lv:2, sub:"行政+IT+管理", children:[
|
||||
{name:"综合管理部/办公室", lv:3, sub:"行政·人资·法务"},
|
||||
{name:"企管部/运营改善部", lv:3, sub:"KPI·流程优化"},
|
||||
{name:"IT信息化部", lv:3, sub:"ERP·网络·信息安全"}
|
||||
]}
|
||||
]}
|
||||
]
|
||||
};
|
||||
|
||||
const JOBS = [
|
||||
{name:"生产部",icon:"🏭",color:"#3b82f6",bg:"#dbeafe",lead:"副总经理(生产/设备)",
|
||||
duties:[
|
||||
{t:"主生产计划编制与下达",d:"根据销售订单、产能、原料到货编制月/周主生产计划,分解至各产线",tag:"core"},
|
||||
{t:"车间日/班次排产",d:"编制各车间日计划、班次排产表,协调产线切换与规格衔接",tag:"core"},
|
||||
{t:"生产调度与异常协调",d:"实时监控产线运行状态,处理停机、改规、换辊等生产异常",tag:"core"},
|
||||
{t:"订单进度跟踪与反馈",d:"跟踪订单从排产到完工全流程,向销售部反馈进度",tag:"core"},
|
||||
{t:"产能平衡与瓶颈分析",d:"分析各产线产能利用率,识别瓶颈并提出改善建议",tag:"support"},
|
||||
{t:"原料需求提报",d:"根据排产计划向采购部提报原料需求计划",tag:"support"}
|
||||
]},
|
||||
{name:"设备部",icon:"🔧",color:"#059669",bg:"#d1fae5",lead:"副总经理(生产/设备)",
|
||||
duties:[
|
||||
{t:"设备日常/专业点检",d:"执行日常点检、专业点检,记录设备状态数据",tag:"core"},
|
||||
{t:"维修计划编制与实施",d:"编制定修/年修计划,组织实施维修作业",tag:"core"},
|
||||
{t:"故障应急响应",d:"处理突发设备故障,组织抢修恢复生产",tag:"core"},
|
||||
{t:"备件需求提报与管理",d:"提报备件采购需求,管理备件库存与台账",tag:"support"},
|
||||
{t:"设备技术改造方案",d:"提出设备技改需求,配合总工程师评审方案",tag:"support"},
|
||||
{t:"维修后验收与归档",d:"组织维修后设备验收,更新设备档案",tag:"check"}
|
||||
]},
|
||||
{name:"技术中心/研发部",icon:"🔬",color:"#7c3aed",bg:"#ede9fe",lead:"副总经理(技术/质量)",
|
||||
duties:[
|
||||
{t:"工艺标准/工艺卡制定",d:"制定各钢种、各产线工艺标准,编制工艺卡",tag:"core"},
|
||||
{t:"新产品/新工艺开发",d:"研发新产品、新工艺路线,组织试制与验证",tag:"core"},
|
||||
{t:"工艺参数下发与交底",d:"向车间下发工艺参数(MES/纸质),组织新工艺交底",tag:"core"},
|
||||
{t:"工艺异常分析与处置",d:"分析工艺异常原因,制定处置方案",tag:"core"},
|
||||
{t:"工艺变更管理",d:"评审并管理工艺变更,确保变更受控可追溯",tag:"check"},
|
||||
{t:"封锁品评审",d:"参与封锁品/待判品技术评审,给出处置建议",tag:"check"}
|
||||
]},
|
||||
{name:"质量检验部",icon:"✅",color:"#dc2626",bg:"#fee2e2",lead:"副总经理(技术/质量)",
|
||||
duties:[
|
||||
{t:"来料取样与检测",d:"对进厂原料/辅料取样检验,出具检验报告",tag:"core"},
|
||||
{t:"来料合格/不合格判定",d:"依据标准判定来料是否合格,通知采购和仓储",tag:"core"},
|
||||
{t:"过程检验",d:"按产线执行过程检验(酸洗、轧制、退火、镀锌等)",tag:"core"},
|
||||
{t:"成品检验与判定",d:"对成品进行力学/表面/尺寸检验,做出合格/不合格判定",tag:"core"},
|
||||
{t:"合格品放行",d:"确认成品检验合格后签发放行单,通知仓储发货",tag:"core"},
|
||||
{t:"封锁品/待判品管理",d:"管理封锁品标识与隔离,组织技术中心评审",tag:"check"},
|
||||
{t:"质量异议现场确认",d:"参与客户质量异议的实物确认与复检",tag:"check"}
|
||||
]},
|
||||
{name:"理化检测中心",icon:"🧪",color:"#b45309",bg:"#fef3c7",lead:"副总经理(技术/质量)",
|
||||
duties:[
|
||||
{t:"力学性能检测",d:"拉伸、硬度、冲击等力学性能测试",tag:"core"},
|
||||
{t:"化学成分分析",d:"直读光谱、碳硫分析、化学成分测定",tag:"core"},
|
||||
{t:"金相组织检验",d:"金相制样、显微组织观察与评级",tag:"core"},
|
||||
{t:"镀层/涂层检测",d:"镀锌量、涂层厚度、附着力检测",tag:"core"},
|
||||
{t:"检测报告出具",d:"出具标准检测报告,支持质量判定",tag:"support"}
|
||||
]},
|
||||
{name:"销售部",icon:"📊",color:"#2563eb",bg:"#dbeafe",lead:"副总经理(营销/供应链)",
|
||||
duties:[
|
||||
{t:"合同评审与签订",d:"组织合同交期/技术/产能评审,签订销售合同",tag:"core"},
|
||||
{t:"下达销售订单",d:"先交技术中心确认工艺可行性,再下达生产部排产",tag:"core"},
|
||||
{t:"发货计划编制与跟踪",d:"编制发货计划,跟踪发货确认与签收",tag:"core"},
|
||||
{t:"质量异议接收与处理",d:"接收客户质量异议,协调技术/质检处理",tag:"core"},
|
||||
{t:"客户关系维护与回访",d:"维护大客户关系,异议关闭后组织回访",tag:"support"},
|
||||
{t:"市场信息反馈",d:"收集市场需求、价格走势信息,反馈至生产/技术",tag:"support"}
|
||||
]},
|
||||
{name:"采购部",icon:"📦",color:"#ca8a04",bg:"#fef9c3",lead:"副总经理(营销/供应链)",
|
||||
duties:[
|
||||
{t:"采购计划编制",d:"根据生产部/设备部需求编制原料/辅料/备件采购计划",tag:"core"},
|
||||
{t:"采购订单下达与跟踪",d:"下达采购订单,跟踪交期与物流",tag:"core"},
|
||||
{t:"到货通知与协调",d:"到货前通知物流仓储部准备接收",tag:"core"},
|
||||
{t:"不合格品退货处理",d:"质量检验部判定不合格后协调退货",tag:"check"},
|
||||
{t:"质量索赔",d:"对不合格来料向供应商发起质量索赔",tag:"check"},
|
||||
{t:"供应商管理",d:"供应商资质评审、绩效评价、目录维护",tag:"support"}
|
||||
]},
|
||||
{name:"物流仓储部",icon:"🚛",color:"#0d9488",bg:"#ccfbf1",lead:"副总经理(营销/供应链)",
|
||||
duties:[
|
||||
{t:"原料入库与投料管理",d:"原料验收入库,按生产计划投料至各车间",tag:"core"},
|
||||
{t:"成品入库与出库",d:"成品验收入库,按发货计划备货出库",tag:"core"},
|
||||
{t:"到货接收与暂存",d:"到货暂存待检区,通知质检检验",tag:"core"},
|
||||
{t:"发货/运输调度",d:"组织发货装车,调度运输",tag:"core"},
|
||||
{t:"日常出入库记录",d:"记录每日出入库明细,维护库存台账",tag:"support"},
|
||||
{t:"库存盘点与差异处理",d:"配合财务部进行定期盘点,处理账实差异",tag:"check"},
|
||||
{t:"呆滞/封锁品报告",d:"定期报告呆滞品与封锁品,通知质检/财务",tag:"check"}
|
||||
]},
|
||||
{name:"安全环保部",icon:"🛡️",color:"#dc2626",bg:"#fee2e2",lead:"副总经理(生产/设备)",
|
||||
duties:[
|
||||
{t:"安全/环保培训",d:"组织全员安全培训、特种作业培训、环保培训",tag:"core"},
|
||||
{t:"日常安全检查",d:"执行日常安全巡查,发现隐患并督促整改",tag:"core"},
|
||||
{t:"环保监测",d:"监测废水、废气排放,确保达标",tag:"core"},
|
||||
{t:"事故报告与调查",d:"安全事故报告、调查与处理",tag:"core"},
|
||||
{t:"隐患整改跟踪",d:"跟踪车间隐患整改进度,闭环管理",tag:"check"},
|
||||
{t:"外部检查对接",d:"对接政府安监/环保检查",tag:"support"}
|
||||
]},
|
||||
{name:"总工程师",icon:"🏗️",color:"#7c3aed",bg:"#ede9fe",lead:"总经理",
|
||||
duties:[
|
||||
{t:"技改方案评审",d:"评审技术改造方案的技术可行性",tag:"core"},
|
||||
{t:"定修/年修计划审批",d:"审批定修/年修计划的技术方案",tag:"core"},
|
||||
{t:"重大工艺变更审批",d:"审批重大工艺变更方案",tag:"core"},
|
||||
{t:"项目实施协调",d:"协调技改项目实施中的停机窗口",tag:"core"},
|
||||
{t:"验收与移交",d:"组织技改项目验收与设备移交",tag:"check"},
|
||||
{t:"资料归档管理",d:"督促技改资料归档至综合管理部",tag:"support"}
|
||||
]},
|
||||
{name:"财务部",icon:"💰",color:"#059669",bg:"#d1fae5",lead:"财务总监",
|
||||
duties:[
|
||||
{t:"成本核算与分析",d:"各产线/产品成本核算,差异分析",tag:"core"},
|
||||
{t:"预算编制与管控",d:"年度/月度预算编制,预算执行监控",tag:"core"},
|
||||
{t:"开票与结算",d:"销售开票、采购付款结算",tag:"core"},
|
||||
{t:"应收账款跟踪",d:"跟踪应收账款回收,预警逾期",tag:"core"},
|
||||
{t:"定期盘点组织",d:"组织月/季/年度库存盘点",tag:"check"},
|
||||
{t:"盘点差异处理",d:"盘点差异审核与账务调整",tag:"check"}
|
||||
]},
|
||||
{name:"综合管理部/办公室",icon:"📋",color:"#64748b",bg:"#f1f5f9",lead:"总经理",
|
||||
duties:[
|
||||
{t:"行政管理",d:"公司行政事务、会议组织、文件管理",tag:"core"},
|
||||
{t:"人力资源管理",d:"招聘、培训、薪酬、绩效考核",tag:"core"},
|
||||
{t:"法务管理",d:"合同审查、法律风险防控",tag:"core"},
|
||||
{t:"事故调查配合",d:"配合安全环保部事故调查的行政工作",tag:"support"},
|
||||
{t:"资料归档接收",d:"接收技改/项目归档资料",tag:"support"}
|
||||
]},
|
||||
{name:"IT信息化部",icon:"💻",color:"#2563eb",bg:"#dbeafe",lead:"总经理",
|
||||
duties:[
|
||||
{t:"MES/L2系统运维",d:"维护MES、L2系统稳定运行,故障响应",tag:"core"},
|
||||
{t:"ERP系统管理",d:"ERP系统配置、数据维护、用户权限管理",tag:"core"},
|
||||
{t:"网络与信息安全",d:"网络基础设施运维,信息安全防护",tag:"core"},
|
||||
{t:"系统开发与集成",d:"新系统开发、系统集成、报表定制",tag:"support"},
|
||||
{t:"数据备份与容灾",d:"数据库备份、容灾方案实施",tag:"support"}
|
||||
]},
|
||||
{name:"各车间",icon:"⚙️",color:"#475569",bg:"#f1f5f9",lead:"工厂/分厂厂长",
|
||||
duties:[
|
||||
{t:"产线生产执行",d:"按排产计划执行生产作业,确保产量/质量达标",tag:"core"},
|
||||
{t:"工艺纪律执行",d:"严格执行工艺参数,接受技术中心抽查",tag:"core"},
|
||||
{t:"设备日常点检",d:"执行设备日常点检,上报隐患与故障",tag:"core"},
|
||||
{t:"过程质量自检",d:"执行生产过程自检,配合质量检验部过程检",tag:"check"},
|
||||
{t:"完工入库操作",d:"成品完工后办理入库/转库手续",tag:"support"},
|
||||
{t:"安全与5S管理",d:"执行安全操作规程,保持5S现场",tag:"check"}
|
||||
]}
|
||||
];
|
||||
// ═══════════════════════════════════
|
||||
// Tab 0: 公司架构图
|
||||
// ═══════════════════════════════════
|
||||
(function(){
|
||||
const tb = document.createElement('button');
|
||||
tb.className = 'tab on';
|
||||
tb.innerHTML = '<span class="tn">🏢</span>公司架构';
|
||||
document.getElementById('tabs').appendChild(tb);
|
||||
|
||||
const pn = document.createElement('div');
|
||||
pn.className = 'panel on';
|
||||
pn.id = 'org';
|
||||
|
||||
let h = '<div class="org-outer" id="org-outer">';
|
||||
h += '<div class="org-row" id="org-r0" style="margin-bottom:10px">';
|
||||
h += '<div class="org-node lv0" data-name="股东大会/董事会">股东大会 / 董事会<span class="nd-sub">最高决策层</span></div>';
|
||||
h += '</div>';
|
||||
|
||||
const gmNode = ORG_TREE.children[1];
|
||||
h += '<div class="org-row" id="org-r1" style="gap:40px;margin-bottom:10px">';
|
||||
h += '<div class="org-branch"><div class="org-node lv1" data-name="监事会">监事会<span class="nd-sub">监督审计</span></div></div>';
|
||||
h += '<div class="org-branch"><div class="org-node lv1" id="org-gm" data-name="总经理">总经理<span class="nd-sub">全面经营管理</span></div></div>';
|
||||
h += '</div>';
|
||||
|
||||
h += '<div class="org-row" id="org-r2" style="gap:12px 6px;margin-bottom:10px">';
|
||||
gmNode.children.forEach((vp,vi) => {
|
||||
h += '<div class="org-branch" id="org-vp-'+vi+'">';
|
||||
h += '<div class="org-node lv2" data-name="'+vp.name+'">'+vp.name+'<span class="nd-sub">'+vp.sub+'</span></div>';
|
||||
if(vp.children && vp.children.length){
|
||||
h += '<div class="org-vline"></div>';
|
||||
h += '<div style="display:flex;gap:5px;flex-wrap:wrap;justify-content:center">';
|
||||
vp.children.forEach(dp => {
|
||||
h += '<div class="org-node lv3" data-name="'+dp.name+'">'+dp.name+'<span class="nd-sub">'+dp.sub+'</span></div>';
|
||||
});
|
||||
h += '</div>';
|
||||
}
|
||||
h += '</div>';
|
||||
});
|
||||
h += '</div></div>';
|
||||
h += '<p class="org-tip">💡 点击节点可跳转至岗位职责</p>';
|
||||
|
||||
pn.innerHTML = h;
|
||||
pn.addEventListener('click', function(e){
|
||||
const node = e.target.closest('.org-node');
|
||||
if(node && node.dataset.name) jumpToJob(node.dataset.name);
|
||||
});
|
||||
document.getElementById('panels').appendChild(pn);
|
||||
|
||||
tb.onclick = () => {
|
||||
document.querySelectorAll('.tab').forEach(x => x.classList.remove('on'));
|
||||
document.querySelectorAll('.panel').forEach(x => x.classList.remove('on'));
|
||||
tb.classList.add('on');
|
||||
pn.classList.add('on');
|
||||
setTimeout(drawOrgLines, 100);
|
||||
};
|
||||
})();
|
||||
|
||||
function jumpToJob(name){
|
||||
const tabs = document.querySelectorAll('.tab');
|
||||
if(tabs[1]) tabs[1].click();
|
||||
setTimeout(() => {
|
||||
const cards = document.querySelectorAll('.resp-card');
|
||||
cards.forEach(c => {
|
||||
if(c.dataset.name === name && !c.classList.contains('open')){
|
||||
c.querySelector('.resp-hd').click();
|
||||
}
|
||||
});
|
||||
const target = [...cards].find(c => c.dataset.name === name);
|
||||
if(target) target.scrollIntoView({behavior:'smooth',block:'center'});
|
||||
}, 280);
|
||||
}
|
||||
|
||||
function drawOrgLines(){
|
||||
const outer = document.getElementById('org-outer');
|
||||
if(!outer) return;
|
||||
let svg = document.getElementById('org-svg');
|
||||
if(svg) svg.remove();
|
||||
|
||||
const w = outer.scrollWidth, h = outer.scrollHeight;
|
||||
svg = document.createElementNS('http://www.w3.org/2000/svg','svg');
|
||||
svg.id = 'org-svg';
|
||||
svg.setAttribute('width', w);
|
||||
svg.setAttribute('height', h);
|
||||
svg.setAttribute('viewBox','0 0 '+w+' '+h);
|
||||
svg.style.cssText = 'position:absolute;top:0;left:0;pointer-events:none;overflow:visible;z-index:1';
|
||||
outer.appendChild(svg);
|
||||
|
||||
const or = outer.getBoundingClientRect();
|
||||
function pos(el){
|
||||
const r = el.getBoundingClientRect();
|
||||
return {cx:r.left-or.left+r.width/2, cy:r.top-or.top+r.height/2, l:r.left-or.left, t:r.top-or.top, R:r.left-or.left+r.width, b:r.top-or.top+r.height};
|
||||
}
|
||||
function mkCurve(x1,y1,x2,y2,color){
|
||||
const dy = Math.abs(y2-y1)*0.35;
|
||||
const path = document.createElementNS('http://www.w3.org/2000/svg','path');
|
||||
path.setAttribute('d','M'+x1+' '+y1+' C'+x1+' '+(y1<y2?y1+dy:y1-dy)+' '+x2+' '+(y2>dy?y2-dy:y2+dy)+' '+x2+' '+y2);
|
||||
path.setAttribute('fill','none');
|
||||
path.setAttribute('stroke',color||'#93c5fd');
|
||||
path.setAttribute('stroke-width','2');
|
||||
svg.appendChild(path);
|
||||
}
|
||||
|
||||
const r0n = document.querySelector('#org-r0 .org-node');
|
||||
const r1ns = document.querySelectorAll('#org-r1 .org-node');
|
||||
if(r0n && r1ns.length>=2){
|
||||
const p0 = pos(r0n);
|
||||
r1ns.forEach(n => { const p1=pos(n); mkCurve(p0.cx,p0.b,p1.cx,p1.t,'#93c5fd'); });
|
||||
}
|
||||
const gm = document.getElementById('org-gm');
|
||||
const vpBranches = document.querySelectorAll('#org-r2 > .org-branch');
|
||||
if(gm && vpBranches.length){
|
||||
const pGm = pos(gm);
|
||||
vpBranches.forEach(br => {
|
||||
const vpn = br.querySelector(':scope > .org-node');
|
||||
if(!vpn) return;
|
||||
const pVp = pos(vpn);
|
||||
mkCurve(pGm.cx,pGm.b,pVp.cx,pVp.t,'#93c5fd');
|
||||
});
|
||||
}
|
||||
vpBranches.forEach(br => {
|
||||
const vpn = br.querySelector(':scope > .org-node');
|
||||
if(!vpn) return;
|
||||
const pVp = pos(vpn);
|
||||
const depts = br.querySelectorAll(':scope > div:last-child .org-node');
|
||||
depts.forEach(dn => { const pD=pos(dn); mkCurve(pVp.cx,pVp.b,pD.cx,pD.t,'#93c5fd'); });
|
||||
});
|
||||
}
|
||||
|
||||
// ═══════════════════════════════════
|
||||
// Tab 1: 岗位职责
|
||||
// ═══════════════════════════════════
|
||||
(function(){
|
||||
const tb = document.createElement('button');
|
||||
tb.className = 'tab';
|
||||
tb.innerHTML = '<span class="tn">👤</span>岗位职责';
|
||||
document.getElementById('tabs').appendChild(tb);
|
||||
|
||||
const pn = document.createElement('div');
|
||||
pn.className = 'panel';
|
||||
pn.id = 'jobs';
|
||||
|
||||
let h = '<div class="resp-grid">';
|
||||
JOBS.forEach(j => {
|
||||
h += '<div class="resp-card" data-name="'+j.name+'">';
|
||||
h += '<div class="resp-hd" onclick="this.parentElement.classList.toggle(\'open\')">';
|
||||
h += '<div class="resp-icon" style="background:'+j.bg+';color:'+j.color+'">'+j.icon+'</div>';
|
||||
h += '<div><div class="resp-title">'+j.name+'</div><div class="resp-sub">上级:'+j.lead+'</div></div>';
|
||||
h += '<div class="resp-arrow">▶</div>';
|
||||
h += '</div>';
|
||||
h += '<div class="resp-bd">';
|
||||
j.duties.forEach(d => {
|
||||
const tc = d.tag==='core'?'core':(d.tag==='check'?'check':'support');
|
||||
const tl = d.tag==='core'?'核心':(d.tag==='check'?'验收':'支撑');
|
||||
h += '<div class="resp-item"><span class="resp-bullet">•</span><div><b>'+d.t+'</b><span class="resp-tag '+tc+'">'+tl+'</span><br><span style="color:#64748b;font-size:11.5px">'+d.d+'</span></div></div>';
|
||||
});
|
||||
h += '</div></div>';
|
||||
});
|
||||
h += '</div>';
|
||||
pn.innerHTML = h;
|
||||
document.getElementById('panels').appendChild(pn);
|
||||
|
||||
tb.onclick = () => {
|
||||
document.querySelectorAll('.tab').forEach(x => x.classList.remove('on'));
|
||||
document.querySelectorAll('.panel').forEach(x => x.classList.remove('on'));
|
||||
tb.classList.add('on');
|
||||
pn.classList.add('on');
|
||||
};
|
||||
})();
|
||||
|
||||
// ═══════════════════════════════════
|
||||
// 初始化
|
||||
// ═══════════════════════════════════
|
||||
window.addEventListener('load', () => {
|
||||
setTimeout(() => drawOrgLines(), 350);
|
||||
});
|
||||
window.addEventListener('resize', () => {
|
||||
const ap = document.querySelector('.panel.on');
|
||||
if(!ap) return;
|
||||
if(ap.id === 'org') drawOrgLines();
|
||||
else if(ap.id !== 'jobs') drawLines(ap.id);
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
19
klp-ui/src/api/cost/coil.js
Normal file
19
klp-ui/src/api/cost/coil.js
Normal file
@@ -0,0 +1,19 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
const BASE = '/wms/materialCoil'
|
||||
|
||||
export function getCoilHoardingStats(data) {
|
||||
return request({
|
||||
url: BASE + '/hoardingStatistics',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
export function listCoilHoardingDetail(query) {
|
||||
return request({
|
||||
url: BASE + '/listWithQrcode',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
53
klp-ui/src/api/cost/prodMetricResult.js
Normal file
53
klp-ui/src/api/cost/prodMetricResult.js
Normal file
@@ -0,0 +1,53 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
// 查询生产指标计算结果列表
|
||||
export function listProdMetricResult(query) {
|
||||
return request({
|
||||
url: '/cost/prodMetricResult/list',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
// 查询生产指标计算结果详细
|
||||
export function getProdMetricResult(resultId) {
|
||||
return request({
|
||||
url: '/cost/prodMetricResult/' + resultId,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
// 新增生产指标计算结果
|
||||
export function addProdMetricResult(data) {
|
||||
return request({
|
||||
url: '/cost/prodMetricResult',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 修改生产指标计算结果
|
||||
export function updateProdMetricResult(data) {
|
||||
return request({
|
||||
url: '/cost/prodMetricResult',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
// 删除生产指标计算结果
|
||||
export function delProdMetricResult(resultId) {
|
||||
return request({
|
||||
url: '/cost/prodMetricResult/' + resultId,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
// 批量保存计算结果(先删后插)
|
||||
export function batchSaveProdMetricResult(data) {
|
||||
return request({
|
||||
url: '/cost/prodMetricResult/batch',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
39
klp-ui/src/api/flow/acceptCoilRel.js
Normal file
39
klp-ui/src/api/flow/acceptCoilRel.js
Normal file
@@ -0,0 +1,39 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
export function listAcceptCoilRel(query) {
|
||||
return request({
|
||||
url: '/flow/acceptCoilRel/list',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function getAcceptCoilRel(relId) {
|
||||
return request({
|
||||
url: '/flow/acceptCoilRel/' + relId,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
export function addAcceptCoilRel(data) {
|
||||
return request({
|
||||
url: '/flow/acceptCoilRel',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
export function updateAcceptCoilRel(data) {
|
||||
return request({
|
||||
url: '/flow/acceptCoilRel',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
export function delAcceptCoilRel(relIds) {
|
||||
return request({
|
||||
url: '/flow/acceptCoilRel/' + relIds,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
54
klp-ui/src/api/flow/complaintAccept.js
Normal file
54
klp-ui/src/api/flow/complaintAccept.js
Normal file
@@ -0,0 +1,54 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
export function listComplaintAccept(query) {
|
||||
return request({
|
||||
url: '/flow/complaintAccept/list',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function getComplaintAccept(acceptId) {
|
||||
return request({
|
||||
url: '/flow/complaintAccept/' + acceptId,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
export function addComplaintAccept(data) {
|
||||
return request({
|
||||
url: '/flow/complaintAccept',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
export function updateComplaintAccept(data) {
|
||||
return request({
|
||||
url: '/flow/complaintAccept',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
export function delComplaintAccept(acceptIds) {
|
||||
return request({
|
||||
url: '/flow/complaintAccept/' + acceptIds,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
|
||||
export function opinionDispatch(acceptId) {
|
||||
return request({
|
||||
url: '/flow/complaintAccept/opinionDispatch/' + acceptId,
|
||||
method: 'post'
|
||||
})
|
||||
}
|
||||
|
||||
export function feedbackDispatch(acceptId, deptIds) {
|
||||
return request({
|
||||
url: '/flow/complaintAccept/feedbackDispatch',
|
||||
method: 'post',
|
||||
params: { acceptId, deptIds }
|
||||
})
|
||||
}
|
||||
39
klp-ui/src/api/flow/complaintTask.js
Normal file
39
klp-ui/src/api/flow/complaintTask.js
Normal file
@@ -0,0 +1,39 @@
|
||||
import request from '@/utils/request'
|
||||
|
||||
export function listComplaintTask(query) {
|
||||
return request({
|
||||
url: '/flow/complaintTask/list',
|
||||
method: 'get',
|
||||
params: query
|
||||
})
|
||||
}
|
||||
|
||||
export function getComplaintTask(taskId) {
|
||||
return request({
|
||||
url: '/flow/complaintTask/' + taskId,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
export function addComplaintTask(data) {
|
||||
return request({
|
||||
url: '/flow/complaintTask',
|
||||
method: 'post',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
export function updateComplaintTask(data) {
|
||||
return request({
|
||||
url: '/flow/complaintTask',
|
||||
method: 'put',
|
||||
data: data
|
||||
})
|
||||
}
|
||||
|
||||
export function delComplaintTask(taskIds) {
|
||||
return request({
|
||||
url: '/flow/complaintTask/' + taskIds,
|
||||
method: 'delete'
|
||||
})
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user