Commit e7d23e39 by 杨浩

后台展示修改

parent c1eb784e
package cn.iocoder.foodnexus.framework.common.enums;
import cn.iocoder.foodnexus.framework.common.core.ArrayValuable;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
/**
* @author : yanghao
* create at: 2025/10/29 09:52
* @description: 客户类型
*/
@Getter
@AllArgsConstructor
public enum CustomerTypeEnum implements ArrayValuable<Integer> {
CUSTOMER(0, "客户"),
CHIEF(1, "司务长"),
;
private final Integer key;
private final String value;
public static final Integer[] ARRAYS = Arrays.stream(values()).map(CustomerTypeEnum::getKey).toArray(Integer[]::new);
/**
* @return 数组
*/
@Override
public Integer[] array() {
return ARRAYS;
}
}
...@@ -26,4 +26,6 @@ public interface ErpCustomerApi { ...@@ -26,4 +26,6 @@ public interface ErpCustomerApi {
Map<Long, String> queryNameMapByIds(Collection<Long> collection); Map<Long, String> queryNameMapByIds(Collection<Long> collection);
String queryNameStrById(Long customerId); String queryNameStrById(Long customerId);
Integer queryCustomerTypeByUserId(Long userId);
} }
...@@ -5,21 +5,28 @@ import cn.iocoder.foodnexus.framework.apilog.core.annotation.ApiAccessLog; ...@@ -5,21 +5,28 @@ import cn.iocoder.foodnexus.framework.apilog.core.annotation.ApiAccessLog;
import cn.iocoder.foodnexus.framework.common.pojo.CommonResult; import cn.iocoder.foodnexus.framework.common.pojo.CommonResult;
import cn.iocoder.foodnexus.framework.common.pojo.PageParam; import cn.iocoder.foodnexus.framework.common.pojo.PageParam;
import cn.iocoder.foodnexus.framework.common.pojo.PageResult; import cn.iocoder.foodnexus.framework.common.pojo.PageResult;
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.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.module.erp.api.service.ErpCustomerApi;
import cn.iocoder.foodnexus.module.erp.controller.admin.product.vo.product.ErpProductRespVO; import cn.iocoder.foodnexus.module.erp.controller.admin.product.vo.product.ErpProductRespVO;
import cn.iocoder.foodnexus.module.erp.controller.admin.purchase.vo.returns.ErpPurchaseReturnPageReqVO; import cn.iocoder.foodnexus.module.erp.controller.admin.purchase.vo.returns.ErpPurchaseReturnPageReqVO;
import cn.iocoder.foodnexus.module.erp.controller.admin.purchase.vo.returns.ErpPurchaseReturnRespVO; import cn.iocoder.foodnexus.module.erp.controller.admin.purchase.vo.returns.ErpPurchaseReturnRespVO;
import cn.iocoder.foodnexus.module.erp.controller.admin.purchase.vo.returns.ErpPurchaseReturnSaveReqVO; import cn.iocoder.foodnexus.module.erp.controller.admin.purchase.vo.returns.ErpPurchaseReturnSaveReqVO;
import cn.iocoder.foodnexus.module.erp.controller.admin.sale.vo.returns.ErpSaleReturnRespVO;
import cn.iocoder.foodnexus.module.erp.dal.dataobject.purchase.ErpPurchaseReturnDO; import cn.iocoder.foodnexus.module.erp.dal.dataobject.purchase.ErpPurchaseReturnDO;
import cn.iocoder.foodnexus.module.erp.dal.dataobject.purchase.ErpPurchaseReturnItemDO; import cn.iocoder.foodnexus.module.erp.dal.dataobject.purchase.ErpPurchaseReturnItemDO;
import cn.iocoder.foodnexus.module.erp.dal.dataobject.purchase.ErpSupplierDO; import cn.iocoder.foodnexus.module.erp.dal.dataobject.purchase.ErpSupplierDO;
import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleReturnDO;
import cn.iocoder.foodnexus.module.erp.dal.dataobject.stock.ErpStockDO; import cn.iocoder.foodnexus.module.erp.dal.dataobject.stock.ErpStockDO;
import cn.iocoder.foodnexus.module.erp.service.product.ErpProductService; import cn.iocoder.foodnexus.module.erp.service.product.ErpProductService;
import cn.iocoder.foodnexus.module.erp.service.purchase.ErpPurchaseReturnService; import cn.iocoder.foodnexus.module.erp.service.purchase.ErpPurchaseReturnService;
import cn.iocoder.foodnexus.module.erp.service.purchase.ErpSupplierService; import cn.iocoder.foodnexus.module.erp.service.purchase.ErpSupplierService;
import cn.iocoder.foodnexus.module.erp.service.stock.ErpStockService; import cn.iocoder.foodnexus.module.erp.service.stock.ErpStockService;
import cn.iocoder.foodnexus.module.order.api.CustomerOrderApi;
import cn.iocoder.foodnexus.module.order.dto.CustomerOrderDTO;
import cn.iocoder.foodnexus.module.product.api.dto.ProductInfo;
import cn.iocoder.foodnexus.module.system.api.user.AdminUserApi; import cn.iocoder.foodnexus.module.system.api.user.AdminUserApi;
import cn.iocoder.foodnexus.module.system.api.user.dto.AdminUserRespDTO; import cn.iocoder.foodnexus.module.system.api.user.dto.AdminUserRespDTO;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
...@@ -28,6 +35,7 @@ import io.swagger.v3.oas.annotations.tags.Tag; ...@@ -28,6 +35,7 @@ import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -36,6 +44,7 @@ import java.io.IOException; ...@@ -36,6 +44,7 @@ import java.io.IOException;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional;
import static cn.iocoder.foodnexus.framework.apilog.core.enums.OperateTypeEnum.EXPORT; import static cn.iocoder.foodnexus.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
import static cn.iocoder.foodnexus.framework.common.pojo.CommonResult.success; import static cn.iocoder.foodnexus.framework.common.pojo.CommonResult.success;
...@@ -53,13 +62,18 @@ public class ErpPurchaseReturnController { ...@@ -53,13 +62,18 @@ public class ErpPurchaseReturnController {
@Resource @Resource
private ErpStockService stockService; private ErpStockService stockService;
@Resource @Resource
private ErpProductService productService;
@Resource
private ErpSupplierService supplierService; private ErpSupplierService supplierService;
@Resource @Resource
private AdminUserApi adminUserApi; private AdminUserApi adminUserApi;
@Autowired
private CustomerOrderApi customerOrderApi;
@Autowired
private ErpCustomerApi customerApi;
/*@PostMapping("/create") /*@PostMapping("/create")
@Operation(summary = "创建采购退货") @Operation(summary = "创建采购退货")
@PreAuthorize("@ss.hasPermission('erp:purchase-return:create')") @PreAuthorize("@ss.hasPermission('erp:purchase-return:create')")
...@@ -103,15 +117,16 @@ public class ErpPurchaseReturnController { ...@@ -103,15 +117,16 @@ public class ErpPurchaseReturnController {
return success(null); return success(null);
} }
List<ErpPurchaseReturnItemDO> purchaseReturnItemList = purchaseReturnService.getPurchaseReturnItemListByReturnId(id); List<ErpPurchaseReturnItemDO> purchaseReturnItemList = purchaseReturnService.getPurchaseReturnItemListByReturnId(id);
Map<Long, ErpProductRespVO> productMap = productService.getProductVOMap( return success(BeanUtils.toBean(purchaseReturn, ErpPurchaseReturnRespVO.class, purchaseReturnVO ->{
convertSet(purchaseReturnItemList, ErpPurchaseReturnItemDO::getProductId)); String supplierName = Optional.ofNullable(supplierService.getSupplier(purchaseReturnVO.getSupplierId())).map(ErpSupplierDO::getName).orElse("");
return success(BeanUtils.toBean(purchaseReturn, ErpPurchaseReturnRespVO.class, purchaseReturnVO -> String orderCode = Optional.ofNullable(customerOrderApi.queryById(purchaseReturnVO.getCustomerOrderId())).map(CustomerOrderDTO::getCode).orElse("");
purchaseReturnVO.setSupplierName(supplierName);
purchaseReturnVO.setCustomerOrderCode(orderCode);
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);
MapUtils.findAndThen(productMap, item.getProductId(), product -> item.setProductName(product.getName()) }));
.setProductBarCode(product.getBarCode()).setProductUnitName(product.getUnitName())); }));
}))));
} }
@GetMapping("/page") @GetMapping("/page")
...@@ -142,23 +157,23 @@ public class ErpPurchaseReturnController { ...@@ -142,23 +157,23 @@ public class ErpPurchaseReturnController {
List<ErpPurchaseReturnItemDO> purchaseReturnItemList = purchaseReturnService.getPurchaseReturnItemListByReturnIds( List<ErpPurchaseReturnItemDO> purchaseReturnItemList = purchaseReturnService.getPurchaseReturnItemListByReturnIds(
convertSet(pageResult.getList(), ErpPurchaseReturnDO::getId)); convertSet(pageResult.getList(), ErpPurchaseReturnDO::getId));
Map<Long, List<ErpPurchaseReturnItemDO>> purchaseReturnItemMap = convertMultiMap(purchaseReturnItemList, ErpPurchaseReturnItemDO::getReturnId); Map<Long, List<ErpPurchaseReturnItemDO>> purchaseReturnItemMap = convertMultiMap(purchaseReturnItemList, ErpPurchaseReturnItemDO::getReturnId);
// 1.2 产品信息
Map<Long, ErpProductRespVO> productMap = productService.getProductVOMap(
convertSet(purchaseReturnItemList, ErpPurchaseReturnItemDO::getProductId));
// 1.3 供应商信息 // 1.3 供应商信息
Map<Long, ErpSupplierDO> supplierMap = supplierService.getSupplierMap( Map<Long, ErpSupplierDO> supplierMap = supplierService.getSupplierMap(
convertSet(pageResult.getList(), ErpPurchaseReturnDO::getSupplierId)); convertSet(pageResult.getList(), ErpPurchaseReturnDO::getSupplierId));
// 1.4 管理员信息 // 1.4 管理员信息
Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap( Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(
convertSet(pageResult.getList(), purchaseReturn -> Long.parseLong(purchaseReturn.getCreator()))); convertSet(pageResult.getList(), purchaseReturn -> Long.parseLong(purchaseReturn.getCreator())));
Map<Long, String> customerOrderCodeMap = customerOrderApi.getCodeMap(CommonUtil.listConvert(pageResult.getList(), ErpPurchaseReturnDO::getCustomerOrderId));
Map<Long, String> customerNameMap = customerApi.queryNameMapByIds(CommonUtil.listConvertSet(pageResult.getList(), ErpPurchaseReturnDO::getCustomerId));
// 2. 开始拼接 // 2. 开始拼接
return BeanUtils.toBean(pageResult, ErpPurchaseReturnRespVO.class, purchaseReturn -> { return BeanUtils.toBean(pageResult, ErpPurchaseReturnRespVO.class, purchaseReturn -> {
purchaseReturn.setItems(BeanUtils.toBean(purchaseReturnItemMap.get(purchaseReturn.getId()), ErpPurchaseReturnRespVO.Item.class, purchaseReturn.setItems(BeanUtils.toBean(purchaseReturnItemMap.get(purchaseReturn.getId()), ErpPurchaseReturnRespVO.Item.class));
item -> MapUtils.findAndThen(productMap, item.getProductId(), product -> item.setProductName(product.getName()) purchaseReturn.setProductNames(CollUtil.join(purchaseReturn.getItems(), ",", item ->
.setProductBarCode(product.getBarCode()).setProductUnitName(product.getUnitName())))); Optional.ofNullable(item.getProductInfo()).map(ProductInfo::getName).orElse("")));
purchaseReturn.setProductNames(CollUtil.join(purchaseReturn.getItems(), ",", ErpPurchaseReturnRespVO.Item::getProductName));
MapUtils.findAndThen(supplierMap, purchaseReturn.getSupplierId(), supplier -> purchaseReturn.setSupplierName(supplier.getName())); MapUtils.findAndThen(supplierMap, purchaseReturn.getSupplierId(), supplier -> purchaseReturn.setSupplierName(supplier.getName()));
MapUtils.findAndThen(userMap, Long.parseLong(purchaseReturn.getCreator()), user -> purchaseReturn.setCreatorName(user.getNickname())); MapUtils.findAndThen(userMap, Long.parseLong(purchaseReturn.getCreator()), user -> purchaseReturn.setCreatorName(user.getNickname()));
MapUtils.findAndThen(customerOrderCodeMap, purchaseReturn.getCustomerOrderId(), purchaseReturn::setCustomerOrderCode);
MapUtils.findAndThen(customerNameMap, purchaseReturn.getCustomerId(), purchaseReturn::setCustomerName);
}); });
} }
......
...@@ -10,10 +10,7 @@ import cn.iocoder.foodnexus.framework.common.util.object.BeanUtils; ...@@ -10,10 +10,7 @@ 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;
import cn.iocoder.foodnexus.module.erp.api.service.ErpSupplierApi; import cn.iocoder.foodnexus.module.erp.api.service.ErpSupplierApi;
import cn.iocoder.foodnexus.module.erp.controller.admin.purchase.vo.supplier.ErpProductSupplierBindReqVO; import cn.iocoder.foodnexus.module.erp.controller.admin.purchase.vo.supplier.*;
import cn.iocoder.foodnexus.module.erp.controller.admin.purchase.vo.supplier.ErpSupplierPageReqVO;
import cn.iocoder.foodnexus.module.erp.controller.admin.purchase.vo.supplier.ErpSupplierRespVO;
import cn.iocoder.foodnexus.module.erp.controller.admin.purchase.vo.supplier.ErpSupplierSaveReqVO;
import cn.iocoder.foodnexus.module.erp.dal.dataobject.purchase.ErpSupplierDO; import cn.iocoder.foodnexus.module.erp.dal.dataobject.purchase.ErpSupplierDO;
import cn.iocoder.foodnexus.module.erp.service.purchase.ErpSupplierService; import cn.iocoder.foodnexus.module.erp.service.purchase.ErpSupplierService;
import cn.iocoder.foodnexus.module.product.controller.admin.spu.vo.ProductSpuRespVO; import cn.iocoder.foodnexus.module.product.controller.admin.spu.vo.ProductSpuRespVO;
...@@ -90,6 +87,13 @@ public class ErpSupplierController { ...@@ -90,6 +87,13 @@ public class ErpSupplierController {
return success(BeanUtils.toBean(supplier, ErpSupplierRespVO.class)); return success(BeanUtils.toBean(supplier, ErpSupplierRespVO.class));
} }
@PostMapping("/enable")
@Operation(summary = "是否启用")
public CommonResult<Boolean> enable(@RequestBody @Valid ErpSupplierEnableReqVO reqVO) {
supplierService.enable(reqVO.getId(), reqVO.getStatus());
return success(Boolean.TRUE);
}
@PostMapping("/bind-product") @PostMapping("/bind-product")
@Operation(summary = "供应商绑定商品") @Operation(summary = "供应商绑定商品")
public CommonResult<Boolean> bindProduct(@Valid @RequestBody ErpProductSupplierBindReqVO reqVO) { public CommonResult<Boolean> bindProduct(@Valid @RequestBody ErpProductSupplierBindReqVO reqVO) {
......
...@@ -2,6 +2,10 @@ package cn.iocoder.foodnexus.module.erp.controller.admin.purchase.vo.returns; ...@@ -2,6 +2,10 @@ package cn.iocoder.foodnexus.module.erp.controller.admin.purchase.vo.returns;
import cn.idev.excel.annotation.ExcelIgnoreUnannotated; import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty; import cn.idev.excel.annotation.ExcelProperty;
import cn.iocoder.foodnexus.module.erp.api.vo.warehouse.WarehouseInfo;
import cn.iocoder.foodnexus.module.erp.enums.SaleOrderPickUpStatus;
import cn.iocoder.foodnexus.module.order.dto.CustomerAddressInfo;
import cn.iocoder.foodnexus.module.product.api.dto.ProductInfo;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull; import jakarta.validation.constraints.NotNull;
import lombok.Data; import lombok.Data;
...@@ -94,6 +98,47 @@ public class ErpPurchaseReturnRespVO { ...@@ -94,6 +98,47 @@ public class ErpPurchaseReturnRespVO {
@ExcelProperty("产品信息") @ExcelProperty("产品信息")
private String productNames; private String productNames;
/**
* 枚举 {@link SaleOrderPickUpStatus}
*/
@Schema(description = "退货状态")
private String returnsStatus;
@Schema(description = "客户收货地址id")
private Long addressId;
@Schema(description = "客户收货地址info")
private CustomerAddressInfo addressInfo;
@Schema(description = "收获仓库id")
private Long warehouseId;
@Schema(description = "收获库区id")
private Long warehouseAreaId;
@Schema(description = "仓库信息")
private WarehouseInfo warehouseInfo;
/**
* DeliveryStaffDO
*/
private Long deliveryStaffId;
@Schema(description = "客户订单id")
private Long customerOrderId;
@Schema(description = "客户订单编号")
private String customerOrderCode;
@Schema(description = "销售订单id")
private Long saleOrderId;
@Schema(description = "客户编号", example = "29399")
private Long customerId;
@Schema(description = "客户名称", example = "小番茄公司")
private String customerName;
@Data @Data
public static class Item { public static class Item {
...@@ -128,14 +173,11 @@ public class ErpPurchaseReturnRespVO { ...@@ -128,14 +173,11 @@ public class ErpPurchaseReturnRespVO {
@Schema(description = "备注", example = "随便") @Schema(description = "备注", example = "随便")
private String remark; private String remark;
// ========== 关联字段 ========== @Schema(description = "商品信息")
private ProductInfo productInfo;
@Schema(description = "产品名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "巧克力") @Schema(description = "客户子订单")
private String productName; private Long customerOrderItemId;
@Schema(description = "产品条码", requiredMode = Schema.RequiredMode.REQUIRED, example = "A9985")
private String productBarCode;
@Schema(description = "产品单位名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "盒")
private String productUnitName;
@Schema(description = "库存数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "100.00") @Schema(description = "库存数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "100.00")
private BigDecimal stockCount; // 该字段仅仅在“详情”和“编辑”时使用 private BigDecimal stockCount; // 该字段仅仅在“详情”和“编辑”时使用
......
...@@ -73,6 +73,9 @@ public class ErpPurchaseReturnSaveReqVO { ...@@ -73,6 +73,9 @@ public class ErpPurchaseReturnSaveReqVO {
@Schema(description = "销售订单id") @Schema(description = "销售订单id")
private Long saleOrderId; private Long saleOrderId;
@Schema(description = "客户id")
private Long customerId;
@Schema(description = "退货清单列表") @Schema(description = "退货清单列表")
private List<Item> items; private List<Item> items;
...@@ -111,6 +114,9 @@ public class ErpPurchaseReturnSaveReqVO { ...@@ -111,6 +114,9 @@ public class ErpPurchaseReturnSaveReqVO {
@Schema(description = "商品信息") @Schema(description = "商品信息")
private ProductInfo productInfo; private ProductInfo productInfo;
@Schema(description = "客户子订单")
private Long customerOrderItemId;
} }
} }
\ No newline at end of file
package cn.iocoder.foodnexus.module.erp.controller.admin.purchase.vo.supplier;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import org.springframework.web.bind.annotation.RequestParam;
/**
* @author : yanghao
* create at: 2025/10/27 16:16
* @description:
*/
@Data
public class ErpSupplierEnableReqVO {
@NotNull(message = "id不能为空")
private Long id;
@NotNull(message = "status不能为空")
private Integer status;
}
...@@ -10,19 +10,14 @@ import cn.iocoder.foodnexus.framework.common.util.collection.MapUtils; ...@@ -10,19 +10,14 @@ import cn.iocoder.foodnexus.framework.common.util.collection.MapUtils;
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.module.erp.api.service.ErpSupplierApi; import cn.iocoder.foodnexus.module.erp.api.service.ErpSupplierApi;
import cn.iocoder.foodnexus.module.erp.controller.admin.product.vo.product.ErpProductRespVO;
import cn.iocoder.foodnexus.module.erp.controller.admin.sale.vo.order.ErpSaleOrderPageReqVO; import cn.iocoder.foodnexus.module.erp.controller.admin.sale.vo.order.ErpSaleOrderPageReqVO;
import cn.iocoder.foodnexus.module.erp.controller.admin.sale.vo.order.ErpSaleOrderRespVO; import cn.iocoder.foodnexus.module.erp.controller.admin.sale.vo.order.ErpSaleOrderRespVO;
import cn.iocoder.foodnexus.module.erp.controller.admin.sale.vo.order.ErpSaleOrderSaveReqVO;
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.sale.ErpCustomerDO; import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpCustomerDO;
import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleOrderDO; 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.enums.SaleOrderPickUpStatus; import cn.iocoder.foodnexus.module.erp.enums.SaleOrderPickUpStatus;
import cn.iocoder.foodnexus.module.erp.service.product.ErpProductService;
import cn.iocoder.foodnexus.module.erp.service.purchase.ErpPurchaseOrderService; import cn.iocoder.foodnexus.module.erp.service.purchase.ErpPurchaseOrderService;
import cn.iocoder.foodnexus.module.erp.service.purchase.ErpSupplierService;
import cn.iocoder.foodnexus.module.erp.service.sale.ErpCustomerService; import cn.iocoder.foodnexus.module.erp.service.sale.ErpCustomerService;
import cn.iocoder.foodnexus.module.erp.service.sale.ErpSaleOrderService; import cn.iocoder.foodnexus.module.erp.service.sale.ErpSaleOrderService;
import cn.iocoder.foodnexus.module.erp.service.stock.ErpStockService; import cn.iocoder.foodnexus.module.erp.service.stock.ErpStockService;
...@@ -32,7 +27,6 @@ import cn.iocoder.foodnexus.module.order.dto.CustomerOrderDTO; ...@@ -32,7 +27,6 @@ import cn.iocoder.foodnexus.module.order.dto.CustomerOrderDTO;
import cn.iocoder.foodnexus.module.order.dto.CustomerOrderItemDTO; import cn.iocoder.foodnexus.module.order.dto.CustomerOrderItemDTO;
import cn.iocoder.foodnexus.module.order.dto.DeliveryStaffSimpleInfo; import cn.iocoder.foodnexus.module.order.dto.DeliveryStaffSimpleInfo;
import cn.iocoder.foodnexus.module.product.api.dto.ProductInfo; import cn.iocoder.foodnexus.module.product.api.dto.ProductInfo;
import cn.iocoder.foodnexus.module.product.dal.dataobject.spu.ProductSpuDO;
import cn.iocoder.foodnexus.module.product.service.spu.ProductSpuService; import cn.iocoder.foodnexus.module.product.service.spu.ProductSpuService;
import cn.iocoder.foodnexus.module.system.api.user.AdminUserApi; import cn.iocoder.foodnexus.module.system.api.user.AdminUserApi;
import cn.iocoder.foodnexus.module.system.api.user.dto.AdminUserRespDTO; import cn.iocoder.foodnexus.module.system.api.user.dto.AdminUserRespDTO;
......
...@@ -5,9 +5,11 @@ import cn.iocoder.foodnexus.framework.apilog.core.annotation.ApiAccessLog; ...@@ -5,9 +5,11 @@ import cn.iocoder.foodnexus.framework.apilog.core.annotation.ApiAccessLog;
import cn.iocoder.foodnexus.framework.common.pojo.CommonResult; import cn.iocoder.foodnexus.framework.common.pojo.CommonResult;
import cn.iocoder.foodnexus.framework.common.pojo.PageParam; import cn.iocoder.foodnexus.framework.common.pojo.PageParam;
import cn.iocoder.foodnexus.framework.common.pojo.PageResult; import cn.iocoder.foodnexus.framework.common.pojo.PageResult;
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.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.module.erp.api.service.ErpSupplierApi;
import cn.iocoder.foodnexus.module.erp.controller.admin.product.vo.product.ErpProductRespVO; import cn.iocoder.foodnexus.module.erp.controller.admin.product.vo.product.ErpProductRespVO;
import cn.iocoder.foodnexus.module.erp.controller.admin.sale.vo.returns.ErpSaleReturnPageReqVO; import cn.iocoder.foodnexus.module.erp.controller.admin.sale.vo.returns.ErpSaleReturnPageReqVO;
import cn.iocoder.foodnexus.module.erp.controller.admin.sale.vo.returns.ErpSaleReturnRespVO; import cn.iocoder.foodnexus.module.erp.controller.admin.sale.vo.returns.ErpSaleReturnRespVO;
...@@ -17,9 +19,14 @@ import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleReturnDO; ...@@ -17,9 +19,14 @@ import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleReturnDO;
import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleReturnItemDO; import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleReturnItemDO;
import cn.iocoder.foodnexus.module.erp.dal.dataobject.stock.ErpStockDO; import cn.iocoder.foodnexus.module.erp.dal.dataobject.stock.ErpStockDO;
import cn.iocoder.foodnexus.module.erp.service.product.ErpProductService; import cn.iocoder.foodnexus.module.erp.service.product.ErpProductService;
import cn.iocoder.foodnexus.module.erp.service.purchase.ErpPurchaseReturnService;
import cn.iocoder.foodnexus.module.erp.service.sale.ErpCustomerService; import cn.iocoder.foodnexus.module.erp.service.sale.ErpCustomerService;
import cn.iocoder.foodnexus.module.erp.service.sale.ErpSaleReturnService; import cn.iocoder.foodnexus.module.erp.service.sale.ErpSaleReturnService;
import cn.iocoder.foodnexus.module.erp.service.stock.ErpStockService; import cn.iocoder.foodnexus.module.erp.service.stock.ErpStockService;
import cn.iocoder.foodnexus.module.order.api.CustomerOrderApi;
import cn.iocoder.foodnexus.module.order.api.DeliveryStaffApi;
import cn.iocoder.foodnexus.module.order.dto.CustomerOrderDTO;
import cn.iocoder.foodnexus.module.order.dto.DeliveryStaffSimpleInfo;
import cn.iocoder.foodnexus.module.product.api.dto.ProductInfo; import cn.iocoder.foodnexus.module.product.api.dto.ProductInfo;
import cn.iocoder.foodnexus.module.system.api.user.AdminUserApi; import cn.iocoder.foodnexus.module.system.api.user.AdminUserApi;
import cn.iocoder.foodnexus.module.system.api.user.dto.AdminUserRespDTO; import cn.iocoder.foodnexus.module.system.api.user.dto.AdminUserRespDTO;
...@@ -29,6 +36,7 @@ import io.swagger.v3.oas.annotations.tags.Tag; ...@@ -29,6 +36,7 @@ import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -60,6 +68,16 @@ public class ErpSaleReturnController { ...@@ -60,6 +68,16 @@ public class ErpSaleReturnController {
@Resource @Resource
private AdminUserApi adminUserApi; private AdminUserApi adminUserApi;
@Autowired
private DeliveryStaffApi deliveryStaffApi;
@Autowired
private ErpSupplierApi supplierApi;
@Autowired
private ErpPurchaseReturnService purchaseReturnService;
@PostMapping("/create") @PostMapping("/create")
@Operation(summary = "创建销售退货") @Operation(summary = "创建销售退货")
@PreAuthorize("@ss.hasPermission('erp:sale-return:create')") @PreAuthorize("@ss.hasPermission('erp:sale-return:create')")
...@@ -103,11 +121,21 @@ public class ErpSaleReturnController { ...@@ -103,11 +121,21 @@ public class ErpSaleReturnController {
return success(null); return success(null);
} }
List<ErpSaleReturnItemDO> saleReturnItemList = saleReturnService.getSaleReturnItemListByReturnId(id); List<ErpSaleReturnItemDO> saleReturnItemList = saleReturnService.getSaleReturnItemListByReturnId(id);
return success(BeanUtils.toBean(saleReturn, ErpSaleReturnRespVO.class, saleReturnVO -> Map<Long, String> supplierMap = supplierApi.queryNameMapByIds(CommonUtil.listConvertSet(saleReturnItemList, ErpSaleReturnItemDO::getSupplierId));
Map<Long, String> prNoMap = purchaseReturnService.queryNoMap(CommonUtil.listConvertSet(saleReturnItemList, ErpSaleReturnItemDO::getPurchaseReturnOrderId));
return success(BeanUtils.toBean(saleReturn, ErpSaleReturnRespVO.class, saleReturnVO -> {
String customerName = Optional.ofNullable(customerService.getCustomer(saleReturnVO.getCustomerId())).map(ErpCustomerDO::getName).orElse("");
String creatorName = Optional.ofNullable(adminUserApi.getUser(Long.parseLong(saleReturnVO.getCreator()))).map(AdminUserRespDTO::getNickname).orElse("");
saleReturnVO.setCustomerName(customerName);
saleReturnVO.setCreatorName(creatorName);
saleReturnVO.setDeliveryStaffInfo(deliveryStaffApi.querybyStaffId(saleReturnVO.getDeliveryStaffId()));
saleReturnVO.setItems(BeanUtils.toBean(saleReturnItemList, ErpSaleReturnRespVO.Item.class, item -> { saleReturnVO.setItems(BeanUtils.toBean(saleReturnItemList, ErpSaleReturnRespVO.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);
})))); MapUtils.findAndThen(supplierMap, item.getSupplierId(), item::setSupplierName);
MapUtils.findAndThen(prNoMap, item.getPurchaseReturnOrderId(), item::setPurchaseReturnOrderNo);
}));
}));
} }
@GetMapping("/page") @GetMapping("/page")
...@@ -144,6 +172,8 @@ public class ErpSaleReturnController { ...@@ -144,6 +172,8 @@ public class ErpSaleReturnController {
// 1.4 管理员信息 // 1.4 管理员信息
Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap( Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(
convertSet(pageResult.getList(), saleReturn -> Long.parseLong(saleReturn.getCreator()))); convertSet(pageResult.getList(), saleReturn -> Long.parseLong(saleReturn.getCreator())));
Map<Long, DeliveryStaffSimpleInfo> deliveryMap = deliveryStaffApi.getMap(CommonUtil.listConvertSet(pageResult.getList(), ErpSaleReturnDO::getDeliveryStaffId));
// 2. 开始拼接 // 2. 开始拼接
return BeanUtils.toBean(pageResult, ErpSaleReturnRespVO.class, saleReturn -> { return BeanUtils.toBean(pageResult, ErpSaleReturnRespVO.class, saleReturn -> {
saleReturn.setItems(BeanUtils.toBean(saleReturnItemMap.get(saleReturn.getId()), ErpSaleReturnRespVO.Item.class)); saleReturn.setItems(BeanUtils.toBean(saleReturnItemMap.get(saleReturn.getId()), ErpSaleReturnRespVO.Item.class));
...@@ -151,6 +181,7 @@ public class ErpSaleReturnController { ...@@ -151,6 +181,7 @@ public class ErpSaleReturnController {
Optional.ofNullable(item.getProductInfo()).map(ProductInfo::getName).orElse(""))); Optional.ofNullable(item.getProductInfo()).map(ProductInfo::getName).orElse("")));
MapUtils.findAndThen(customerMap, saleReturn.getCustomerId(), supplier -> saleReturn.setCustomerName(supplier.getName())); MapUtils.findAndThen(customerMap, saleReturn.getCustomerId(), supplier -> saleReturn.setCustomerName(supplier.getName()));
MapUtils.findAndThen(userMap, Long.parseLong(saleReturn.getCreator()), user -> saleReturn.setCreatorName(user.getNickname())); MapUtils.findAndThen(userMap, Long.parseLong(saleReturn.getCreator()), user -> saleReturn.setCreatorName(user.getNickname()));
MapUtils.findAndThen(deliveryMap, saleReturn.getDeliveryStaffId(), saleReturn::setDeliveryStaffInfo);
}); });
} }
......
...@@ -20,7 +20,11 @@ public class DeliveryOrderPageReqVO extends PageParam { ...@@ -20,7 +20,11 @@ public class DeliveryOrderPageReqVO extends PageParam {
@Schema(description = "接单时间段") @Schema(description = "接单时间段")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] acceptTime; private LocalDateTime acceptTimeBegin;
@Schema(description = "接单时间段")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime acceptTimeEnd;
@Schema(description = "拣货状态") @Schema(description = "拣货状态")
private SaleOrderPickUpStatus pickUpStatus; private SaleOrderPickUpStatus pickUpStatus;
......
...@@ -97,4 +97,15 @@ public class ErpSaleOrderPageReqVO extends PageParam { ...@@ -97,4 +97,15 @@ public class ErpSaleOrderPageReqVO extends PageParam {
@Schema(description = "接单时间段") @Schema(description = "接单时间段")
private LocalDateTime[] acceptTime; private LocalDateTime[] acceptTime;
@Schema(description = "订单类型(1-配送单 2-退货单)")
private Integer type;
@Schema(description = "接单时间段")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime acceptTimeBegin;
@Schema(description = "接单时间段")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime acceptTimeEnd;
} }
\ No newline at end of file
...@@ -43,6 +43,9 @@ public class ErpSaleReturnPageReqVO extends PageParam { ...@@ -43,6 +43,9 @@ public class ErpSaleReturnPageReqVO extends PageParam {
@Schema(description = "产品编号", example = "1") @Schema(description = "产品编号", example = "1")
private Long productId; private Long productId;
@Schema(description = "产品名称")
private String productName;
@Schema(description = "仓库编号", example = "1") @Schema(description = "仓库编号", example = "1")
private Long warehouseId; private Long warehouseId;
...@@ -58,4 +61,7 @@ public class ErpSaleReturnPageReqVO extends PageParam { ...@@ -58,4 +61,7 @@ public class ErpSaleReturnPageReqVO extends PageParam {
@Schema(description = "是否可退款", example = "true") @Schema(description = "是否可退款", example = "true")
private Boolean refundEnable; // 对应 refundStatus = [0, 1] private Boolean refundEnable; // 对应 refundStatus = [0, 1]
@Schema(description = "客户订单id")
private Long customerOrderId;
} }
\ No newline at end of file
...@@ -4,6 +4,7 @@ import cn.idev.excel.annotation.ExcelIgnoreUnannotated; ...@@ -4,6 +4,7 @@ import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
import cn.idev.excel.annotation.ExcelProperty; import cn.idev.excel.annotation.ExcelProperty;
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.order.dto.CustomerAddressInfo; import cn.iocoder.foodnexus.module.order.dto.CustomerAddressInfo;
import cn.iocoder.foodnexus.module.order.dto.DeliveryStaffSimpleInfo;
import cn.iocoder.foodnexus.module.product.api.dto.ProductInfo; import cn.iocoder.foodnexus.module.product.api.dto.ProductInfo;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
...@@ -117,6 +118,9 @@ public class ErpSaleReturnRespVO { ...@@ -117,6 +118,9 @@ public class ErpSaleReturnRespVO {
@Schema(description = "配送人员") @Schema(description = "配送人员")
private Long deliveryStaffId; private Long deliveryStaffId;
@Schema(description = "配送人员名称")
private DeliveryStaffSimpleInfo deliveryStaffInfo;
@Schema(description = "客户收货地址id") @Schema(description = "客户收货地址id")
private Long addressId; private Long addressId;
...@@ -173,6 +177,18 @@ public class ErpSaleReturnRespVO { ...@@ -173,6 +177,18 @@ public class ErpSaleReturnRespVO {
@Schema(description = "库存数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "100.00") @Schema(description = "库存数量", requiredMode = Schema.RequiredMode.REQUIRED, example = "100.00")
private BigDecimal stockCount; // 该字段仅仅在“详情”和“编辑”时使用 private BigDecimal stockCount; // 该字段仅仅在“详情”和“编辑”时使用
@Schema(description = "供应商")
private Long supplierId;
@Schema(description = "供应商名称")
private String supplierName;
@Schema(description = "采购退货单")
private Long purchaseReturnOrderId;
@Schema(description = "采购退后单编号")
private String purchaseReturnOrderNo;
} }
} }
...@@ -14,8 +14,12 @@ import cn.iocoder.foodnexus.module.erp.controller.admin.stock.vo.stock.ErpStockR ...@@ -14,8 +14,12 @@ import cn.iocoder.foodnexus.module.erp.controller.admin.stock.vo.stock.ErpStockR
import cn.iocoder.foodnexus.module.erp.dal.dataobject.stock.ErpStockDO; import cn.iocoder.foodnexus.module.erp.dal.dataobject.stock.ErpStockDO;
import cn.iocoder.foodnexus.module.erp.dal.dataobject.stock.ErpWarehouseDO; import cn.iocoder.foodnexus.module.erp.dal.dataobject.stock.ErpWarehouseDO;
import cn.iocoder.foodnexus.module.erp.service.product.ErpProductService; import cn.iocoder.foodnexus.module.erp.service.product.ErpProductService;
import cn.iocoder.foodnexus.module.erp.service.product.ProductSupplierService;
import cn.iocoder.foodnexus.module.erp.service.stock.ErpStockService; import cn.iocoder.foodnexus.module.erp.service.stock.ErpStockService;
import cn.iocoder.foodnexus.module.erp.service.stock.ErpWarehouseService; import cn.iocoder.foodnexus.module.erp.service.stock.ErpWarehouseService;
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.spu.ProductSpuService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters; import io.swagger.v3.oas.annotations.Parameters;
...@@ -23,6 +27,7 @@ import io.swagger.v3.oas.annotations.tags.Tag; ...@@ -23,6 +27,7 @@ import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
...@@ -34,6 +39,7 @@ import java.io.IOException; ...@@ -34,6 +39,7 @@ import java.io.IOException;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional;
import static cn.iocoder.foodnexus.framework.apilog.core.enums.OperateTypeEnum.EXPORT; import static cn.iocoder.foodnexus.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
import static cn.iocoder.foodnexus.framework.common.pojo.CommonResult.success; import static cn.iocoder.foodnexus.framework.common.pojo.CommonResult.success;
...@@ -47,10 +53,14 @@ public class ErpStockController { ...@@ -47,10 +53,14 @@ public class ErpStockController {
@Resource @Resource
private ErpStockService stockService; private ErpStockService stockService;
@Resource @Autowired
private ErpProductService productService; private ProductSpuService productSpuService;
@Autowired
private ProductCategoryService productCategoryService;
@Resource @Resource
private ErpWarehouseService warehouseService; private ErpWarehouseService warehouseService;
@Autowired
private ProductSupplierService productSupplierService;
@GetMapping("/get") @GetMapping("/get")
@Operation(summary = "获得产品库存") @Operation(summary = "获得产品库存")
...@@ -63,8 +73,16 @@ public class ErpStockController { ...@@ -63,8 +73,16 @@ public class ErpStockController {
public CommonResult<ErpStockRespVO> getStock(@RequestParam(value = "id", required = false) Long id, public CommonResult<ErpStockRespVO> getStock(@RequestParam(value = "id", required = false) Long id,
@RequestParam(value = "productId", required = false) Long productId, @RequestParam(value = "productId", required = false) Long productId,
@RequestParam(value = "warehouseId", required = false) Long warehouseId) { @RequestParam(value = "warehouseId", required = false) Long warehouseId) {
ErpStockDO stock = id != null ? stockService.getStock(id) : stockService.getStock(productId, warehouseId); ErpStockDO stockDO = id != null ? stockService.getStock(id) : stockService.getStock(productId, warehouseId);
return success(BeanUtils.toBean(stock, ErpStockRespVO.class)); return success(BeanUtils.toBean(stockDO, ErpStockRespVO.class, stock -> {
ProductSpuDO product = productSpuService.getSpu(stock.getProductId());
stock.setProductName(product.getName())
.setUnitName(product.getUnitName())
.setIntroduction(product.getIntroduction());
stock.setCategoryName(productCategoryService.queryNameById(product.getCategoryId()));
stock.setWarehouseName(Optional.ofNullable(warehouseService.getWarehouse(stock.getWarehouseId())).map(ErpWarehouseDO::getName).orElse(""));
stock.setProductSupplierCount(productSupplierService.getCountByProductId(stock.getProductId()));
}));
} }
@GetMapping("/get-count") @GetMapping("/get-count")
...@@ -98,14 +116,19 @@ public class ErpStockController { ...@@ -98,14 +116,19 @@ public class ErpStockController {
if (CollUtil.isEmpty(pageResult.getList())) { if (CollUtil.isEmpty(pageResult.getList())) {
return PageResult.empty(pageResult.getTotal()); return PageResult.empty(pageResult.getTotal());
} }
Map<Long, ErpProductRespVO> productMap = productService.getProductVOMap( Map<Long, ProductSpuDO> productMap = productSpuService.getProductVOMap(
convertSet(pageResult.getList(), ErpStockDO::getProductId)); convertSet(pageResult.getList(), ErpStockDO::getProductId));
Map<Long, ErpWarehouseDO> warehouseMap = warehouseService.getWarehouseMap( Map<Long, ErpWarehouseDO> warehouseMap = warehouseService.getWarehouseMap(
convertSet(pageResult.getList(), ErpStockDO::getWarehouseId)); convertSet(pageResult.getList(), ErpStockDO::getWarehouseId));
Map<Long, String> categoryMap = productCategoryService.getMap(productMap.keySet());
Map<Long, Long> supplierCountMap = productSupplierService.getCountMap(productMap.keySet());
return BeanUtils.toBean(pageResult, ErpStockRespVO.class, stock -> { return BeanUtils.toBean(pageResult, ErpStockRespVO.class, stock -> {
MapUtils.findAndThen(productMap, stock.getProductId(), product -> stock.setProductName(product.getName()) MapUtils.findAndThen(productMap, stock.getProductId(), product -> stock.setProductName(product.getName())
.setCategoryName(product.getCategoryName()).setUnitName(product.getUnitName())); .setUnitName(product.getUnitName())
.setIntroduction(product.getIntroduction()));
MapUtils.findAndThen(categoryMap, stock.getProductId(), stock::setCategoryName);
MapUtils.findAndThen(warehouseMap, stock.getWarehouseId(), warehouse -> stock.setWarehouseName(warehouse.getName())); MapUtils.findAndThen(warehouseMap, stock.getWarehouseId(), warehouse -> stock.setWarehouseName(warehouse.getName()));
MapUtils.findAndThen(supplierCountMap, stock.getProductId(), stock::setProductSupplierCount);
}); });
} }
......
...@@ -40,6 +40,13 @@ public class ErpStockRespVO { ...@@ -40,6 +40,13 @@ public class ErpStockRespVO {
@ExcelProperty("单位") @ExcelProperty("单位")
private String unitName; private String unitName;
@Schema(description = "商品规格", requiredMode = Schema.RequiredMode.REQUIRED, example = "清凉小短袖简介")
@ExcelProperty("商品规格")
private String introduction;
@Schema(description = "关联供应商数")
private Long productSupplierCount;
// ========== 仓库信息 ========== // ========== 仓库信息 ==========
@Schema(description = "仓库名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四") @Schema(description = "仓库名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
......
...@@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.annotation.TableField; ...@@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.*;
import java.math.BigDecimal; import java.math.BigDecimal;
...@@ -178,4 +179,9 @@ public class ErpPurchaseReturnDO extends BaseDO { ...@@ -178,4 +179,9 @@ public class ErpPurchaseReturnDO extends BaseDO {
*/ */
private Long saleOrderId; private Long saleOrderId;
/**
* 客户id
*/
private Long customerId;
} }
\ No newline at end of file
...@@ -18,7 +18,7 @@ import java.math.BigDecimal; ...@@ -18,7 +18,7 @@ import java.math.BigDecimal;
* *
* @author 芋道源码 * @author 芋道源码
*/ */
@TableName("erp_purchase_return_items") @TableName(value = "erp_purchase_return_items", autoResultMap = true)
@KeySequence("erp_purchase_return_items_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 @KeySequence("erp_purchase_return_items_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
...@@ -98,4 +98,9 @@ public class ErpPurchaseReturnItemDO extends BaseDO { ...@@ -98,4 +98,9 @@ public class ErpPurchaseReturnItemDO extends BaseDO {
*/ */
@TableField(typeHandler = JacksonTypeHandler.class) @TableField(typeHandler = JacksonTypeHandler.class)
private ProductInfo productInfo; private ProductInfo productInfo;
/**
* 客户子订单
*/
private Long customerOrderItemId;
} }
\ No newline at end of file
...@@ -103,6 +103,11 @@ public class ErpSaleReturnItemDO extends BaseDO { ...@@ -103,6 +103,11 @@ public class ErpSaleReturnItemDO extends BaseDO {
private Long supplierId; private Long supplierId;
/** /**
* 采购退货单
*/
private Long purchaseReturnOrderId;
/**
* 商品信息 * 商品信息
*/ */
@TableField(typeHandler = JacksonTypeHandler.class) @TableField(typeHandler = JacksonTypeHandler.class)
......
...@@ -10,11 +10,13 @@ import cn.iocoder.foodnexus.module.erp.controller.admin.sale.vo.order.ErpSaleOrd ...@@ -10,11 +10,13 @@ import cn.iocoder.foodnexus.module.erp.controller.admin.sale.vo.order.ErpSaleOrd
import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleOrderDO; 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 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 org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Set; import java.util.Set;
...@@ -37,6 +39,8 @@ public interface ErpSaleOrderMapper extends BaseMapperX<ErpSaleOrderDO> { ...@@ -37,6 +39,8 @@ public interface ErpSaleOrderMapper extends BaseMapperX<ErpSaleOrderDO> {
.eqIfPresent(ErpSaleOrderDO::getCreator, reqVO.getCreator()) .eqIfPresent(ErpSaleOrderDO::getCreator, reqVO.getCreator())
// .eqIfPresent(ErpSaleOrderDO::getDeliveryStaffId, reqVO.getDeliveryStaffId()) // .eqIfPresent(ErpSaleOrderDO::getDeliveryStaffId, reqVO.getDeliveryStaffId())
.betweenIfPresent(ErpSaleOrderDO::getAcceptTime, reqVO.getAcceptTime()) .betweenIfPresent(ErpSaleOrderDO::getAcceptTime, reqVO.getAcceptTime())
.geIfPresent(ErpSaleOrderDO::getAcceptTime, reqVO.getAcceptTimeBegin())
.leIfPresent(ErpSaleOrderDO::getAcceptTime, reqVO.getAcceptTimeEnd())
.eqIfPresent(ErpSaleOrderDO::getPickUpStatus, reqVO.getPickUpStatus()) .eqIfPresent(ErpSaleOrderDO::getPickUpStatus, reqVO.getPickUpStatus())
.inIfPresent(ErpSaleOrderDO::getPickUpStatus, reqVO.getPickUpStatusList()) .inIfPresent(ErpSaleOrderDO::getPickUpStatus, reqVO.getPickUpStatusList())
.eqIfPresent(ErpSaleOrderDO::getCustomerDeptId, reqVO.getCustomerDeptId()) .eqIfPresent(ErpSaleOrderDO::getCustomerDeptId, reqVO.getCustomerDeptId())
...@@ -79,6 +83,13 @@ public interface ErpSaleOrderMapper extends BaseMapperX<ErpSaleOrderDO> { ...@@ -79,6 +83,13 @@ public interface ErpSaleOrderMapper extends BaseMapperX<ErpSaleOrderDO> {
.eq(reqVO.getProductId() != null, ErpSaleOrderItemDO::getProductId, reqVO.getProductId()) .eq(reqVO.getProductId() != null, ErpSaleOrderItemDO::getProductId, reqVO.getProductId())
.groupBy(ErpSaleOrderDO::getId); // 避免 1 对多查询,产生相同的 1 .groupBy(ErpSaleOrderDO::getId); // 避免 1 对多查询,产生相同的 1
} }
if (CommonUtil.isNotEmpty(reqVO.getType())) {
if (reqVO.getType() == 1) {
query.in(ErpSaleOrderDO::getPickUpStatus, SaleOrderPickUpStatus.getList(Boolean.TRUE));
} else if (reqVO.getType() == 2) {
query.in(ErpSaleOrderDO::getPickUpStatus, SaleOrderPickUpStatus.getList(Boolean.FALSE));
}
}
return selectJoinPage(reqVO, ErpSaleOrderDO.class, query); return selectJoinPage(reqVO, ErpSaleOrderDO.class, query);
} }
......
...@@ -2,6 +2,7 @@ package cn.iocoder.foodnexus.module.erp.dal.mysql.sale; ...@@ -2,6 +2,7 @@ package cn.iocoder.foodnexus.module.erp.dal.mysql.sale;
import cn.iocoder.foodnexus.framework.common.pojo.PageResult; import cn.iocoder.foodnexus.framework.common.pojo.PageResult;
import cn.iocoder.foodnexus.framework.common.util.CommonUtil;
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.returns.ErpSaleReturnPageReqVO; import cn.iocoder.foodnexus.module.erp.controller.admin.sale.vo.returns.ErpSaleReturnPageReqVO;
...@@ -9,6 +10,7 @@ import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleOutDO; ...@@ -9,6 +10,7 @@ import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleOutDO;
import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleReturnDO; import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleReturnDO;
import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleReturnItemDO; import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleReturnItemDO;
import cn.iocoder.foodnexus.module.erp.api.enums.ErpAuditStatus; import cn.iocoder.foodnexus.module.erp.api.enums.ErpAuditStatus;
import cn.iocoder.foodnexus.module.product.dal.dataobject.spu.ProductSpuDO;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
...@@ -33,6 +35,7 @@ public interface ErpSaleReturnMapper extends BaseMapperX<ErpSaleReturnDO> { ...@@ -33,6 +35,7 @@ public interface ErpSaleReturnMapper extends BaseMapperX<ErpSaleReturnDO> {
.eqIfPresent(ErpSaleReturnDO::getCreator, reqVO.getCreator()) .eqIfPresent(ErpSaleReturnDO::getCreator, reqVO.getCreator())
.eqIfPresent(ErpSaleReturnDO::getAccountId, reqVO.getAccountId()) .eqIfPresent(ErpSaleReturnDO::getAccountId, reqVO.getAccountId())
.likeIfPresent(ErpSaleReturnDO::getOrderNo, reqVO.getOrderNo()) .likeIfPresent(ErpSaleReturnDO::getOrderNo, reqVO.getOrderNo())
.eqIfPresent(ErpSaleReturnDO::getCustomerOrderId, reqVO.getCustomerOrderId())
.orderByDesc(ErpSaleReturnDO::getId); .orderByDesc(ErpSaleReturnDO::getId);
// 退款状态。为什么需要 t. 的原因,是因为联表查询时,需要指定表名,不然会报字段不存在的错误 // 退款状态。为什么需要 t. 的原因,是因为联表查询时,需要指定表名,不然会报字段不存在的错误
if (Objects.equals(reqVO.getRefundStatus(), ErpSaleReturnPageReqVO.REFUND_STATUS_NONE)) { if (Objects.equals(reqVO.getRefundStatus(), ErpSaleReturnPageReqVO.REFUND_STATUS_NONE)) {
...@@ -51,6 +54,11 @@ public interface ErpSaleReturnMapper extends BaseMapperX<ErpSaleReturnDO> { ...@@ -51,6 +54,11 @@ public interface ErpSaleReturnMapper extends BaseMapperX<ErpSaleReturnDO> {
.eq(reqVO.getWarehouseId() != null, ErpSaleReturnItemDO::getWarehouseId, reqVO.getWarehouseId()) .eq(reqVO.getWarehouseId() != null, ErpSaleReturnItemDO::getWarehouseId, reqVO.getWarehouseId())
.eq(reqVO.getProductId() != null, ErpSaleReturnItemDO::getProductId, reqVO.getProductId()) .eq(reqVO.getProductId() != null, ErpSaleReturnItemDO::getProductId, reqVO.getProductId())
.groupBy(ErpSaleReturnDO::getId); // 避免 1 对多查询,产生相同的 1 .groupBy(ErpSaleReturnDO::getId); // 避免 1 对多查询,产生相同的 1
} else if (CommonUtil.isNotBlank(reqVO.getProductName())) {
query.leftJoin(ErpSaleReturnItemDO.class, ErpSaleReturnItemDO::getReturnId, ErpSaleReturnDO::getId)
.leftJoin(ProductSpuDO.class, ProductSpuDO::getId, ErpSaleReturnItemDO::getProductId)
.like(ProductSpuDO::getName, reqVO.getProductName())
.groupBy(ErpSaleReturnDO::getId);
} }
return selectJoinPage(reqVO, ErpSaleReturnDO.class, query); return selectJoinPage(reqVO, ErpSaleReturnDO.class, query);
} }
......
...@@ -6,6 +6,8 @@ import lombok.Getter; ...@@ -6,6 +6,8 @@ import lombok.Getter;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import java.util.Arrays; import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/** /**
* @author : yanghao * @author : yanghao
...@@ -87,4 +89,8 @@ public enum SaleOrderPickUpStatus implements ArrayValuable<String> { ...@@ -87,4 +89,8 @@ public enum SaleOrderPickUpStatus implements ArrayValuable<String> {
public String[] array() { public String[] array() {
return ARRAYS; return ARRAYS;
} }
public static List<String> getList(boolean isReturns) {
return Arrays.stream(values()).filter(item->item.isReturns == isReturns).map(SaleOrderPickUpStatus::getType).collect(Collectors.toList());
}
} }
...@@ -170,7 +170,7 @@ public class ErpProductServiceImpl implements ErpProductService { ...@@ -170,7 +170,7 @@ public class ErpProductServiceImpl implements ErpProductService {
.set(ErpProductDO::getAuditor, WebFrameworkUtils.getLoginUserId()) .set(ErpProductDO::getAuditor, WebFrameworkUtils.getLoginUserId())
.set(ErpProductDO::getAuditReason, CommonUtil.getEls(auditReqVO.getAuditReason(), "")) .set(ErpProductDO::getAuditReason, CommonUtil.getEls(auditReqVO.getAuditReason(), ""))
.set(ErpProductDO::getAuditTime, LocalDateTime.now()) .set(ErpProductDO::getAuditTime, LocalDateTime.now())
.set(ErpProductDO::getAuditStatus, auditReqVO.getAuditReason()) .set(ErpProductDO::getAuditStatus, auditReqVO.getAuditStatus())
.eq(ErpProductDO::getId, id)); .eq(ErpProductDO::getId, id));
} }
......
...@@ -72,4 +72,8 @@ public interface ProductSupplierService { ...@@ -72,4 +72,8 @@ public interface ProductSupplierService {
List<Long> queryByProductId(Long productId); List<Long> queryByProductId(Long productId);
Map<Long, List<ProductSupplierDO>> groupBySupplierId(Collection<Long> productIds); Map<Long, List<ProductSupplierDO>> groupBySupplierId(Collection<Long> productIds);
Map<Long, Long> getCountMap(Collection<Long> productIds);
Long getCountByProductId(Long productId);
} }
\ No newline at end of file
...@@ -111,9 +111,29 @@ public class ProductSupplierServiceImpl implements ProductSupplierService { ...@@ -111,9 +111,29 @@ public class ProductSupplierServiceImpl implements ProductSupplierService {
@Override @Override
public Map<Long, List<ProductSupplierDO>> groupBySupplierId(Collection<Long> productIds) { public Map<Long, List<ProductSupplierDO>> groupBySupplierId(Collection<Long> productIds) {
if (CommonUtil.isEmpty(productIds)) {
return new HashMap<>();
}
List<ProductSupplierDO> productSupplierDOS = productSupplierMapper.selectList(Wrappers.<ProductSupplierDO>lambdaQuery() List<ProductSupplierDO> productSupplierDOS = productSupplierMapper.selectList(Wrappers.<ProductSupplierDO>lambdaQuery()
.in(ProductSupplierDO::getProductId, productIds)); .in(ProductSupplierDO::getProductId, productIds));
return CommonUtil.listConvertListMap(productSupplierDOS, ProductSupplierDO::getSupplierId); return CommonUtil.listConvertListMap(productSupplierDOS, ProductSupplierDO::getSupplierId);
} }
@Override
public Map<Long, Long> getCountMap(Collection<Long> productIds) {
if (CommonUtil.isEmpty(productIds)) {
return new HashMap<>();
}
Map<Long, Long> result = new HashMap<>();
productIds.forEach(productId -> {
result.put(productId, getCountByProductId(productId));
});
return result;
}
@Override
public Long getCountByProductId(Long productId) {
return productSupplierMapper.selectCount(ProductSupplierDO::getProductId, productId);
}
} }
\ No newline at end of file
...@@ -10,6 +10,8 @@ import jakarta.validation.Valid; ...@@ -10,6 +10,8 @@ import jakarta.validation.Valid;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Set;
/** /**
* ERP 采购退货 Service 接口 * ERP 采购退货 Service 接口
...@@ -98,4 +100,6 @@ public interface ErpPurchaseReturnService { ...@@ -98,4 +100,6 @@ public interface ErpPurchaseReturnService {
*/ */
List<ErpPurchaseReturnItemDO> getPurchaseReturnItemListByReturnIds(Collection<Long> returnIds); List<ErpPurchaseReturnItemDO> getPurchaseReturnItemListByReturnIds(Collection<Long> returnIds);
Map<Long, String> queryNoMap(Collection<Long> longs);
} }
\ No newline at end of file
...@@ -3,6 +3,7 @@ package cn.iocoder.foodnexus.module.erp.service.purchase; ...@@ -3,6 +3,7 @@ package cn.iocoder.foodnexus.module.erp.service.purchase;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.iocoder.foodnexus.framework.common.pojo.PageResult; import cn.iocoder.foodnexus.framework.common.pojo.PageResult;
import cn.iocoder.foodnexus.framework.common.util.CommonUtil;
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.object.BeanUtils; import cn.iocoder.foodnexus.framework.common.util.object.BeanUtils;
import cn.iocoder.foodnexus.module.erp.controller.admin.purchase.vo.returns.ErpPurchaseReturnPageReqVO; import cn.iocoder.foodnexus.module.erp.controller.admin.purchase.vo.returns.ErpPurchaseReturnPageReqVO;
...@@ -29,10 +30,7 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -29,10 +30,7 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Collection; import java.util.*;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import static cn.iocoder.foodnexus.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.foodnexus.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.foodnexus.framework.common.util.collection.CollectionUtils.*; import static cn.iocoder.foodnexus.framework.common.util.collection.CollectionUtils.*;
...@@ -135,8 +133,8 @@ public class ErpPurchaseReturnServiceImpl implements ErpPurchaseReturnService { ...@@ -135,8 +133,8 @@ public class ErpPurchaseReturnServiceImpl implements ErpPurchaseReturnService {
if (purchaseReturn.getDiscountPercent() == null) { if (purchaseReturn.getDiscountPercent() == null) {
purchaseReturn.setDiscountPercent(BigDecimal.ZERO); purchaseReturn.setDiscountPercent(BigDecimal.ZERO);
} }
purchaseReturn.setDiscountPrice(MoneyUtils.priceMultiplyPercent(purchaseReturn.getTotalPrice(), purchaseReturn.getDiscountPercent())); // purchaseReturn.setDiscountPrice(BigDecimal.ZERO);
purchaseReturn.setTotalPrice(purchaseReturn.getTotalPrice().subtract(purchaseReturn.getDiscountPrice()).add(purchaseReturn.getOtherPrice())); // purchaseReturn.setTotalPrice(purchaseReturn.getTotalPrice());
} }
private void updatePurchaseOrderReturnCount(Long orderId) { private void updatePurchaseOrderReturnCount(Long orderId) {
...@@ -301,4 +299,12 @@ public class ErpPurchaseReturnServiceImpl implements ErpPurchaseReturnService { ...@@ -301,4 +299,12 @@ public class ErpPurchaseReturnServiceImpl implements ErpPurchaseReturnService {
return purchaseReturnItemMapper.selectListByReturnIds(returnIds); return purchaseReturnItemMapper.selectListByReturnIds(returnIds);
} }
@Override
public Map<Long, String> queryNoMap(Collection<Long> ids) {
if (CommonUtil.isEmpty(ids)) {
return new HashMap<>();
}
return CommonUtil.listConvertMap(purchaseReturnMapper.selectByIds(ids), ErpPurchaseReturnDO::getId, ErpPurchaseReturnDO::getNo);
}
} }
...@@ -100,4 +100,5 @@ public interface ErpSupplierService { ...@@ -100,4 +100,5 @@ public interface ErpSupplierService {
List<ProductSpuDO> queryBindProduct(Long id); List<ProductSpuDO> queryBindProduct(Long id);
void enable(Long id, Integer status);
} }
\ No newline at end of file
...@@ -150,7 +150,7 @@ public class ErpSupplierServiceImpl implements ErpSupplierService, ErpSupplierAp ...@@ -150,7 +150,7 @@ public class ErpSupplierServiceImpl implements ErpSupplierService, ErpSupplierAp
.set(ErpSupplierDO::getAuditor, WebFrameworkUtils.getLoginUserId()) .set(ErpSupplierDO::getAuditor, WebFrameworkUtils.getLoginUserId())
.set(ErpSupplierDO::getAuditReason, CommonUtil.getEls(auditReqVO.getAuditReason(), "")) .set(ErpSupplierDO::getAuditReason, CommonUtil.getEls(auditReqVO.getAuditReason(), ""))
.set(ErpSupplierDO::getAuditTime, LocalDateTime.now()) .set(ErpSupplierDO::getAuditTime, LocalDateTime.now())
.set(ErpSupplierDO::getAuditStatus, auditReqVO.getAuditReason()) .set(ErpSupplierDO::getAuditStatus, auditReqVO.getAuditStatus())
.eq(ErpSupplierDO::getId, id)); .eq(ErpSupplierDO::getId, id));
} }
...@@ -175,6 +175,13 @@ public class ErpSupplierServiceImpl implements ErpSupplierService, ErpSupplierAp ...@@ -175,6 +175,13 @@ public class ErpSupplierServiceImpl implements ErpSupplierService, ErpSupplierAp
return productSpuService.getSpuList(CommonUtil.listConvertSet(productSupplierDOS, ProductSupplierDO::getProductId)); return productSpuService.getSpuList(CommonUtil.listConvertSet(productSupplierDOS, ProductSupplierDO::getProductId));
} }
@Override
public void enable(Long id, Integer status) {
supplierMapper.update(Wrappers.<ErpSupplierDO>lambdaUpdate()
.set(ErpSupplierDO::getStatus, status)
.eq(ErpSupplierDO::getId, id));
}
/* --------------- api --------------- */ /* --------------- api --------------- */
......
package cn.iocoder.foodnexus.module.erp.service.sale; package cn.iocoder.foodnexus.module.erp.service.sale;
import cn.iocoder.foodnexus.framework.common.enums.CommonStatusEnum; import cn.iocoder.foodnexus.framework.common.enums.CommonStatusEnum;
import cn.iocoder.foodnexus.framework.common.enums.CustomerTypeEnum;
import cn.iocoder.foodnexus.framework.common.exception.ServiceException; import cn.iocoder.foodnexus.framework.common.exception.ServiceException;
import cn.iocoder.foodnexus.framework.common.pojo.PageResult; import cn.iocoder.foodnexus.framework.common.pojo.PageResult;
import cn.iocoder.foodnexus.framework.common.util.CommonUtil; import cn.iocoder.foodnexus.framework.common.util.CommonUtil;
...@@ -253,4 +254,26 @@ public class ErpCustomerServiceImpl implements ErpCustomerService, ErpCustomerAp ...@@ -253,4 +254,26 @@ public class ErpCustomerServiceImpl implements ErpCustomerService, ErpCustomerAp
public String queryNameStrById(Long customerId) { public String queryNameStrById(Long customerId) {
return Optional.ofNullable(customerMapper.selectById(customerId)).map(ErpCustomerDO::getName).orElse(""); return Optional.ofNullable(customerMapper.selectById(customerId)).map(ErpCustomerDO::getName).orElse("");
} }
@Override
public Integer queryCustomerTypeByUserId(Long userId) {
AdminUserDO user = userService.getUser(userId);
if (!UserSystemEnum.CUSTOMER.getKey().equals(user.getUserSystem())) {
return null;
}
DeptDO topDept = deptService.getTopDept(user.getDeptId());
ErpCustomerDO customer = customerMapper.selectOne(ErpCustomerDO::getSystemDeptId, topDept.getId());
if (CommonUtil.isEmpty(customer)) {
throw exception(CUSTOMER_NOT_EXISTS);
}
if (CommonStatusEnum.isDisable(customer.getStatus())) {
throw exception(CUSTOMER_NOT_ENABLE, customer.getName());
}
DeptDO dept = deptService.getDept(user.getDeptId());
if (DeptDO.PARENT_ID_ROOT.equals(dept.getParentId())) {
return CustomerTypeEnum.CUSTOMER.getKey();
}
return CustomerTypeEnum.CHIEF.getKey();
}
} }
...@@ -258,13 +258,15 @@ public class ErpSaleReturnServiceImpl implements ErpSaleReturnService { ...@@ -258,13 +258,15 @@ public class ErpSaleReturnServiceImpl implements ErpSaleReturnService {
purchaseReturnSave.setDeliveryStaffId(saleReturn.getDeliveryStaffId()); purchaseReturnSave.setDeliveryStaffId(saleReturn.getDeliveryStaffId());
purchaseReturnSave.setCustomerOrderId(saleReturn.getCustomerOrderId()); purchaseReturnSave.setCustomerOrderId(saleReturn.getCustomerOrderId());
purchaseReturnSave.setSaleOrderId(saleReturn.getOrderId()); purchaseReturnSave.setSaleOrderId(saleReturn.getOrderId());
purchaseReturnSave.setCustomerId(saleReturn.getCustomerId());
Map<Long, ErpPurchaseOrderItemDO> purchaseOrderMap = CommonUtil.listConvertMap(purchaseOrderItems, ErpPurchaseOrderItemDO::getCustomerOrderItemId); Map<Long, ErpPurchaseOrderItemDO> purchaseOrderMap = CommonUtil.listConvertMap(purchaseOrderItems, ErpPurchaseOrderItemDO::getCustomerOrderItemId);
for (ErpSaleReturnItemDO saleReturnsItem : saleReturnsItems) { for (ErpSaleReturnItemDO saleReturnsItem : saleReturnsItems) {
ErpPurchaseReturnSaveReqVO.Item item = new ErpPurchaseReturnSaveReqVO.Item(); ErpPurchaseReturnSaveReqVO.Item item = new ErpPurchaseReturnSaveReqVO.Item();
if (purchaseOrderMap.containsKey(saleReturnsItem.getCustomerOrderItemId())) { if (!purchaseOrderMap.containsKey(saleReturnsItem.getCustomerOrderItemId())) {
throw exception(PURCHASE_ORDER_NOT_EXISTS); throw exception(PURCHASE_ORDER_NOT_EXISTS);
} }
item.setOrderItemId(purchaseOrderMap.get(saleReturnsItem.getCustomerOrderItemId()).getId()); item.setOrderItemId(purchaseOrderMap.get(saleReturnsItem.getCustomerOrderItemId()).getId());
item.setCustomerOrderItemId(saleReturnsItem.getCustomerOrderItemId());
item.setWarehouseId(saleReturnsItem.getWarehouseId()); item.setWarehouseId(saleReturnsItem.getWarehouseId());
item.setProductId(saleReturnsItem.getProductId()); item.setProductId(saleReturnsItem.getProductId());
item.setProductUnit(saleReturnsItem.getProductUnit()); item.setProductUnit(saleReturnsItem.getProductUnit());
...@@ -275,7 +277,11 @@ public class ErpSaleReturnServiceImpl implements ErpSaleReturnService { ...@@ -275,7 +277,11 @@ public class ErpSaleReturnServiceImpl implements ErpSaleReturnService {
purchaseReturnitems.add(item); purchaseReturnitems.add(item);
} }
purchaseReturnSave.setItems(purchaseReturnitems); purchaseReturnSave.setItems(purchaseReturnitems);
purchaseReturnService.createPurchaseReturn(purchaseReturnSave); Long purchaseReturnOrderId = purchaseReturnService.createPurchaseReturn(purchaseReturnSave);
saleReturnItemMapper.update(Wrappers.<ErpSaleReturnItemDO>lambdaUpdate()
.eq(ErpSaleReturnItemDO::getReturnId, saleReturn.getId())
.eq(ErpSaleReturnItemDO::getSupplierId, supplierId)
.set(ErpSaleReturnItemDO::getPurchaseReturnOrderId, purchaseReturnOrderId));
}); });
} }
......
...@@ -5,6 +5,7 @@ import cn.iocoder.foodnexus.module.erp.controller.admin.stock.vo.stock.ErpStockP ...@@ -5,6 +5,7 @@ import cn.iocoder.foodnexus.module.erp.controller.admin.stock.vo.stock.ErpStockP
import cn.iocoder.foodnexus.module.erp.dal.dataobject.stock.ErpStockDO; import cn.iocoder.foodnexus.module.erp.dal.dataobject.stock.ErpStockDO;
import cn.iocoder.foodnexus.module.erp.dal.mysql.stock.ErpStockMapper; import cn.iocoder.foodnexus.module.erp.dal.mysql.stock.ErpStockMapper;
import cn.iocoder.foodnexus.module.erp.service.product.ErpProductService; import cn.iocoder.foodnexus.module.erp.service.product.ErpProductService;
import cn.iocoder.foodnexus.module.product.service.spu.ProductSpuService;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
...@@ -32,7 +33,7 @@ public class ErpStockServiceImpl implements ErpStockService { ...@@ -32,7 +33,7 @@ public class ErpStockServiceImpl implements ErpStockService {
private static final Boolean NEGATIVE_STOCK_COUNT_ENABLE = false; private static final Boolean NEGATIVE_STOCK_COUNT_ENABLE = false;
@Resource @Resource
private ErpProductService productService; private ProductSpuService productService;
@Resource @Resource
private ErpWarehouseService warehouseService; private ErpWarehouseService warehouseService;
...@@ -70,7 +71,7 @@ public class ErpStockServiceImpl implements ErpStockService { ...@@ -70,7 +71,7 @@ public class ErpStockServiceImpl implements ErpStockService {
} }
// 1.2 校验库存是否充足 // 1.2 校验库存是否充足
if (!NEGATIVE_STOCK_COUNT_ENABLE && stock.getCount().add(count).compareTo(BigDecimal.ZERO) < 0) { if (!NEGATIVE_STOCK_COUNT_ENABLE && stock.getCount().add(count).compareTo(BigDecimal.ZERO) < 0) {
throw exception(STOCK_COUNT_NEGATIVE, productService.getProduct(productId).getName(), throw exception(STOCK_COUNT_NEGATIVE, productService.getSpu(productId).getName(),
warehouseService.getWarehouse(warehouseId).getName(), stock.getCount(), count); warehouseService.getWarehouse(warehouseId).getName(), stock.getCount(), count);
} }
...@@ -78,7 +79,7 @@ public class ErpStockServiceImpl implements ErpStockService { ...@@ -78,7 +79,7 @@ public class ErpStockServiceImpl implements ErpStockService {
int updateCount = stockMapper.updateCountIncrement(stock.getId(), count, NEGATIVE_STOCK_COUNT_ENABLE); int updateCount = stockMapper.updateCountIncrement(stock.getId(), count, NEGATIVE_STOCK_COUNT_ENABLE);
if (updateCount == 0) { if (updateCount == 0) {
// 此时不好去查询最新库存,所以直接抛出该提示,不提供具体库存数字 // 此时不好去查询最新库存,所以直接抛出该提示,不提供具体库存数字
throw exception(STOCK_COUNT_NEGATIVE2, productService.getProduct(productId).getName(), throw exception(STOCK_COUNT_NEGATIVE2, productService.getSpu(productId).getName(),
warehouseService.getWarehouse(warehouseId).getName()); warehouseService.getWarehouse(warehouseId).getName());
} }
......
package cn.iocoder.foodnexus.module.operations.service.inquireprice; package cn.iocoder.foodnexus.module.operations.service.inquireprice;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.iocoder.foodnexus.framework.common.enums.CommonStatusEnum;
import cn.iocoder.foodnexus.framework.common.util.CommonUtil; import cn.iocoder.foodnexus.framework.common.util.CommonUtil;
import cn.iocoder.foodnexus.module.erp.api.enums.ErpAuditStatus;
import cn.iocoder.foodnexus.module.erp.dal.dataobject.product.ProductSupplierDO; import cn.iocoder.foodnexus.module.erp.dal.dataobject.product.ProductSupplierDO;
import cn.iocoder.foodnexus.module.erp.dal.dataobject.purchase.ErpSupplierDO;
import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpCustomerDO; import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpCustomerDO;
import cn.iocoder.foodnexus.module.erp.service.product.ProductSupplierService; import cn.iocoder.foodnexus.module.erp.service.product.ProductSupplierService;
import cn.iocoder.foodnexus.module.erp.service.purchase.ErpSupplierService;
import cn.iocoder.foodnexus.module.erp.service.sale.ErpCustomerService; import cn.iocoder.foodnexus.module.erp.service.sale.ErpCustomerService;
import cn.iocoder.foodnexus.module.operations.controller.admin.inquirecustomerpush.vo.InquireCustomerPushSaveReqVO; import cn.iocoder.foodnexus.module.operations.controller.admin.inquirecustomerpush.vo.InquireCustomerPushSaveReqVO;
import cn.iocoder.foodnexus.module.operations.controller.admin.inquiresupplierpush.vo.InquireSupplierPushSaveReqVO; import cn.iocoder.foodnexus.module.operations.controller.admin.inquiresupplierpush.vo.InquireSupplierPushSaveReqVO;
...@@ -35,6 +39,8 @@ import cn.iocoder.foodnexus.module.operations.dal.mysql.inquireprice.InquirePric ...@@ -35,6 +39,8 @@ import cn.iocoder.foodnexus.module.operations.dal.mysql.inquireprice.InquirePric
import static cn.iocoder.foodnexus.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.foodnexus.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.foodnexus.framework.common.util.collection.CollectionUtils.convertList; import static cn.iocoder.foodnexus.framework.common.util.collection.CollectionUtils.convertList;
import static cn.iocoder.foodnexus.framework.common.util.collection.CollectionUtils.diffList; import static cn.iocoder.foodnexus.framework.common.util.collection.CollectionUtils.diffList;
import static cn.iocoder.foodnexus.module.erp.enums.ErrorCodeConstants.SUPPLIER_NOT_ENABLE;
import static cn.iocoder.foodnexus.module.erp.enums.ErrorCodeConstants.SUPPLIER_NOT_EXISTS;
import static cn.iocoder.foodnexus.module.operations.enums.ErrorCodeConstants.*; import static cn.iocoder.foodnexus.module.operations.enums.ErrorCodeConstants.*;
/** /**
...@@ -60,7 +66,7 @@ public class InquirePriceServiceImpl implements InquirePriceService { ...@@ -60,7 +66,7 @@ public class InquirePriceServiceImpl implements InquirePriceService {
private ProductSupplierService productSupplierService; private ProductSupplierService productSupplierService;
@Autowired @Autowired
private ProductSpuService productSpuService; private ErpSupplierService supplierService;
@Autowired @Autowired
private InquireCustomerPushService customerPushService; private InquireCustomerPushService customerPushService;
...@@ -173,6 +179,8 @@ public class InquirePriceServiceImpl implements InquirePriceService { ...@@ -173,6 +179,8 @@ public class InquirePriceServiceImpl implements InquirePriceService {
List<InquireSupplierPushSaveReqVO> totalSupplierPush = new ArrayList<>(); List<InquireSupplierPushSaveReqVO> totalSupplierPush = new ArrayList<>();
supplierGroupMap.forEach((supplierId, items) -> { supplierGroupMap.forEach((supplierId, items) -> {
for (ProductSupplierDO productSupplier : items) { for (ProductSupplierDO productSupplier : items) {
ErpSupplierDO supplier = supplierService.getSupplier(supplierId);
if (CommonUtil.isNotEmpty(supplier) && String.valueOf(ErpAuditStatus.APPROVE.getStatus()).equals(supplier.getAuditStatus()) && CommonStatusEnum.isEnable(supplier.getStatus())) {
InquirePriceItemDO inquirePriceItemDO = productToItemMap.get(productSupplier.getProductId()); InquirePriceItemDO inquirePriceItemDO = productToItemMap.get(productSupplier.getProductId());
InquireSupplierPushSaveReqVO supplierPush = new InquireSupplierPushSaveReqVO(); InquireSupplierPushSaveReqVO supplierPush = new InquireSupplierPushSaveReqVO();
supplierPush.setSupplierId(supplierId); supplierPush.setSupplierId(supplierId);
...@@ -183,6 +191,7 @@ public class InquirePriceServiceImpl implements InquirePriceService { ...@@ -183,6 +191,7 @@ public class InquirePriceServiceImpl implements InquirePriceService {
supplierPush.setConfirm(Boolean.FALSE); supplierPush.setConfirm(Boolean.FALSE);
totalSupplierPush.add(supplierPush); totalSupplierPush.add(supplierPush);
} }
}
}); });
supplierPushService.addBatch(totalSupplierPush); supplierPushService.addBatch(totalSupplierPush);
} }
......
...@@ -27,4 +27,6 @@ public interface CustomerOrderApi { ...@@ -27,4 +27,6 @@ public interface CustomerOrderApi {
List<CustomerOrderItemDTO> queryItemsByIds(Collection<Long> orderItems); List<CustomerOrderItemDTO> queryItemsByIds(Collection<Long> orderItems);
void updateItems(List<CustomerOrderItemDTO> updateItems); void updateItems(List<CustomerOrderItemDTO> updateItems);
Map<Long, String> getCodeMap(Collection<Long> longs);
} }
...@@ -72,6 +72,10 @@ public class CustomerOrderPageReqVO extends PageParam { ...@@ -72,6 +72,10 @@ public class CustomerOrderPageReqVO extends PageParam {
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime; private LocalDateTime[] createTime;
@Schema(description = "配送时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] deliveryTime;
@Schema(hidden = true) @Schema(hidden = true)
private Long creator; private Long creator;
...@@ -84,4 +88,11 @@ public class CustomerOrderPageReqVO extends PageParam { ...@@ -84,4 +88,11 @@ public class CustomerOrderPageReqVO extends PageParam {
@Schema(description = "是否已评价") @Schema(description = "是否已评价")
private Boolean hasScore; private Boolean hasScore;
@Schema(description = "联系人")
private String contactUser;
@Schema(description = "联系号码")
private String contactPhone;
} }
\ No newline at end of file
...@@ -60,6 +60,14 @@ public class CustomerAddressController { ...@@ -60,6 +60,14 @@ public class CustomerAddressController {
return success(true); return success(true);
} }
@PostMapping("/default")
@Operation(summary = "设置默认地址")
@Parameter(name = "id", description = "编号", required = true)
public CommonResult<Boolean> updateAddressDefault(@RequestParam("id") Long id) {
customerAddressService.updateAddressDefault(id, SecurityFrameworkUtils.getLoginUserId());
return success(Boolean.TRUE);
}
@DeleteMapping("/delete") @DeleteMapping("/delete")
@Operation(summary = "删除客户 - 我的地址") @Operation(summary = "删除客户 - 我的地址")
@Parameter(name = "id", description = "编号", required = true) @Parameter(name = "id", description = "编号", required = true)
......
...@@ -86,13 +86,10 @@ public class DeliverySaleOrderController { ...@@ -86,13 +86,10 @@ public class DeliverySaleOrderController {
@GetMapping("/my-page") @GetMapping("/my-page")
@Operation(summary = "个人中心 - 订单") @Operation(summary = "个人中心 - 订单")
public CommonResult<PageResult<DeliverySaleOrderRespVO>> queryMyPage(@Valid DeliveryOrderPageReqVO reqVO) { public CommonResult<PageResult<DeliverySaleOrderRespVO>> queryMyPage(@Valid DeliveryOrderPageReqVO reqVO) {
if (reqVO.getType() == 1) {
reqVO.setDeliveryStaffId(deliveryStaffApi.queryStaffIdByUserId(getLoginUserId())); reqVO.setDeliveryStaffId(deliveryStaffApi.queryStaffIdByUserId(getLoginUserId()));
ErpSaleOrderPageReqVO pageReqVO = BeanUtils.toBean(reqVO, ErpSaleOrderPageReqVO.class); ErpSaleOrderPageReqVO pageReqVO = BeanUtils.toBean(reqVO, ErpSaleOrderPageReqVO.class);
return success(BeanUtils.toBean(saleOrderService.getSaleOrderPage(pageReqVO), DeliverySaleOrderRespVO.class)); return success(BeanUtils.toBean(saleOrderService.getSaleOrderPage(pageReqVO), DeliverySaleOrderRespVO.class));
} }
return success(new PageResult<>());
}
@GetMapping("/page") @GetMapping("/page")
@Operation(summary = "接单大厅 - 查询配送单") @Operation(summary = "接单大厅 - 查询配送单")
......
...@@ -6,8 +6,10 @@ import cn.iocoder.foodnexus.framework.common.pojo.PageResult; ...@@ -6,8 +6,10 @@ 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.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.foodnexus.framework.mybatis.core.query.LambdaQueryWrapperX;
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.QueryWrapperX; import cn.iocoder.foodnexus.framework.mybatis.core.query.QueryWrapperX;
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.sale.ErpSaleOrderDO;
import cn.iocoder.foodnexus.module.order.controller.app.customerOrder.vo.AppCustomerMonthOrderRespVO; import cn.iocoder.foodnexus.module.order.controller.app.customerOrder.vo.AppCustomerMonthOrderRespVO;
import cn.iocoder.foodnexus.module.order.controller.app.customerOrder.vo.AppCustomerMonthOrderTotalRespVO; import cn.iocoder.foodnexus.module.order.controller.app.customerOrder.vo.AppCustomerMonthOrderTotalRespVO;
import cn.iocoder.foodnexus.module.order.controller.app.customerOrder.vo.AppCustomerYearOrderPageReqVO; import cn.iocoder.foodnexus.module.order.controller.app.customerOrder.vo.AppCustomerYearOrderPageReqVO;
...@@ -27,7 +29,7 @@ import cn.iocoder.foodnexus.module.order.controller.admin.customerorder.vo.*; ...@@ -27,7 +29,7 @@ import cn.iocoder.foodnexus.module.order.controller.admin.customerorder.vo.*;
public interface CustomerOrderMapper extends BaseMapperX<CustomerOrderDO> { public interface CustomerOrderMapper extends BaseMapperX<CustomerOrderDO> {
default PageResult<CustomerOrderDO> selectPage(CustomerOrderPageReqVO reqVO) { default PageResult<CustomerOrderDO> selectPage(CustomerOrderPageReqVO reqVO) {
LambdaQueryWrapperX<CustomerOrderDO> queryWrapperX = new LambdaQueryWrapperX<CustomerOrderDO>() MPJLambdaWrapperX<CustomerOrderDO> queryWrapperX = new MPJLambdaWrapperX<CustomerOrderDO>()
.inIfPresent(CustomerOrderDO::getId, reqVO.getIds()) .inIfPresent(CustomerOrderDO::getId, reqVO.getIds())
.eqIfPresent(CustomerOrderDO::getCode, reqVO.getCode()) .eqIfPresent(CustomerOrderDO::getCode, reqVO.getCode())
.eqIfPresent(CustomerOrderDO::getOrderStatus, reqVO.getOrderStatus()) .eqIfPresent(CustomerOrderDO::getOrderStatus, reqVO.getOrderStatus())
...@@ -47,6 +49,8 @@ public interface CustomerOrderMapper extends BaseMapperX<CustomerOrderDO> { ...@@ -47,6 +49,8 @@ public interface CustomerOrderMapper extends BaseMapperX<CustomerOrderDO> {
.betweenIfPresent(CustomerOrderDO::getCreateTime, reqVO.getCreateTime()) .betweenIfPresent(CustomerOrderDO::getCreateTime, reqVO.getCreateTime())
.eqIfPresent(CustomerOrderDO::getCreator, reqVO.getCreator()) .eqIfPresent(CustomerOrderDO::getCreator, reqVO.getCreator())
.eqIfPresent(CustomerOrderDO::getHasScore, reqVO.getHasScore()) .eqIfPresent(CustomerOrderDO::getHasScore, reqVO.getHasScore())
.likeIfPresent(CustomerOrderDO::getAddressInfo, reqVO.getContactPhone())
.likeIfPresent(CustomerOrderDO::getAddressInfo, reqVO.getContactUser())
.orderByDesc(CustomerOrderDO::getId); .orderByDesc(CustomerOrderDO::getId);
if (CommonUtil.isNotBlank(reqVO.getCreateYearMonth())) { if (CommonUtil.isNotBlank(reqVO.getCreateYearMonth())) {
String createMonth = reqVO.getCreateYearMonth().trim(); String createMonth = reqVO.getCreateYearMonth().trim();
...@@ -66,6 +70,10 @@ public interface CustomerOrderMapper extends BaseMapperX<CustomerOrderDO> { ...@@ -66,6 +70,10 @@ public interface CustomerOrderMapper extends BaseMapperX<CustomerOrderDO> {
queryWrapperX.in(CustomerOrderDO::getOrderStatus, CommonUtil.asList(CustomerOrderStatus.SIGN_RECEIPT.getKey(), queryWrapperX.in(CustomerOrderDO::getOrderStatus, CommonUtil.asList(CustomerOrderStatus.SIGN_RECEIPT.getKey(),
CustomerOrderStatus.FINISH.getKey())); CustomerOrderStatus.FINISH.getKey()));
} }
if (CommonUtil.isNotEmpty(reqVO.getDeliveryTime())) {
queryWrapperX.leftJoin(ErpSaleOrderDO.class, ErpSaleOrderDO::getCustomerOrderId, CustomerOrderDO::getId);
queryWrapperX.betweenIfPresent(ErpSaleOrderDO::getDeliveryTime, reqVO.getDeliveryTime());
}
return selectPage(reqVO, queryWrapperX); return selectPage(reqVO, queryWrapperX);
} }
......
...@@ -30,6 +30,8 @@ public interface CustomerAddressService { ...@@ -30,6 +30,8 @@ public interface CustomerAddressService {
*/ */
void updateCustomerAddress(@Valid CustomerAddressSaveReqVO updateReqVO); void updateCustomerAddress(@Valid CustomerAddressSaveReqVO updateReqVO);
void updateAddressDefault(Long id, Long loginUserId);
/** /**
* 删除客户 - 我的地址 * 删除客户 - 我的地址
* *
......
...@@ -64,6 +64,22 @@ public class CustomerAddressServiceImpl implements CustomerAddressService { ...@@ -64,6 +64,22 @@ public class CustomerAddressServiceImpl implements CustomerAddressService {
} }
@Override @Override
public void updateAddressDefault(Long id, Long loginUserId) {
CustomerAddressDO customerAddressDO = validateCustomerAddressExists(id);
if (!customerAddressDO.getIsDefault()) {
customerAddressMapper.update(Wrappers.<CustomerAddressDO>lambdaUpdate()
.set(CustomerAddressDO::getIsDefault, Boolean.FALSE)
.eq(CustomerAddressDO::getIsDefault, Boolean.TRUE)
.eq(CustomerAddressDO::getCreator, loginUserId));
}
// 更新
CustomerAddressDO updateObj = new CustomerAddressDO();
updateObj.setId(id);
updateObj.setIsDefault(Boolean.TRUE);
customerAddressMapper.updateById(updateObj);
}
@Override
public void deleteCustomerAddress(Long id) { public void deleteCustomerAddress(Long id) {
// 校验存在 // 校验存在
validateCustomerAddressExists(id); validateCustomerAddressExists(id);
......
...@@ -837,4 +837,12 @@ public class CustomerOrderServiceImpl implements CustomerOrderService, CustomerO ...@@ -837,4 +837,12 @@ public class CustomerOrderServiceImpl implements CustomerOrderService, CustomerO
} }
} }
@Override
public Map<Long, String> getCodeMap(Collection<Long> ids) {
if (CommonUtil.isEmpty(ids)) {
return new HashMap<>();
}
return CommonUtil.listConvertMap(customerOrderMapper.selectByIds(ids), CustomerOrderDO::getId, CustomerOrderDO::getCode);
}
} }
\ No newline at end of file
...@@ -27,4 +27,7 @@ public class AuthLoginRespVO { ...@@ -27,4 +27,7 @@ public class AuthLoginRespVO {
@Schema(description = "过期时间", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "过期时间", requiredMode = Schema.RequiredMode.REQUIRED)
private LocalDateTime expiresTime; private LocalDateTime expiresTime;
@Schema(description = "0-客户 1-司务长(灶点) (只针对客户)")
private Integer customerType;
} }
...@@ -56,6 +56,9 @@ public class AuthPermissionInfoRespVO { ...@@ -56,6 +56,9 @@ public class AuthPermissionInfoRespVO {
@Schema(description = "用户体系", example = "OPER") @Schema(description = "用户体系", example = "OPER")
private String userSystem; private String userSystem;
@Schema(description = "客户类型")
private Integer customerType;
} }
@Schema(description = "管理后台 - 登录用户的菜单信息 Response VO") @Schema(description = "管理后台 - 登录用户的菜单信息 Response VO")
......
...@@ -77,4 +77,7 @@ public class UserRespVO{ ...@@ -77,4 +77,7 @@ public class UserRespVO{
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "时间戳格式") @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "时间戳格式")
private LocalDateTime createTime; private LocalDateTime createTime;
@Schema(description = "0-客户 1-司务长(灶点) (只针对客户)")
private Integer customerType;
} }
...@@ -66,7 +66,9 @@ public class AppAuthController { ...@@ -66,7 +66,9 @@ public class AppAuthController {
@PermitAll @PermitAll
@Operation(summary = "使用账号密码登录") @Operation(summary = "使用账号密码登录")
public CommonResult<AuthLoginRespVO> login(@RequestBody @Valid AuthLoginReqVO reqVO) { public CommonResult<AuthLoginRespVO> login(@RequestBody @Valid AuthLoginReqVO reqVO) {
return success(authService.appLogin(reqVO)); AuthLoginRespVO loginResult = authService.appLogin(reqVO);
loginResult.setCustomerType(userService.queryCustomerType(loginResult.getUserId()));
return success(loginResult);
} }
@PostMapping("/logout") @PostMapping("/logout")
...@@ -86,7 +88,9 @@ public class AppAuthController { ...@@ -86,7 +88,9 @@ public class AppAuthController {
@Operation(summary = "刷新令牌") @Operation(summary = "刷新令牌")
@Parameter(name = "refreshToken", description = "刷新令牌", required = true) @Parameter(name = "refreshToken", description = "刷新令牌", required = true)
public CommonResult<AuthLoginRespVO> refreshToken(@RequestParam("refreshToken") String refreshToken) { public CommonResult<AuthLoginRespVO> refreshToken(@RequestParam("refreshToken") String refreshToken) {
return success(authService.refreshToken(refreshToken)); AuthLoginRespVO loginResult = authService.refreshToken(refreshToken);
loginResult.setCustomerType(userService.queryCustomerType(loginResult.getUserId()));
return success(loginResult);
} }
@GetMapping("/get-permission-info") @GetMapping("/get-permission-info")
......
package cn.iocoder.foodnexus.module.system.dal.dataobject.user; package cn.iocoder.foodnexus.module.system.dal.dataobject.user;
import cn.iocoder.foodnexus.framework.common.enums.CommonStatusEnum; import cn.iocoder.foodnexus.framework.common.enums.CommonStatusEnum;
import cn.iocoder.foodnexus.framework.common.enums.CustomerTypeEnum;
import cn.iocoder.foodnexus.framework.tenant.core.db.TenantBaseDO; import cn.iocoder.foodnexus.framework.tenant.core.db.TenantBaseDO;
import cn.iocoder.foodnexus.framework.common.enums.UserSystemEnum; import cn.iocoder.foodnexus.framework.common.enums.UserSystemEnum;
import cn.iocoder.foodnexus.module.system.enums.common.SexEnum; import cn.iocoder.foodnexus.module.system.enums.common.SexEnum;
...@@ -99,4 +100,9 @@ public class AdminUserDO extends TenantBaseDO { ...@@ -99,4 +100,9 @@ public class AdminUserDO extends TenantBaseDO {
* 枚举类 {@link UserSystemEnum} * 枚举类 {@link UserSystemEnum}
*/ */
private String userSystem; private String userSystem;
/**
* 客户类型
* {@link CustomerTypeEnum}
*/
private Integer customerType;
} }
...@@ -54,7 +54,7 @@ public interface ErrorCodeConstants { ...@@ -54,7 +54,7 @@ public interface ErrorCodeConstants {
// ========== 部门模块 1-002-004-000 ========== // ========== 部门模块 1-002-004-000 ==========
ErrorCode DEPT_NAME_DUPLICATE = new ErrorCode(1_002_004_000, "已经存在该名字的部门"); ErrorCode DEPT_NAME_DUPLICATE = new ErrorCode(1_002_004_000, "已经存在该名字的部门");
ErrorCode DEPT_PARENT_NOT_EXITS = new ErrorCode(1_002_004_001,"父级部门不存在"); ErrorCode DEPT_PARENT_NOT_EXITS = new ErrorCode(1_002_004_001,"父级部门不存在");
ErrorCode DEPT_NOT_FOUND = new ErrorCode(1_002_004_002, "当前部门不存在"); ErrorCode DEPT_NOT_FOUND = new ErrorCode(1_002_004_002, "部门不存在");
ErrorCode DEPT_EXITS_CHILDREN = new ErrorCode(1_002_004_003, "存在子部门,无法删除"); ErrorCode DEPT_EXITS_CHILDREN = new ErrorCode(1_002_004_003, "存在子部门,无法删除");
ErrorCode DEPT_PARENT_ERROR = new ErrorCode(1_002_004_004, "不能设置自己为父部门"); ErrorCode DEPT_PARENT_ERROR = new ErrorCode(1_002_004_004, "不能设置自己为父部门");
ErrorCode DEPT_NOT_ENABLE = new ErrorCode(1_002_004_006, "部门({})不处于开启状态,不允许选择"); ErrorCode DEPT_NOT_ENABLE = new ErrorCode(1_002_004_006, "部门({})不处于开启状态,不允许选择");
......
...@@ -123,4 +123,6 @@ public interface DeptService { ...@@ -123,4 +123,6 @@ public interface DeptService {
void validateDeptList(Collection<Long> ids); void validateDeptList(Collection<Long> ids);
DeptDO getTopDept(Long deptId); DeptDO getTopDept(Long deptId);
boolean isTop(Long deptId);
} }
...@@ -278,10 +278,23 @@ public class DeptServiceImpl implements DeptService { ...@@ -278,10 +278,23 @@ public class DeptServiceImpl implements DeptService {
@DataPermission(enable = false) @DataPermission(enable = false)
public DeptDO getTopDept(Long deptId) { public DeptDO getTopDept(Long deptId) {
DeptDO deptDO = deptMapper.selectOne(DeptDO::getId, deptId); DeptDO deptDO = deptMapper.selectOne(DeptDO::getId, deptId);
if (CommonUtil.isEmpty(deptDO)) {
throw exception(DEPT_NOT_FOUND);
}
if (!DeptDO.PARENT_ID_ROOT.equals(deptDO.getParentId())) { if (!DeptDO.PARENT_ID_ROOT.equals(deptDO.getParentId())) {
return this.getTopDept(deptDO.getParentId()); return this.getTopDept(deptDO.getParentId());
} }
return deptDO; return deptDO;
} }
@Override
@DataPermission(enable = false)
public boolean isTop(Long deptId) {
DeptDO deptDO = deptMapper.selectOne(DeptDO::getId, deptId);
if (CommonUtil.isEmpty(deptDO)) {
return false;
}
return DeptDO.PARENT_ID_ROOT.equals(deptDO.getParentId());
}
} }
...@@ -214,4 +214,6 @@ public interface AdminUserService { ...@@ -214,4 +214,6 @@ public interface AdminUserService {
*/ */
boolean isPasswordMatch(String rawPassword, String encodedPassword); boolean isPasswordMatch(String rawPassword, String encodedPassword);
Integer queryCustomerType(Long userId);
} }
...@@ -5,12 +5,15 @@ import cn.hutool.core.collection.CollectionUtil; ...@@ -5,12 +5,15 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjUtil; import cn.hutool.core.util.ObjUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.iocoder.foodnexus.framework.common.enums.CommonStatusEnum; import cn.iocoder.foodnexus.framework.common.enums.CommonStatusEnum;
import cn.iocoder.foodnexus.framework.common.enums.CustomerTypeEnum;
import cn.iocoder.foodnexus.framework.common.enums.UserSystemEnum;
import cn.iocoder.foodnexus.framework.common.exception.ServiceException; import cn.iocoder.foodnexus.framework.common.exception.ServiceException;
import cn.iocoder.foodnexus.framework.common.pojo.PageResult; import cn.iocoder.foodnexus.framework.common.pojo.PageResult;
import cn.iocoder.foodnexus.framework.common.util.collection.CollectionUtils; import cn.iocoder.foodnexus.framework.common.util.collection.CollectionUtils;
import cn.iocoder.foodnexus.framework.common.util.object.BeanUtils; import cn.iocoder.foodnexus.framework.common.util.object.BeanUtils;
import cn.iocoder.foodnexus.framework.common.util.validation.ValidationUtils; import cn.iocoder.foodnexus.framework.common.util.validation.ValidationUtils;
import cn.iocoder.foodnexus.framework.datapermission.core.util.DataPermissionUtils; import cn.iocoder.foodnexus.framework.datapermission.core.util.DataPermissionUtils;
import cn.iocoder.foodnexus.module.erp.api.service.ErpCustomerApi;
import cn.iocoder.foodnexus.module.infra.api.config.ConfigApi; import cn.iocoder.foodnexus.module.infra.api.config.ConfigApi;
import cn.iocoder.foodnexus.module.system.controller.admin.auth.vo.AuthRegisterReqVO; import cn.iocoder.foodnexus.module.system.controller.admin.auth.vo.AuthRegisterReqVO;
import cn.iocoder.foodnexus.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO; import cn.iocoder.foodnexus.module.system.controller.admin.user.vo.profile.UserProfileUpdatePasswordReqVO;
...@@ -35,6 +38,7 @@ import com.mzt.logapi.starter.annotation.LogRecord; ...@@ -35,6 +38,7 @@ import com.mzt.logapi.starter.annotation.LogRecord;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import jakarta.validation.ConstraintViolationException; import jakarta.validation.ConstraintViolationException;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy; import org.springframework.context.annotation.Lazy;
import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -101,6 +105,9 @@ public class AdminUserServiceImpl implements AdminUserService { ...@@ -101,6 +105,9 @@ public class AdminUserServiceImpl implements AdminUserService {
AdminUserDO user = BeanUtils.toBean(createReqVO, AdminUserDO.class); AdminUserDO user = BeanUtils.toBean(createReqVO, AdminUserDO.class);
user.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 默认开启 user.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 默认开启
user.setPassword(encodePassword(createReqVO.getPassword())); // 加密密码 user.setPassword(encodePassword(createReqVO.getPassword())); // 加密密码
if (UserSystemEnum.CUSTOMER.getKey().equals(user.getUserSystem())) {
user.setCustomerType(deptService.isTop(user.getDeptId()) ? CustomerTypeEnum.CUSTOMER.getKey() : CustomerTypeEnum.CHIEF.getKey());
}
userMapper.insert(user); userMapper.insert(user);
// 2.2 插入关联岗位 // 2.2 插入关联岗位
if (CollectionUtil.isNotEmpty(user.getPostIds())) { if (CollectionUtil.isNotEmpty(user.getPostIds())) {
...@@ -133,6 +140,9 @@ public class AdminUserServiceImpl implements AdminUserService { ...@@ -133,6 +140,9 @@ public class AdminUserServiceImpl implements AdminUserService {
AdminUserDO user = BeanUtils.toBean(registerReqVO, AdminUserDO.class); AdminUserDO user = BeanUtils.toBean(registerReqVO, AdminUserDO.class);
user.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 默认开启 user.setStatus(CommonStatusEnum.ENABLE.getStatus()); // 默认开启
user.setPassword(encodePassword(registerReqVO.getPassword())); // 加密密码 user.setPassword(encodePassword(registerReqVO.getPassword())); // 加密密码
if (UserSystemEnum.CUSTOMER.getKey().equals(user.getUserSystem())) {
user.setCustomerType(deptService.isTop(user.getDeptId()) ? CustomerTypeEnum.CUSTOMER.getKey() : CustomerTypeEnum.CHIEF.getKey());
}
userMapper.insert(user); userMapper.insert(user);
return user.getId(); return user.getId();
} }
...@@ -149,6 +159,9 @@ public class AdminUserServiceImpl implements AdminUserService { ...@@ -149,6 +159,9 @@ public class AdminUserServiceImpl implements AdminUserService {
// 2.1 更新用户 // 2.1 更新用户
AdminUserDO updateObj = BeanUtils.toBean(updateReqVO, AdminUserDO.class); AdminUserDO updateObj = BeanUtils.toBean(updateReqVO, AdminUserDO.class);
if (UserSystemEnum.CUSTOMER.getKey().equals(updateObj.getUserSystem())) {
updateObj.setCustomerType(deptService.isTop(updateObj.getDeptId()) ? CustomerTypeEnum.CUSTOMER.getKey() : CustomerTypeEnum.CHIEF.getKey());
}
userMapper.updateById(updateObj); userMapper.updateById(updateObj);
// 2.2 更新岗位 // 2.2 更新岗位
updateUserPost(updateReqVO, updateObj); updateUserPost(updateReqVO, updateObj);
...@@ -493,7 +506,8 @@ public class AdminUserServiceImpl implements AdminUserService { ...@@ -493,7 +506,8 @@ public class AdminUserServiceImpl implements AdminUserService {
AdminUserDO existUser = userMapper.selectByUsername(importUser.getUsername()); AdminUserDO existUser = userMapper.selectByUsername(importUser.getUsername());
if (existUser == null) { if (existUser == null) {
userMapper.insert(BeanUtils.toBean(importUser, AdminUserDO.class) userMapper.insert(BeanUtils.toBean(importUser, AdminUserDO.class)
.setPassword(encodePassword(initPassword)).setPostIds(new HashSet<>())); // 设置默认密码及空岗位编号数组 .setPassword(encodePassword(initPassword)).setPostIds(new HashSet<>())
.setCustomerType(deptService.isTop(importUser.getDeptId()) ? CustomerTypeEnum.CUSTOMER.getKey() : CustomerTypeEnum.CHIEF.getKey())); // 设置默认密码及空岗位编号数组
respVO.getCreateUsernames().add(importUser.getUsername()); respVO.getCreateUsernames().add(importUser.getUsername());
return; return;
} }
...@@ -520,6 +534,12 @@ public class AdminUserServiceImpl implements AdminUserService { ...@@ -520,6 +534,12 @@ public class AdminUserServiceImpl implements AdminUserService {
return passwordEncoder.matches(rawPassword, encodedPassword); return passwordEncoder.matches(rawPassword, encodedPassword);
} }
@Override
public Integer queryCustomerType(Long userId) {
AdminUserDO user = getUser(userId);
return user.getCustomerType();
}
/** /**
* 对密码进行加密 * 对密码进行加密
* *
......
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