|
|
@@ -5,10 +5,14 @@ import cn.hutool.core.util.ObjectUtil;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
import org.dromara.common.core.utils.MapstructUtils;
|
|
|
+import org.dromara.common.mybatis.core.page.PageQuery;
|
|
|
+import org.dromara.common.mybatis.core.page.TableDataInfo;
|
|
|
import org.dromara.erp.domain.ErpOrder;
|
|
|
import org.dromara.erp.domain.query.ErpOrderQuery;
|
|
|
import org.dromara.erp.domain.vo.ErpOrderVo;
|
|
|
+import org.dromara.erp.enums.ErpAuditResult;
|
|
|
import org.dromara.erp.enums.ErpOrderStatus;
|
|
|
import org.dromara.erp.mapper.ErpOrderMapper;
|
|
|
import org.dromara.erp.service.IErpOrderService;
|
|
|
@@ -21,45 +25,67 @@ import java.util.List;
|
|
|
* 订单 Service 业务层处理
|
|
|
* @Author: Antigravity
|
|
|
*/
|
|
|
+@Slf4j
|
|
|
@RequiredArgsConstructor
|
|
|
@Service
|
|
|
public class ErpOrderServiceImpl implements IErpOrderService {
|
|
|
|
|
|
private final ErpOrderMapper baseMapper;
|
|
|
private final org.dromara.erp.mapper.ErpOrderDetailMapper erpOrderDetailMapper;
|
|
|
+ private final org.dromara.erp.mapper.ErpOrderAuditMapper erpOrderAuditMapper;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public TableDataInfo<ErpOrderVo> queryPageList(ErpOrderQuery query, PageQuery pageQuery) {
|
|
|
+ LambdaQueryWrapper<ErpOrder> lqw = buildQueryWrapper(query);
|
|
|
+ com.baomidou.mybatisplus.extension.plugins.pagination.Page<ErpOrderVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
|
|
+
|
|
|
+ List<ErpOrderVo> list = result.getRecords();
|
|
|
+ if (ObjectUtil.isNotEmpty(list)) {
|
|
|
+ fillOrderDetails(list);
|
|
|
+ }
|
|
|
+ return TableDataInfo.build(result);
|
|
|
+ }
|
|
|
|
|
|
@Override
|
|
|
public List<ErpOrderVo> queryList(ErpOrderQuery query) {
|
|
|
- LambdaQueryWrapper<ErpOrder> lqw = Wrappers.lambdaQuery();
|
|
|
- lqw.eq(ObjectUtil.isNotEmpty(query.getFCode()), ErpOrder::getFCode, query.getFCode());
|
|
|
- lqw.eq(ObjectUtil.isNotEmpty(query.getFPlacer()), ErpOrder::getFPlacer, query.getFPlacer());
|
|
|
- lqw.eq(ObjectUtil.isNotEmpty(query.getFStatus()), ErpOrder::getFStatus, query.getFStatus());
|
|
|
- lqw.orderByDesc(ErpOrder::getCreateTime);
|
|
|
+ LambdaQueryWrapper<ErpOrder> lqw = buildQueryWrapper(query);
|
|
|
List<ErpOrderVo> list = baseMapper.selectVoList(lqw);
|
|
|
-
|
|
|
if (ObjectUtil.isNotEmpty(list)) {
|
|
|
- List<String> orderIds = list.stream().map(ErpOrderVo::getFRowId).toList();
|
|
|
- LambdaQueryWrapper<org.dromara.erp.domain.ErpOrderDetail> detailLqw = Wrappers.lambdaQuery();
|
|
|
- detailLqw.in(org.dromara.erp.domain.ErpOrderDetail::getFOrderId, orderIds);
|
|
|
- List<org.dromara.erp.domain.vo.ErpOrderDetailVo> allDetails = erpOrderDetailMapper.selectVoList(detailLqw);
|
|
|
-
|
|
|
- for (ErpOrderVo vo : list) {
|
|
|
- List<org.dromara.erp.domain.vo.ErpOrderDetailVo> details = allDetails.stream()
|
|
|
- .filter(d -> vo.getFRowId().equals(d.getFOrderId()))
|
|
|
- .toList();
|
|
|
- vo.setDetails(details);
|
|
|
- vo.setTotalCount(details.stream().mapToInt(d -> d.getCount() == null ? 0 : d.getCount()).sum());
|
|
|
- }
|
|
|
+ fillOrderDetails(list);
|
|
|
}
|
|
|
return list;
|
|
|
}
|
|
|
|
|
|
+ private LambdaQueryWrapper<ErpOrder> buildQueryWrapper(ErpOrderQuery query) {
|
|
|
+ LambdaQueryWrapper<ErpOrder> lqw = Wrappers.lambdaQuery();
|
|
|
+ lqw.eq(ObjectUtil.isNotEmpty(query.getCode()), ErpOrder::getCode, query.getCode());
|
|
|
+ lqw.eq(ObjectUtil.isNotEmpty(query.getPlacer()), ErpOrder::getPlacer, query.getPlacer());
|
|
|
+ lqw.eq(ObjectUtil.isNotEmpty(query.getStatus()), ErpOrder::getStatus, query.getStatus());
|
|
|
+ lqw.orderByDesc(ErpOrder::getCreateTime);
|
|
|
+ return lqw;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void fillOrderDetails(List<ErpOrderVo> list) {
|
|
|
+ List<String> orderIds = list.stream().map(ErpOrderVo::getRowId).toList();
|
|
|
+ LambdaQueryWrapper<org.dromara.erp.domain.ErpOrderDetail> detailLqw = Wrappers.lambdaQuery();
|
|
|
+ detailLqw.in(org.dromara.erp.domain.ErpOrderDetail::getOrderId, orderIds);
|
|
|
+ List<org.dromara.erp.domain.vo.ErpOrderDetailVo> allDetails = erpOrderDetailMapper.selectVoList(detailLqw);
|
|
|
+
|
|
|
+ for (ErpOrderVo vo : list) {
|
|
|
+ List<org.dromara.erp.domain.vo.ErpOrderDetailVo> details = allDetails.stream()
|
|
|
+ .filter(d -> vo.getRowId().equals(d.getOrderId()))
|
|
|
+ .toList();
|
|
|
+ vo.setDetails(details);
|
|
|
+ vo.setTotalCount(details.stream().mapToInt(d -> d.getCount() == null ? 0 : d.getCount()).sum());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
- public ErpOrderVo queryById(String fRowId) {
|
|
|
- ErpOrderVo vo = baseMapper.selectVoById(fRowId);
|
|
|
+ public ErpOrderVo queryById(String rowId) {
|
|
|
+ ErpOrderVo vo = baseMapper.selectVoById(rowId);
|
|
|
if (vo != null) {
|
|
|
LambdaQueryWrapper<org.dromara.erp.domain.ErpOrderDetail> detailLqw = Wrappers.lambdaQuery();
|
|
|
- detailLqw.eq(org.dromara.erp.domain.ErpOrderDetail::getFOrderId, fRowId);
|
|
|
+ detailLqw.eq(org.dromara.erp.domain.ErpOrderDetail::getOrderId, rowId);
|
|
|
List<org.dromara.erp.domain.vo.ErpOrderDetailVo> details = erpOrderDetailMapper.selectVoList(detailLqw);
|
|
|
vo.setDetails(details);
|
|
|
vo.setTotalCount(details.stream().mapToInt(d -> d.getCount() == null ? 0 : d.getCount()).sum());
|
|
|
@@ -71,68 +97,77 @@ public class ErpOrderServiceImpl implements IErpOrderService {
|
|
|
@com.baomidou.dynamic.datasource.annotation.DSTransactional
|
|
|
public Boolean insert(org.dromara.erp.domain.bo.ErpOrderBo bo) {
|
|
|
ErpOrder entity = MapstructUtils.convert(bo, ErpOrder.class);
|
|
|
- if (ObjectUtil.isEmpty(entity.getFRowId())) {
|
|
|
- entity.setFRowId(IdUtil.fastUUID());
|
|
|
+ if (ObjectUtil.isEmpty(entity.getRowId())) {
|
|
|
+ entity.setRowId(IdUtil.fastUUID());
|
|
|
}
|
|
|
- if (ObjectUtil.isEmpty(entity.getFCode())) {
|
|
|
- entity.setFCode(IdUtil.fastSimpleUUID());
|
|
|
+ if (ObjectUtil.isEmpty(entity.getCode())) {
|
|
|
+ entity.setCode(IdUtil.fastSimpleUUID());
|
|
|
}
|
|
|
- if (entity.getFPlacer() == null) {
|
|
|
+ if (entity.getPlacer() == null) {
|
|
|
try {
|
|
|
- entity.setFPlacer(org.dromara.common.satoken.utils.LoginHelper.getUserId());
|
|
|
+ log.info("[调试] 开始自动填充 Placer...");
|
|
|
+ log.info("[调试] 当前是否登录: {}", org.dromara.common.satoken.utils.LoginHelper.isLogin());
|
|
|
+ log.info("[调试] 当前 Token: {}", cn.dev33.satoken.stp.StpUtil.getTokenValue());
|
|
|
+
|
|
|
+ Long userId = org.dromara.common.satoken.utils.LoginHelper.getUserId();
|
|
|
+ log.info("[调试] 获取到的用户 ID: {}", userId);
|
|
|
+
|
|
|
+ if (userId != null) {
|
|
|
+ entity.setPlacer(userId);
|
|
|
+ log.info("[调试] 自动填充 Placer 成功: {}", userId);
|
|
|
+ } else {
|
|
|
+ log.warn("[调试] 获取到的用户 ID 为空,请检查 Token 是否有效或 Security 上下文是否正确传递");
|
|
|
+ }
|
|
|
} catch (Exception e) {
|
|
|
- // Ignore if not in web context
|
|
|
+ log.error("[调试] 自动填充 Placer 发生异常: {}", e.getMessage(), e);
|
|
|
}
|
|
|
}
|
|
|
- if (entity.getFPlaceTime() == null) {
|
|
|
- entity.setFPlaceTime(new Date());
|
|
|
+ if (entity.getPlaceTime() == null) {
|
|
|
+ entity.setPlaceTime(new Date());
|
|
|
}
|
|
|
- if (entity.getFStatus() == null) {
|
|
|
- entity.setFStatus(ErpOrderStatus.WAIT_AUDIT.getCode());
|
|
|
+ if (entity.getStatus() == null) {
|
|
|
+ entity.setStatus(ErpOrderStatus.WAIT_AUDIT.getCode());
|
|
|
}
|
|
|
|
|
|
- // 审计字段回填
|
|
|
- Long userId = null;
|
|
|
- try {
|
|
|
- userId = org.dromara.common.satoken.utils.LoginHelper.getUserId();
|
|
|
- } catch (Exception e) {
|
|
|
- // Ignore
|
|
|
- }
|
|
|
- Date now = new Date();
|
|
|
- entity.setCreateBy(userId);
|
|
|
- entity.setCreateTime(now);
|
|
|
- entity.setUpdateBy(userId);
|
|
|
- entity.setUpdateTime(now);
|
|
|
-
|
|
|
boolean result = baseMapper.insert(entity) > 0;
|
|
|
|
|
|
if (result && ObjectUtil.isNotEmpty(bo.getDetailIds())) {
|
|
|
// 根据前端传递的明细 ID 列表,精确更新这批明细关联的订单 ID
|
|
|
com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper<org.dromara.erp.domain.ErpOrderDetail> luw = Wrappers.lambdaUpdate();
|
|
|
- luw.set(org.dromara.erp.domain.ErpOrderDetail::getFOrderId, entity.getFRowId())
|
|
|
- .in(org.dromara.erp.domain.ErpOrderDetail::getFRowId, bo.getDetailIds());
|
|
|
+ luw.set(org.dromara.erp.domain.ErpOrderDetail::getOrderId, entity.getRowId())
|
|
|
+ .in(org.dromara.erp.domain.ErpOrderDetail::getRowId, bo.getDetailIds());
|
|
|
erpOrderDetailMapper.update(null, luw);
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public Boolean update(org.dromara.erp.domain.bo.ErpOrderBo bo) {
|
|
|
- ErpOrder entity = MapstructUtils.convert(bo, ErpOrder.class);
|
|
|
-
|
|
|
- // 审计字段回填
|
|
|
- Long userId = null;
|
|
|
- try {
|
|
|
- userId = org.dromara.common.satoken.utils.LoginHelper.getUserId();
|
|
|
- } catch (Exception e) {}
|
|
|
- entity.setUpdateBy(userId);
|
|
|
- entity.setUpdateTime(new Date());
|
|
|
+ @com.baomidou.dynamic.datasource.annotation.DSTransactional
|
|
|
+ public Boolean auditOrder(org.dromara.erp.domain.ErpOrderAudit audit) {
|
|
|
+ // 1. 修改订单状态
|
|
|
+ ErpOrder order = baseMapper.selectById(audit.getOrderId());
|
|
|
+ if (order == null) {
|
|
|
+ throw new org.dromara.common.core.exception.ServiceException("订单不存在");
|
|
|
+ }
|
|
|
|
|
|
- return baseMapper.updateById(entity) > 0;
|
|
|
- }
|
|
|
+ // 根据审核结果设置订单状态
|
|
|
+ if (ErpAuditResult.PASS.getCode().equals(audit.getAuditResult())) { // 通过
|
|
|
+ order.setStatus(ErpOrderStatus.AUDITED.getCode());
|
|
|
+ } else if (ErpAuditResult.REJECT.getCode().equals(audit.getAuditResult())) { // 驳回
|
|
|
+ order.setStatus(ErpOrderStatus.REJECTED.getCode());
|
|
|
+ }
|
|
|
+ baseMapper.updateById(order);
|
|
|
|
|
|
- @Override
|
|
|
- public Boolean deleteById(String fRowId) {
|
|
|
- return baseMapper.deleteById(fRowId) > 0;
|
|
|
+ // 2. 记录审核历史
|
|
|
+ if (audit.getRowId() == null) {
|
|
|
+ audit.setRowId(IdUtil.fastUUID());
|
|
|
+ }
|
|
|
+ if (audit.getAuditor() == null) {
|
|
|
+ audit.setAuditor(org.dromara.common.satoken.utils.LoginHelper.getUserId());
|
|
|
+ }
|
|
|
+ if (audit.getAuditTime() == null) {
|
|
|
+ audit.setAuditTime(new Date());
|
|
|
+ }
|
|
|
+ return erpOrderAuditMapper.insert(audit) > 0;
|
|
|
}
|
|
|
}
|