Merge branch '0.8.X' of https://gitee.com/hdka/klp-oa into 0.8.X

This commit is contained in:
砂糖
2025-07-31 11:43:36 +08:00
22 changed files with 145 additions and 166 deletions

View File

@@ -3,7 +3,7 @@ import request from '@/utils/request'
// 查询产品销售话术列表 // 查询产品销售话术列表
export function listProductSalesScript(query) { export function listProductSalesScript(query) {
return request({ return request({
url: '/klp/productSalesScript/list', url: '/wms/productSalesScript/list',
method: 'get', method: 'get',
params: query params: query
}) })
@@ -12,7 +12,7 @@ export function listProductSalesScript(query) {
// 查询产品销售话术,只要标题和内容有一个配置就会被返回 // 查询产品销售话术,只要标题和内容有一个配置就会被返回
export function searchProductSalesScript(keyword) { export function searchProductSalesScript(keyword) {
return request({ return request({
url: '/klp/productSalesScript/list', url: '/wms/productSalesScript/list',
method: 'get', method: 'get',
params: { keyword } params: { keyword }
}) })
@@ -21,7 +21,7 @@ export function searchProductSalesScript(keyword) {
// 查询产品销售话术详细 // 查询产品销售话术详细
export function getProductSalesScript(scriptId) { export function getProductSalesScript(scriptId) {
return request({ return request({
url: '/klp/productSalesScript/' + scriptId, url: '/wms/productSalesScript/' + scriptId,
method: 'get' method: 'get'
}) })
} }
@@ -29,7 +29,7 @@ export function getProductSalesScript(scriptId) {
// 新增产品销售话术 // 新增产品销售话术
export function addProductSalesScript(data) { export function addProductSalesScript(data) {
return request({ return request({
url: '/klp/productSalesScript', url: '/wms/productSalesScript',
method: 'post', method: 'post',
data: data data: data
}) })
@@ -38,7 +38,7 @@ export function addProductSalesScript(data) {
// 修改产品销售话术 // 修改产品销售话术
export function updateProductSalesScript(data) { export function updateProductSalesScript(data) {
return request({ return request({
url: '/klp/productSalesScript', url: '/wms/productSalesScript',
method: 'put', method: 'put',
data: data data: data
}) })
@@ -47,7 +47,7 @@ export function updateProductSalesScript(data) {
// 删除产品销售话术 // 删除产品销售话术
export function delProductSalesScript(scriptId) { export function delProductSalesScript(scriptId) {
return request({ return request({
url: '/klp/productSalesScript/' + scriptId, url: '/wms/productSalesScript/' + scriptId,
method: 'delete' method: 'delete'
}) })
} }
@@ -72,7 +72,7 @@ export function delProductSalesScript(scriptId) {
// 获取产品咨询热度排行 // 获取产品咨询热度排行
export function getProductRanking() { export function getProductRanking() {
return request({ return request({
url: '/klp/productSalesScript/dashboard/ranking', url: '/wms/productSalesScript/dashboard/ranking',
method: 'get' method: 'get'
}) })
} }

View File

@@ -312,7 +312,7 @@ export default {
}, },
/** 导出按钮操作 */ /** 导出按钮操作 */
handleExport() { handleExport() {
this.download('system/productSalesScript/export', { this.download('wms/productSalesScript/export', {
...this.queryParams ...this.queryParams
}, `productSalesScript_${new Date().getTime()}.xlsx`) }, `productSalesScript_${new Date().getTime()}.xlsx`)
}, },

View File

@@ -453,7 +453,7 @@ export default {
}, },
/** 导出按钮操作 */ /** 导出按钮操作 */
handleExport() { handleExport() {
this.download('klp/purchasePlan/export', { this.download('wms/purchasePlan/export', {
...this.queryParams ...this.queryParams
}, `purchasePlan_${new Date().getTime()}.xlsx`) }, `purchasePlan_${new Date().getTime()}.xlsx`)
}, },

View File

@@ -376,7 +376,7 @@ export default {
}, },
/** 导出按钮操作 */ /** 导出按钮操作 */
handleExport() { handleExport() {
this.download('klp/purchasePlanDetail/export', { this.download('wms/purchasePlanDetail/export', {
...this.queryParams ...this.queryParams
}, `purchasePlanDetail_${new Date().getTime()}.xlsx`) }, `purchasePlanDetail_${new Date().getTime()}.xlsx`)
}, },

View File

@@ -357,7 +357,7 @@
}, },
/** 导出按钮操作 */ /** 导出按钮操作 */
handleExport() { handleExport() {
this.download('klp/schedulePlan/export', { this.download('wms/schedulePlan/export', {
...this.queryParams ...this.queryParams
}, `schedulePlan_${new Date().getTime()}.xlsx`) }, `schedulePlan_${new Date().getTime()}.xlsx`)
}, },

View File

@@ -418,7 +418,7 @@ export default {
}, },
/** 导出按钮操作 */ /** 导出按钮操作 */
handleExport() { handleExport() {
this.download('klp/stockIo/export', { this.download('wms/stockIo/export', {
...this.queryParams ...this.queryParams
}, `stockIo_${new Date().getTime()}.xlsx`) }, `stockIo_${new Date().getTime()}.xlsx`)
}, },

View File

@@ -457,7 +457,7 @@ export default {
this.reset(); this.reset();
}, },
handleExport() { handleExport() {
this.download('klp/stockIoDetail/export', { this.download('wms/stockIoDetail/export', {
...this.queryParams ...this.queryParams
}, `stockIoDetail_${new Date().getTime()}.xlsx`) }, `stockIoDetail_${new Date().getTime()}.xlsx`)
}, },

View File

@@ -35,7 +35,7 @@ import com.klp.domain.vo.ProductRankingVo;
@Validated @Validated
@RequiredArgsConstructor @RequiredArgsConstructor
@RestController @RestController
@RequestMapping("/klp/productSalesScript") @RequestMapping("/wms/productSalesScript")
public class WmsProductSalesScriptController extends BaseController { public class WmsProductSalesScriptController extends BaseController {
private final IWmsProductSalesScriptService iWmsProductSalesScriptService; private final IWmsProductSalesScriptService iWmsProductSalesScriptService;

View File

@@ -52,7 +52,7 @@ public class WmsStockController extends BaseController {
@PostMapping("/export") @PostMapping("/export")
public void export(WmsStockBo bo, HttpServletResponse response) { public void export(WmsStockBo bo, HttpServletResponse response) {
List<WmsStockVo> list = iWmsStockService.queryList(bo); List<WmsStockVo> list = iWmsStockService.queryList(bo);
ExcelUtil.exportExcel(list, "库存:原材料/产品与库区/库位的存放关系", WmsStockVo.class, response); ExcelUtil.exportExcel(list, "库存:原材料-产品与库区-库位的存放关系", WmsStockVo.class, response);
} }
/** /**

View File

@@ -163,4 +163,13 @@ public class WmsStockIoController extends BaseController {
return R.fail(e.getMessage()); return R.fail(e.getMessage());
} }
} }
@PostMapping("/scanOutStock")
public R<Void> scanOutStock(@RequestBody WmsStockIoDetailBo bo) {
try {
boolean result = iWmsStockIoService.scanOutStockByBo(bo);
return toAjax(result);
} catch (Exception e) {
return R.fail(e.getMessage());
}
}
} }

View File

@@ -1,8 +0,0 @@
package com.klp.domain.vo;
import lombok.Data;
@Data
public class CustomerRegionVO {
private String region;
private int customerCount;
}

View File

@@ -12,30 +12,30 @@ import java.util.List;
@Data @Data
public class DashboardOverviewVO { public class DashboardOverviewVO {
/** // /**
* 订单汇总 // * 订单汇总
*/ // */
private OrderSummaryVO orderSummary; // private OrderSummaryVO orderSummary;
//
/** // /**
* 销售经理饼图 // * 销售经理饼图
*/ // */
private List<SalesManagerPieVO> salesManagerPie; // private List<SalesManagerPieVO> salesManagerPie;
//
/** // /**
* 产品销量排行 // * 产品销量排行
*/ // */
private List<ProductRankVO> productRank; // private List<ProductRankVO> productRank;
//
/** // /**
* 订单物料分析 // * 订单物料分析
*/ // */
private List<OrderMaterialVO> orderMaterial; // private List<OrderMaterialVO> orderMaterial;
//
/** // /**
* 客户分布 // * 客户分布
*/ // */
private List<CustomerRegionVO> customerRegion; // private List<CustomerRegionVO> customerRegion;
// ========== 新增业务区域 ========== // ========== 新增业务区域 ==========

View File

@@ -1,10 +0,0 @@
package com.klp.domain.vo;
import lombok.Data;
@Data
public class OrderMaterialVO {
private String materialName;
private double usedCount;
private double stockCount;
private double purchaseCycle;
}

View File

@@ -1,19 +0,0 @@
package com.klp.domain.vo;
import lombok.Data;
@Data
public class OrderSummaryVO {
private int totalOrderCount;
private int finishedOrderCount;
private double finishedRate;
private int monthFinishedOrderCount;
private double monthFinishedRate;
private int lastMonthTotalOrderCount;
private int lastMonthFinishedOrderCount;
private double lastMonthFinishedRate;
private double totalOrderCountGrowthRate;
private double finishedOrderCountGrowthRate;
private double finishedRateGrowthRate;
private double monthFinishedOrderCountGrowthRate;
private double monthFinishedRateGrowthRate;
}

View File

@@ -1,8 +0,0 @@
package com.klp.domain.vo;
import lombok.Data;
@Data
public class ProductRankVO {
private String productName;
private double totalSales;
}

View File

@@ -1,8 +0,0 @@
package com.klp.domain.vo;
import lombok.Data;
@Data
public class SalesManagerPieVO {
private String salesManager;
private double totalSales;
}

View File

@@ -14,43 +14,43 @@ import java.util.List;
* @date 2025-07-18 * @date 2025-07-18
*/ */
public interface WmsProductMapper extends BaseMapperPlus<WmsProductMapper, WmsProduct, WmsProductVo> { public interface WmsProductMapper extends BaseMapperPlus<WmsProductMapper, WmsProduct, WmsProductVo> {
// 订单汇总 // // 订单汇总
@Select("SELECT " + // @Select("SELECT " +
"COUNT(*) AS totalOrderCount, " + // "COUNT(*) AS totalOrderCount, " +
"SUM(CASE WHEN order_status=2 THEN 1 ELSE 0 END) AS finishedOrderCount, " + // "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, " + // "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, " + // "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, " + // "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 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 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 " + // "(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") // "FROM wms_order WHERE del_flag=0")
OrderSummaryVO selectOrderSummary(); // OrderSummaryVO selectOrderSummary();
//
// 销售经理饼图 // // 销售经理饼图
@Select("SELECT sales_manager, SUM(od.quantity) AS totalSales " + // @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 " + // "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") // "WHERE o.order_status = 2 AND o.del_flag=0 GROUP BY o.sales_manager")
List<SalesManagerPieVO> selectSalesManagerPie(); // List<SalesManagerPieVO> selectSalesManagerPie();
//
// 产品销量排行 // // 产品销量排行
@Select("SELECT p.product_name, SUM(od.quantity) AS totalSales " + // @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 " + // "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") // "GROUP BY p.product_name ORDER BY totalSales DESC LIMIT 10")
List<ProductRankVO> selectProductRank(); // List<ProductRankVO> selectProductRank();
//
// 订单物料分析(只分析库存量和销售销量) // // 订单物料分析(只分析库存量和销售销量)
@Select("SELECT p.product_name AS materialName, SUM(od.quantity) AS usedCount, " + // @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, " + // "(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 " + // "0 AS purchaseCycle " +
"FROM wms_order_detail od JOIN wms_product p ON od.product_id = p.product_id " + // "FROM wms_order_detail od JOIN wms_product p ON od.product_id = p.product_id " +
"GROUP BY p.product_id, p.product_name") // "GROUP BY p.product_id, p.product_name")
List<OrderMaterialVO> selectOrderMaterial(); // List<OrderMaterialVO> selectOrderMaterial();
//
// 客户分布热力图 // // 客户分布热力图
@Select("SELECT o.customer_name AS region, COUNT(*) AS customerCount " + // @Select("SELECT o.customer_name AS region, COUNT(*) AS customerCount " +
"FROM wms_order o WHERE o.del_flag=0 GROUP BY o.customer_name") // "FROM wms_order o WHERE o.del_flag=0 GROUP BY o.customer_name")
List<CustomerRegionVO> selectCustomerRegion(); // List<CustomerRegionVO> selectCustomerRegion();
// ========== 新增业务区域查询方法 ========== // ========== 新增业务区域查询方法 ==========

View File

@@ -77,4 +77,6 @@ public interface IWmsStockIoService {
boolean scanInStockByBo(WmsStockIoDetailBo bo); boolean scanInStockByBo(WmsStockIoDetailBo bo);
boolean scanOutStockByBo(WmsStockIoDetailBo bo);
} }

View File

@@ -15,7 +15,6 @@ import com.klp.domain.vo.WmsProductVo;
import com.klp.domain.WmsProduct; import com.klp.domain.WmsProduct;
import com.klp.mapper.WmsProductMapper; import com.klp.mapper.WmsProductMapper;
import com.klp.service.IWmsProductService; import com.klp.service.IWmsProductService;
import com.klp.domain.vo.OrderSummaryVO;
import com.klp.domain.vo.PerformanceAreaVO; import com.klp.domain.vo.PerformanceAreaVO;
import com.klp.domain.vo.CurrentSituationAreaVO; import com.klp.domain.vo.CurrentSituationAreaVO;
import com.klp.domain.vo.RecommendationAreaVO; import com.klp.domain.vo.RecommendationAreaVO;
@@ -127,34 +126,34 @@ public class WmsProductServiceImpl implements IWmsProductService {
public DashboardOverviewVO getDashboardOverview() { public DashboardOverviewVO getDashboardOverview() {
DashboardOverviewVO vo = new DashboardOverviewVO(); DashboardOverviewVO vo = new DashboardOverviewVO();
// ========== 原有业务逻辑 ========== // // ========== 原有业务逻辑 ==========
OrderSummaryVO summary = baseMapper.selectOrderSummary(); // OrderSummaryVO summary = baseMapper.selectOrderSummary();
// 计算增长率 // // 计算增长率
summary.setTotalOrderCountGrowthRate( // summary.setTotalOrderCountGrowthRate(
summary.getLastMonthTotalOrderCount() == 0 ? 0 : // summary.getLastMonthTotalOrderCount() == 0 ? 0 :
(double)(summary.getTotalOrderCount() - summary.getLastMonthTotalOrderCount()) / summary.getLastMonthTotalOrderCount() // (double)(summary.getTotalOrderCount() - summary.getLastMonthTotalOrderCount()) / summary.getLastMonthTotalOrderCount()
); // );
summary.setFinishedOrderCountGrowthRate( // summary.setFinishedOrderCountGrowthRate(
summary.getLastMonthFinishedOrderCount() == 0 ? 0 : // summary.getLastMonthFinishedOrderCount() == 0 ? 0 :
(double)(summary.getFinishedOrderCount() - summary.getLastMonthFinishedOrderCount()) / summary.getLastMonthFinishedOrderCount() // (double)(summary.getFinishedOrderCount() - summary.getLastMonthFinishedOrderCount()) / summary.getLastMonthFinishedOrderCount()
); // );
summary.setFinishedRateGrowthRate( // summary.setFinishedRateGrowthRate(
summary.getLastMonthFinishedRate() == 0 ? 0 : // summary.getLastMonthFinishedRate() == 0 ? 0 :
(summary.getFinishedRate() - summary.getLastMonthFinishedRate()) / summary.getLastMonthFinishedRate() // (summary.getFinishedRate() - summary.getLastMonthFinishedRate()) / summary.getLastMonthFinishedRate()
); // );
summary.setMonthFinishedOrderCountGrowthRate( // summary.setMonthFinishedOrderCountGrowthRate(
summary.getLastMonthFinishedOrderCount() == 0 ? 0 : // summary.getLastMonthFinishedOrderCount() == 0 ? 0 :
(double)(summary.getMonthFinishedOrderCount() - summary.getLastMonthFinishedOrderCount()) / summary.getLastMonthFinishedOrderCount() // (double)(summary.getMonthFinishedOrderCount() - summary.getLastMonthFinishedOrderCount()) / summary.getLastMonthFinishedOrderCount()
); // );
summary.setMonthFinishedRateGrowthRate( // summary.setMonthFinishedRateGrowthRate(
summary.getLastMonthFinishedRate() == 0 ? 0 : // summary.getLastMonthFinishedRate() == 0 ? 0 :
(summary.getMonthFinishedRate() - summary.getLastMonthFinishedRate()) / summary.getLastMonthFinishedRate() // (summary.getMonthFinishedRate() - summary.getLastMonthFinishedRate()) / summary.getLastMonthFinishedRate()
); // );
vo.setOrderSummary(summary); // vo.setOrderSummary(summary);
vo.setSalesManagerPie(baseMapper.selectSalesManagerPie()); // vo.setSalesManagerPie(baseMapper.selectSalesManagerPie());
vo.setProductRank(baseMapper.selectProductRank()); // vo.setProductRank(baseMapper.selectProductRank());
vo.setOrderMaterial(baseMapper.selectOrderMaterial()); // vo.setOrderMaterial(baseMapper.selectOrderMaterial());
vo.setCustomerRegion(baseMapper.selectCustomerRegion()); // vo.setCustomerRegion(baseMapper.selectCustomerRegion());
// ========== 新增业务区域逻辑 ========== // ========== 新增业务区域逻辑 ==========

View File

@@ -19,6 +19,8 @@ import com.klp.service.IWmsProductionLineService;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Collection; import java.util.Collection;
import java.util.function.Function;
import java.util.stream.Collectors;
/** /**
* 产线Service业务层处理 * 产线Service业务层处理
@@ -47,10 +49,8 @@ public class WmsProductionLineServiceImpl implements IWmsProductionLineService {
public TableDataInfo<WmsProductionLineVo> queryPageList(WmsProductionLineBo bo, PageQuery pageQuery) { public TableDataInfo<WmsProductionLineVo> queryPageList(WmsProductionLineBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<WmsProductionLine> lqw = buildQueryWrapper(bo); LambdaQueryWrapper<WmsProductionLine> lqw = buildQueryWrapper(bo);
Page<WmsProductionLineVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); Page<WmsProductionLineVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
// 填充负载信息 // 填充负载信息
fillLoadInfo(result.getRecords()); fillLoadInfo(result.getRecords());
return TableDataInfo.build(result); return TableDataInfo.build(result);
} }
@@ -133,7 +133,7 @@ public class WmsProductionLineServiceImpl implements IWmsProductionLineService {
// 批量查询负载信息 // 批量查询负载信息
List<LineLoadInfo> loadInfoList = baseMapper.selectLineLoadInfo(lineIds); List<LineLoadInfo> loadInfoList = baseMapper.selectLineLoadInfo(lineIds);
Map<Long, LineLoadInfo> loadInfoMap = loadInfoList.stream() Map<Long, LineLoadInfo> loadInfoMap = loadInfoList.stream()
.collect(java.util.stream.Collectors.toMap(LineLoadInfo::getLineId, java.util.function.Function.identity())); .collect(Collectors.toMap(LineLoadInfo::getLineId, Function.identity()));
// 填充到VO // 填充到VO
for (WmsProductionLineVo vo : productionLineList) { for (WmsProductionLineVo vo : productionLineList) {
LineLoadInfo loadInfo = loadInfoMap.get(vo.getLineId()); LineLoadInfo loadInfo = loadInfoMap.get(vo.getLineId());

View File

@@ -162,6 +162,27 @@ public class WmsStockIoServiceImpl implements IWmsStockIoService {
changeStock(bo.getWarehouseId(), bo.getItemType(), bo.getItemId(), bo.getQuantity(), true, unit); changeStock(bo.getWarehouseId(), bo.getItemType(), bo.getItemId(), bo.getQuantity(), true, unit);
return true; return true;
} }
@Override
@Transactional(rollbackFor = Exception.class)
public boolean scanOutStockByBo(WmsStockIoDetailBo bo) {
String unit = bo.getUnit();
// 如果unit为空自动查item表补全
if (unit == null || unit.trim().isEmpty()) {
if ("product".equals(bo.getItemType())) {
WmsProduct p = productMapper.selectById(bo.getItemId());
unit = p != null ? p.getUnit() : null;
} else if ("raw_material".equals(bo.getItemType())) {
WmsRawMaterial r = rawMaterialMapper.selectById(bo.getItemId());
unit = r != null ? r.getUnit() : null;
}
}
if (unit == null || unit.trim().isEmpty()) {
throw new RuntimeException("未能获取到单位");
}
// 出库操作
changeStock(bo.getWarehouseId(), bo.getItemType(), bo.getItemId(), bo.getQuantity(), false, unit);
return true;
}
/** /**

View File

@@ -22,7 +22,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
SELECT SELECT
line_id AS lineId, line_id AS lineId,
COUNT(*) AS planDetailCount, COUNT(*) AS planDetailCount,
SUM(DATEDIFF(end_date, start_date) + 1) AS totalPlanDays SUM(DATEDIFF(end_date, GREATEST(start_date, CURDATE())) + 1) AS totalPlanDays
FROM FROM
wms_schedule_plan_detail wms_schedule_plan_detail
WHERE WHERE
@@ -30,6 +30,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<foreach collection="lineIds" item="lineId" open="(" separator="," close=")"> <foreach collection="lineIds" item="lineId" open="(" separator="," close=")">
#{lineId} #{lineId}
</foreach> </foreach>
AND end_date >= CURDATE()
AND del_flag = 0 AND del_flag = 0
GROUP BY GROUP BY
line_id line_id