diff --git a/api/oms-api/pom.xml b/api/oms-api/pom.xml index cacb0666..bdf591c7 100644 --- a/api/oms-api/pom.xml +++ b/api/oms-api/pom.xml @@ -77,6 +77,11 @@ security 1.0 + + cn.qihangerp.service + erp + 2.0.0 + diff --git a/api/oms-api/src/main/java/cn/qihangerp/oms/controller/PurchaseOrderController.java b/api/oms-api/src/main/java/cn/qihangerp/oms/controller/PurchaseOrderController.java new file mode 100644 index 00000000..cd69eb6f --- /dev/null +++ b/api/oms-api/src/main/java/cn/qihangerp/oms/controller/PurchaseOrderController.java @@ -0,0 +1,64 @@ +package cn.qihangerp.oms.controller; + +import cn.qihangerp.common.AjaxResult; +import cn.qihangerp.common.PageQuery; +import cn.qihangerp.common.PageResult; +import cn.qihangerp.common.TableDataInfo; +import cn.qihangerp.model.bo.PurchaseOrderAddBo; +import cn.qihangerp.model.bo.PurchaseOrderOptionBo; +import cn.qihangerp.model.entity.ErpPurchaseOrder; +import cn.qihangerp.model.query.PurchaseOrderSearchBo; +import cn.qihangerp.module.erp.service.ErpPurchaseOrderService; +import cn.qihangerp.security.common.BaseController; +import jakarta.servlet.http.HttpServletRequest; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.*; + +/** + * 商品管理Controller + * + * @author qihang + * @date 2023-12-29 + */ +@AllArgsConstructor +@RestController +@RequestMapping("/erp/purchase") +public class PurchaseOrderController extends BaseController +{ + private final ErpPurchaseOrderService erpPurchaseOrderService; + /** + * + */ + @GetMapping("/list") + public TableDataInfo list(PurchaseOrderSearchBo bo, PageQuery pageQuery) + { + PageResult pageResult = erpPurchaseOrderService.queryPageList(bo, pageQuery); + return getDataTable(pageResult); + } + + @GetMapping(value = "/detail/{id}") + public AjaxResult getInfo(@PathVariable("id") Long id) + { + ErpPurchaseOrder detail = erpPurchaseOrderService.getDetailById(id); + return AjaxResult.success(detail); + } + + @PostMapping("/create") + public AjaxResult add(@RequestBody PurchaseOrderAddBo addBo, HttpServletRequest request) + { + addBo.setCreateBy(getUsername()); + return toAjax(erpPurchaseOrderService.createPurchaseOrder(addBo)); + } + @PutMapping("/updateStatus") + public AjaxResult updateStatus(@RequestBody PurchaseOrderOptionBo req, HttpServletRequest request) + { + req.setUpdateBy(getUsername()); + int result = erpPurchaseOrderService.updateScmPurchaseOrder(req); + if(result == -1){ + return new AjaxResult(0,"状态不正确"); + }else{ + return toAjax(result); + } + + } +} diff --git a/core/model/src/main/java/cn/qihangerp/model/bo/PurchaseOrderAddBo.java b/core/model/src/main/java/cn/qihangerp/model/bo/PurchaseOrderAddBo.java new file mode 100644 index 00000000..11640ace --- /dev/null +++ b/core/model/src/main/java/cn/qihangerp/model/bo/PurchaseOrderAddBo.java @@ -0,0 +1,38 @@ +package cn.qihangerp.model.bo; + +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +/** + * 采购订单对象 scm_purchase_order + * + * @author qihang + * @date 2023-12-29 + */ +@Data +public class PurchaseOrderAddBo +{ + private static final long serialVersionUID = 1L; + + + /** 供应商id */ + private Long contactId; + + /** 订单编号 */ + private String orderNo; + + /** 订单日期 */ + private Date orderDate; + + + /** 订单总金额 */ + private BigDecimal orderAmount; + private String createBy; + + private List goodsList; + + +} diff --git a/core/model/src/main/java/cn/qihangerp/model/bo/PurchaseOrderAddItemBo.java b/core/model/src/main/java/cn/qihangerp/model/bo/PurchaseOrderAddItemBo.java new file mode 100644 index 00000000..3896c406 --- /dev/null +++ b/core/model/src/main/java/cn/qihangerp/model/bo/PurchaseOrderAddItemBo.java @@ -0,0 +1,31 @@ +package cn.qihangerp.model.bo; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * 采购订单对象 scm_purchase_order + * + * @author qihang + * @date 2023-12-29 + */ +@Data +public class PurchaseOrderAddItemBo { + private static final long serialVersionUID = 1L; + + + private Long id; + private String colorImage; + private String goodsName; + private BigDecimal purPrice; + private Long quantity; + private BigDecimal amount; + private Long goodsId; + private String colorValue; + private String number; + private String sizeValue; + private String skuCode; + private String styleValue; + +} diff --git a/core/model/src/main/java/cn/qihangerp/model/bo/PurchaseOrderOptionBo.java b/core/model/src/main/java/cn/qihangerp/model/bo/PurchaseOrderOptionBo.java new file mode 100644 index 00000000..86f5c8e1 --- /dev/null +++ b/core/model/src/main/java/cn/qihangerp/model/bo/PurchaseOrderOptionBo.java @@ -0,0 +1,111 @@ +package cn.qihangerp.model.bo; + +import java.math.BigDecimal; +import java.util.Date; + +public class PurchaseOrderOptionBo { + private Long id; + private String optionType;//操作类型(audit:审核;confirm:确认(和供应商确认成功);SupplierShip:供应商发货) + private String remark; + private String auditUser; + + private String confirmUser;//采购单确认人 + + // 供应商发货 + private Date supplierDeliveryTime; + private String shipCompany; + private String shipNo; + + private BigDecimal shipCost; + private BigDecimal totalAmount; + + private String updateBy; + + public String getConfirmUser() { + return confirmUser; + } + + public void setConfirmUser(String confirmUser) { + this.confirmUser = confirmUser; + } + + public BigDecimal getShipCost() { + return shipCost; + } + + public void setShipCost(BigDecimal shipCost) { + this.shipCost = shipCost; + } + + public BigDecimal getTotalAmount() { + return totalAmount; + } + + public void setTotalAmount(BigDecimal totalAmount) { + this.totalAmount = totalAmount; + } + + public Date getSupplierDeliveryTime() { + return supplierDeliveryTime; + } + + public void setSupplierDeliveryTime(Date supplierDeliveryTime) { + this.supplierDeliveryTime = supplierDeliveryTime; + } + + public String getShipCompany() { + return shipCompany; + } + + public void setShipCompany(String shipCompany) { + this.shipCompany = shipCompany; + } + + public String getShipNo() { + return shipNo; + } + + public void setShipNo(String shipNo) { + this.shipNo = shipNo; + } + + public String getUpdateBy() { + return updateBy; + } + + public void setUpdateBy(String updateBy) { + this.updateBy = updateBy; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getOptionType() { + return optionType; + } + + public void setOptionType(String optionType) { + this.optionType = optionType; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getAuditUser() { + return auditUser; + } + + public void setAuditUser(String auditUser) { + this.auditUser = auditUser; + } +} diff --git a/core/model/src/main/java/cn/qihangerp/model/entity/ErpPurchaseOrder.java b/core/model/src/main/java/cn/qihangerp/model/entity/ErpPurchaseOrder.java new file mode 100644 index 00000000..c9e1c55f --- /dev/null +++ b/core/model/src/main/java/cn/qihangerp/model/entity/ErpPurchaseOrder.java @@ -0,0 +1,118 @@ +package cn.qihangerp.model.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; + +/** + * 采购订单 + * @TableName erp_purchase_order + */ +@TableName(value ="erp_purchase_order") +@Data +public class ErpPurchaseOrder { + /** + * + */ + @TableId(type = IdType.AUTO) + private Long id; + + /** + * 供应商id + */ + private Long supplierId; + + /** + * 订单编号 + */ + private String orderNum; + + /** + * 订单日期 + */ + private Date orderDate; + + /** + * 订单创建时间 + */ + private Long orderTime; + + /** + * 订单总金额 + */ + private BigDecimal orderAmount; + + /** + * 物流费用 + */ + private BigDecimal shipAmount; + + /** + * 备注 + */ + private String remark; + + /** + * 订单状态 0待审核1已审核101供应商已确认102供应商已发货2已收货3已入库 + */ + private Integer status; + + /** + * 采购单审核人 + */ + private String auditUser; + + /** + * 审核时间 + */ + private Long auditTime; + + /** + * 供应商确认时间 + */ + private Date supplierConfirmTime; + + /** + * 供应商发货时间 + */ + private Date supplierDeliveryTime; + + /** + * 收货时间 + */ + private Date receivedTime; + + /** + * 入库时间 + */ + private Date stockInTime; + + /** + * 创建人 + */ + private String createBy; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 更新人 + */ + private String updateBy; + + /** + * 更新时间 + */ + private Date updateTime; + + @TableField(exist = false) + private List itemList; +} \ No newline at end of file diff --git a/core/model/src/main/java/cn/qihangerp/model/entity/ErpPurchaseOrderItem.java b/core/model/src/main/java/cn/qihangerp/model/entity/ErpPurchaseOrderItem.java new file mode 100644 index 00000000..b0a12d8e --- /dev/null +++ b/core/model/src/main/java/cn/qihangerp/model/entity/ErpPurchaseOrderItem.java @@ -0,0 +1,138 @@ +package cn.qihangerp.model.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 采购订单明细 + * @TableName erp_purchase_order_item + */ +@TableName(value ="erp_purchase_order_item") +@Data +public class ErpPurchaseOrderItem { + /** + * + */ + @TableId(type = IdType.AUTO) + private Long id; + + /** + * 订单id + */ + private Long orderId; + + /** + * 订单编号 + */ + private String orderNum; + + /** + * 150501采购 150502退货 + */ + private String transType; + + /** + * 购货金额 + */ + private Double amount; + + /** + * 订单日期 + */ + private Date orderDate; + + /** + * 备注 + */ + private String remark; + + /** + * 商品ID + */ + private Long goodsId; + + /** + * 商品编码 + */ + private String goodsNum; + + /** + * 商品名称 + */ + private String goodsName; + + /** + * 商品规格id + */ + private Long specId; + + /** + * 商品规格编码 + */ + private String specNum; + + /** + * 颜色 + */ + private String colorValue; + + /** + * 图片 + */ + private String colorImage; + + /** + * 尺码 + */ + private String sizeValue; + + /** + * 款式 + */ + private String styleValue; + + /** + * 单价 + */ + private BigDecimal price; + + /** + * 折扣额 + */ + private BigDecimal disAmount; + + /** + * 折扣率 + */ + private BigDecimal disRate; + + /** + * 数量(采购单据) + */ + private Long quantity; + + /** + * 已入库数量 + */ + private Long inqty; + + /** + * 入库的仓库id + */ + private Integer locationid; + + /** + * 1删除 0正常 + */ + private Integer isDelete; + + /** + * 状态(同billStatus)0待审核1正常2已作废3已入库 + */ + private Integer status; +} \ No newline at end of file diff --git a/core/model/src/main/java/cn/qihangerp/model/entity/ErpPurchaseOrderShip.java b/core/model/src/main/java/cn/qihangerp/model/entity/ErpPurchaseOrderShip.java new file mode 100644 index 00000000..8bd74ff7 --- /dev/null +++ b/core/model/src/main/java/cn/qihangerp/model/entity/ErpPurchaseOrderShip.java @@ -0,0 +1,128 @@ +package cn.qihangerp.model.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 采购订单物流表 + * @TableName erp_purchase_order_ship + */ +@TableName(value ="erp_purchase_order_ship") +@Data +public class ErpPurchaseOrderShip { + /** + * 采购单ID(主键) + */ + @TableId(type = IdType.AUTO) + private Long id; + + /** + * 供应商id + */ + private Long supplierId; + + /** + * + */ + private Long orderId; + + /** + * 物流公司 + */ + private String shipCompany; + + /** + * 物流单号 + */ + private String shipNum; + + /** + * 运费 + */ + private BigDecimal freight; + + /** + * 发货时间 + */ + private Date shipTime; + + /** + * 收货时间 + */ + private Date receiptTime; + + /** + * 创建人 + */ + private String createBy; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 状态(0未收货1已收货2已入库) + */ + private Integer status; + + /** + * 说明 + */ + private String remark; + + /** + * 退回数量 + */ + private Integer backCount; + + /** + * 入库时间 + */ + private Date stockInTime; + + /** + * 入库数量 + */ + private Integer stockInCount; + + /** + * 更新人 + */ + private String updateBy; + + /** + * 更新时间 + */ + private Date updateTime; + + /** + * 采购订单日期 + */ + private Date orderDate; + + /** + * 采购订单编号 + */ + private String orderNum; + + /** + * 采购订单商品规格数 + */ + private Integer orderSpecUnit; + + /** + * 采购订单商品数 + */ + private Integer orderGoodsUnit; + + /** + * 采购订单总件数 + */ + private Integer orderSpecUnitTotal; +} \ No newline at end of file diff --git a/core/model/src/main/java/cn/qihangerp/model/query/MenuQuery.java b/core/model/src/main/java/cn/qihangerp/model/query/MenuQuery.java new file mode 100644 index 00000000..6e2c7f81 --- /dev/null +++ b/core/model/src/main/java/cn/qihangerp/model/query/MenuQuery.java @@ -0,0 +1,22 @@ +package cn.qihangerp.model.query; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +/** + * 菜单查询对象 + * + * @author haoxr + * @since 2022/10/28 + */ +@Schema(description ="菜单查询对象") +@Data +public class MenuQuery { + + @Schema(description="关键字(菜单名称)") + private String keywords; + + @Schema(description="状态(1->显示;0->隐藏)") + private Integer status; + +} diff --git a/core/model/src/main/java/cn/qihangerp/model/query/PurchaseOrderSearchBo.java b/core/model/src/main/java/cn/qihangerp/model/query/PurchaseOrderSearchBo.java new file mode 100644 index 00000000..4a88af6c --- /dev/null +++ b/core/model/src/main/java/cn/qihangerp/model/query/PurchaseOrderSearchBo.java @@ -0,0 +1,13 @@ +package cn.qihangerp.model.query; + +import lombok.Data; + +@Data +public class PurchaseOrderSearchBo { + // 供应商id + private Integer supplierId; + private String orderNum; + private String orderStatus; + private String startTime; + private String endTime; +} diff --git a/serviceImpl/erp/pom.xml b/serviceImpl/erp/pom.xml new file mode 100644 index 00000000..afb26145 --- /dev/null +++ b/serviceImpl/erp/pom.xml @@ -0,0 +1,32 @@ + + + 4.0.0 + + cn.qihangerp.service + serviceImpl + 2.0.0 + + + erp + + + 17 + 17 + UTF-8 + + + + cn.qihangerp.core + common + 1.0 + compile + + + cn.qihangerp.model + model + 2.0.0 + + + \ No newline at end of file diff --git a/serviceImpl/erp/src/main/java/cn/qihangerp/module/erp/mapper/ErpPurchaseOrderItemMapper.java b/serviceImpl/erp/src/main/java/cn/qihangerp/module/erp/mapper/ErpPurchaseOrderItemMapper.java new file mode 100644 index 00000000..3324f900 --- /dev/null +++ b/serviceImpl/erp/src/main/java/cn/qihangerp/module/erp/mapper/ErpPurchaseOrderItemMapper.java @@ -0,0 +1,18 @@ +package cn.qihangerp.module.erp.mapper; + +import cn.qihangerp.model.entity.ErpPurchaseOrderItem; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** +* @author 1 +* @description 针对表【erp_purchase_order_item(采购订单明细)】的数据库操作Mapper +* @createDate 2025-09-09 09:51:48 +* @Entity cn.qihangerp.model.entity.ErpPurchaseOrderItem +*/ +public interface ErpPurchaseOrderItemMapper extends BaseMapper { + +} + + + + diff --git a/serviceImpl/erp/src/main/java/cn/qihangerp/module/erp/mapper/ErpPurchaseOrderMapper.java b/serviceImpl/erp/src/main/java/cn/qihangerp/module/erp/mapper/ErpPurchaseOrderMapper.java new file mode 100644 index 00000000..a3f32221 --- /dev/null +++ b/serviceImpl/erp/src/main/java/cn/qihangerp/module/erp/mapper/ErpPurchaseOrderMapper.java @@ -0,0 +1,18 @@ +package cn.qihangerp.module.erp.mapper; + +import cn.qihangerp.model.entity.ErpPurchaseOrder; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** +* @author 1 +* @description 针对表【erp_purchase_order(采购订单)】的数据库操作Mapper +* @createDate 2025-09-09 09:51:48 +* @Entity cn.qihangerp.model.entity.ErpPurchaseOrder +*/ +public interface ErpPurchaseOrderMapper extends BaseMapper { + +} + + + + diff --git a/serviceImpl/erp/src/main/java/cn/qihangerp/module/erp/mapper/ErpPurchaseOrderShipMapper.java b/serviceImpl/erp/src/main/java/cn/qihangerp/module/erp/mapper/ErpPurchaseOrderShipMapper.java new file mode 100644 index 00000000..85ba5f8d --- /dev/null +++ b/serviceImpl/erp/src/main/java/cn/qihangerp/module/erp/mapper/ErpPurchaseOrderShipMapper.java @@ -0,0 +1,18 @@ +package cn.qihangerp.module.erp.mapper; + +import cn.qihangerp.model.entity.ErpPurchaseOrderShip; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** +* @author 1 +* @description 针对表【erp_purchase_order_ship(采购订单物流表)】的数据库操作Mapper +* @createDate 2025-09-09 10:40:41 +* @Entity cn.qihangerp.model.entity.ErpPurchaseOrderShip +*/ +public interface ErpPurchaseOrderShipMapper extends BaseMapper { + +} + + + + diff --git a/serviceImpl/erp/src/main/java/cn/qihangerp/module/erp/service/ErpPurchaseOrderItemService.java b/serviceImpl/erp/src/main/java/cn/qihangerp/module/erp/service/ErpPurchaseOrderItemService.java new file mode 100644 index 00000000..9e905901 --- /dev/null +++ b/serviceImpl/erp/src/main/java/cn/qihangerp/module/erp/service/ErpPurchaseOrderItemService.java @@ -0,0 +1,13 @@ +package cn.qihangerp.module.erp.service; + +import cn.qihangerp.model.entity.ErpPurchaseOrderItem; +import com.baomidou.mybatisplus.extension.service.IService; + +/** +* @author 1 +* @description 针对表【erp_purchase_order_item(采购订单明细)】的数据库操作Service +* @createDate 2025-09-09 09:51:48 +*/ +public interface ErpPurchaseOrderItemService extends IService { + +} diff --git a/serviceImpl/erp/src/main/java/cn/qihangerp/module/erp/service/ErpPurchaseOrderService.java b/serviceImpl/erp/src/main/java/cn/qihangerp/module/erp/service/ErpPurchaseOrderService.java new file mode 100644 index 00000000..df5a70fa --- /dev/null +++ b/serviceImpl/erp/src/main/java/cn/qihangerp/module/erp/service/ErpPurchaseOrderService.java @@ -0,0 +1,21 @@ +package cn.qihangerp.module.erp.service; + +import cn.qihangerp.common.PageQuery; +import cn.qihangerp.common.PageResult; +import cn.qihangerp.model.bo.PurchaseOrderAddBo; +import cn.qihangerp.model.bo.PurchaseOrderOptionBo; +import cn.qihangerp.model.entity.ErpPurchaseOrder; +import cn.qihangerp.model.query.PurchaseOrderSearchBo; +import com.baomidou.mybatisplus.extension.service.IService; + +/** +* @author 1 +* @description 针对表【erp_purchase_order(采购订单)】的数据库操作Service +* @createDate 2025-09-09 09:51:48 +*/ +public interface ErpPurchaseOrderService extends IService { + PageResult queryPageList(PurchaseOrderSearchBo bo, PageQuery pageQuery); + ErpPurchaseOrder getDetailById(Long id); + int createPurchaseOrder(PurchaseOrderAddBo addBo); + int updateScmPurchaseOrder(PurchaseOrderOptionBo request); +} diff --git a/serviceImpl/erp/src/main/java/cn/qihangerp/module/erp/service/ErpPurchaseOrderShipService.java b/serviceImpl/erp/src/main/java/cn/qihangerp/module/erp/service/ErpPurchaseOrderShipService.java new file mode 100644 index 00000000..7d4afa00 --- /dev/null +++ b/serviceImpl/erp/src/main/java/cn/qihangerp/module/erp/service/ErpPurchaseOrderShipService.java @@ -0,0 +1,13 @@ +package cn.qihangerp.module.erp.service; + +import cn.qihangerp.model.entity.ErpPurchaseOrderShip; +import com.baomidou.mybatisplus.extension.service.IService; + +/** +* @author 1 +* @description 针对表【erp_purchase_order_ship(采购订单物流表)】的数据库操作Service +* @createDate 2025-09-09 10:40:41 +*/ +public interface ErpPurchaseOrderShipService extends IService { + +} diff --git a/serviceImpl/erp/src/main/java/cn/qihangerp/module/erp/service/impl/ErpPurchaseOrderItemServiceImpl.java b/serviceImpl/erp/src/main/java/cn/qihangerp/module/erp/service/impl/ErpPurchaseOrderItemServiceImpl.java new file mode 100644 index 00000000..75c77412 --- /dev/null +++ b/serviceImpl/erp/src/main/java/cn/qihangerp/module/erp/service/impl/ErpPurchaseOrderItemServiceImpl.java @@ -0,0 +1,22 @@ +package cn.qihangerp.module.erp.service.impl; + +import cn.qihangerp.model.entity.ErpPurchaseOrderItem; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import cn.qihangerp.module.erp.service.ErpPurchaseOrderItemService; +import cn.qihangerp.module.erp.mapper.ErpPurchaseOrderItemMapper; +import org.springframework.stereotype.Service; + +/** +* @author 1 +* @description 针对表【erp_purchase_order_item(采购订单明细)】的数据库操作Service实现 +* @createDate 2025-09-09 09:51:48 +*/ +@Service +public class ErpPurchaseOrderItemServiceImpl extends ServiceImpl + implements ErpPurchaseOrderItemService{ + +} + + + + diff --git a/serviceImpl/erp/src/main/java/cn/qihangerp/module/erp/service/impl/ErpPurchaseOrderServiceImpl.java b/serviceImpl/erp/src/main/java/cn/qihangerp/module/erp/service/impl/ErpPurchaseOrderServiceImpl.java new file mode 100644 index 00000000..dd8f894a --- /dev/null +++ b/serviceImpl/erp/src/main/java/cn/qihangerp/module/erp/service/impl/ErpPurchaseOrderServiceImpl.java @@ -0,0 +1,276 @@ +package cn.qihangerp.module.erp.service.impl; + +import cn.qihangerp.common.PageQuery; +import cn.qihangerp.common.PageResult; +import cn.qihangerp.common.utils.DateUtils; + +import cn.qihangerp.model.bo.PurchaseOrderAddBo; +import cn.qihangerp.model.bo.PurchaseOrderAddItemBo; +import cn.qihangerp.model.bo.PurchaseOrderOptionBo; +import cn.qihangerp.model.entity.ErpPurchaseOrder; +import cn.qihangerp.model.entity.ErpPurchaseOrderItem; +import cn.qihangerp.model.entity.ErpPurchaseOrderShip; +import cn.qihangerp.model.query.PurchaseOrderSearchBo; +import cn.qihangerp.module.erp.mapper.ErpPurchaseOrderItemMapper; +import cn.qihangerp.module.erp.mapper.ErpPurchaseOrderShipMapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; + +import cn.qihangerp.module.erp.service.ErpPurchaseOrderService; +import cn.qihangerp.module.erp.mapper.ErpPurchaseOrderMapper; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +/** +* @author 1 +* @description 针对表【erp_purchase_order(采购订单)】的数据库操作Service实现 +* @createDate 2025-09-09 09:51:48 +*/ +@AllArgsConstructor +@Service +public class ErpPurchaseOrderServiceImpl extends ServiceImpl + implements ErpPurchaseOrderService{ + private final ErpPurchaseOrderMapper erpPurchaseOrderMapper; + private final ErpPurchaseOrderItemMapper erpPurchaseOrderItemMapper; + private final ErpPurchaseOrderShipMapper shipMapper; + + private final String DATE_PATTERN = + "^(?:(?:(?:\\d{4}-(?:0?[1-9]|1[0-2])-(?:0?[1-9]|1\\d|2[0-8]))|(?:(?:(?:\\d{2}(?:0[48]|[2468][048]|[13579][26])|(?:(?:0[48]|[2468][048]|[13579][26])00))-0?2-29))$)|(?:(?:(?:\\d{4}-(?:0?[13578]|1[02]))-(?:0?[1-9]|[12]\\d|30))$)|(?:(?:(?:\\d{4}-0?[13-9]|1[0-2])-(?:0?[1-9]|[1-2]\\d|30))$)|(?:(?:(?:\\d{2}(?:0[48]|[13579][26]|[2468][048])|(?:(?:0[48]|[13579][26]|[2468][048])00))-0?2-29))$)$"; + private final Pattern DATE_FORMAT = Pattern.compile(DATE_PATTERN); + @Override + public PageResult queryPageList(PurchaseOrderSearchBo bo, PageQuery pageQuery) { + if(org.springframework.util.StringUtils.hasText(bo.getStartTime())){ + Matcher matcher = DATE_FORMAT.matcher(bo.getStartTime()); + boolean b = matcher.find(); + if(b){ + bo.setStartTime(bo.getStartTime()+" 00:00:00"); + } + } + if(org.springframework.util.StringUtils.hasText(bo.getEndTime())){ + Matcher matcher = DATE_FORMAT.matcher(bo.getEndTime()); + boolean b = matcher.find(); + if(b){ + bo.setEndTime(bo.getEndTime()+" 23:59:59"); + } + } + + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .eq(bo.getSupplierId()!=null, ErpPurchaseOrder::getSupplierId,bo.getSupplierId()) + .eq(org.springframework.util.StringUtils.hasText(bo.getOrderNum()), ErpPurchaseOrder::getOrderNum,bo.getOrderNum()) + .eq(bo.getOrderStatus()!=null, ErpPurchaseOrder::getStatus,bo.getOrderStatus()) + .ge(org.springframework.util.StringUtils.hasText(bo.getStartTime()), ErpPurchaseOrder::getOrderTime,bo.getStartTime()+" 00:00:00") + .le(org.springframework.util.StringUtils.hasText(bo.getEndTime()), ErpPurchaseOrder::getOrderTime,bo.getEndTime()+" 23:59:59") + ; + + pageQuery.setOrderByColumn("order_time"); + pageQuery.setIsAsc("desc"); + Page pages = erpPurchaseOrderMapper.selectPage(pageQuery.build(), queryWrapper); + + // 查询子订单 + if(pages.getRecords()!=null){ + for (ErpPurchaseOrder order:pages.getRecords()) { + order.setItemList(erpPurchaseOrderItemMapper.selectList(new LambdaQueryWrapper().eq(ErpPurchaseOrderItem::getOrderId, order.getId()))); + + } + } + + return PageResult.build(pages); + } + + @Override + public ErpPurchaseOrder getDetailById(Long id) { + ErpPurchaseOrder order = erpPurchaseOrderMapper.selectById(id); + if(order!=null){ + order.setItemList(erpPurchaseOrderItemMapper.selectList(new LambdaQueryWrapper().eq(ErpPurchaseOrderItem::getOrderId, order.getId()))); + return order; + }else + return null; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public int createPurchaseOrder(PurchaseOrderAddBo addBo) { + if(addBo.getGoodsList() == null || addBo.getGoodsList().isEmpty()) return -1; + // 添加主表 + ErpPurchaseOrder erpPurchaseOrder = new ErpPurchaseOrder(); + + erpPurchaseOrder.setOrderNum("PUR"+ DateUtils.parseDateToStr("yyyyMMddHHmmss",new Date())); + erpPurchaseOrder.setOrderAmount(addBo.getOrderAmount()); + erpPurchaseOrder.setCreateTime(DateUtils.getNowDate()); + erpPurchaseOrder.setOrderDate(addBo.getOrderDate()); + erpPurchaseOrder.setSupplierId(addBo.getContactId()); + erpPurchaseOrder.setOrderTime(System.currentTimeMillis()/1000); + erpPurchaseOrder.setCreateBy(addBo.getCreateBy()); + erpPurchaseOrder.setStatus(0); + erpPurchaseOrder.setShipAmount(BigDecimal.ZERO); + erpPurchaseOrderMapper.insert(erpPurchaseOrder); + + // 添加子表 + for (PurchaseOrderAddItemBo item:addBo.getGoodsList()) { + ErpPurchaseOrderItem orderItem = new ErpPurchaseOrderItem(); + orderItem.setOrderDate(addBo.getOrderDate()); + orderItem.setOrderId(erpPurchaseOrder.getId()); + orderItem.setOrderNum(erpPurchaseOrder.getOrderNum()); + if(item.getAmount()!=null) { + orderItem.setAmount(item.getAmount().doubleValue()); + }else{ + + orderItem.setAmount(item.getPurPrice()==null?0.0:item.getPurPrice().multiply(BigDecimal.valueOf(item.getQuantity())).doubleValue()); + } + orderItem.setGoodsId(item.getGoodsId()); + orderItem.setGoodsNum(item.getNumber()); + orderItem.setIsDelete(0); + orderItem.setPrice(item.getPurPrice()); + orderItem.setQuantity(item.getQuantity()); + orderItem.setSpecId(item.getId()); + orderItem.setSpecNum(item.getSkuCode()); + orderItem.setStatus(0); + orderItem.setTransType("Purchase"); + orderItem.setGoodsName(item.getGoodsName()); + orderItem.setColorValue(item.getColorValue()); + orderItem.setColorImage(item.getColorImage()); + orderItem.setSizeValue(item.getSizeValue()); + orderItem.setStyleValue(item.getStyleValue()); + + erpPurchaseOrderItemMapper.insert(orderItem); + } + return 1; + } + + @Override + public int updateScmPurchaseOrder(PurchaseOrderOptionBo request) { + ErpPurchaseOrder order = erpPurchaseOrderMapper.selectById(request.getId()); + if(order == null) return -1; + + + if(request.getOptionType().equals("audit")){ + if(order.getStatus() !=0){ + // 状态不是待审核的 + return -1; + } + ErpPurchaseOrder erpPurchaseOrder = new ErpPurchaseOrder(); + erpPurchaseOrder.setId(order.getId()); + erpPurchaseOrder.setUpdateBy(request.getUpdateBy()); + erpPurchaseOrder.setUpdateTime(DateUtils.getNowDate()); + erpPurchaseOrder.setAuditUser(request.getAuditUser()); + erpPurchaseOrder.setAuditTime(System.currentTimeMillis()/1000); + erpPurchaseOrder.setRemark(request.getRemark()); + erpPurchaseOrder.setStatus(1); + return erpPurchaseOrderMapper.updateById(erpPurchaseOrder); + } + else if (request.getOptionType().equals("confirm")) { + if(order.getStatus() !=1){ + // 状态不是已审核的不能确认 + return -1; + } + // 查询数据 + List items = erpPurchaseOrderItemMapper.selectList(new LambdaQueryWrapper().eq(ErpPurchaseOrderItem::getOrderId, request.getId())); + + Map> goodsGroup = items.stream().collect(Collectors.groupingBy(x -> x.getGoodsId())); + Long total = items.stream().mapToLong(ErpPurchaseOrderItem::getQuantity).sum(); + // 生成费用信息 +// ScmPurchaseOrderCost cost = new ScmPurchaseOrderCost(); +// cost.setId(order.getId()); +// cost.setOrderId(order.getId()); +// cost.setSupplierId(order.getSupplierId()); +// cost.setOrderNum(order.getOrderNum()); +// cost.setOrderDate(order.getOrderDate()); +// cost.setOrderGoodsUnit(goodsGroup.size()); +// cost.setOrderSpecUnit(items.size()); +// cost.setOrderSpecUnitTotal(total.intValue()); +// cost.setOrderAmount(order.getOrderAmount()); +// cost.setActualAmount(request.getTotalAmount()); +// cost.setFreight(BigDecimal.ZERO); +// cost.setConfirmUser(request.getConfirmUser()); +// cost.setConfirmTime(new Date()); +// cost.setCreateBy(request.getUpdateBy()); +// cost.setPayAmount(BigDecimal.ZERO); +// cost.setPayCount(0); +// cost.setStatus(0); +// costMapper.insert(cost); + + // 更新主表 + ErpPurchaseOrder erpPurchaseOrder = new ErpPurchaseOrder(); + erpPurchaseOrder.setId(order.getId()); + erpPurchaseOrder.setUpdateBy(request.getUpdateBy()); + erpPurchaseOrder.setUpdateTime(DateUtils.getNowDate()); + erpPurchaseOrder.setStatus(101); + erpPurchaseOrder.setSupplierConfirmTime(new Date()); + erpPurchaseOrderMapper.updateById(erpPurchaseOrder); + } + else if (request.getOptionType().equals("SupplierShip")) { + if(order.getStatus() !=101 && order.getStatus()!=1){ + // 状态不是已确认的不能发货 + return -1; + } + // 查询数据 + List items = erpPurchaseOrderItemMapper.selectList(new LambdaQueryWrapper().eq(ErpPurchaseOrderItem::getOrderId, request.getId())); + + Map> goodsGroup = items.stream().collect(Collectors.groupingBy(x -> x.getGoodsId())); + Long total = items.stream().mapToLong(ErpPurchaseOrderItem::getQuantity).sum(); + + // 生成物流信息 + ErpPurchaseOrderShip ship = new ErpPurchaseOrderShip(); + + ship.setId(order.getId()); + ship.setOrderId(order.getId()); + ship.setSupplierId(order.getSupplierId()); + ship.setOrderNum(order.getOrderNum()); + ship.setOrderDate(order.getOrderDate()); + ship.setOrderGoodsUnit(goodsGroup.size()); + ship.setOrderSpecUnit(items.size()); + ship.setOrderSpecUnitTotal(total.intValue()); + ship.setShipCompany(request.getShipCompany()); + ship.setShipNum(request.getShipNo()); + ship.setFreight(request.getShipCost()); + ship.setShipTime(request.getSupplierDeliveryTime()); + ship.setCreateBy(request.getUpdateBy()); + ship.setCreateTime(new Date()); + ship.setStatus(0); + ship.setBackCount(0); + ship.setStockInCount(0); + shipMapper.insert(ship); + // 更新费用表 + + +// ScmSupplier scmSupplier = supplierMapper.selectScmSupplierById(order.getContactId()); + // 生成应付信息fms_payable_purchase +// ScmPurchaseOrderPayable payable = new ScmPurchaseOrderPayable(); +// payable.setSupplierId(order.getSupplierId()); +//// fmsPP.setSupplierName(scmSupplier!=null ? scmSupplier.getName():"数据库未找到供应商信息"); +// payable.setAmount(order.getOrderAmount().add(request.getShipCost())); +// payable.setDate(new Date()); +// payable.setPurchaseOrderNum(order.getOrderNum()); +// payable.setPurchaseDesc("{采购商品总数量:"+total+",不同款式:"+goodsGroup.size()+",不同SKU:"+items.size()+",商品总价:"+order.getOrderAmount()+",运费:"+request.getShipCost()+"}"); +// payable.setStatus(0); +// payable.setCreateTime(new Date()); +// payable.setCreateBy(request.getUpdateBy()); +// payableMapper.insert(payable); + + // 更新主表 + ErpPurchaseOrder erpPurchaseOrder = new ErpPurchaseOrder(); + erpPurchaseOrder.setId(order.getId()); + erpPurchaseOrder.setUpdateBy(request.getUpdateBy()); + erpPurchaseOrder.setUpdateTime(DateUtils.getNowDate()); + erpPurchaseOrder.setStatus(102); + erpPurchaseOrder.setSupplierDeliveryTime(new Date()); + erpPurchaseOrder.setShipAmount(request.getShipCost()); + erpPurchaseOrderMapper.updateById(erpPurchaseOrder); + } + return 1; + } +} + + + + diff --git a/serviceImpl/erp/src/main/java/cn/qihangerp/module/erp/service/impl/ErpPurchaseOrderShipServiceImpl.java b/serviceImpl/erp/src/main/java/cn/qihangerp/module/erp/service/impl/ErpPurchaseOrderShipServiceImpl.java new file mode 100644 index 00000000..cf07f7bc --- /dev/null +++ b/serviceImpl/erp/src/main/java/cn/qihangerp/module/erp/service/impl/ErpPurchaseOrderShipServiceImpl.java @@ -0,0 +1,22 @@ +package cn.qihangerp.module.erp.service.impl; + +import cn.qihangerp.model.entity.ErpPurchaseOrderShip; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import cn.qihangerp.module.erp.service.ErpPurchaseOrderShipService; +import cn.qihangerp.module.erp.mapper.ErpPurchaseOrderShipMapper; +import org.springframework.stereotype.Service; + +/** +* @author 1 +* @description 针对表【erp_purchase_order_ship(采购订单物流表)】的数据库操作Service实现 +* @createDate 2025-09-09 10:40:41 +*/ +@Service +public class ErpPurchaseOrderShipServiceImpl extends ServiceImpl + implements ErpPurchaseOrderShipService{ + +} + + + + diff --git a/serviceImpl/erp/src/main/resources/cn/qihangerp/module/erp/mapper/ErpPurchaseOrderItemMapper.xml b/serviceImpl/erp/src/main/resources/cn/qihangerp/module/erp/mapper/ErpPurchaseOrderItemMapper.xml new file mode 100644 index 00000000..b33c673b --- /dev/null +++ b/serviceImpl/erp/src/main/resources/cn/qihangerp/module/erp/mapper/ErpPurchaseOrderItemMapper.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id,order_id,order_num,trans_type,amount,order_date, + remark,goods_id,goods_num,goods_name,spec_id, + spec_num,color_value,color_image,size_value,style_value, + price,dis_amount,dis_rate,quantity,inQty, + locationId,is_delete,status + + diff --git a/serviceImpl/erp/src/main/resources/cn/qihangerp/module/erp/mapper/ErpPurchaseOrderMapper.xml b/serviceImpl/erp/src/main/resources/cn/qihangerp/module/erp/mapper/ErpPurchaseOrderMapper.xml new file mode 100644 index 00000000..761e1550 --- /dev/null +++ b/serviceImpl/erp/src/main/resources/cn/qihangerp/module/erp/mapper/ErpPurchaseOrderMapper.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + id,supplier_id,order_num,order_date,order_time,order_amount, + ship_amount,remark,status,audit_user,audit_time, + supplier_confirm_time,supplier_delivery_time,received_time,stock_in_time,create_by, + create_time,update_by,update_time + + diff --git a/serviceImpl/erp/src/main/resources/cn/qihangerp/module/erp/mapper/ErpPurchaseOrderShipMapper.xml b/serviceImpl/erp/src/main/resources/cn/qihangerp/module/erp/mapper/ErpPurchaseOrderShipMapper.xml new file mode 100644 index 00000000..db3f63a2 --- /dev/null +++ b/serviceImpl/erp/src/main/resources/cn/qihangerp/module/erp/mapper/ErpPurchaseOrderShipMapper.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id,supplier_id,order_id,ship_company,ship_num,freight, + ship_time,receipt_time,create_by,create_time,status, + remark,back_count,stock_in_time,stock_in_count,update_by, + update_time,order_date,order_num,order_spec_unit,order_goods_unit, + order_spec_unit_total + + diff --git a/serviceImpl/pom.xml b/serviceImpl/pom.xml index eb026ac8..52228894 100644 --- a/serviceImpl/pom.xml +++ b/serviceImpl/pom.xml @@ -25,6 +25,7 @@ dou tao pdd + erp diff --git a/vue/src/api/purchase/purchaseOrder.js b/vue/src/api/purchase/purchaseOrder.js index b35a0804..724841ea 100644 --- a/vue/src/api/purchase/purchaseOrder.js +++ b/vue/src/api/purchase/purchaseOrder.js @@ -3,7 +3,7 @@ import request from '@/utils/request' // 查询采购订单列表 export function listPurchaseOrder(query) { return request({ - url: '/erp/purchase/list', + url: '/api/erp-api/erp/purchase/list', method: 'get', params: query })