Commit d97ee663 by 杨浩

bug修复

parent 2d8100f9
...@@ -3,9 +3,11 @@ package cn.iocoder.foodnexus.framework.common.util.number; ...@@ -3,9 +3,11 @@ package cn.iocoder.foodnexus.framework.common.util.number;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.iocoder.foodnexus.framework.common.util.CommonUtil;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
import java.util.function.Function;
/** /**
* 数字的工具类,补全 {@link cn.hutool.core.util.NumberUtil} 的功能 * 数字的工具类,补全 {@link cn.hutool.core.util.NumberUtil} 的功能
...@@ -75,4 +77,29 @@ public class NumberUtils { ...@@ -75,4 +77,29 @@ public class NumberUtils {
return NumberUtil.mul(values); return NumberUtil.mul(values);
} }
public static <T> BigDecimal add(List<T> items, Function<T, BigDecimal> func) {
BigDecimal result = new BigDecimal(0);
if (CommonUtil.isEmpty(items)) {
return result;
}
for (T item : items) {
try {
result = result.add(func.apply(item));
} catch (Exception e) {}
}
return result;
}
public static <T> Integer addInt(List<T> items, Function<T, Integer> func) {
if (CommonUtil.isEmpty(items)) {
return null;
}
int result = 0;
for (T item : items) {
try {
result = result + func.apply(item);
} catch (Exception e) {}
}
return result;
}
} }
...@@ -10,6 +10,7 @@ import cn.iocoder.foodnexus.framework.common.pojo.PageResult; ...@@ -10,6 +10,7 @@ import cn.iocoder.foodnexus.framework.common.pojo.PageResult;
import cn.iocoder.foodnexus.framework.common.util.CommonUtil; import cn.iocoder.foodnexus.framework.common.util.CommonUtil;
import cn.iocoder.foodnexus.framework.common.util.collection.MapUtils; import cn.iocoder.foodnexus.framework.common.util.collection.MapUtils;
import cn.iocoder.foodnexus.framework.common.util.number.MoneyUtils; import cn.iocoder.foodnexus.framework.common.util.number.MoneyUtils;
import cn.iocoder.foodnexus.framework.common.util.number.NumberUtils;
import cn.iocoder.foodnexus.framework.common.util.object.BeanUtils; import cn.iocoder.foodnexus.framework.common.util.object.BeanUtils;
import cn.iocoder.foodnexus.framework.excel.core.util.ExcelUtils; import cn.iocoder.foodnexus.framework.excel.core.util.ExcelUtils;
import cn.iocoder.foodnexus.framework.security.core.util.SecurityFrameworkUtils; import cn.iocoder.foodnexus.framework.security.core.util.SecurityFrameworkUtils;
...@@ -254,6 +255,8 @@ public class ErpPurchaseOrderController { ...@@ -254,6 +255,8 @@ public class ErpPurchaseOrderController {
}})); }}));
purchaseOrder.setProductNames(CollUtil.join(purchaseOrder.getItems(), ",", item -> purchaseOrder.setProductNames(CollUtil.join(purchaseOrder.getItems(), ",", item ->
Optional.ofNullable(item.getProductInfo()).map(ProductInfo::getName).orElse(""))); Optional.ofNullable(item.getProductInfo()).map(ProductInfo::getName).orElse("")));
purchaseOrder.setActualAmount(NumberUtils.addInt(purchaseOrder.getItems(), i -> i.getSignedTotal() - i.getReturnsTotal()));
purchaseOrder.setSignedTotal(NumberUtils.addInt(purchaseOrder.getItems(), ErpPurchaseOrderRespVO.Item::getSignedTotal));
MapUtils.findAndThen(supplierMap, purchaseOrder.getSupplierId(), supplier -> purchaseOrder.setSupplierName(supplier.getName())); MapUtils.findAndThen(supplierMap, purchaseOrder.getSupplierId(), supplier -> purchaseOrder.setSupplierName(supplier.getName()));
MapUtils.findAndThen(userMap, Long.parseLong(purchaseOrder.getCreator()), user -> purchaseOrder.setCreatorName(user.getNickname())); MapUtils.findAndThen(userMap, Long.parseLong(purchaseOrder.getCreator()), user -> purchaseOrder.setCreatorName(user.getNickname()));
MapUtils.findAndThen(customerOrderMap, purchaseOrder.getCustomerOrderId(), customerOrder -> { MapUtils.findAndThen(customerOrderMap, purchaseOrder.getCustomerOrderId(), customerOrder -> {
......
...@@ -99,6 +99,7 @@ public class SupplierPurchaseReturnController { ...@@ -99,6 +99,7 @@ public class SupplierPurchaseReturnController {
String orderCode = Optional.ofNullable(customerOrderApi.queryById(purchaseReturnVO.getCustomerOrderId())).map(CustomerOrderDTO::getCode).orElse(""); String orderCode = Optional.ofNullable(customerOrderApi.queryById(purchaseReturnVO.getCustomerOrderId())).map(CustomerOrderDTO::getCode).orElse("");
purchaseReturnVO.setSupplierName(supplierName); purchaseReturnVO.setSupplierName(supplierName);
purchaseReturnVO.setCustomerOrderCode(orderCode); purchaseReturnVO.setCustomerOrderCode(orderCode);
purchaseReturnVO.setCustomerName(customerApi.queryNameStrById(purchaseReturnVO.getCustomerId()));
purchaseReturnVO.setItems(BeanUtils.toBean(purchaseReturnItemList, ErpPurchaseReturnRespVO.Item.class, item -> { purchaseReturnVO.setItems(BeanUtils.toBean(purchaseReturnItemList, ErpPurchaseReturnRespVO.Item.class, item -> {
ErpStockDO stock = stockService.getStock(item.getProductId(), item.getWarehouseId()); ErpStockDO stock = stockService.getStock(item.getProductId(), item.getWarehouseId());
item.setStockCount(stock != null ? stock.getCount() : BigDecimal.ZERO); item.setStockCount(stock != null ? stock.getCount() : BigDecimal.ZERO);
......
...@@ -69,6 +69,12 @@ public class ErpPurchaseOrderRespVO { ...@@ -69,6 +69,12 @@ public class ErpPurchaseOrderRespVO {
@Schema(description = "定金金额,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "7127") @Schema(description = "定金金额,单位:分", requiredMode = Schema.RequiredMode.REQUIRED, example = "7127")
private Integer depositPrice; private Integer depositPrice;
@Schema(description = "应收金额,单位:分")
private Integer actualAmount;
@Schema(description = "签收,单位:分")
private Integer signedTotal;
@Schema(description = "附件地址", example = "https://www.iocoder.cn") @Schema(description = "附件地址", example = "https://www.iocoder.cn")
@ExcelProperty("附件地址") @ExcelProperty("附件地址")
private String fileUrl; private String fileUrl;
......
...@@ -11,15 +11,14 @@ import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleOrderDO; ...@@ -11,15 +11,14 @@ import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleOrderDO;
import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleOrderItemDO; import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleOrderItemDO;
import cn.iocoder.foodnexus.module.erp.api.enums.ErpAuditStatus; import cn.iocoder.foodnexus.module.erp.api.enums.ErpAuditStatus;
import cn.iocoder.foodnexus.module.erp.enums.SaleOrderPickUpStatus; import cn.iocoder.foodnexus.module.erp.enums.SaleOrderPickUpStatus;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.yulichang.query.MPJQueryWrapper; import com.github.yulichang.query.MPJQueryWrapper;
import lombok.Data;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.util.ArrayList; import java.util.*;
import java.util.List;
import java.util.Objects;
import java.util.Set;
/** /**
* ERP 销售订单 Mapper * ERP 销售订单 Mapper
......
...@@ -5,14 +5,18 @@ import cn.iocoder.foodnexus.framework.common.pojo.PageResult; ...@@ -5,14 +5,18 @@ import cn.iocoder.foodnexus.framework.common.pojo.PageResult;
import cn.iocoder.foodnexus.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.foodnexus.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.foodnexus.framework.mybatis.core.query.MPJLambdaWrapperX; import cn.iocoder.foodnexus.framework.mybatis.core.query.MPJLambdaWrapperX;
import cn.iocoder.foodnexus.module.erp.controller.admin.sale.vo.out.ErpSaleOutPageReqVO; import cn.iocoder.foodnexus.module.erp.controller.admin.sale.vo.out.ErpSaleOutPageReqVO;
import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleOrderDO;
import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleOutDO; import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleOutDO;
import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleOutItemDO; import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleOutItemDO;
import cn.iocoder.foodnexus.module.erp.api.enums.ErpAuditStatus; import cn.iocoder.foodnexus.module.erp.api.enums.ErpAuditStatus;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Set;
/** /**
* ERP 销售出库 Mapper * ERP 销售出库 Mapper
...@@ -67,4 +71,17 @@ public interface ErpSaleOutMapper extends BaseMapperX<ErpSaleOutDO> { ...@@ -67,4 +71,17 @@ public interface ErpSaleOutMapper extends BaseMapperX<ErpSaleOutDO> {
return selectList(ErpSaleOutDO::getOrderId, orderId); return selectList(ErpSaleOutDO::getOrderId, orderId);
} }
default Long statusCount(List<String> types, Set<Long> deptIds) {
MPJLambdaWrapperX<ErpSaleOutDO> wrapper = new MPJLambdaWrapperX<>();
wrapper.leftJoin(ErpSaleOrderDO.class, ErpSaleOrderDO::getId, ErpSaleOutDO::getOrderId)
.in(ErpSaleOrderDO::getCustomerDeptId, deptIds)
.in(ErpSaleOutDO::getPickUpStatus, types);
return this.selectCount(wrapper);
}
default Long statusCount(List<String> types, Long userId) {
return this.selectCount(Wrappers.<ErpSaleOutDO>lambdaQuery()
.eq(ErpSaleOutDO::getDeliveryStaffId, userId)
.in(ErpSaleOutDO::getPickUpStatus, types));
}
} }
\ No newline at end of file
...@@ -683,18 +683,27 @@ public class ErpSaleOrderServiceImpl implements ErpSaleOrderService { ...@@ -683,18 +683,27 @@ public class ErpSaleOrderServiceImpl implements ErpSaleOrderService {
count.setType(type); count.setType(type);
switch (type) { switch (type) {
case 0 : case 0 :
count.setCount(saleOrderMapper.statusCount(CommonUtil.asList(SaleOrderPickUpStatus.PICK_UP.getType(), Long outCount = saleOutMapper.statusCount(CommonUtil.asList(SaleOrderPickUpStatus.RETURNS_APPROVE.getType()), deptIds);
SaleOrderPickUpStatus.RETURNS_APPROVE.getType()), deptIds)); Long orderCount = saleOrderMapper.statusCount(CommonUtil.asList(
SaleOrderPickUpStatus.PICK_UP.getType()), deptIds);
count.setCount(CommonUtil.getEls(orderCount, 0L) + CommonUtil.getEls(outCount, 0L));
break; break;
case 1: case 1:
count.setCount(saleOrderMapper.statusCount(CommonUtil.asList(SaleOrderPickUpStatus.ACCEPT.getType(), count.setCount(CommonUtil.getEls(saleOrderMapper.statusCount(CommonUtil.asList(SaleOrderPickUpStatus.ACCEPT.getType()), userId), 0L) +
SaleOrderPickUpStatus.RETURNS_STAFF_ACCEPT.getType() CommonUtil.getEls(saleOutMapper.statusCount(CommonUtil.asList(
), userId)); SaleOrderPickUpStatus.RETURNS_STAFF_ACCEPT.getType()), userId), 0L));
break; break;
case 2: case 2:
count.setCount(saleOrderMapper.statusCount(CommonUtil.asList(SaleOrderPickUpStatus.ARRIVAL.getType(), count.setCount(CommonUtil.getEls(saleOrderMapper.statusCount(CommonUtil.asList(SaleOrderPickUpStatus.ARRIVAL.getType(),
SaleOrderPickUpStatus.SIGN.getType(), SaleOrderPickUpStatus.SIGN.getType(),
SaleOrderPickUpStatus.RETURNS_FINISH.getType()), userId)); SaleOrderPickUpStatus.RETURNS_PROCESS.getType(),
SaleOrderPickUpStatus.RETURNS_APPROVE.getType(),
SaleOrderPickUpStatus.RETURNS_REJECT.getType(),
SaleOrderPickUpStatus.RETURNS_STAFF_ACCEPT.getType(),
SaleOrderPickUpStatus.RETURNS_STAFF_ALREADY.getType(),
SaleOrderPickUpStatus.RETURNS_FINISH.getType()), userId), 0L) +
CommonUtil.getEls(saleOutMapper.statusCount(CommonUtil.asList(
SaleOrderPickUpStatus.RETURNS_FINISH.getType()), userId), 0L));
break; break;
default:break; default:break;
} }
......
...@@ -45,6 +45,9 @@ public class CheckTaskItemsRespVO { ...@@ -45,6 +45,9 @@ public class CheckTaskItemsRespVO {
@ExcelProperty("商品封面图") @ExcelProperty("商品封面图")
private String picUrl; private String picUrl;
@Schema(description = "商品规格")
private String introduction;
@Schema(description = "检查数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "24148") @Schema(description = "检查数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "24148")
@ExcelProperty("检查数量") @ExcelProperty("检查数量")
private Integer checkCount; private Integer checkCount;
......
...@@ -36,6 +36,9 @@ public class CheckTaskItemsSaveReqVO { ...@@ -36,6 +36,9 @@ public class CheckTaskItemsSaveReqVO {
// @NotEmpty(message = "商品封面图不能为空") // @NotEmpty(message = "商品封面图不能为空")
private String picUrl; private String picUrl;
@Schema(description = "商品规格")
private String introduction;
@Schema(description = "检查数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "24148") @Schema(description = "检查数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "24148")
@NotNull(message = "检查数量不能为空") @NotNull(message = "检查数量不能为空")
private Integer checkCount; private Integer checkCount;
...@@ -47,4 +50,7 @@ public class CheckTaskItemsSaveReqVO { ...@@ -47,4 +50,7 @@ public class CheckTaskItemsSaveReqVO {
@NotEmpty(message = "质检结果不能为空") @NotEmpty(message = "质检结果不能为空")
private String checkResult; private String checkResult;
@Schema(description = "采购附件")
private String purchaseAnnex;
} }
\ No newline at end of file
...@@ -56,6 +56,10 @@ public class CheckTaskItemsDO extends BaseDO { ...@@ -56,6 +56,10 @@ public class CheckTaskItemsDO extends BaseDO {
*/ */
private String picUrl; private String picUrl;
/** /**
* 商品规格
*/
private String introduction;
/**
* 检查数量 * 检查数量
*/ */
private Integer checkCount; private Integer checkCount;
......
...@@ -8,6 +8,7 @@ import cn.iocoder.foodnexus.module.erp.api.enums.ErpDeliveryStatus; ...@@ -8,6 +8,7 @@ import cn.iocoder.foodnexus.module.erp.api.enums.ErpDeliveryStatus;
import cn.iocoder.foodnexus.module.erp.api.vo.warehouse.WarehouseInfo; import cn.iocoder.foodnexus.module.erp.api.vo.warehouse.WarehouseInfo;
import cn.iocoder.foodnexus.module.erp.dal.dataobject.purchase.ErpPurchaseOrderDO; import cn.iocoder.foodnexus.module.erp.dal.dataobject.purchase.ErpPurchaseOrderDO;
import cn.iocoder.foodnexus.module.erp.dal.dataobject.purchase.ErpPurchaseOrderItemDO; import cn.iocoder.foodnexus.module.erp.dal.dataobject.purchase.ErpPurchaseOrderItemDO;
import cn.iocoder.foodnexus.module.erp.dal.mysql.purchase.ErpPurchaseOrderItemMapper;
import cn.iocoder.foodnexus.module.erp.dal.mysql.purchase.ErpPurchaseOrderMapper; import cn.iocoder.foodnexus.module.erp.dal.mysql.purchase.ErpPurchaseOrderMapper;
import cn.iocoder.foodnexus.module.erp.service.purchase.ErpPurchaseInService; import cn.iocoder.foodnexus.module.erp.service.purchase.ErpPurchaseInService;
import cn.iocoder.foodnexus.module.erp.service.purchase.ErpPurchaseOrderService; import cn.iocoder.foodnexus.module.erp.service.purchase.ErpPurchaseOrderService;
...@@ -30,6 +31,7 @@ import cn.iocoder.foodnexus.module.product.dal.dataobject.spu.ProductSpuDO; ...@@ -30,6 +31,7 @@ import cn.iocoder.foodnexus.module.product.dal.dataobject.spu.ProductSpuDO;
import cn.iocoder.foodnexus.module.product.service.category.ProductCategoryService; import cn.iocoder.foodnexus.module.product.service.category.ProductCategoryService;
import cn.iocoder.foodnexus.module.product.service.spu.ProductSpuService; import cn.iocoder.foodnexus.module.product.service.spu.ProductSpuService;
import cn.iocoder.foodnexus.module.system.util.GenCodeUtils; import cn.iocoder.foodnexus.module.system.util.GenCodeUtils;
import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -82,6 +84,9 @@ public class CheckTaskServiceImpl implements CheckTaskService, CheckTaskApi { ...@@ -82,6 +84,9 @@ public class CheckTaskServiceImpl implements CheckTaskService, CheckTaskApi {
private ErpPurchaseOrderMapper purchaseOrderMapper; private ErpPurchaseOrderMapper purchaseOrderMapper;
@Autowired @Autowired
private ErpPurchaseOrderItemMapper purchaseOrderItemMapper;
@Autowired
private ProductSpuService productSpuService; private ProductSpuService productSpuService;
@Autowired @Autowired
...@@ -228,11 +233,24 @@ public class CheckTaskServiceImpl implements CheckTaskService, CheckTaskApi { ...@@ -228,11 +233,24 @@ public class CheckTaskServiceImpl implements CheckTaskService, CheckTaskApi {
CustomerOrderDO customerOrder = customerOrderService.getCustomerOrder(checkTaskDO.getCustomerOrderId()); CustomerOrderDO customerOrder = customerOrderService.getCustomerOrder(checkTaskDO.getCustomerOrderId());
String warehouseName = Optional.ofNullable(customerOrder.getWarehouseInfo()).map(WarehouseInfo::getName).orElse(""); String warehouseName = Optional.ofNullable(customerOrder.getWarehouseInfo()).map(WarehouseInfo::getName).orElse("");
List<ErpPurchaseOrderItemDO> purchaseOrderItems = purchaseOrderItemMapper.selectList(Wrappers.<ErpPurchaseOrderItemDO>lambdaQuery()
.eq(ErpPurchaseOrderItemDO::getOrderId, purchaseOrder.getId()));
JSONArray fileUrlArray = new JSONArray();
if (CommonUtil.isNotBlank(updateReqVO.getFiles())) {
fileUrlArray.addAll(JSONArray.parseArray(updateReqVO.getFiles()));
}
purchaseOrderItems.forEach(purchaseOrderItem -> {
if (CommonUtil.isNotBlank(purchaseOrderItem.getAnnex())) {
fileUrlArray.addAll(JSONArray.parseArray(purchaseOrderItem.getAnnex()));
}
});
CustomerOrderRecordEvent event = new CustomerOrderRecordEvent(); CustomerOrderRecordEvent event = new CustomerOrderRecordEvent();
event.setOrderStatus(CustomerOrderStatus.WAREHOUSE_INSPECTION); event.setOrderStatus(CustomerOrderStatus.WAREHOUSE_INSPECTION);
event.setSupplierId(checkTaskDO.getSupplierId()); event.setSupplierId(checkTaskDO.getSupplierId());
event.setCustomerOrderId(checkTaskDO.getCustomerOrderId()); event.setCustomerOrderId(checkTaskDO.getCustomerOrderId());
event.setCopyWriter(CommonUtil.asList(warehouseName, updateReqVO.getFiles())); event.setCopyWriter(CommonUtil.asList(warehouseName, fileUrlArray.toJSONString()));
orderRecordApi.recordEvent(event); orderRecordApi.recordEvent(event);
// 采购入库审核成功 // 采购入库审核成功
...@@ -343,9 +361,11 @@ public class CheckTaskServiceImpl implements CheckTaskService, CheckTaskApi { ...@@ -343,9 +361,11 @@ public class CheckTaskServiceImpl implements CheckTaskService, CheckTaskApi {
item.setCategoryId(productSpuDO.getCategoryId()); item.setCategoryId(productSpuDO.getCategoryId());
item.setCategoryName(productCategoryService.queryNameById(productSpuDO.getCategoryId())); item.setCategoryName(productCategoryService.queryNameById(productSpuDO.getCategoryId()));
item.setPicUrl(productSpuDO.getPicUrl()); item.setPicUrl(productSpuDO.getPicUrl());
item.setIntroduction(productSpuDO.getIntroduction());
item.setCheckCount(purchaseOrderItem.getCount()); item.setCheckCount(purchaseOrderItem.getCount());
item.setUnitName(purchaseOrderItem.getProductUnit()); item.setUnitName(purchaseOrderItem.getProductUnit());
item.setCheckResult(CheckTaskStatus.TO_BE_CHECK.getKey()); item.setCheckResult(CheckTaskStatus.TO_BE_CHECK.getKey());
item.setPurchaseAnnex(purchaseOrderItem.getAnnex());
return item; return item;
})); }));
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment