This commit is contained in:
2025-11-11 22:03:30 +08:00
parent 685bb0cebd
commit ff88c2c04a
947 changed files with 122829 additions and 0 deletions

View File

@@ -0,0 +1,98 @@
package com.klp.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.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.domain.vo.WmsAccountVo;
import com.klp.domain.bo.WmsAccountBo;
import com.klp.service.IWmsAccountService;
/**
* 会计科目
*
* @author klp
* @date 2025-08-13
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/klp/account")
public class WmsAccountController extends BaseController {
private final IWmsAccountService iWmsAccountService;
/**
* 查询会计科目列表
*/
@GetMapping("/list")
public R<List<WmsAccountVo>> list(WmsAccountBo bo) {
List<WmsAccountVo> list = iWmsAccountService.queryList(bo);
return R.ok(list);
}
/**
* 导出会计科目列表
*/
@Log(title = "会计科目", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(WmsAccountBo bo, HttpServletResponse response) {
List<WmsAccountVo> list = iWmsAccountService.queryList(bo);
ExcelUtil.exportExcel(list, "会计科目", WmsAccountVo.class, response);
}
/**
* 获取会计科目详细信息
*
* @param accountId 主键
*/
@GetMapping("/{accountId}")
public R<WmsAccountVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long accountId) {
return R.ok(iWmsAccountService.queryById(accountId));
}
/**
* 新增会计科目
*/
@Log(title = "会计科目", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody WmsAccountBo bo) {
return toAjax(iWmsAccountService.insertByBo(bo));
}
/**
* 修改会计科目
*/
@Log(title = "会计科目", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody WmsAccountBo bo) {
return toAjax(iWmsAccountService.updateByBo(bo));
}
/**
* 删除会计科目
*
* @param accountIds 主键串
*/
@Log(title = "会计科目", businessType = BusinessType.DELETE)
@DeleteMapping("/{accountIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] accountIds) {
return toAjax(iWmsAccountService.deleteWithValidByIds(Arrays.asList(accountIds), true));
}
}

View File

@@ -0,0 +1,100 @@
package com.klp.controller;
import java.util.List;
import java.util.Arrays;
import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
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.domain.vo.WmsCategoryVo;
import com.klp.domain.bo.WmsCategoryBo;
import com.klp.service.IWmsCategoryService;
import com.klp.common.core.page.TableDataInfo;
/**
* 通用分类
*
* @author JR
* @date 2025-07-18
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/wms/category")
public class WmsCategoryController extends BaseController {
private final IWmsCategoryService iWmsCategoryService;
/**
* 查询通用分类列表
*/
@GetMapping("/list")
public TableDataInfo<WmsCategoryVo> list(WmsCategoryBo bo, PageQuery pageQuery) {
return iWmsCategoryService.queryPageList(bo, pageQuery);
}
/**
* 导出通用分类列表
*/
@Log(title = "通用分类", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(WmsCategoryBo bo, HttpServletResponse response) {
List<WmsCategoryVo> list = iWmsCategoryService.queryList(bo);
ExcelUtil.exportExcel(list, "通用分类", WmsCategoryVo.class, response);
}
/**
* 获取通用分类详细信息
*
* @param categoryId 主键
*/
@GetMapping("/{categoryId}")
public R<WmsCategoryVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long categoryId) {
return R.ok(iWmsCategoryService.queryById(categoryId));
}
/**
* 新增通用分类
*/
@Log(title = "通用分类", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody WmsCategoryBo bo) {
return toAjax(iWmsCategoryService.insertByBo(bo));
}
/**
* 修改通用分类
*/
@Log(title = "通用分类", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody WmsCategoryBo bo) {
return toAjax(iWmsCategoryService.updateByBo(bo));
}
/**
* 删除通用分类
*
* @param categoryIds 主键串
*/
@Log(title = "通用分类", businessType = BusinessType.DELETE)
@DeleteMapping("/{categoryIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] categoryIds) {
return toAjax(iWmsCategoryService.deleteWithValidByIds(Arrays.asList(categoryIds), true));
}
}

View File

@@ -0,0 +1,99 @@
package com.klp.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.domain.vo.WmsGenerateRecordVo;
import com.klp.domain.bo.WmsGenerateRecordBo;
import com.klp.service.IWmsGenerateRecordService;
import com.klp.common.core.page.TableDataInfo;
/**
* 二维码生成记录
*
* @author klp
* @date 2025-09-10
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/klp/generateRecord")
public class WmsGenerateRecordController extends BaseController {
private final IWmsGenerateRecordService iWmsGenerateRecordService;
/**
* 查询二维码生成记录列表
*/
@GetMapping("/list")
public TableDataInfo<WmsGenerateRecordVo> list(WmsGenerateRecordBo bo, PageQuery pageQuery) {
return iWmsGenerateRecordService.queryPageList(bo, pageQuery);
}
/**
* 导出二维码生成记录列表
*/
@Log(title = "二维码生成记录", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(WmsGenerateRecordBo bo, HttpServletResponse response) {
List<WmsGenerateRecordVo> list = iWmsGenerateRecordService.queryList(bo);
ExcelUtil.exportExcel(list, "二维码生成记录", WmsGenerateRecordVo.class, response);
}
/**
* 获取二维码生成记录详细信息
*
* @param recordId 主键
*/
@GetMapping("/{recordId}")
public R<WmsGenerateRecordVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long recordId) {
return R.ok(iWmsGenerateRecordService.queryById(recordId));
}
/**
* 新增二维码生成记录
*/
@Log(title = "二维码生成记录", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<WmsGenerateRecordVo> add(@Validated(AddGroup.class) @RequestBody WmsGenerateRecordBo bo) {
return R.ok(iWmsGenerateRecordService.insertByBo(bo));
}
/**
* 修改二维码生成记录
*/
@Log(title = "二维码生成记录", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody WmsGenerateRecordBo bo) {
return toAjax(iWmsGenerateRecordService.updateByBo(bo));
}
/**
* 删除二维码生成记录
*
* @param recordIds 主键串
*/
@Log(title = "二维码生成记录", businessType = BusinessType.DELETE)
@DeleteMapping("/{recordIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] recordIds) {
return toAjax(iWmsGenerateRecordService.deleteWithValidByIds(Arrays.asList(recordIds), true));
}
}

View File

@@ -0,0 +1,108 @@
package com.klp.controller;
import java.util.List;
import java.util.Arrays;
import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
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.domain.vo.WmsOrderVo;
import com.klp.domain.bo.WmsOrderBo;
import com.klp.service.IWmsOrderService;
import com.klp.common.core.page.TableDataInfo;
/**
* 订单主
*
* @author Joshi
* @date 2025-07-18
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/wms/order")
public class WmsOrderController extends BaseController {
private final IWmsOrderService iWmsOrderService;
/**
* 查询订单主列表
*/
@GetMapping("/list")
public TableDataInfo<WmsOrderVo> list(WmsOrderBo bo, PageQuery pageQuery) {
return iWmsOrderService.queryPageList(bo, pageQuery);
}
/**
* order_status不是零就查出来
* 新接口 不是预订单的
*/
@GetMapping("/listByStatus")
public TableDataInfo<WmsOrderVo> listByStatus(WmsOrderBo bo, PageQuery pageQuery) {
return iWmsOrderService.queryPageListByStatus(bo, pageQuery);
}
/**
* 导出订单主列表
*/
@Log(title = "订单主", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(WmsOrderBo bo, HttpServletResponse response) {
List<WmsOrderVo> list = iWmsOrderService.queryList(bo);
ExcelUtil.exportExcel(list, "订单主", WmsOrderVo.class, response);
}
/**
* 获取订单主详细信息
*
* @param orderId 主键
*/
@GetMapping("/{orderId}")
public R<WmsOrderVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long orderId) {
return R.ok(iWmsOrderService.queryById(orderId));
}
/**
* 新增订单主
*/
@Log(title = "订单主", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody WmsOrderBo bo) {
return toAjax(iWmsOrderService.insertByBo(bo));
}
/**
* 修改订单主
*/
@Log(title = "订单主", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody WmsOrderBo bo) {
return toAjax(iWmsOrderService.updateByBo(bo));
}
/**
* 删除订单主
*
* @param orderIds 主键串
*/
@Log(title = "订单主", businessType = BusinessType.DELETE)
@DeleteMapping("/{orderIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] orderIds) {
return toAjax(iWmsOrderService.deleteWithValidByIds(Arrays.asList(orderIds), true));
}
}

View File

@@ -0,0 +1,109 @@
package com.klp.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.domain.vo.WmsPayableVo;
import com.klp.domain.bo.WmsPayableBo;
import com.klp.service.IWmsPayableService;
import com.klp.common.core.page.TableDataInfo;
/**
* 应付款管理(宽松版)
*
* @author klp
* @date 2025-08-13
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/klp/payable")
public class WmsPayableController extends BaseController {
private final IWmsPayableService iWmsPayableService;
/**
* 查询应付款管理(宽松版)列表
*/
@GetMapping("/list")
public TableDataInfo<WmsPayableVo> list(WmsPayableBo bo, PageQuery pageQuery) {
return iWmsPayableService.queryPageList(bo, pageQuery);
}
/**
* 导出应付款管理(宽松版)列表
*/
@Log(title = "应付款管理(宽松版)", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(WmsPayableBo bo, HttpServletResponse response) {
List<WmsPayableVo> list = iWmsPayableService.queryList(bo);
ExcelUtil.exportExcel(list, "应付款管理(宽松版)", WmsPayableVo.class, response);
}
/**
* 获取应付款管理(宽松版)详细信息
*
* @param payableId 主键
*/
@GetMapping("/{payableId}")
public R<WmsPayableVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long payableId) {
return R.ok(iWmsPayableService.queryById(payableId));
}
/**
* 新增应付款管理(宽松版)
*/
@Log(title = "应付款管理(宽松版)", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody WmsPayableBo bo) {
return toAjax(iWmsPayableService.insertByBo(bo));
}
/**
* 更新应付款已付金额 & 新增资金日记账
*/
@Log(title = "应付款管理(宽松版)", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PostMapping("/updatePaidAmount")
public R<Void> updatePaidAmount(@RequestBody WmsPayableBo bo) {
return toAjax(iWmsPayableService.updatePaidAmountAndAddJournal(bo));
}
/**
* 修改应付款管理(宽松版)
*/
@Log(title = "应付款管理(宽松版)", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody WmsPayableBo bo) {
return toAjax(iWmsPayableService.updateByBo(bo));
}
/**
* 删除应付款管理(宽松版)
*
* @param payableIds 主键串
*/
@Log(title = "应付款管理(宽松版)", businessType = BusinessType.DELETE)
@DeleteMapping("/{payableIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] payableIds) {
return toAjax(iWmsPayableService.deleteWithValidByIds(Arrays.asList(payableIds), true));
}
}

View File

@@ -0,0 +1,119 @@
package com.klp.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.domain.vo.WmsProductSalesScriptVo;
import com.klp.domain.bo.WmsProductSalesScriptBo;
import com.klp.service.IWmsProductSalesScriptService;
import com.klp.common.core.page.TableDataInfo;
import com.klp.common.utils.redis.RedisUtils;
import java.time.Duration;
import com.klp.domain.vo.ProductRankingVo;
/**
* 产品销售话术
*
* @author klp
* @date 2025-07-24
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/wms/productSalesScript")
public class WmsProductSalesScriptController extends BaseController {
private final IWmsProductSalesScriptService iWmsProductSalesScriptService;
/**
* 查询产品销售话术列表
*/
@GetMapping("/list")
public TableDataInfo<WmsProductSalesScriptVo> list(WmsProductSalesScriptBo bo, PageQuery pageQuery) {
return iWmsProductSalesScriptService.queryPageList(bo, pageQuery);
}
/**
* 导出产品销售话术列表
*/
@Log(title = "产品销售话术", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(WmsProductSalesScriptBo bo, HttpServletResponse response) {
List<WmsProductSalesScriptVo> list = iWmsProductSalesScriptService.queryList(bo);
ExcelUtil.exportExcel(list, "产品销售话术", WmsProductSalesScriptVo.class, response);
}
/**
* 获取产品销售话术详细信息
*
* @param scriptId 主键
*/
@GetMapping("/{scriptId}")
public R<WmsProductSalesScriptVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long scriptId) {
WmsProductSalesScriptVo vo = iWmsProductSalesScriptService.queryById(scriptId);
// 记录产品访问次数到Redis
if (vo != null && vo.getProductId() != null) {
iWmsProductSalesScriptService.recordProductViewCount(vo.getProductId());
}
return R.ok(vo);
}
/**
* 新增产品销售话术
*/
@Log(title = "产品销售话术", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody WmsProductSalesScriptBo bo) {
return toAjax(iWmsProductSalesScriptService.insertByBo(bo));
}
/**
* 修改产品销售话术
*/
@Log(title = "产品销售话术", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody WmsProductSalesScriptBo bo) {
return toAjax(iWmsProductSalesScriptService.updateByBo(bo));
}
/**
* 删除产品销售话术
*
* @param scriptIds 主键串
*/
@Log(title = "产品销售话术", businessType = BusinessType.DELETE)
@DeleteMapping("/{scriptIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] scriptIds) {
return toAjax(iWmsProductSalesScriptService.deleteWithValidByIds(Arrays.asList(scriptIds), true));
}
/**
* 获取产品咨询热度排行
*/
@GetMapping("/dashboard/ranking")
public R<List<ProductRankingVo>> getProductRanking() {
List<ProductRankingVo> ranking = iWmsProductSalesScriptService.getProductRanking();
return R.ok(ranking);
}
}

View File

@@ -0,0 +1,99 @@
package com.klp.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.domain.vo.WmsProductionTaskVo;
import com.klp.domain.bo.WmsProductionTaskBo;
import com.klp.service.IWmsProductionTaskService;
import com.klp.common.core.page.TableDataInfo;
/**
* 生产任务
*
* @author Joshi
* @date 2025-08-26
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/klp/productionTask")
public class WmsProductionTaskController extends BaseController {
private final IWmsProductionTaskService iWmsProductionTaskService;
/**
* 查询生产任务列表
*/
@GetMapping("/list")
public TableDataInfo<WmsProductionTaskVo> list(WmsProductionTaskBo bo, PageQuery pageQuery) {
return iWmsProductionTaskService.queryPageList(bo, pageQuery);
}
/**
* 导出生产任务列表
*/
@Log(title = "生产任务", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(WmsProductionTaskBo bo, HttpServletResponse response) {
List<WmsProductionTaskVo> list = iWmsProductionTaskService.queryList(bo);
ExcelUtil.exportExcel(list, "生产任务", WmsProductionTaskVo.class, response);
}
/**
* 获取生产任务详细信息
*
* @param taskId 主键
*/
@GetMapping("/{taskId}")
public R<WmsProductionTaskVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long taskId) {
return R.ok(iWmsProductionTaskService.queryById(taskId));
}
/**
* 新增生产任务
*/
@Log(title = "生产任务", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody WmsProductionTaskBo bo) {
return toAjax(iWmsProductionTaskService.insertByBo(bo));
}
/**
* 修改生产任务
*/
@Log(title = "生产任务", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody WmsProductionTaskBo bo) {
return toAjax(iWmsProductionTaskService.updateByBo(bo));
}
/**
* 删除生产任务
*
* @param taskIds 主键串
*/
@Log(title = "生产任务", businessType = BusinessType.DELETE)
@DeleteMapping("/{taskIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] taskIds) {
return toAjax(iWmsProductionTaskService.deleteWithValidByIds(Arrays.asList(taskIds), true));
}
}

View File

@@ -0,0 +1,126 @@
package com.klp.controller;
import java.util.List;
import java.util.Arrays;
import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
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.domain.vo.WmsRawMaterialVo;
import com.klp.domain.bo.WmsRawMaterialBo;
import com.klp.service.IWmsRawMaterialService;
import com.klp.common.core.page.TableDataInfo;
/**
* 原材料
*
* @author Joshi
* @date 2025-07-18
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/wms/rawMaterial")
public class WmsRawMaterialController extends BaseController {
private final IWmsRawMaterialService iWmsRawMaterialService;
/**
* 查询原材料列表
*/
@GetMapping("/list")
public TableDataInfo<WmsRawMaterialVo> list(WmsRawMaterialBo bo, PageQuery pageQuery) {
return iWmsRawMaterialService.queryPageList(bo, pageQuery);
}
/**
* 查询原材料列表带BOM信息
*/
@GetMapping("/listWithBom")
public TableDataInfo<WmsRawMaterialVo> listWithBom(WmsRawMaterialBo bo, PageQuery pageQuery) {
return iWmsRawMaterialService.queryPageListWithBom(bo, pageQuery);
}
/**
* 导出原材料列表
*/
@Log(title = "原材料", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(WmsRawMaterialBo bo, HttpServletResponse response) {
List<WmsRawMaterialVo> list = iWmsRawMaterialService.queryList(bo);
ExcelUtil.exportExcel(list, "原材料", WmsRawMaterialVo.class, response);
}
/**
* 获取原材料详细信息
*
* @param rawMaterialId 主键
*/
@GetMapping("/{rawMaterialId}")
public R<WmsRawMaterialVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long rawMaterialId) {
return R.ok(iWmsRawMaterialService.queryById(rawMaterialId));
}
/**
* 新增原材料
*/
@Log(title = "原材料", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<WmsRawMaterialBo> add(@Validated(AddGroup.class) @RequestBody WmsRawMaterialBo bo) {
return R.ok(iWmsRawMaterialService.insertByBo(bo));
}
/**
* 修改原材料
*/
@Log(title = "原材料", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody WmsRawMaterialBo bo) {
return toAjax(iWmsRawMaterialService.updateByBo(bo));
}
/**
* 删除原材料
*
* @param rawMaterialIds 主键串
*/
@Log(title = "原材料", businessType = BusinessType.DELETE)
@DeleteMapping("/{rawMaterialIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] rawMaterialIds) {
return toAjax(iWmsRawMaterialService.deleteWithValidByIds(Arrays.asList(rawMaterialIds), true));
}
/**
* 查询原材料列表(含需求、库存、在途信息)
*/
@GetMapping("/listWithDemand")
public TableDataInfo<WmsRawMaterialVo> listWithDemand(WmsRawMaterialBo bo, PageQuery pageQuery) {
return iWmsRawMaterialService.queryPageListWithDemand(bo, pageQuery);
}
/**
* 新增原材料并自动创建BOM带默认属性
*/
@Log(title = "原材料", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("/addWithBom")
public R<WmsRawMaterialBo> addWithBom(@Validated(AddGroup.class) @RequestBody WmsRawMaterialBo bo) {
return R.ok(iWmsRawMaterialService.insertByBo(bo));
}
}

View File

@@ -0,0 +1,100 @@
package com.klp.controller;
import com.klp.common.annotation.Log;
import com.klp.common.annotation.RepeatSubmit;
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.page.TableDataInfo;
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.domain.bo.WmsReportSummaryBo;
import com.klp.domain.vo.WmsReportSummaryVo;
import com.klp.service.IWmsReportSummaryService;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.util.Arrays;
import java.util.List;
/**
* 设计项目汇报概述
*
* @author cpy
* @date 2025-05-13
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/wms/reportSummary")
public class WmsReportSummaryController extends BaseController {
private final IWmsReportSummaryService IWmsReportSummaryService;
/**
* 查询设计项目汇报概述列表
*/
@GetMapping("/list")
public TableDataInfo<WmsReportSummaryVo> list(WmsReportSummaryBo bo, PageQuery pageQuery) {
return IWmsReportSummaryService.queryPageList(bo, pageQuery);
}
/**
* 导出设计项目汇报概述列表
*/
@Log(title = "设计项目汇报概述", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(WmsReportSummaryBo bo, HttpServletResponse response) {
List<WmsReportSummaryVo> list = IWmsReportSummaryService.queryList(bo);
ExcelUtil.exportExcel(list, "设计项目汇报概述", WmsReportSummaryVo.class, response);
}
/**
* 获取设计项目汇报概述详细信息
*
* @param id 主键
*/
@GetMapping("/{id}")
public R<WmsReportSummaryVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(IWmsReportSummaryService.queryById(id));
}
/**
* 新增设计项目汇报概述
*/
@Log(title = "设计项目汇报概述", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody WmsReportSummaryBo bo) {
return toAjax(IWmsReportSummaryService.insertByBo(bo));
}
/**
* 修改设计项目汇报概述
*/
@Log(title = "设计项目汇报概述", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody WmsReportSummaryBo bo) {
return toAjax(IWmsReportSummaryService.updateByBo(bo));
}
/**
* 删除设计项目汇报概述
*
* @param ids 主键串
*/
@Log(title = "设计项目汇报概述", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(IWmsReportSummaryService.deleteWithValidByIds(Arrays.asList(ids), true));
}
}

View File

@@ -0,0 +1,67 @@
package com.klp.controller;
import java.util.List;
import java.util.Map;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import com.klp.common.annotation.Log;
import com.klp.common.core.controller.BaseController;
import com.klp.common.core.domain.R;
import com.klp.common.enums.BusinessType;
import com.klp.domain.bo.WmsSalesScriptGeneratorBo;
import com.klp.domain.vo.WmsProductSalesScriptVo;
import com.klp.service.IWmsSalesScriptGeneratorService;
import com.klp.common.core.page.TableDataInfo;
import com.klp.common.core.domain.PageQuery;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.NotEmpty;
/**
* 销售话术生成器
*
* @author klp
* @date 2025-01-27
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/wms/salesScriptGenerator")
public class WmsSalesScriptGeneratorController extends BaseController {
private final IWmsSalesScriptGeneratorService iWmsSalesScriptGeneratorService;
/**
* 为单个产品生成销售话术
*/
@Log(title = "销售话术生成", businessType = BusinessType.INSERT)
@PostMapping("/generateForProduct")
public R<List<WmsProductSalesScriptVo>> generateForProduct(@RequestBody WmsSalesScriptGeneratorBo bo) {
List<WmsProductSalesScriptVo> scripts = iWmsSalesScriptGeneratorService.generateScriptsForProduct(bo);
return R.ok(scripts);
}
/**
* 批量生成销售话术
*/
@Log(title = "批量销售话术生成", businessType = BusinessType.INSERT)
@PostMapping("/generateBatch")
public R<Map<String, Object>> generateBatch(@RequestBody WmsSalesScriptGeneratorBo bo) {
Map<String, Object> result = iWmsSalesScriptGeneratorService.generateScriptsBatch(bo);
return R.ok(result);
}
/**
* 为指定产品ID列表生成话术
*/
@Log(title = "指定产品话术生成", businessType = BusinessType.INSERT)
@PostMapping("/generateForProductIds")
public R<Map<String, Object>> generateForProductIds(@RequestBody WmsSalesScriptGeneratorBo bo) {
Map<String, Object> result = iWmsSalesScriptGeneratorService.generateScriptsForProductIds(bo);
return R.ok(result);
}
}

View File

@@ -0,0 +1,100 @@
package com.klp.controller;
import java.util.List;
import java.util.Arrays;
import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
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.domain.vo.WmsSupplierVo;
import com.klp.domain.bo.WmsSupplierBo;
import com.klp.service.IWmsSupplierService;
import com.klp.common.core.page.TableDataInfo;
/**
* 供应商信息
*
* @author Joshi
* @date 2025-08-12
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/wms/supplier")
public class WmsSupplierController extends BaseController {
private final IWmsSupplierService iWmsSupplierService;
/**
* 查询供应商信息列表
*/
@GetMapping("/list")
public TableDataInfo<WmsSupplierVo> list(WmsSupplierBo bo, PageQuery pageQuery) {
return iWmsSupplierService.queryPageList(bo, pageQuery);
}
/**
* 导出供应商信息列表
*/
@Log(title = "供应商信息", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(WmsSupplierBo bo, HttpServletResponse response) {
List<WmsSupplierVo> list = iWmsSupplierService.queryList(bo);
ExcelUtil.exportExcel(list, "供应商信息", WmsSupplierVo.class, response);
}
/**
* 获取供应商信息详细信息
*
* @param supplierId 主键
*/
@GetMapping("/{supplierId}")
public R<WmsSupplierVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long supplierId) {
return R.ok(iWmsSupplierService.queryById(supplierId));
}
/**
* 新增供应商信息
*/
@Log(title = "供应商信息", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody WmsSupplierBo bo) {
return toAjax(iWmsSupplierService.insertByBo(bo));
}
/**
* 修改供应商信息
*/
@Log(title = "供应商信息", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody WmsSupplierBo bo) {
return toAjax(iWmsSupplierService.updateByBo(bo));
}
/**
* 删除供应商信息
*
* @param supplierIds 主键串
*/
@Log(title = "供应商信息", businessType = BusinessType.DELETE)
@DeleteMapping("/{supplierIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] supplierIds) {
return toAjax(iWmsSupplierService.deleteWithValidByIds(Arrays.asList(supplierIds), true));
}
}

View File

@@ -0,0 +1,100 @@
package com.klp.controller;
import java.util.List;
import java.util.Arrays;
import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
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.domain.vo.WmsWarehouseVo;
import com.klp.domain.bo.WmsWarehouseBo;
import com.klp.service.IWmsWarehouseService;
/**
* 仓库/库区/库位自关联
*
* @author JR
* @date 2025-07-18
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/wms/warehouse")
public class WmsWarehouseController extends BaseController {
private final IWmsWarehouseService iWmsWarehouseService;
/**
* 查询仓库/库区/库位自关联列表
*/
@GetMapping("/list")
public R<List<WmsWarehouseVo>> list(WmsWarehouseBo bo) {
List<WmsWarehouseVo> list = iWmsWarehouseService.queryList(bo);
return R.ok(list);
}
/**
* 导出仓库/库区/库位自关联列表
*/
@Log(title = "仓库/库区/库位自关联", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(WmsWarehouseBo bo, HttpServletResponse response) {
List<WmsWarehouseVo> list = iWmsWarehouseService.queryList(bo);
ExcelUtil.exportExcel(list, "仓库/库区/库位自关联", WmsWarehouseVo.class, response);
}
/**
* 获取仓库/库区/库位自关联详细信息
*
* @param warehouseId 主键
*/
@GetMapping("/{warehouseId}")
public R<WmsWarehouseVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long warehouseId) {
return R.ok(iWmsWarehouseService.queryById(warehouseId));
}
/**
* 新增仓库/库区/库位自关联
*/
@Log(title = "仓库/库区/库位自关联", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody WmsWarehouseBo bo) {
return toAjax(iWmsWarehouseService.insertByBo(bo));
}
/**
* 修改仓库/库区/库位自关联
*/
@Log(title = "仓库/库区/库位自关联", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody WmsWarehouseBo bo) {
return toAjax(iWmsWarehouseService.updateByBo(bo));
}
/**
* 删除仓库/库区/库位自关联
*
* @param warehouseIds 主键串
*/
@Log(title = "仓库/库区/库位自关联", businessType = BusinessType.DELETE)
@DeleteMapping("/{warehouseIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] warehouseIds) {
return toAjax(iWmsWarehouseService.deleteWithValidByIds(Arrays.asList(warehouseIds), true));
}
}

View File

@@ -0,0 +1,49 @@
package com.klp.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* BOM 头,关联产品或原材料对象 wms_bom
*
* @author Joshi
* @date 2025-07-29
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("wms_bom")
public class WmsBom extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* BOM 主键ID
*/
@TableId(value = "bom_id")
private Long bomId;
/**
* BOM 编码(可选)
*/
private String bomCode;
/**
* BOM 名称(可选)
*/
private String bomName;
/**
* 是否启用0=否1=是)
*/
private Integer isEnabled;
/**
* 删除标志0=正常1=删除)
*/
@TableLogic
private Integer delFlag;
/**
* 备注
*/
private String remark;
}

View File

@@ -0,0 +1,53 @@
package com.klp.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* BOM 明细,存放属性–值对象 wms_bom_item
*
* @author Joshi
* @date 2025-07-29
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("wms_bom_item")
public class WmsBomItem extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* BOM 明细ID
*/
@TableId(value = "item_id")
private Long itemId;
/**
* 关联 wms_bom.bom_id
*/
private Long bomId;
/**
* 属性名称
*/
private String attrKey;
/**
* 属性值
*/
private String attrValue;
/**
* 是否启用0=否1=是)
*/
private Integer isEnabled;
/**
* 删除标志0=正常1=删除)
*/
@TableLogic
private Integer delFlag;
/**
* 备注
*/
private String remark;
}

View File

@@ -0,0 +1,89 @@
package com.klp.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 摄像头管理对象 wms_camera_management
*
* @author Joshi
* @date 2025-08-07
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("wms_camera_management")
public class WmsCameraManagement extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 自增主键
*/
@TableId(value = "camera_id")
private Long cameraId;
/**
* 摄像头编号(系统生成,如 camef8bd40d71795
*/
private String cameraCode;
/**
* 摄像头名称(如:仓库东门摄像头)
*/
private String cameraName;
/**
* RTSP 推流地址(摄像头原生地址)
*/
private String rtspUrl;
/**
* ws - fmp4 播放地址
*/
private String wsFmp4;
/**
* http - fmp4 播放地址
*/
private String httpFmp4;
/**
* rtsp 播放地址
*/
private String rtspAddr;
/**
* hls 播放地址
*/
private String hlsAddr;
/**
* 安装位置(如:仓库 A 区货架 3
*/
private String location;
/**
* 所属分组/区域(直接存储名称,如:仓库 A 区)
*/
private String groupName;
/**
* 所属仓库(如:一号仓库)
*/
private String warehouseName;
/**
* 状态0-未启用 1-正常 2-离线 3-故障
*/
private Long status;
/**
* 摄像头访问用户名
*/
private String username;
/**
* 摄像头访问密码
*/
private String password;
/**
* 删除标志
*/
@TableLogic
private Long delFlag;
/**
* 备注
*/
private String remark;
}

View File

@@ -0,0 +1,100 @@
package com.klp.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
/**
* 钢卷待操作对象 wms_coil_pending_action
*
* @author Joshi
* @date 2025-11-03
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("wms_coil_pending_action")
public class WmsCoilPendingAction extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "action_id", type = IdType.AUTO)
private Long actionId;
/**
* 关联的钢卷ID
*/
private Long coilId;
/**
* 当前钢卷号
*/
private String currentCoilNo;
/**
* 操作类型1=分卷2=合卷3=更新)
*/
private Integer actionType;
/**
* 操作状态0=待处理1=处理中2=已完成3=已取消)
*/
private Integer actionStatus;
/**
* 扫码时间
*/
private Date scanTime;
/**
* 扫码设备(移动端设备信息)
*/
private String scanDevice;
/**
* 优先级0=普通1=重要2=紧急)
*/
private Integer priority;
/**
* 来源类型scan=扫码manual=手动创建)
*/
private String sourceType;
/**
* 所在库区ID
*/
private Long warehouseId;
/**
* 操作人ID
*/
private Long operatorId;
/**
* 操作人姓名
*/
private String operatorName;
/**
* 处理时间
*/
private Date processTime;
/**
* 完成时间
*/
private Date completeTime;
/**
* 删除标志0=正常1=已删除)
*/
@TableLogic
private Integer delFlag;
}

View File

@@ -0,0 +1,64 @@
package com.klp.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;
/**
* 财务单据对象 wms_financial_document
*
* @author klp
* @date 2025-08-13
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("wms_financial_document")
public class WmsFinancialDocument extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 单据ID主键
*/
@TableId(value = "document_id")
private Long documentId;
/**
* 单据编号
*/
private String docNo;
/**
* 单据类型
*/
private String docType;
/**
* 单据日期
*/
private Date docDate;
/**
* 单据金额
*/
private BigDecimal amount;
/**
* 关联订单ID
*/
private Long relatedOrderId;
/**
* 单据状态
*/
private String status;
/**
* 删除标志0=正常1=已删除)
*/
@TableLogic
private Integer delFlag;
/**
* 备注
*/
private String remark;
}

View File

@@ -0,0 +1,59 @@
package com.klp.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 二维码生成记录对象 wms_generate_record
*
* @author klp
* @date 2025-09-10
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("wms_generate_record")
public class WmsGenerateRecord extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 主键
*/
@TableId(value = "record_id")
private Long recordId;
/**
* 二维码类型字典默认为0
*/
private Long qrcodeType;
/**
* 二维码内容JSON格式
*/
private String content;
/**
* 是否启用0启用1禁用
*/
private Long isEnabled;
/**
* 编号
*/
private String serialNumber;
/**
* 二维码尺寸(像素)
*/
private Long size;
/**
* 删除标志0=正常1=已删除)
*/
@TableLogic
private Integer delFlag;
/**
* 备注
*/
private String remark;
//状态
private Integer status;
}

View File

@@ -0,0 +1,108 @@
package com.klp.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;
/**
* 制造规范对象 wms_manufacturing_spec
*
* @author klp
* @date 2025-08-25
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("wms_manufacturing_spec")
public class WmsManufacturingSpec extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 主键
*/
@TableId(value = "spec_id")
private Long specId;
/**
* 制造规范编码
*/
private String specCode;
/**
* 制造规范名称
*/
private String specName;
/**
* 所属事业部
*/
private String businessUnit;
/**
* 所属项目组
*/
private String projectTeam;
/**
* 产品型号/模组
*/
private String productModule;
/**
* 标识
*/
private String identifier;
/**
* 材质
*/
private String material;
/**
* 规格/尺寸
*/
private String specification;
/**
* 工艺路线
*/
private String processRoute;
/**
* 工艺参数
*/
private String processParams;
/**
* 适用范围
*/
private String scope;
/**
* 检验标准
*/
private String inspectionStandard;
/**
* 状态字典1=启用2=未启用3=作废)
*/
private Long status;
/**
* 规范类型字典1=普通规范2=新试规范3=临时规范)
*/
private Long specType;
/**
* 版本号
*/
@Version
private BigDecimal version;
/**
* 版本日期
*/
private Date versionDate;
/**
* 理论工时(h)
*/
private BigDecimal standardHours;
/**
* 删除标志0=正常1=删除)
*/
@TableLogic
private Long delFlag;
/**
* 备注
*/
private String remark;
}

View File

@@ -0,0 +1,58 @@
package com.klp.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
/**
* 订单盈亏对象 wms_order_profit
*
* @author klp
* @date 2025-08-13
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("wms_order_profit")
public class WmsOrderProfit extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 盈亏ID主键
*/
@TableId(value = "profit_id")
private Long profitId;
/**
* 订单ID
*/
private Long orderId;
/**
* 成本金额
*/
private BigDecimal costAmount;
/**
* 收入金额
*/
private BigDecimal revenueAmount;
/**
* 利润金额
*/
private BigDecimal profitAmount;
/**
* 利润率(%)
*/
private BigDecimal profitRate;
/**
* 删除标志0=正常1=已删除)
*/
@TableLogic
private Integer delFlag;
/**
* 备注
*/
private String remark;
}

View File

@@ -0,0 +1,60 @@
package com.klp.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;
/**
* 其他收支对象 wms_other_income
*
* @author Joshi
* @date 2025-09-26
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("wms_other_income")
public class WmsOtherIncome extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 其他收入ID主键
*/
@TableId(value = "other_income_id")
private Long otherIncomeId;
/**
* 日期
*/
private Date incomeDate;
/**
* 类型
*/
private String incomeType;
/**
* 金额
*/
private BigDecimal amount;
/**
* 来源
*/
private String source;
/**
* 收支类型(0=收入,1=值出)
*/
private Long type;
/**
* 备注
*/
private String remark;
/**
* 删除标志0=正常1=已删除)
*/
@TableLogic
private Integer delFlag;
}

View File

@@ -0,0 +1,68 @@
package com.klp.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;
/**
* 应付款管理(宽松版)对象 wms_payable
*
* @author klp
* @date 2025-08-13
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("wms_payable")
public class WmsPayable extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 应付ID主键
*/
@TableId(value = "payable_id")
private Long payableId;
/**
* 供应商ID
*/
private Long supplierId;
/**
* 订单ID
*/
private Long orderId;
/**
* 到期日
*/
private Date dueDate;
/**
* 应付金额(可为负数用于调整)
*/
private BigDecimal amount;
/**
* 已付金额(可为负数用于冲销)
*/
private BigDecimal paidAmount;
/**
* 未付金额
*/
private BigDecimal balanceAmount;
/**
* 状态
*/
private String status;
/**
* 删除标志0=正常1=已删除)
*/
@TableLogic
private Integer delFlag;
/**
* 备注
*/
private String remark;
}

View File

@@ -0,0 +1,49 @@
package com.klp.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
/**
* 产品BOM产品-原材料清单)对象 wms_product_bom
*
* @author Joshi
* @date 2025-07-18
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("wms_product_bom")
public class WmsProductBom extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* BOM主键ID
*/
@TableId(value = "bom_id")
private Long bomId;
/**
* 产品ID
*/
private Long productId;
/**
* 原材料ID
*/
private Long rawMaterialId;
/**
* 每个产品所需原材料数量
*/
private BigDecimal quantity;
/**
* 单位
*/
private String unit;
/**
* 备注
*/
private String remark;
}

View File

@@ -0,0 +1,53 @@
package com.klp.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 产品规范组对象 wms_product_spec_group
*
* @author Joshi
* @date 2025-08-26
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("wms_product_spec_group")
public class WmsProductSpecGroup extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 主键
*/
@TableId(value = "group_id")
private Long groupId;
/**
* 产品规范组编码
*/
private String groupCode;
/**
* 绑定的产品ID
*/
private Long productId;
/**
* 产品规范组名称
*/
private String groupName;
/**
* 状态字典1=启用2=停用)
*/
private Long status;
/**
* 备注
*/
private String remark;
/**
* 删除标志0=正常1=删除)
*/
@TableLogic
private Long delFlag;
}

View File

@@ -0,0 +1,53 @@
package com.klp.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
/**
* 产线对象 wms_production_line
*
* @author Joshi
* @date 2025-07-18
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("wms_production_line")
public class WmsProductionLine extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 产线ID
*/
@TableId(value = "line_id")
private Long lineId;
/**
* 产线编号
*/
private String lineCode;
/**
* 产线名称
*/
private String lineName;
/**
* 日产能(单位同产品)
*/
private BigDecimal capacity;
/**
* 产能单位
*/
private String unit;
/**
* 是否启用0=否1=是)
*/
private Integer isEnabled;
/**
* 备注
*/
private String remark;
}

View File

@@ -0,0 +1,57 @@
package com.klp.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 采购计划主对象 wms_purchase_plan
*
* @author Joshi
* @date 2025-07-18
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("wms_purchase_plan")
public class WmsPurchasePlan extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 采购计划ID
*/
@TableId(value = "plan_id")
private Long planId;
/**
* 采购计划编号
*/
private String planCode;
/**
* 负责人
*/
private String owner;
/**
* 关联订单ID
*/
private Long orderId;
/**
* 状态0=新建1=待审核2=已审核3=已完成4=已取消)
*/
private Integer status;
/**
* 附件信息
*/
private String attachmentInfo;
/**
* 备注
*/
private String remark;
/**
* 删除标志0=正常1=已删除)
*/
@TableLogic
private Integer delFlag;
}

View File

@@ -0,0 +1,81 @@
package com.klp.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
/**
* 采购计划明细对象 wms_purchase_plan_detail
*
* @author Joshi
* @date 2025-07-18
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("wms_purchase_plan_detail")
public class WmsPurchasePlanDetail extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 明细ID
*/
@TableId(value = "detail_id")
private Long detailId;
/**
* 采购计划ID
*/
private Long planId;
/**
* 原材料ID
*/
private Long rawMaterialId;
/**
* 负责人
*/
private String owner;
/**
* 计划采购数量
*/
private BigDecimal quantity;
/**
* 单位
*/
private String unit;
/**
* 附件
*/
private String annex;
/**
* 状态( 0=新建1=在途2=到货3=待审核4=采购完成)
*/
private Integer status;
/**
* 备注
*/
private String remark;
/**
* 删除标志0=正常1=已删除)
*/
@TableLogic
private Integer delFlag;
/**
* 供应商ID
*/
private Long supplierId;
/**
* 合同ID
*/
private Long contractId;
/**
* 详情编号
*/
private String detailCode;
}

View File

@@ -0,0 +1,139 @@
package com.klp.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
/**
* 原材料对象 wms_raw_material
*
* @author Joshi
* @date 2025-07-18
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("wms_raw_material")
public class WmsRawMaterial extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 主键ID
*/
@TableId(value = "raw_material_id")
private Long rawMaterialId;
/**
* 原材料编号
*/
private String rawMaterialCode;
/**
* 原材料名称
*/
private String rawMaterialName;
/**
* 钢种/牌号如SPHC、SPHE、S350GD等
*/
private String steelGrade;
/**
* 目标冷轧牌号如SPCC、DC06、SGCC等
*/
private String targetColdGrade;
/**
* 基础材质分类ID
*/
private Long baseMaterialId;
/**
* 表面处理分类ID
*/
private Long surfaceTreatmentId;
/**
* 厚度mm
*/
private BigDecimal thickness;
/**
* 厚度偏差mm
*/
private BigDecimal thicknessDeviation;
/**
* 宽度mm
*/
private BigDecimal width;
/**
* 目标冷轧宽度mm
*/
private BigDecimal targetColdWidth;
/**
* 目标冷轧厚度mm
*/
private BigDecimal targetColdThickness;
/**
* 凸度mm
*/
private BigDecimal crown;
/**
* 卷重kg
*/
private BigDecimal coilWeight;
/**
* 表面质量
*/
private String surfaceQuality;
/**
* 硬度HV5
*/
private BigDecimal hardnessHv5;
/**
* 硬度差值HV5差值≤15为合格
*/
private BigDecimal hardnessDiff;
/**
* 锰含量Mn%
*/
private BigDecimal compositionMn;
/**
* 磷含量P%
*/
private BigDecimal compositionP;
/**
* 晶粒级别如ASTM 6-8级仅电工钢
*/
private String grainSize;
/**
* 头尾切除标记0=否1=是,汽车板专用)
*/
private Integer headTailCutFlag;
/**
* 检测结论(如合格/条纹/微裂纹/成分偏析等)
*/
private String inspectionResult;
/**
* 是否启用0=否1=是)
*/
private Integer isEnabled;
/**
* 删除标志0=正常1=已删除)
*/
@TableLogic
private Integer delFlag;
/**
* 备注
*/
private String remark;
/**
* 单位
*/
private String unit;
/**
* BOM 表头ID
*/
private Long bomId;
//规格
private String specification;
}

View File

@@ -0,0 +1,53 @@
package com.klp.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 供应商信息对象 wms_supplier
*
* @author Joshi
* @date 2025-08-12
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("wms_supplier")
public class WmsSupplier extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 供应商ID主键
*/
@TableId(value = "supplier_id")
private Long supplierId;
/**
* 供应商名称
*/
private String name;
/**
* 联系人
*/
private String contactPerson;
/**
* 联系电话
*/
private String phone;
/**
* 地址
*/
private String address;
/**
* 备注
*/
private String remark;
/**
* 删除标志0=正常1=已删除)
*/
@TableLogic
private Integer delFlag;
}

View File

@@ -0,0 +1,57 @@
package com.klp.domain;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import com.klp.common.core.domain.TreeEntity;
/**
* 仓库/库区/库位自关联对象 wms_warehouse
*
* @author JR
* @date 2025-07-18
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("wms_warehouse")
public class WmsWarehouse extends TreeEntity<WmsWarehouse> {
private static final long serialVersionUID=1L;
/**
* 主键ID
*/
@TableId(value = "warehouse_id")
private Long warehouseId;
/**
* 仓库/库区编码
*/
private String warehouseCode;
/**
* 仓库/库区名称
*/
private String warehouseName;
/**
* 类型0=仓库1=库区2=库位,…
*/
private Long warehouseType;
/**
* 同级排序号
*/
private Long sortNo;
/**
* 是否启用0=否1=是)
*/
private Integer isEnabled;
/**
* 删除标志0=正常1=已删除)
*/
@TableLogic
private Integer delFlag;
/**
* 备注
*/
private String remark;
}

View File

@@ -0,0 +1,61 @@
package com.klp.domain.bo;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.*;
/**
* 实际库区/库位自关联业务对象 wms_actual_warehouse
*
* @author klp
* @date 2025-11-03
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class WmsActualWarehouseBo extends BaseEntity {
/**
* 主键ID
*/
private Long actualWarehouseId;
/**
* 父节点ID指向同表 warehouse_id
*/
private Long actualParentId;
/**
* 实际库区/库位编码
*/
private String actualWarehouseCode;
/**
* 实际库区/库位名称
*/
private String actualWarehouseName;
/**
* 类型0=仓库1=库区2=库位,…
*/
private Long actualWarehouseType;
/**
* 同级排序号
*/
private Long sortNo;
/**
* 是否启用0=否1=是)
*/
private Integer isEnabled;
/**
* 备注
*/
private String remark;
}

View File

@@ -0,0 +1,46 @@
package com.klp.domain.bo;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.*;
/**
* BOM 头,关联产品或原材料业务对象 wms_bom
*
* @author Joshi
* @date 2025-07-29
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class WmsBomBo extends BaseEntity {
/**
* BOM 主键ID
*/
private Long bomId;
/**
* BOM 编码(可选)
*/
private String bomCode;
/**
* BOM 名称(可选)
*/
private String bomName;
/**
* 是否启用0=否1=是)
*/
private Integer isEnabled;
/**
* 备注
*/
private String remark;
}

View File

@@ -0,0 +1,71 @@
package com.klp.domain.bo;
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;
import org.springframework.format.annotation.DateTimeFormat;
/**
* 资金日记账业务对象 wms_journal
*
* @author klp
* @date 2025-08-13
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class WmsJournalBo extends BaseEntity {
/**
* 主键ID
*/
private Long journalId;
/**
* 日期
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date journalDate;
/**
* 摘要
*/
private String summary;
/**
* 收支类型
*/
private String transType;
/**
* 对方户名
*/
private String counterpart;
/**
* 收入金额
*/
private BigDecimal incomeAmount;
/**
* 支出金额
*/
private BigDecimal expenseAmount;
/**
* 余额
*/
private BigDecimal balanceAmount;
/**
* 备注
*/
private String remark;
}

View File

@@ -0,0 +1,71 @@
package com.klp.domain.bo;
import com.klp.common.core.domain.BaseEntity;
import com.klp.common.core.validate.AddGroup;
import com.klp.common.core.validate.EditGroup;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.*;
import java.math.BigDecimal;
/**
* 订单明细业务对象 wms_order_detail
*
* @author Joshi
* @date 2025-07-18
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class WmsOrderDetailBo extends BaseEntity {
/**
* 明细ID
*/
private Long detailId;
/**
* 订单ID
*/
@NotNull(message = "订单ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long orderId;
/**
* 产品ID
*/
@NotNull(message = "产品ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long productId;
/**
* 产品数量
*/
@NotNull(message = "产品数量不能为空", groups = { AddGroup.class, EditGroup.class })
private BigDecimal quantity;
/**
* 单位
*/
@NotBlank(message = "单位不能为空", groups = { AddGroup.class, EditGroup.class })
private String unit;
/**
* 备注
*/
private String remark;
/**
* 含税单价
*/
private BigDecimal taxPrice;
/**
* 无税单价
*/
private BigDecimal noTaxPrice;
/**
* 产品规范组ID
*/
private Long groupId;
}

View File

@@ -0,0 +1,59 @@
package com.klp.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;
/**
* 其他收支业务对象 wms_other_income
*
* @author Joshi
* @date 2025-09-26
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class WmsOtherIncomeBo extends BaseEntity {
/**
* 其他收入ID主键
*/
private Long otherIncomeId;
/**
* 日期
*/
private Date incomeDate;
/**
* 类型
*/
private String incomeType;
/**
* 金额
*/
private BigDecimal amount;
/**
* 来源
*/
private String source;
/**
* 收支类型(0=收入,1=值出)
*/
private Long type;
/**
* 备注
*/
private String remark;
}

View File

@@ -0,0 +1,56 @@
package com.klp.domain.bo;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
/**
* 工艺业务对象 wms_processe
*
* @author klp
* @date 2025-08-14
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class WmsProcesseBo extends BaseEntity {
/**
* 工艺ID
*/
private Long processId;
/**
* 工艺编码
*/
private String processCode;
/**
* 工艺名称
*/
private String processName;
/**
* 产出产品(关联产品表,可选)
*/
private Long outputProductId;
/**
* 工艺描述
*/
private String processDesc;
/**
* 标准工时(小时)
*/
private BigDecimal standardTime;
/**
* 备注
*/
private String remark;
}

View File

@@ -0,0 +1,100 @@
package com.klp.domain.bo;
import com.klp.common.core.domain.BaseEntity;
import com.klp.common.core.validate.AddGroup;
import com.klp.common.core.validate.EditGroup;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.*;
import java.math.BigDecimal;
/**
* 产品业务对象 wms_product
*
* @author JR
* @date 2025-07-18
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class WmsProductBo extends BaseEntity {
/**
* 主键ID
*/
private Long productId;
/**
* 产品编号
*/
private String productCode;
/**
* 产品名称
*/
private String productName;
/**
* 负责人
*/
private String owner;
/**
* 基础材质分类ID
*/
private Long baseMaterialId;
/**
* 表面处理分类ID
*/
private Long surfaceTreatmentId;
/**
* 客户需求分类ID
*/
private Long customerReqId;
/**
* 包装分类ID
*/
private Long packagingId;
/**
* 厚度mm
*/
private BigDecimal thickness;
/**
* 宽度mm
*/
private BigDecimal width;
/**
* 内径mm
*/
private BigDecimal innerDiameter;
/**
* 单位
*/
private String unit;
/**
* 是否启用0=否1=是)
*/
private Integer isEnabled;
//备注
private String remark;
/**
* BOM 表头ID
*/
private Long bomId;
//产品类型
private String type;
//规格
private String specification;
}

View File

@@ -0,0 +1,51 @@
package com.klp.domain.bo;
import com.klp.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.*;
/**
* 产品规范组业务对象 wms_product_spec_group
*
* @author Joshi
* @date 2025-08-26
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class WmsProductSpecGroupBo extends BaseEntity {
/**
* 主键
*/
private Long groupId;
/**
* 产品规范组编码
*/
private String groupCode;
/**
* 绑定的产品ID
*/
private Long productId;
/**
* 产品规范组名称
*/
private String groupName;
/**
* 状态字典1=启用2=停用)
*/
private Long status;
/**
* 备注
*/
private String remark;
}

View File

@@ -0,0 +1,59 @@
package com.klp.domain.bo;
import com.klp.common.core.domain.BaseEntity;
import com.klp.common.core.validate.AddGroup;
import com.klp.common.core.validate.EditGroup;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.*;
import java.math.BigDecimal;
/**
* 产线业务对象 wms_production_line
*
* @author Joshi
* @date 2025-07-18
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class WmsProductionLineBo extends BaseEntity {
/**
* 产线ID
*/
private Long lineId;
/**
* 产线编号
*/
private String lineCode;
/**
* 产线名称
*/
private String lineName;
/**
* 日产能(单位同产品)
*/
private BigDecimal capacity;
/**
* 产能单位
*/
private String unit;
/**
* 是否启用0=否1=是)
*/
private Integer isEnabled;
/**
* 备注
*/
private String remark;
}

View File

@@ -0,0 +1,77 @@
package com.klp.domain.bo;
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;
import org.springframework.format.annotation.DateTimeFormat;
/**
* 应收款管理(宽松版)业务对象 wms_receivable
*
* @author klp
* @date 2025-08-13
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class WmsReceivableBo extends BaseEntity {
/**
* 应收ID主键
*/
private Long receivableId;
/**
* 客户ID
*/
private Long customerId;
/**
* 订单ID
*/
private Long orderId;
/**
* 到期日
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date dueDate;
/**
* 应收金额(可为负数用于调整)
*/
private BigDecimal amount;
/**
* 已收金额(可为负数用于冲销)
*/
private BigDecimal paidAmount;
/**
* 未收金额
*/
private BigDecimal balanceAmount;
/**
* 状态
*/
private String status;
/**
* 备注
*/
private String remark;
//时间范围筛选
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date startTime;
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date endTime;
}

View File

@@ -0,0 +1,123 @@
package com.klp.domain.bo;
import com.klp.common.core.domain.BaseEntity;
import com.klp.common.core.validate.AddGroup;
import com.klp.common.core.validate.EditGroup;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.*;
import java.util.List;
/**
* 销售话术生成器业务对象
*
* @author klp
* @date 2025-01-27
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class WmsSalesScriptGeneratorBo extends BaseEntity {
/**
* 产品ID
*/
@NotNull(message = "产品ID不能为空", groups = {AddGroup.class, EditGroup.class})
private Long productId;
/**
* 产品ID列表批量生成时使用
*/
private List<Long> productIds;
/**
* 话术数量
*/
@Min(value = 1, message = "话术数量最少为1")
@Max(value = 10, message = "话术数量最多为10")
private Integer scriptCount = 1;
/**
* 客户类型列表
*/
private List<String> customerTypes;
/**
* 是否保存到数据库
*/
private Boolean saveToDatabase = false;
/**
* 生成模式single(单个产品), batch(批量产品), preview(预览模式)
*/
private String generationMode = "single";
/**
* 自定义提示词
*/
private String customPrompt;
/**
* 温度参数
*/
@Min(value = 0, message = "温度参数不能小于0")
@Max(value = 2, message = "温度参数不能大于2")
private Double temperature = 1.0;
/**
* 最大重试次数
*/
@Min(value = 1, message = "最大重试次数最少为1")
@Max(value = 5, message = "最大重试次数最多为5")
private Integer maxRetries = 3;
/**
* 是否包含BOM信息
*/
private Boolean includeBomInfo = true;
/**
* 是否包含技术参数
*/
private Boolean includeTechParams = true;
/**
* 是否包含材料优势
*/
private Boolean includeMaterialAdvantages = true;
/**
* 话术风格professional(专业), friendly(友好), persuasive(说服力强)
*/
private String scriptStyle = "professional";
/**
* 语言zh(中文), en(英文)
*/
private String language = "zh";
/**
* 行业类型
*/
private String industryType;
/**
* 目标客户群体
*/
private String targetCustomerGroup;
/**
* 产品应用场景
*/
private String applicationScenario;
/**
* 竞争优势
*/
private String competitiveAdvantage;
/**
* 备注
*/
private String remark;
}

View File

@@ -0,0 +1,85 @@
package com.klp.domain.bo;
import com.klp.common.core.domain.BaseEntity;
import com.klp.common.core.validate.AddGroup;
import com.klp.common.core.validate.EditGroup;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.*;
import java.math.BigDecimal;
/**
* 出入库单明细业务对象 wms_stock_io_detail
*
* @author Joshi
* @date 2025-07-18
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class WmsStockIoDetailBo extends BaseEntity {
/**
* 明细ID
*/
private Long detailId;
/**
* 出入库单ID
*/
@NotNull(message = "出入库单ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long stockIoId;
/**
* 库区/库位ID
*/
@NotNull(message = "库区/库位ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long warehouseId;
/**
* 物品类型raw_material/product
*/
@NotBlank(message = "物品类型raw_material/product不能为空", groups = { AddGroup.class, EditGroup.class })
private String itemType;
/**
* 物品ID
*/
@NotNull(message = "物品ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long itemId;
/**
* 数量
*/
@NotNull(message = "数量不能为空", groups = { AddGroup.class, EditGroup.class })
private BigDecimal quantity;
/**
* 单位
*/
private String unit;
/**
* 批次号
*/
@NotBlank(message = "批次号不能为空", groups = { AddGroup.class, EditGroup.class })
private String batchNo;
/**
* 备注
*/
private String remark;
/**
* 源库位ID移库时使用
*/
private Long fromWarehouseId;
/**
* 记录类型0详情1扫码枪记录
*/
private Integer recordType;
}

View File

@@ -0,0 +1,57 @@
package com.klp.domain.bo;
import com.klp.common.core.validate.AddGroup;
import com.klp.common.core.validate.EditGroup;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;
import java.math.BigDecimal;
/**
* 出入库单主+明细批量插入业务对象
*/
@Data
public class WmsStockIoWithDetailBo {
// 主表字段
/**
* 出入库单ID
*/
private Long stockIoId;
/**
* 出入库单号
*/
@NotBlank(message = "出入库单号不能为空", groups = { AddGroup.class, EditGroup.class })
private String stockIoCode;
/**
* 类型in=入库out=出库)
*/
@NotBlank(message = "类型in=入库out=出库)不能为空", groups = { AddGroup.class, EditGroup.class })
private String ioType;
/**
* 业务类型(采购、销售、退货、调拨等)
*/
@NotBlank(message = "业务类型(采购、销售、退货、调拨等)不能为空", groups = { AddGroup.class, EditGroup.class })
private String bizType;
/**
* 单据状态0=草稿1=已提交2=已审核3=已完成)
*/
@NotNull(message = "单据状态0=草稿1=已提交2=已审核3=已完成)不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer status;
/**
* 备注
*/
private String remark;
// ...如有其他主表字段可补充
// 明细列表
private List<WmsStockIoDetailBo> details;
private Long parentId;
}

View File

@@ -0,0 +1,61 @@
package com.klp.domain.bo;
import com.klp.common.core.validate.AddGroup;
import com.klp.common.core.validate.EditGroup;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.*;
import com.klp.common.core.domain.TreeEntity;
/**
* 仓库/库区/库位自关联业务对象 wms_warehouse
*
* @author JR
* @date 2025-07-18
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class WmsWarehouseBo extends TreeEntity<WmsWarehouseBo> {
/**
* 主键ID
*/
private Long warehouseId;
/**
* 仓库/库区编码
*/
@NotBlank(message = "仓库/库区编码不能为空", groups = { AddGroup.class, EditGroup.class })
private String warehouseCode;
/**
* 仓库/库区名称
*/
@NotBlank(message = "仓库/库区名称不能为空", groups = { AddGroup.class, EditGroup.class })
private String warehouseName;
/**
* 类型0=仓库1=库区2=库位,…
*/
@NotNull(message = "类型0=仓库1=库区2=库位,…不能为空", groups = { AddGroup.class, EditGroup.class })
private Long warehouseType;
/**
* 同级排序号
*/
private Long sortNo;
/**
* 是否启用0=否1=是)
*/
private Integer isEnabled;
/**
* 备注
*/
private String remark;
}

View File

@@ -0,0 +1,56 @@
package com.klp.domain.vo;
import lombok.Data;
import java.util.List;
/**
* 数据看板概览视图对象
*
* @author klp
* @date 2025-01-27
*/
@Data
public class DashboardOverviewVO {
// /**
// * 订单汇总
// */
// private OrderSummaryVO orderSummary;
//
// /**
// * 销售经理饼图
// */
// private List<SalesManagerPieVO> salesManagerPie;
//
// /**
// * 产品销量排行
// */
// private List<ProductRankVO> productRank;
//
// /**
// * 订单物料分析
// */
// private List<OrderMaterialVO> orderMaterial;
//
// /**
// * 客户分布
// */
// private List<CustomerRegionVO> customerRegion;
// ========== 新增业务区域 ==========
/**
* 业绩区数据
*/
private PerformanceAreaVO performanceArea;
/**
* 当前情况区数据
*/
private CurrentSituationAreaVO currentSituationArea;
/**
* 推荐区数据
*/
private RecommendationAreaVO recommendationArea;
}

View File

@@ -0,0 +1,52 @@
package com.klp.domain.vo;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
/**
* 图片识别结果视图对象
*
* @author klp
* @date 2025-01-27
*/
@Data
public class ImageRecognitionVo implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 图片URL
*/
private String imageUrl;
/**
* 识别类型
*/
private String recognitionType;
/**
* 识别结果属性列表
*/
private List<AttributeVo> attributes;
/**
* 识别状态success-成功failed-失败processing-处理中
*/
private String status;
/**
* 错误信息
*/
private String errorMessage;
/**
* 处理时间(毫秒)
*/
private Long processingTime;
}

View File

@@ -0,0 +1,28 @@
package com.klp.domain.vo;
import lombok.Data;
/**
* 产线负载信息视图对象
*
* @author klp
* @date 2025-07-24
*/
@Data
public class LineLoadInfo {
/**
* 产线ID
*/
private Long lineId;
/**
* 关联的排产计划明细数量
*/
private Integer planDetailCount;
/**
* 排产天数总和
*/
private Integer totalPlanDays;
}

View File

@@ -0,0 +1,15 @@
package com.klp.domain.vo;
import lombok.Data;
import java.util.Date;
/**
* 用于计算排产计划开始结束时间的聚合类
*/
@Data
public class PlanTimeAgg {
private Long planId;
private Date startDate;
private Date endDate;
}

View File

@@ -0,0 +1,38 @@
package com.klp.domain.vo;
import lombok.Data;
/**
* 产品咨询热度排行视图对象
*
* @author klp
* @date 2025-07-24
*/
@Data
public class ProductRankingVo {
/**
* 产品ID
*/
private Long productId;
/**
* 产品编号
*/
private String productCode;
/**
* 产品名称
*/
private String productName;
/**
* 访问次数
*/
private Long viewCount;
/**
* 排名
*/
private Integer ranking;
}

View File

@@ -0,0 +1,43 @@
package com.klp.domain.vo;
import lombok.Data;
/**
* 产品销售情况视图对象
*
* @author klp
* @date 2025-01-27
*/
@Data
public class ProductSalesPerformanceVO {
/**
* 产品名称
*/
private String productName;
/**
* 产品编号
*/
private String productCode;
/**
* 销售数量
*/
private Double salesQuantity;
/**
* 销售金额
*/
private Double salesAmount;
/**
* 销售增长率
*/
private Double growthRate;
/**
* 销售排名
*/
private Integer salesRank;
}

View File

@@ -0,0 +1,53 @@
package com.klp.domain.vo;
import lombok.Data;
/**
* 原料库存和需求情况视图对象
*
* @author klp
* @date 2025-01-27
*/
@Data
public class RawMaterialInventoryVO {
/**
* 原料名称
*/
private String materialName;
/**
* 原料编号
*/
private String materialCode;
/**
* 当前库存数量
*/
private Double currentStockQuantity;
/**
* 在途数量
*/
private Double inTransitQuantity;
/**
* 总需求数量
*/
private Double totalRequiredQuantity;
/**
* 库存缺口
*/
private Double stockGap;
/**
* 安全库存
*/
private Double safetyStock;
/**
* 库存状态(充足/不足/紧急)
*/
private String stockStatus;
}

View File

@@ -0,0 +1,24 @@
package com.klp.domain.vo;
import lombok.Data;
import java.util.List;
/**
* 推荐区视图对象
*
* @author klp
* @date 2025-01-27
*/
@Data
public class RecommendationAreaVO {
/**
* 订单维度推荐
*/
private List<OrderRecommendationVO> orderRecommendations;
/**
* 原料维度推荐
*/
private List<MaterialRecommendationVO> materialRecommendations;
}

View File

@@ -0,0 +1,38 @@
package com.klp.domain.vo;
import lombok.Data;
/**
* 销售人员业绩视图对象
*
* @author klp
* @date 2025-01-27
*/
@Data
public class SalesPersonPerformanceVO {
/**
* 销售人员姓名
*/
private String salesPersonName;
/**
* 订单数量
*/
private Integer orderCount;
/**
* 销售金额
*/
private Double salesAmount;
/**
* 完成率
*/
private Double completionRate;
/**
* 业绩排名
*/
private Integer performanceRank;
}

View File

@@ -0,0 +1,68 @@
package com.klp.domain.vo;
import java.math.BigDecimal;
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;
/**
* 会计科目视图对象 wms_account
*
* @author klp
* @date 2025-08-13
*/
@Data
@ExcelIgnoreUnannotated
public class WmsAccountVo {
private static final long serialVersionUID = 1L;
/**
* 科目ID主键
*/
@ExcelProperty(value = "科目ID", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "主=键")
private Long accountId;
/**
* 科目编码
*/
@ExcelProperty(value = "科目编码")
private String accountCode;
/**
* 科目名称
*/
@ExcelProperty(value = "科目名称")
private String accountName;
/**
* 科目类型
*/
@ExcelProperty(value = "科目类型")
private String accountType;
/**
* 上级科目ID
*/
@ExcelProperty(value = "上级科目ID")
private Long parentId;
/**
* 当前余额(可容忍暂时不准确,过账汇总)
*/
@ExcelProperty(value = "当前余额", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "可=容忍暂时不准确,过账汇总")
private BigDecimal balance;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
}

View File

@@ -0,0 +1,73 @@
package com.klp.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 lombok.Data;
/**
* 实际库区/库位自关联视图对象 wms_actual_warehouse
*
* @author klp
* @date 2025-11-03
*/
@Data
@ExcelIgnoreUnannotated
public class WmsActualWarehouseVo {
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long actualWarehouseId;
/**
* 父节点ID指向同表 warehouse_id
*/
@ExcelProperty(value = "父节点ID", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "指=向同表,w=arehouse_id")
private Long actualParentId;
/**
* 实际库区/库位编码
*/
@ExcelProperty(value = "实际库区/库位编码")
private String actualWarehouseCode;
/**
* 实际库区/库位名称
*/
@ExcelProperty(value = "实际库区/库位名称")
private String actualWarehouseName;
/**
* 类型0=仓库1=库区2=库位,…
*/
@ExcelProperty(value = "类型0=仓库1=库区2=库位,…")
private Long actualWarehouseType;
/**
* 同级排序号
*/
@ExcelProperty(value = "同级排序号")
private Long sortNo;
/**
* 是否启用0=否1=是)
*/
@ExcelProperty(value = "是否启用", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "0==否1=是")
private Integer isEnabled;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
}

View File

@@ -0,0 +1,58 @@
package com.klp.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 lombok.Data;
/**
* BOM 明细,存放属性–值视图对象 wms_bom_item
*
* @author Joshi
* @date 2025-07-29
*/
@Data
@ExcelIgnoreUnannotated
public class WmsBomItemVo {
private static final long serialVersionUID = 1L;
/**
* 属性名称
*/
@ExcelProperty(value = "属性名称")
private String attrKey;
/**
* 属性值
*/
@ExcelProperty(value = "属性值")
private String attrValue;
/**
* 是否启用0=否1=是)
*/
@ExcelProperty(value = "是否启用", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "common_swicth")
private Integer isEnabled;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* BOM ID
*/
@ExcelProperty(value = "BOM ID")
private Long bomId;
/**
* BOM 明细ID
*/
@ExcelProperty(value = "BOM 明细ID")
private Long itemId;
}

View File

@@ -0,0 +1,56 @@
package com.klp.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 lombok.Data;
/**
* BOM 头,关联产品或原材料视图对象 wms_bom
*
* @author Joshi
* @date 2025-07-29
*/
@Data
@ExcelIgnoreUnannotated
public class WmsBomVo {
private static final long serialVersionUID = 1L;
/**
* BOM 主键ID
*/
@ExcelProperty(value = "BOM 主键ID")
private Long bomId;
/**
* BOM 编码(可选)
*/
@ExcelProperty(value = "BOM 编码", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "可=选")
private String bomCode;
/**
* BOM 名称(可选)
*/
@ExcelProperty(value = "BOM 名称", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "可=选")
private String bomName;
/**
* 是否启用0=否1=是)
*/
@ExcelProperty(value = "是否启用", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "0==否1=是")
private Integer isEnabled;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
}

View File

@@ -0,0 +1,65 @@
package com.klp.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 lombok.Data;
/**
* 通用分类视图对象 wms_category
*
* @author JR
* @date 2025-07-18
*/
@Data
@ExcelIgnoreUnannotated
public class WmsCategoryVo {
private static final long serialVersionUID = 1L;
/**
* 分类主键ID
*/
@ExcelProperty(value = "分类主键ID")
private Long categoryId;
/**
* 分类类型(base_material|surface_treatment|customer_req|spec_packaging)
*/
@ExcelProperty(value = "分类类型(base_material|surface_treatment|customer_req|spec_packaging)")
private String categoryType;
/**
* 分类编码
*/
@ExcelProperty(value = "分类编码")
private String categoryCode;
/**
* 分类名称
*/
@ExcelProperty(value = "分类名称")
private String categoryName;
/**
* 分类描述
*/
@ExcelProperty(value = "分类描述")
private String categoryDesc;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 是否启用(0=否,1=是)
*/
@ExcelProperty(value = "是否启用(0=否,1=是)")
private Integer isEnabled;
}

View File

@@ -0,0 +1,149 @@
package com.klp.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.common.core.domain.BaseEntity;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* 钢卷待操作视图对象 wms_coil_pending_action
*
* @author Joshi
* @date 2025-11-03
*/
@Data
@ExcelIgnoreUnannotated
public class WmsCoilPendingActionVo extends BaseEntity implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long actionId;
/**
* 关联的钢卷ID
*/
@ExcelProperty(value = "钢卷ID")
private Long coilId;
/**
* 当前钢卷号
*/
@ExcelProperty(value = "钢卷号")
private String currentCoilNo;
/**
* 操作类型1=分卷2=合卷3=更新)
*/
@ExcelProperty(value = "操作类型", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "wms_coil_action_type")
private Integer actionType;
/**
* 操作状态0=待处理1=处理中2=已完成3=已取消)
*/
@ExcelProperty(value = "操作状态", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "wms_action_status")
private Integer actionStatus;
/**
* 扫码时间
*/
@ExcelProperty(value = "扫码时间")
private Date scanTime;
/**
* 扫码设备
*/
@ExcelProperty(value = "扫码设备")
private String scanDevice;
/**
* 优先级0=普通1=重要2=紧急)
*/
@ExcelProperty(value = "优先级", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "wms_action_priority")
private Integer priority;
/**
* 来源类型
*/
@ExcelProperty(value = "来源类型")
private String sourceType;
/**
* 所在库区ID
*/
private Long warehouseId;
/**
* 库区名称
*/
@ExcelProperty(value = "库区")
private String warehouseName;
/**
* 操作人ID
*/
private Long operatorId;
/**
* 操作人姓名
*/
@ExcelProperty(value = "操作人")
private String operatorName;
/**
* 处理时间
*/
@ExcelProperty(value = "处理时间")
private Date processTime;
/**
* 完成时间
*/
@ExcelProperty(value = "完成时间")
private Date completeTime;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 创建时间
*/
@ExcelProperty(value = "创建时间")
private Date createTime;
// 钢卷相关信息(关联查询)
/**
* 钢种
*/
private String grade;
/**
* 厚度
*/
private Double thickness;
/**
* 宽度
*/
private Double width;
/**
* 重量
*/
private Double weight;
}

View File

@@ -0,0 +1,70 @@
package com.klp.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.util.Date;
/**
* 快递问题视图对象 oa_express_question
*
* @author hdka
* @date 2025-07-21
*/
@Data
@ExcelIgnoreUnannotated
public class WmsExpressQuestionVo {
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
@ExcelProperty(value = "主键id")
private Long questionId;
/**
* 关联快递
*/
@ExcelProperty(value = "关联快递")
private Long expressId;
/**
* 问题描述
*/
@ExcelProperty(value = "问题描述")
private String description;
/**
* 汇报时间
*/
@ExcelProperty(value = "汇报时间")
private Date reportTime;
/**
* 汇报人
*/
@ExcelProperty(value = "汇报人")
private String reportBy;
/**
* 0未解决1已解决
*/
@ExcelProperty(value = "状态")
private Long status;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 快递单号
*/
private String expressCode;
}

View File

@@ -0,0 +1,81 @@
package com.klp.domain.vo;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
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;
/**
* 财务单据视图对象 wms_financial_document
*
* @author klp
* @date 2025-08-13
*/
@Data
@ExcelIgnoreUnannotated
public class WmsFinancialDocumentVo {
private static final long serialVersionUID = 1L;
/**
* 单据ID主键
*/
@ExcelProperty(value = "单据ID", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "主=键")
private Long documentId;
/**
* 单据编号
*/
@ExcelProperty(value = "单据编号")
private String docNo;
/**
* 单据类型
*/
@ExcelProperty(value = "单据类型")
private String docType;
/**
* 单据日期
*/
@ExcelProperty(value = "单据日期")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date docDate;
/**
* 单据金额
*/
@ExcelProperty(value = "单据金额")
private BigDecimal amount;
/**
* 关联订单ID
*/
@ExcelProperty(value = "关联订单ID")
private Long relatedOrderId;
/**
* 单据状态
*/
@ExcelProperty(value = "单据状态")
private String status;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
//明细列表
private List<WmsJournalEntryVo> detailList;
}

View File

@@ -0,0 +1,70 @@
package com.klp.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 lombok.Data;
/**
* 二维码生成记录视图对象 wms_generate_record
*
* @author klp
* @date 2025-09-10
*/
@Data
@ExcelIgnoreUnannotated
public class WmsGenerateRecordVo {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@ExcelProperty(value = "主键")
private Long recordId;
/**
* 二维码类型字典默认为0
*/
@ExcelProperty(value = "二维码类型", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "字=典默认为0")
private Long qrcodeType;
/**
* 二维码内容JSON格式
*/
@ExcelProperty(value = "二维码内容", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "J=SON格式")
private String content;
/**
* 是否启用0启用1禁用
*/
@ExcelProperty(value = "是否启用", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "0=启用1禁用")
private Long isEnabled;
/**
* 编号
*/
@ExcelProperty(value = "编号")
private String serialNumber;
/**
* 二维码尺寸(像素)
*/
@ExcelProperty(value = "二维码尺寸", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "像=素")
private Long size;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
//状态
private Integer status;
}

View File

@@ -0,0 +1,137 @@
package com.klp.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;
/**
* 制造规范视图对象 wms_manufacturing_spec
*
* @author klp
* @date 2025-08-25
*/
@Data
@ExcelIgnoreUnannotated
public class WmsManufacturingSpecVo {
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@ExcelProperty(value = "主键")
private Long specId;
/**
* 制造规范编码
*/
@ExcelProperty(value = "制造规范编码")
private String specCode;
/**
* 制造规范名称
*/
@ExcelProperty(value = "制造规范名称")
private String specName;
/**
* 所属事业部
*/
@ExcelProperty(value = "所属事业部")
private String businessUnit;
/**
* 所属项目组
*/
@ExcelProperty(value = "所属项目组")
private String projectTeam;
/**
* 产品型号/模组
*/
@ExcelProperty(value = "产品型号/模组")
private String productModule;
/**
* 标识
*/
@ExcelProperty(value = "标识")
private String identifier;
/**
* 材质
*/
@ExcelProperty(value = "材质")
private String material;
/**
* 规格/尺寸
*/
@ExcelProperty(value = "规格/尺寸")
private String specification;
/**
* 工艺路线
*/
@ExcelProperty(value = "工艺路线")
private String processRoute;
/**
* 工艺参数
*/
@ExcelProperty(value = "工艺参数")
private String processParams;
/**
* 适用范围
*/
@ExcelProperty(value = "适用范围")
private String scope;
/**
* 检验标准
*/
@ExcelProperty(value = "检验标准")
private String inspectionStandard;
/**
* 状态字典1=启用2=未启用3=作废)
*/
@ExcelProperty(value = "状态", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "字=典1=启用2=未启用3=作废")
private Long status;
/**
* 规范类型字典1=普通规范2=新试规范3=临时规范)
*/
@ExcelProperty(value = "规范类型", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "字=典1=普通规范2=新试规范3=临时规范")
private Long specType;
/**
* 版本日期
*/
@ExcelProperty(value = "版本日期")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date versionDate;
/**
* 理论工时(h)
*/
@ExcelProperty(value = "理论工时(h)")
private BigDecimal standardHours;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
}

View File

@@ -0,0 +1,67 @@
package com.klp.domain.vo;
import java.math.BigDecimal;
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;
/**
* 订单盈亏视图对象 wms_order_profit
*
* @author klp
* @date 2025-08-13
*/
@Data
@ExcelIgnoreUnannotated
public class WmsOrderProfitVo {
private static final long serialVersionUID = 1L;
/**
* 盈亏ID主键
*/
@ExcelProperty(value = "盈亏ID", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "主=键")
private Long profitId;
/**
* 订单ID
*/
@ExcelProperty(value = "订单ID")
private Long orderId;
/**
* 成本金额
*/
@ExcelProperty(value = "成本金额")
private BigDecimal costAmount;
/**
* 收入金额
*/
@ExcelProperty(value = "收入金额")
private BigDecimal revenueAmount;
/**
* 利润金额
*/
@ExcelProperty(value = "利润金额")
private BigDecimal profitAmount;
/**
* 利润率(%)
*/
@ExcelProperty(value = "利润率(%)")
private BigDecimal profitRate;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
}

View File

@@ -0,0 +1,69 @@
package com.klp.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;
/**
* 其他收支视图对象 wms_other_income
*
* @author Joshi
* @date 2025-09-26
*/
@Data
@ExcelIgnoreUnannotated
public class WmsOtherIncomeVo {
private static final long serialVersionUID = 1L;
/**
* 其他收入ID主键
*/
@ExcelProperty(value = "其他收入ID", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "主=键")
private Long otherIncomeId;
/**
* 日期
*/
@ExcelProperty(value = "日期")
private Date incomeDate;
/**
* 类型
*/
@ExcelProperty(value = "类型")
private String incomeType;
/**
* 金额
*/
@ExcelProperty(value = "金额")
private BigDecimal amount;
/**
* 来源
*/
@ExcelProperty(value = "来源")
private String source;
/**
* 收支类型(0=收入,1=值出)
*/
@ExcelProperty(value = "收支类型(0=收入,1=值出)")
private Long type;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
}

View File

@@ -0,0 +1,88 @@
package com.klp.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;
/**
* 应付款管理(宽松版)视图对象 wms_payable
*
* @author klp
* @date 2025-08-13
*/
@Data
@ExcelIgnoreUnannotated
public class WmsPayableVo {
private static final long serialVersionUID = 1L;
/**
* 应付ID主键
*/
@ExcelProperty(value = "应付ID", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "主=键")
private Long payableId;
/**
* 供应商ID
*/
@ExcelProperty(value = "供应商ID")
private Long supplierId;
/**
* 订单ID
*/
@ExcelProperty(value = "订单ID")
private Long orderId;
/**
* 到期日
*/
@ExcelProperty(value = "到期日")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date dueDate;
/**
* 应付金额(可为负数用于调整)
*/
@ExcelProperty(value = "应付金额", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "可=为负数用于调整")
private BigDecimal amount;
/**
* 已付金额(可为负数用于冲销)
*/
@ExcelProperty(value = "已付金额", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "可=为负数用于冲销")
private BigDecimal paidAmount;
/**
* 未付金额
*/
@ExcelProperty(value = "未付金额")
private BigDecimal balanceAmount;
/**
* 状态
*/
@ExcelProperty(value = "状态")
private String status;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 供应商名称
*/
@ExcelProperty(value = "供应商名称")
private String supplierName;
}

View File

@@ -0,0 +1,77 @@
package com.klp.domain.vo;
import java.math.BigDecimal;
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;
/**
* 产品BOM产品-原材料清单)视图对象 wms_product_bom
*
* @author Joshi
* @date 2025-07-18
*/
@Data
@ExcelIgnoreUnannotated
public class WmsProductBomVo {
private static final long serialVersionUID = 1L;
/**
* BOM主键ID
*/
@ExcelProperty(value = "BOM主键ID")
private Long bomId;
/**
* 产品ID
*/
@ExcelProperty(value = "产品ID")
private Long productId;
/**
* 原材料ID
*/
@ExcelProperty(value = "原材料ID")
private Long rawMaterialId;
/**
* 每个产品所需原材料数量
*/
@ExcelProperty(value = "每个产品所需原材料数量")
private BigDecimal quantity;
/**
* 单位
*/
@ExcelProperty(value = "单位")
private String unit;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 产品名称
*/
private String productName;
/**
* 产品编码
*/
private String productCode;
/**
* 原材料名称
*/
private String rawMaterialName;
/**
* 原材料编码
*/
private String rawMaterialCode;
}

View File

@@ -0,0 +1,62 @@
package com.klp.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 lombok.Data;
/**
* 产品生产工艺(预定义产品所需工艺)视图对象 wms_product_processe
*
* @author klp
* @date 2025-08-14
*/
@Data
@ExcelIgnoreUnannotated
public class WmsProductProcesseVo {
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long ppId;
/**
* 产品ID关联产品表
*/
@ExcelProperty(value = "产品ID", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "关=联产品表")
private Long productId;
/**
* 工艺ID关联工艺表
*/
@ExcelProperty(value = "工艺ID", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "关=联工艺表")
private Long processId;
/**
* 工艺顺序(同一产品的工艺执行顺序)
*/
@ExcelProperty(value = "工艺顺序", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "同=一产品的工艺执行顺序")
private Long processSequence;
/**
* 是否必选工艺1-是/0-否
*/
@ExcelProperty(value = "是否必选工艺1-是/0-否")
private Long isRequired;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
}

View File

@@ -0,0 +1,72 @@
package com.klp.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 lombok.Data;
import java.util.List;
/**
* 采购计划主视图对象 wms_purchase_plan
*
* @author Joshi
* @date 2025-07-18
*/
@Data
@ExcelIgnoreUnannotated
public class WmsPurchasePlanVo {
private static final long serialVersionUID = 1L;
/**
* 采购计划ID
*/
@ExcelProperty(value = "采购计划ID")
private Long planId;
/**
* 采购计划编号
*/
@ExcelProperty(value = "采购计划编号")
private String planCode;
/**
* 负责人
*/
@ExcelProperty(value = "负责人")
private String owner;
/**
* 关联订单ID
*/
@ExcelProperty(value = "关联订单ID")
private Long orderId;
/**
* 状态0=新建1=待审核2=已审核3=已完成4=已取消)
*/
@ExcelProperty(value = "状态", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "0==新建1=待审核2=已审核3=已完成4=已取消")
private Integer status;
/**
* 附件信息
*/
@ExcelProperty(value = "附件信息")
private String attachmentInfo;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 采购计划明细列表
*/
private List<WmsPurchasePlanDetailVo> detailList;
}

View File

@@ -0,0 +1,225 @@
package com.klp.domain.vo;
import java.math.BigDecimal;
import java.util.List;
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;
/**
* 原材料视图对象 wms_raw_material
*
* @author Joshi
* @date 2025-07-18
*/
@Data
@ExcelIgnoreUnannotated
public class WmsRawMaterialVo {
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long rawMaterialId;
/**
* 原材料编号
*/
@ExcelProperty(value = "原材料编号")
private String rawMaterialCode;
/**
* 原材料名称
*/
@ExcelProperty(value = "原材料名称")
private String rawMaterialName;
/**
* 钢种/牌号如SPHC、SPHE、S350GD等
*/
@ExcelProperty(value = "钢种/牌号", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "如=SPHC、SPHE、S350GD等")
private String steelGrade;
/**
* 目标冷轧牌号如SPCC、DC06、SGCC等
*/
@ExcelProperty(value = "目标冷轧牌号", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "如=SPCC、DC06、SGCC等")
private String targetColdGrade;
/**
* 基础材质分类ID
*/
@ExcelProperty(value = "基础材质分类ID")
private Long baseMaterialId;
/**
* 表面处理分类ID
*/
@ExcelProperty(value = "表面处理分类ID")
private Long surfaceTreatmentId;
/**
* 厚度mm
*/
@ExcelProperty(value = "厚度", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "m=m")
private BigDecimal thickness;
/**
* 厚度偏差mm
*/
@ExcelProperty(value = "厚度偏差", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "m=m")
private BigDecimal thicknessDeviation;
/**
* 宽度mm
*/
@ExcelProperty(value = "宽度", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "m=m")
private BigDecimal width;
/**
* 目标冷轧宽度mm
*/
@ExcelProperty(value = "目标冷轧宽度", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "m=m")
private BigDecimal targetColdWidth;
/**
* 目标冷轧厚度mm
*/
@ExcelProperty(value = "目标冷轧厚度", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "m=m")
private BigDecimal targetColdThickness;
/**
* 凸度mm
*/
@ExcelProperty(value = "凸度", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "m=m")
private BigDecimal crown;
/**
* 卷重kg
*/
@ExcelProperty(value = "卷重", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "k=g")
private BigDecimal coilWeight;
/**
* 表面质量
*/
@ExcelProperty(value = "表面质量")
private String surfaceQuality;
/**
* 硬度HV5
*/
@ExcelProperty(value = "硬度", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "H=V5")
private BigDecimal hardnessHv5;
/**
* 硬度差值HV5差值≤15为合格
*/
@ExcelProperty(value = "硬度差值", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "H=V5差值≤15为合格")
private BigDecimal hardnessDiff;
/**
* 锰含量Mn%
*/
@ExcelProperty(value = "锰含量Mn", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "%=")
private BigDecimal compositionMn;
/**
* 磷含量P%
*/
@ExcelProperty(value = "磷含量P", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "%=")
private BigDecimal compositionP;
/**
* 晶粒级别如ASTM 6-8级仅电工钢
*/
@ExcelProperty(value = "晶粒级别", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "如=ASTM,6=-8级仅电工钢")
private String grainSize;
/**
* 头尾切除标记0=否1=是,汽车板专用)
*/
@ExcelProperty(value = "头尾切除标记", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "0==否1=是,汽车板专用")
private Integer headTailCutFlag;
/**
* 检测结论(如合格/条纹/微裂纹/成分偏析等)
*/
@ExcelProperty(value = "检测结论", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "如=合格/条纹/微裂纹/成分偏析等")
private String inspectionResult;
/**
* 是否启用0=否1=是)
*/
@ExcelProperty(value = "是否启用", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "0==否1=是")
private Integer isEnabled;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 单位
*/
@ExcelProperty(value = "单位")
private String unit;
/**
* BOM 表头ID
*/
@ExcelProperty(value = "BOM 表头ID")
private Long bomId;
/**
* 需求量
*/
@ExcelProperty(value = "需求量")
private BigDecimal demand;
/**
* 库存量
*/
@ExcelProperty(value = "库存量")
private BigDecimal inventory;
/**
* 在途量
*/
@ExcelProperty(value = "在途量")
private BigDecimal onTheWay;
/**
* BOM明细信息
*/
private List<WmsBomItemVo> bomItems;
//规格
private String specification;
}

View File

@@ -0,0 +1,88 @@
package com.klp.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;
/**
* 应收款管理(宽松版)视图对象 wms_receivable
*
* @author klp
* @date 2025-08-13
*/
@Data
@ExcelIgnoreUnannotated
public class WmsReceivableVo {
private static final long serialVersionUID = 1L;
/**
* 应收ID主键
*/
@ExcelProperty(value = "应收ID", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "主=键")
private Long receivableId;
/**
* 客户ID
*/
@ExcelProperty(value = "客户ID")
private Long customerId;
/**
* 订单ID
*/
@ExcelProperty(value = "订单ID")
private Long orderId;
/**
* 到期日
*/
@ExcelProperty(value = "到期日")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date dueDate;
/**
* 应收金额(可为负数用于调整)
*/
@ExcelProperty(value = "应收金额", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "可=为负数用于调整")
private BigDecimal amount;
/**
* 已收金额(可为负数用于冲销)
*/
@ExcelProperty(value = "已收金额", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "可=为负数用于冲销")
private BigDecimal paidAmount;
/**
* 未收金额
*/
@ExcelProperty(value = "未收金额")
private BigDecimal balanceAmount;
/**
* 状态
*/
@ExcelProperty(value = "状态")
private String status;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 客户名称
*/
@ExcelProperty(value = "客户名称")
private String customerName;
}

View File

@@ -0,0 +1,81 @@
package com.klp.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 lombok.Data;
/**
* 设计项目汇报详情视图对象 oa_report_detail
*
* @author ruoyi
* @date 2025-05-13
*/
@Data
@ExcelIgnoreUnannotated
public class WmsReportDetailVo {
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long detailId;
/**
* 关联汇报概述IDoa_report_summary.id
*/
@ExcelProperty(value = "关联汇报概述ID", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "o=a_report_summary.id")
private Long summaryId;
/**
* 设备唯一编号
*/
@ExcelProperty(value = "设备唯一编号")
private String deviceCode;
/**
* 设备类别
*/
@ExcelProperty(value = "设备类别")
private String category;
/**
* 设备生产说明
*/
@ExcelProperty(value = "设备生产说明")
private String deviceDescription;
/**
* 汇报详情内容(含文字、图像说明等)
*/
@ExcelProperty(value = "汇报详情内容", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "含=文字、图像说明等")
private String reportDetail;
/**
* 关联图像 OSS ID 列表(逗号分隔)
*/
@ExcelProperty(value = "关联图像 OSS ID 列表", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "逗=号分隔")
private String ossIds;
/**
* 关联图像 OSS URL 列表
*/
@ExcelProperty(value = "关联图像 OSS URL 列表", converter = ExcelDictConvert.class)
private String images;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
}

View File

@@ -0,0 +1,63 @@
package com.klp.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.util.Date;
/**
* 设计项目汇报概述视图对象 oa_report_summary
*
* @author cpy
* @date 2025-05-13
*/
@Data
@ExcelIgnoreUnannotated
public class WmsReportSummaryVo {
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long summaryId;
/**
* 汇报标题
*/
@ExcelProperty(value = "汇报标题")
private String reportTitle;
/**
* 汇报日期
*/
@ExcelProperty(value = "汇报日期")
private Date reportDate;
/**
* 汇报人
*/
@ExcelProperty(value = "汇报人")
private String reporter;
/**
* 项目名称
*/
@ExcelProperty(value = "项目名称")
private String projectName;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
private Long type;
@ExcelProperty(value = "最近更新时间")
private Date lastUpdateTime;
}

View File

@@ -0,0 +1,122 @@
package com.klp.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;
/**
* 排产计划明细视图对象 wms_schedule_plan_detail
*
* @author JR
* @date 2025-07-18
*/
@Data
@ExcelIgnoreUnannotated
public class WmsSchedulePlanDetailVo {
private static final long serialVersionUID = 1L;
/**
* 明细ID
*/
@ExcelProperty(value = "明细ID")
private Long detailId;
/**
* 排产计划ID
*/
@ExcelProperty(value = "排产计划ID")
private Long planId;
/**
* 产线ID
*/
@ExcelProperty(value = "产线ID")
private Long lineId;
/**
* 生产任务id(原批次id)
*/
@ExcelProperty(value = "生产任务id")
private Long taskId;
/**
* 产品ID
*/
@ExcelProperty(value = "产品ID")
private Long productId;
/**
* 排产数量
*/
@ExcelProperty(value = "排产数量")
private BigDecimal quantity;
/**
* 计划开始日期
*/
@ExcelProperty(value = "计划开始日期")
private Date startDate;
/**
* 计划结束日期
*/
@ExcelProperty(value = "计划结束日期")
private Date endDate;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 产线日产能
*/
private BigDecimal capacity;
/**
* 总产能
*/
private BigDecimal totalCapacity;
/**
* 目标生产数量
*/
private BigDecimal planQuantity;
/**
* 天数
*/
private Integer days;
/**
* 产线名字
*/
@ExcelProperty(value = "产线名字")
private String lineName;
/**
* 批次号
*/
@ExcelProperty(value = "批次号")
private String batchNo;
/**
* 计划名称
*/
@ExcelProperty(value = "计划名称")
private String planName;
/**
* 计划编码
*/
@ExcelProperty(value = "计划编码")
private String planCode;
}

View File

@@ -0,0 +1,91 @@
package com.klp.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.klp.common.annotation.ExcelDictFormat;
import com.klp.common.convert.ExcelDictConvert;
import lombok.Data;
import java.util.Date;
/**
* 排产计划视图对象 wms_schedule_plan
*
* @author JR
* @date 2025-07-18
*/
@Data
@ExcelIgnoreUnannotated
public class WmsSchedulePlanVo {
private static final long serialVersionUID = 1L;
/**
* 排产计划ID
*/
@ExcelProperty(value = "排产计划ID")
private Long planId;
/**
* 排产计划编号
*/
@ExcelProperty(value = "排产计划编号")
private String planCode;
/**
* 关联订单ID
*/
@ExcelProperty(value = "关联订单ID")
private Long orderId;
/**
* 状态0=新建1=已排产2=生产中3=已完成)
*/
@ExcelProperty(value = "状态", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "0==新建1=已排产2=生产中3=已完成")
private Integer status;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 创建者
*/
@ExcelProperty(value = "创建者")
private String createBy;
/**
* 创建时间
*/
@ExcelProperty(value = "创建时间")
private Date createTime;
/**
* 优先级(0=低1=中2=高3=vip ....)
*/
@ExcelProperty(value = "优先级")
private Long priority;
// /**
// * 工艺路线
// */
// @ExcelProperty(value = "工艺路线")
// private String processRoute;
/**
* 计划开始日期
*/
@ExcelProperty(value = "计划开始日期")
private Date startDate;
/**
* 计划结束日期
*/
@ExcelProperty(value = "计划结束日期")
private Date endDate;
}

View File

@@ -0,0 +1,15 @@
package com.klp.mapper;
import com.klp.domain.WmsBomItem;
import com.klp.domain.vo.WmsBomItemVo;
import com.klp.common.core.mapper.BaseMapperPlus;
/**
* BOM 明细存放属性值Mapper接口
*
* @author Joshi
* @date 2025-07-29
*/
public interface WmsBomItemMapper extends BaseMapperPlus<WmsBomItemMapper, WmsBomItem, WmsBomItemVo> {
}

View File

@@ -0,0 +1,15 @@
package com.klp.mapper;
import com.klp.domain.WmsBom;
import com.klp.domain.vo.WmsBomVo;
import com.klp.common.core.mapper.BaseMapperPlus;
/**
* BOM 头关联产品或原材料Mapper接口
*
* @author Joshi
* @date 2025-07-29
*/
public interface WmsBomMapper extends BaseMapperPlus<WmsBomMapper, WmsBom, WmsBomVo> {
}

View File

@@ -0,0 +1,15 @@
package com.klp.mapper;
import com.klp.domain.WmsCategory;
import com.klp.domain.vo.WmsCategoryVo;
import com.klp.common.core.mapper.BaseMapperPlus;
/**
* 通用分类Mapper接口
*
* @author JR
* @date 2025-07-18
*/
public interface WmsCategoryMapper extends BaseMapperPlus<WmsCategoryMapper, WmsCategory, WmsCategoryVo> {
}

View File

@@ -0,0 +1,16 @@
package com.klp.mapper;
import com.klp.common.core.mapper.BaseMapperPlus;
import com.klp.domain.WmsCoilPendingAction;
import com.klp.domain.vo.WmsCoilPendingActionVo;
/**
* 钢卷待操作Mapper接口
*
* @author Joshi
* @date 2025-11-03
*/
public interface WmsCoilPendingActionMapper extends BaseMapperPlus<WmsCoilPendingActionMapper, WmsCoilPendingAction, WmsCoilPendingActionVo> {
}

View File

@@ -0,0 +1,15 @@
package com.klp.mapper;
import com.klp.domain.WmsContract;
import com.klp.domain.vo.WmsContractVo;
import com.klp.common.core.mapper.BaseMapperPlus;
/**
* 合同信息Mapper接口
*
* @author Joshi
* @date 2025-08-12
*/
public interface WmsContractMapper extends BaseMapperPlus<WmsContractMapper, WmsContract, WmsContractVo> {
}

View File

@@ -0,0 +1,15 @@
package com.klp.mapper;
import com.klp.domain.WmsCustomer;
import com.klp.domain.vo.WmsCustomerVo;
import com.klp.common.core.mapper.BaseMapperPlus;
/**
* CRM 客户Mapper接口
*
* @author Joshi
* @date 2025-08-12
*/
public interface WmsCustomerMapper extends BaseMapperPlus<WmsCustomerMapper, WmsCustomer, WmsCustomerVo> {
}

View File

@@ -0,0 +1,15 @@
package com.klp.mapper;
import com.klp.domain.WmsJournalEntry;
import com.klp.domain.vo.WmsJournalEntryVo;
import com.klp.common.core.mapper.BaseMapperPlus;
/**
* 日记账凭证宽松版Mapper接口
*
* @author klp
* @date 2025-08-13
*/
public interface WmsJournalEntryMapper extends BaseMapperPlus<WmsJournalEntryMapper, WmsJournalEntry, WmsJournalEntryVo> {
}

View File

@@ -0,0 +1,21 @@
package com.klp.mapper;
import com.klp.domain.WmsJournal;
import com.klp.domain.vo.WmsJournalVo;
import com.klp.common.core.mapper.BaseMapperPlus;
import java.math.BigDecimal;
/**
* 资金日记账Mapper接口
*
* @author klp
* @date 2025-08-13
*/
public interface WmsJournalMapper extends BaseMapperPlus<WmsJournalMapper, WmsJournal, WmsJournalVo> {
/**
* 获取最后一条记录的余额 (用于新增记录时计算余额)
*/
BigDecimal getLastBalance();
}

View File

@@ -0,0 +1,15 @@
package com.klp.mapper;
import com.klp.domain.WmsManufacturingSpec;
import com.klp.domain.vo.WmsManufacturingSpecVo;
import com.klp.common.core.mapper.BaseMapperPlus;
/**
* 制造规范Mapper接口
*
* @author klp
* @date 2025-08-25
*/
public interface WmsManufacturingSpecMapper extends BaseMapperPlus<WmsManufacturingSpecMapper, WmsManufacturingSpec, WmsManufacturingSpecVo> {
}

View File

@@ -0,0 +1,20 @@
package com.klp.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.klp.domain.WmsOrder;
import com.klp.domain.vo.WmsOrderVo;
import com.klp.common.core.mapper.BaseMapperPlus;
import org.apache.ibatis.annotations.Param;
/**
* 订单主Mapper接口
*
* @author Joshi
* @date 2025-07-18
*/
public interface WmsOrderMapper extends BaseMapperPlus<WmsOrderMapper, WmsOrder, WmsOrderVo> {
Page<WmsOrderVo> selectVoPlusPage(Page<?> page, @Param("ew") Wrapper<WmsOrder> wrapper);
}

View File

@@ -0,0 +1,19 @@
package com.klp.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.klp.domain.WmsPayable;
import com.klp.domain.vo.WmsPayableVo;
import com.klp.common.core.mapper.BaseMapperPlus;
import org.apache.ibatis.annotations.Param;
/**
* 应付款管理宽松版Mapper接口
*
* @author klp
* @date 2025-08-13
*/
public interface WmsPayableMapper extends BaseMapperPlus<WmsPayableMapper, WmsPayable, WmsPayableVo> {
Page<WmsPayableVo> selectVoPagePlus(Page<Object> build, @Param("ew") QueryWrapper<WmsPayable> lqw);
}

View File

@@ -0,0 +1,15 @@
package com.klp.mapper;
import com.klp.domain.WmsProcessTask;
import com.klp.domain.vo.WmsProcessTaskVo;
import com.klp.common.core.mapper.BaseMapperPlus;
/**
* 工艺任务生产计划所需工艺任务Mapper接口
*
* @author klp
* @date 2025-08-14
*/
public interface WmsProcessTaskMapper extends BaseMapperPlus<WmsProcessTaskMapper, WmsProcessTask, WmsProcessTaskVo> {
}

View File

@@ -0,0 +1,15 @@
package com.klp.mapper;
import com.klp.domain.WmsProcesse;
import com.klp.domain.vo.WmsProcesseVo;
import com.klp.common.core.mapper.BaseMapperPlus;
/**
* 工艺Mapper接口
*
* @author klp
* @date 2025-08-14
*/
public interface WmsProcesseMapper extends BaseMapperPlus<WmsProcesseMapper, WmsProcesse, WmsProcesseVo> {
}

View File

@@ -0,0 +1,217 @@
package com.klp.mapper;
import com.klp.domain.WmsProduct;
import com.klp.domain.vo.*;
import com.klp.common.core.mapper.BaseMapperPlus;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
* 产品Mapper接口
*
* @author JR
* @date 2025-07-18
*/
public interface WmsProductMapper extends BaseMapperPlus<WmsProductMapper, WmsProduct, WmsProductVo> {
// // 订单汇总
// @Select("SELECT " +
// "COUNT(*) AS totalOrderCount, " +
// "SUM(CASE WHEN order_status=2 THEN 1 ELSE 0 END) AS finishedOrderCount, " +
// "ROUND(SUM(CASE WHEN order_status=2 THEN 1 ELSE 0 END)/COUNT(*), 4) AS finishedRate, " +
// "SUM(CASE WHEN order_status=2 AND DATE_FORMAT(create_time, '%Y-%m')=DATE_FORMAT(NOW(), '%Y-%m') THEN 1 ELSE 0 END) AS monthFinishedOrderCount, " +
// "ROUND(SUM(CASE WHEN order_status=2 AND DATE_FORMAT(create_time, '%Y-%m')=DATE_FORMAT(NOW(), '%Y-%m') THEN 1 ELSE 0 END)/COUNT(*), 4) AS monthFinishedRate, " +
// "(SELECT COUNT(*) FROM wms_order WHERE del_flag=0 AND DATE_FORMAT(create_time, '%Y-%m')=DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 MONTH), '%Y-%m')) AS lastMonthTotalOrderCount, " +
// "(SELECT SUM(CASE WHEN order_status=2 THEN 1 ELSE 0 END) FROM wms_order WHERE del_flag=0 AND DATE_FORMAT(create_time, '%Y-%m')=DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 MONTH), '%Y-%m')) AS lastMonthFinishedOrderCount, " +
// "(SELECT ROUND(SUM(CASE WHEN order_status=2 THEN 1 ELSE 0 END)/COUNT(*), 4) FROM wms_order WHERE del_flag=0 AND DATE_FORMAT(create_time, '%Y-%m')=DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 1 MONTH), '%Y-%m')) AS lastMonthFinishedRate " +
// "FROM wms_order WHERE del_flag=0")
// OrderSummaryVO selectOrderSummary();
//
// // 销售经理饼图
// @Select("SELECT sales_manager, SUM(od.quantity) AS totalSales " +
// "FROM wms_order o JOIN wms_order_detail od ON o.order_id = od.order_id " +
// "WHERE o.order_status = 2 AND o.del_flag=0 GROUP BY o.sales_manager")
// List<SalesManagerPieVO> selectSalesManagerPie();
//
// // 产品销量排行
// @Select("SELECT p.product_name, SUM(od.quantity) AS totalSales " +
// "FROM wms_order_detail od JOIN wms_product p ON od.product_id = p.product_id " +
// "GROUP BY p.product_name ORDER BY totalSales DESC LIMIT 10")
// List<ProductRankVO> selectProductRank();
//
// // 订单物料分析(只分析库存量和销售销量)
// @Select("SELECT p.product_name AS materialName, SUM(od.quantity) AS usedCount, " +
// "(SELECT IFNULL(SUM(quantity),0) FROM wms_stock s WHERE s.item_type='product' AND s.item_id = p.product_id AND s.del_flag=0) AS stockCount, " +
// "0 AS purchaseCycle " +
// "FROM wms_order_detail od JOIN wms_product p ON od.product_id = p.product_id " +
// "GROUP BY p.product_id, p.product_name")
// List<OrderMaterialVO> selectOrderMaterial();
//
// // 客户分布热力图
// @Select("SELECT o.customer_name AS region, COUNT(*) AS customerCount " +
// "FROM wms_order o WHERE o.del_flag=0 GROUP BY o.customer_name")
// List<CustomerRegionVO> selectCustomerRegion();
// ========== 新增业务区域查询方法 ==========
// 业绩区 - 产品销售情况
@Select("SELECT p.product_name, p.product_code, " +
"SUM(od.quantity) AS salesQuantity, " +
"SUM(od.quantity) AS salesAmount, " +
"0 AS growthRate, " +
"RANK() OVER (ORDER BY SUM(od.quantity) DESC) AS salesRank " +
"FROM wms_order_detail od " +
"JOIN wms_product p ON od.product_id = p.product_id " +
"JOIN wms_order o ON od.order_id = o.order_id " +
"WHERE o.order_status = 2 AND o.del_flag = 0 " +
"GROUP BY p.product_id, p.product_name, p.product_code " +
"ORDER BY salesQuantity DESC LIMIT 10")
List<ProductSalesPerformanceVO> selectProductSalesPerformance();
// 业绩区 - 销售人员业绩
@Select("SELECT o.sales_manager AS salesPersonName, " +
"COUNT(DISTINCT o.order_id) AS orderCount, " +
"SUM(od.quantity) AS salesAmount, " +
"ROUND(SUM(CASE WHEN o.order_status = 2 THEN 1 ELSE 0 END) / COUNT(*), 4) AS completionRate, " +
"RANK() OVER (ORDER BY SUM(od.quantity) DESC) AS performanceRank " +
"FROM wms_order o " +
"JOIN wms_order_detail od ON o.order_id = od.order_id " +
"WHERE o.del_flag = 0 " +
"GROUP BY o.sales_manager " +
"ORDER BY salesAmount DESC")
List<SalesPersonPerformanceVO> selectSalesPersonPerformance();
// 业绩区 - 总订单数量统计
@Select("SELECT " +
"COUNT(*) AS totalOrderCount, " +
"SUM(CASE WHEN order_status = 2 THEN 1 ELSE 0 END) AS completedOrderCount, " +
"SUM(CASE WHEN order_status = 1 THEN 1 ELSE 0 END) AS inProgressOrderCount, " +
"SUM(CASE WHEN order_status = 0 THEN 1 ELSE 0 END) AS pendingOrderCount, " +
"SUM(CASE WHEN DATE_FORMAT(create_time, '%Y-%m') = DATE_FORMAT(NOW(), '%Y-%m') THEN 1 ELSE 0 END) AS monthlyNewOrderCount, " +
"ROUND(SUM(CASE WHEN order_status = 2 THEN 1 ELSE 0 END) / COUNT(*), 4) AS completionRate " +
"FROM wms_order WHERE del_flag = 0")
OrderCountStatisticsVO selectOrderCountStatistics();
// 当前情况区 - 订单所需的产品统计
@Select("SELECT p.product_name, p.product_code, " +
"SUM(od.quantity) AS orderDemandQuantity, " +
"IFNULL(s.stockQuantity, 0) AS currentStockQuantity, " +
"SUM(od.quantity) - IFNULL(s.stockQuantity, 0) AS stockGap, " +
"COUNT(DISTINCT o.order_id) AS relatedOrderCount " +
"FROM wms_order_detail od " +
"JOIN wms_product p ON od.product_id = p.product_id " +
"JOIN wms_order o ON od.order_id = o.order_id " +
"LEFT JOIN (SELECT item_id, SUM(quantity) AS stockQuantity FROM wms_stock WHERE item_type = 'product' AND del_flag = 0 GROUP BY item_id) s ON p.product_id = s.item_id " +
"WHERE o.order_status IN (0, 1) AND o.del_flag = 0 " +
"GROUP BY p.product_id, p.product_name, p.product_code " +
"ORDER BY stockGap DESC")
List<OrderProductStatisticsVO> selectOrderProductStatistics();
// 当前情况区 - 根据BOM计算的原料需求
@Select("SELECT p.product_name, p.product_code, " +
"rm.raw_material_name AS materialName, " +
"rm.raw_material_code AS materialCode, " +
"SUM(od.quantity * pb.quantity) AS requiredQuantity, " +
"IFNULL(s.stockQuantity, 0) AS currentStockQuantity, " +
"IFNULL(it.inTransitQuantity, 0) AS inTransitQuantity, " +
"SUM(od.quantity * pb.quantity) - IFNULL(s.stockQuantity, 0) - IFNULL(it.inTransitQuantity, 0) AS stockGap " +
"FROM wms_order_detail od " +
"JOIN wms_product p ON od.product_id = p.product_id " +
"JOIN wms_product_bom pb ON p.product_id = pb.product_id " +
"JOIN wms_raw_material rm ON pb.raw_material_id = rm.raw_material_id " +
"JOIN wms_order o ON od.order_id = o.order_id " +
"LEFT JOIN (SELECT item_id, SUM(quantity) AS stockQuantity FROM wms_stock WHERE item_type = 'raw_material' AND del_flag = 0 GROUP BY item_id) s ON rm.raw_material_id = s.item_id " +
"LEFT JOIN (SELECT raw_material_id, SUM(quantity) AS inTransitQuantity FROM wms_purchase_plan_detail WHERE status = 1 GROUP BY raw_material_id) it ON rm.raw_material_id = it.raw_material_id " +
"WHERE o.order_status IN (0, 1) AND o.del_flag = 0 " +
"GROUP BY p.product_id, p.product_name, p.product_code, rm.raw_material_id, rm.raw_material_name, rm.raw_material_code " +
"ORDER BY stockGap DESC")
List<ProductMaterialRequirementVO> selectProductMaterialRequirements();
// 当前情况区 - 原料库存和需求情况
@Select("SELECT rm.raw_material_name AS materialName, " +
"rm.raw_material_code AS materialCode, " +
"IFNULL(s.stockQuantity, 0) AS currentStockQuantity, " +
"IFNULL(it.inTransitQuantity, 0) AS inTransitQuantity, " +
"IFNULL(req.requiredQuantity, 0) AS totalRequiredQuantity, " +
"IFNULL(req.requiredQuantity, 0) - IFNULL(s.stockQuantity, 0) - IFNULL(it.inTransitQuantity, 0) AS stockGap, " +
"0 AS safetyStock, " +
"CASE " +
" WHEN IFNULL(req.requiredQuantity, 0) <= IFNULL(s.stockQuantity, 0) + IFNULL(it.inTransitQuantity, 0) THEN '充足' " +
" WHEN IFNULL(req.requiredQuantity, 0) <= IFNULL(s.stockQuantity, 0) + IFNULL(it.inTransitQuantity, 0) + 0 THEN '不足' " +
" ELSE '紧急' " +
"END AS stockStatus " +
"FROM wms_raw_material rm " +
"LEFT JOIN (SELECT item_id, SUM(quantity) AS stockQuantity FROM wms_stock WHERE item_type = 'raw_material' AND del_flag = 0 GROUP BY item_id) s ON rm.raw_material_id = s.item_id " +
"LEFT JOIN (SELECT raw_material_id, SUM(quantity) AS inTransitQuantity FROM wms_purchase_plan_detail WHERE status = 1 GROUP BY raw_material_id) it ON rm.raw_material_id = it.raw_material_id " +
"LEFT JOIN (SELECT pb.raw_material_id, SUM(od.quantity * pb.quantity) AS requiredQuantity " +
" FROM wms_order_detail od " +
" JOIN wms_order o ON od.order_id = o.order_id " +
" JOIN wms_product_bom pb ON od.product_id = pb.product_id " +
" WHERE o.order_status IN (0, 1) AND o.del_flag = 0 " +
" GROUP BY pb.raw_material_id) req ON rm.raw_material_id = req.raw_material_id " +
"ORDER BY stockGap DESC")
List<RawMaterialInventoryVO> selectRawMaterialInventory();
// 推荐区 - 订单维度推荐
@Select("SELECT o.order_code, o.customer_name, " +
"CASE o.order_status " +
" WHEN 0 THEN '新建' " +
" WHEN 1 THEN '生产中' " +
" WHEN 2 THEN '已完成' " +
" WHEN 3 THEN '已取消' " +
"END AS orderStatus, " +
"CASE " +
" WHEN o.order_status = 0 THEN '高' " +
" WHEN o.order_status = 1 THEN '中' " +
" ELSE '低' " +
"END AS priority, " +
"CASE " +
" WHEN o.order_status = 0 THEN '新订单需要及时处理' " +
" WHEN o.order_status = 1 THEN '生产中的订单需要关注进度' " +
" ELSE '订单已完成或已取消' " +
"END AS recommendationReason, " +
"CASE " +
" WHEN o.order_status = 0 THEN '开始生产' " +
" WHEN o.order_status = 1 THEN '检查生产进度' " +
" ELSE '无需操作' " +
"END AS suggestedAction, " +
"DATE_ADD(o.create_time, INTERVAL 30 DAY) AS estimatedCompletionTime " +
"FROM wms_order o " +
"WHERE o.order_status IN (0, 1) AND o.del_flag = 0 " +
"ORDER BY o.create_time ASC LIMIT 10")
List<OrderRecommendationVO> selectOrderRecommendations();
// 推荐区 - 原料维度推荐
@Select("SELECT rm.raw_material_name AS materialName, " +
"rm.raw_material_code AS materialCode, " +
"GREATEST(0, IFNULL(req.requiredQuantity, 0) - IFNULL(s.stockQuantity, 0) - IFNULL(it.inTransitQuantity, 0)) AS recommendedPurchaseQuantity, " +
"'默认供应商' AS recommendedSupplier, " +
"CASE " +
" WHEN IFNULL(req.requiredQuantity, 0) > IFNULL(s.stockQuantity, 0) + IFNULL(it.inTransitQuantity, 0) + 0 THEN '库存不足,需要紧急采购' " +
" WHEN IFNULL(req.requiredQuantity, 0) > IFNULL(s.stockQuantity, 0) + IFNULL(it.inTransitQuantity, 0) THEN '库存不足,建议采购' " +
" ELSE '库存充足' " +
"END AS recommendationReason, " +
"CASE " +
" WHEN IFNULL(req.requiredQuantity, 0) > IFNULL(s.stockQuantity, 0) + IFNULL(it.inTransitQuantity, 0) + 0 THEN '紧急' " +
" WHEN IFNULL(req.requiredQuantity, 0) > IFNULL(s.stockQuantity, 0) + IFNULL(it.inTransitQuantity, 0) THEN '一般' " +
" ELSE '低' " +
"END AS urgencyLevel, " +
"DATE_ADD(NOW(), INTERVAL 7 DAY) AS estimatedArrivalTime, " +
"CASE " +
" WHEN IFNULL(req.requiredQuantity, 0) > IFNULL(s.stockQuantity, 0) + IFNULL(it.inTransitQuantity, 0) + 0 THEN '立即采购' " +
" WHEN IFNULL(req.requiredQuantity, 0) > IFNULL(s.stockQuantity, 0) + IFNULL(it.inTransitQuantity, 0) THEN '计划采购' " +
" ELSE '无需采购' " +
"END AS suggestedAction " +
"FROM wms_raw_material rm " +
"LEFT JOIN (SELECT item_id, SUM(quantity) AS stockQuantity FROM wms_stock WHERE item_type = 'raw_material' AND del_flag = 0 GROUP BY item_id) s ON rm.raw_material_id = s.item_id " +
"LEFT JOIN (SELECT raw_material_id, SUM(quantity) AS inTransitQuantity FROM wms_purchase_plan_detail WHERE status = 1 GROUP BY raw_material_id) it ON rm.raw_material_id = it.raw_material_id " +
"LEFT JOIN (SELECT pb.raw_material_id, SUM(od.quantity * pb.quantity) AS requiredQuantity " +
" FROM wms_order_detail od " +
" JOIN wms_order o ON od.order_id = o.order_id " +
" JOIN wms_product_bom pb ON od.product_id = pb.product_id " +
" WHERE o.order_status IN (0, 1) AND o.del_flag = 0 " +
" GROUP BY pb.raw_material_id) req ON rm.raw_material_id = req.raw_material_id " +
"WHERE IFNULL(req.requiredQuantity, 0) > IFNULL(s.stockQuantity, 0) + IFNULL(it.inTransitQuantity, 0) " +
"ORDER BY (IFNULL(req.requiredQuantity, 0) - IFNULL(s.stockQuantity, 0) - IFNULL(it.inTransitQuantity, 0)) DESC LIMIT 10")
List<MaterialRecommendationVO> selectMaterialRecommendations();
}

View File

@@ -0,0 +1,15 @@
package com.klp.mapper;
import com.klp.domain.WmsProductSpec;
import com.klp.domain.vo.WmsProductSpecVo;
import com.klp.common.core.mapper.BaseMapperPlus;
/**
* 产品规范键值对模式Mapper接口
*
* @author Joshi
* @date 2025-08-26
*/
public interface WmsProductSpecMapper extends BaseMapperPlus<WmsProductSpecMapper, WmsProductSpec, WmsProductSpecVo> {
}

View File

@@ -0,0 +1,23 @@
package com.klp.mapper;
import com.klp.domain.WmsProductionLine;
import com.klp.domain.vo.WmsProductionLineVo;
import com.klp.domain.vo.LineLoadInfo;
import com.klp.common.core.mapper.BaseMapperPlus;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 产线Mapper接口
*
* @author Joshi
* @date 2025-07-18
*/
public interface WmsProductionLineMapper extends BaseMapperPlus<WmsProductionLineMapper, WmsProductionLine, WmsProductionLineVo> {
/**
* 批量查询产线负载信息
*/
List<LineLoadInfo> selectLineLoadInfo(@Param("lineIds") List<Long> lineIds);
}

View File

@@ -0,0 +1,19 @@
package com.klp.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.klp.domain.WmsProductionTask;
import com.klp.domain.vo.WmsProductionTaskVo;
import com.klp.common.core.mapper.BaseMapperPlus;
import org.apache.ibatis.annotations.Param;
/**
* 生产任务Mapper接口
*
* @author Joshi
* @date 2025-08-26
*/
public interface WmsProductionTaskMapper extends BaseMapperPlus<WmsProductionTaskMapper, WmsProductionTask, WmsProductionTaskVo> {
Page<WmsProductionTaskVo> selectVoPagePlus(Page<Object> build,@Param("ew") QueryWrapper<WmsProductionTask> lqw);
}

View File

@@ -0,0 +1,15 @@
package com.klp.mapper;
import com.klp.domain.WmsPurchasePlan;
import com.klp.domain.vo.WmsPurchasePlanVo;
import com.klp.common.core.mapper.BaseMapperPlus;
/**
* 采购计划主Mapper接口
*
* @author Joshi
* @date 2025-07-18
*/
public interface WmsPurchasePlanMapper extends BaseMapperPlus<WmsPurchasePlanMapper, WmsPurchasePlan, WmsPurchasePlanVo> {
}

View File

@@ -0,0 +1,15 @@
package com.klp.mapper;
import com.klp.domain.WmsRawMaterial;
import com.klp.domain.vo.WmsRawMaterialVo;
import com.klp.common.core.mapper.BaseMapperPlus;
/**
* 原材料Mapper接口
*
* @author Joshi
* @date 2025-07-18
*/
public interface WmsRawMaterialMapper extends BaseMapperPlus<WmsRawMaterialMapper, WmsRawMaterial, WmsRawMaterialVo> {
}

View File

@@ -0,0 +1,27 @@
package com.klp.mapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.klp.domain.WmsSchedulePlanDetail;
import com.klp.domain.vo.PlanTimeAgg;
import com.klp.domain.vo.WmsSchedulePlanDetailVo;
import com.klp.common.core.mapper.BaseMapperPlus;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 排产计划明细Mapper接口
*
* @author JR
* @date 2025-07-18
*/
public interface WmsSchedulePlanDetailMapper extends BaseMapperPlus<WmsSchedulePlanDetailMapper, WmsSchedulePlanDetail, WmsSchedulePlanDetailVo> {
List<PlanTimeAgg> selectPlanTimeAgg(@Param("planIds") List<Long> planIds);
Page<WmsSchedulePlanDetailVo> selectVoPagePlus(Page<Object> build,@Param("ew") QueryWrapper<WmsSchedulePlanDetail> lqw);
List<WmsSchedulePlanDetailVo> selectVoListWithName(@Param("ew") QueryWrapper<WmsSchedulePlanDetail> lqw);
}

View File

@@ -0,0 +1,15 @@
package com.klp.mapper;
import com.klp.domain.WmsSchedulePlan;
import com.klp.domain.vo.WmsSchedulePlanVo;
import com.klp.common.core.mapper.BaseMapperPlus;
/**
* 排产计划Mapper接口
*
* @author JR
* @date 2025-07-18
*/
public interface WmsSchedulePlanMapper extends BaseMapperPlus<WmsSchedulePlanMapper, WmsSchedulePlan, WmsSchedulePlanVo> {
}

View File

@@ -0,0 +1,67 @@
package com.klp.service;
import com.klp.domain.vo.BatchGroupVo;
import com.klp.domain.vo.WmsBatchVo;
import com.klp.domain.bo.WmsBatchBo;
import com.klp.common.core.page.TableDataInfo;
import com.klp.common.core.domain.PageQuery;
import java.util.Collection;
import java.util.List;
import java.util.Map;
/**
* 批次合并相同工艺的任务Service接口
*
* @author klp
* @date 2025-08-14
*/
public interface IWmsBatchService {
/**
* 查询批次(合并相同工艺的任务)
*/
WmsBatchVo queryById(Long batchId);
/**
* 查询批次(合并相同工艺的任务)列表
*/
TableDataInfo<WmsBatchVo> queryPageList(WmsBatchBo bo, PageQuery pageQuery);
/**
* 查询批次(合并相同工艺的任务)列表
*/
List<WmsBatchVo> queryList(WmsBatchBo bo);
/**
* 新增批次(合并相同工艺的任务)
*/
Boolean insertByBo(WmsBatchBo bo);
/**
* 修改批次(合并相同工艺的任务)
*/
Boolean updateByBo(WmsBatchBo bo);
/**
* 校验并批量删除批次(合并相同工艺的任务)信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 检测任务执行是否会产生死锁
*
* @param rows 任务执行顺序数组
* @return 是否存在死锁
*/
boolean checkDeadlock(List<List<Map<String, Object>>> rows);
/**
* 生成不会产生死锁的批次分配方案
*
* @param rows 任务执行顺序数组
* @return 批次分配方案
*/
List<BatchGroupVo> generateNonDeadlockBatches(List<List<Map<String, Object>>> rows);
}

View File

@@ -0,0 +1,49 @@
package com.klp.service;
import com.klp.domain.WmsCategory;
import com.klp.domain.vo.WmsCategoryVo;
import com.klp.domain.bo.WmsCategoryBo;
import com.klp.common.core.page.TableDataInfo;
import com.klp.common.core.domain.PageQuery;
import java.util.Collection;
import java.util.List;
/**
* 通用分类Service接口
*
* @author JR
* @date 2025-07-18
*/
public interface IWmsCategoryService {
/**
* 查询通用分类
*/
WmsCategoryVo queryById(Long categoryId);
/**
* 查询通用分类列表
*/
TableDataInfo<WmsCategoryVo> queryPageList(WmsCategoryBo bo, PageQuery pageQuery);
/**
* 查询通用分类列表
*/
List<WmsCategoryVo> queryList(WmsCategoryBo bo);
/**
* 新增通用分类
*/
Boolean insertByBo(WmsCategoryBo bo);
/**
* 修改通用分类
*/
Boolean updateByBo(WmsCategoryBo bo);
/**
* 校验并批量删除通用分类信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@@ -0,0 +1,49 @@
package com.klp.service;
import com.klp.domain.WmsCustomer;
import com.klp.domain.vo.WmsCustomerVo;
import com.klp.domain.bo.WmsCustomerBo;
import com.klp.common.core.page.TableDataInfo;
import com.klp.common.core.domain.PageQuery;
import java.util.Collection;
import java.util.List;
/**
* CRM 客户Service接口
*
* @author Joshi
* @date 2025-08-12
*/
public interface IWmsCustomerService {
/**
* 查询CRM 客户
*/
WmsCustomerVo queryById(Long customerId);
/**
* 查询CRM 客户列表
*/
TableDataInfo<WmsCustomerVo> queryPageList(WmsCustomerBo bo, PageQuery pageQuery);
/**
* 查询CRM 客户列表
*/
List<WmsCustomerVo> queryList(WmsCustomerBo bo);
/**
* 新增CRM 客户
*/
Boolean insertByBo(WmsCustomerBo bo);
/**
* 修改CRM 客户
*/
Boolean updateByBo(WmsCustomerBo bo);
/**
* 校验并批量删除CRM 客户信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@@ -0,0 +1,48 @@
package com.klp.service;
import com.klp.common.core.domain.PageQuery;
import com.klp.common.core.page.TableDataInfo;
import com.klp.domain.bo.WmsExpressQuestionBo;
import com.klp.domain.vo.WmsExpressQuestionVo;
import java.util.Collection;
import java.util.List;
/**
* 快递问题Service接口
*
* @author hdka
* @date 2025-07-21
*/
public interface IWmsExpressQuestionService {
/**
* 查询快递问题
*/
WmsExpressQuestionVo queryById(Long questionId);
/**
* 查询快递问题列表
*/
TableDataInfo<WmsExpressQuestionVo> queryPageList(WmsExpressQuestionBo bo, PageQuery pageQuery);
/**
* 查询快递问题列表
*/
List<WmsExpressQuestionVo> queryList(WmsExpressQuestionBo bo);
/**
* 新增快递问题
*/
Boolean insertByBo(WmsExpressQuestionBo bo);
/**
* 修改快递问题
*/
Boolean updateByBo(WmsExpressQuestionBo bo);
/**
* 校验并批量删除快递问题信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

Some files were not shown because too many files have changed in this diff Show More