diff --git a/oms_web/oms_vue/src/views/inventory/info/index.vue b/oms_web/oms_vue/src/views/inventory/info/index.vue
index 8145f0c9..20eb55cf 100644
--- a/oms_web/oms_vue/src/views/inventory/info/index.vue
+++ b/oms_web/oms_vue/src/views/inventory/info/index.vue
@@ -65,8 +65,8 @@
- 入库记录
- 出库记录
+ 入库记录
+ 出库记录
diff --git a/oms_web/oms_vue/src/views/purchaseorder/components/PurchaseOrderDetail.vue b/oms_web/oms_vue/src/views/purchaseorder/components/PurchaseOrderDetail.vue
index d348a38c..aaf962c6 100644
--- a/oms_web/oms_vue/src/views/purchaseorder/components/PurchaseOrderDetail.vue
+++ b/oms_web/oms_vue/src/views/purchaseorder/components/PurchaseOrderDetail.vue
@@ -554,7 +554,7 @@ export default {
id: null,
purchaseNo: null,
buyerName: '紫光汇智信息技术有限公司',
- buyerAddress: '重庆市南岸区广福大道12号行政中心B区3号楼14-17',
+ buyerAddress: '重庆市两江新区云杉南路6号涉外商务区B6栋7楼',
vendorId: null,
currency: 'RMB',
purchaserId: null,
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/DataProcessController.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/DataProcessController.java
index 3e6cfd5b..b146c906 100644
--- a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/DataProcessController.java
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/DataProcessController.java
@@ -36,10 +36,18 @@ public class DataProcessController {
dataProcessService.generateServiceBillsWhenAllDelivered(orderCode);
}
+ //项目推送CRM
@Anonymous
@GetMapping("/projectPushCRM")
public void projectSendCRM(@RequestParam("projectId") Long projectId) {
dataProcessService.projectSendCRM(projectId);
}
+ //生成虚拟采购单(已发货未绑定采购单的数据)
+ @Anonymous
+ @GetMapping("/generateVirtualPurchase")
+ public void generateVirtualPurchase() {
+ dataProcessService.generateVirtualPurchase();
+ }
+
}
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/dto/UnboundPurchaseOrderProductDto.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/dto/UnboundPurchaseOrderProductDto.java
index c03c7b5c..20cb1d50 100644
--- a/ruoyi-sip/src/main/java/com/ruoyi/sip/dto/UnboundPurchaseOrderProductDto.java
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/dto/UnboundPurchaseOrderProductDto.java
@@ -4,17 +4,71 @@ import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
+import java.math.BigDecimal;
+
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UnboundPurchaseOrderProductDto {
+ /** 项目编号 */
+ private String projectCode;
+
+ /** 项目名称 */
+ private String projectName;
+
/** 合同编号 */
private String orderCode;
+ /** 合同ID */
+ private String orderId;
+
/** 产品编码 */
private String productCode;
/** 入库单号 */
private String innerCode;
+
+ /** 单价 */
+ private BigDecimal price;
+
+ /** 含税金额 */
+ private BigDecimal allPrice;
+
+ /** 数量 */
+ private BigDecimal quantity;
+
+ /** 税率 */
+ private BigDecimal taxRate;
+
+ /** 税额 */
+ private BigDecimal taxTotal;
+
+ /** 产品类型 */
+ private String type;
+
+ /** 产品型号 */
+ private String model;
+
+ /** 产品描述 */
+ private String productDesc;
+
+ /** 采购员ID */
+ private Long userId;
+
+ /** 采购员姓名 */
+ private String userName;
+
+ /** 采购员邮箱 */
+ private String email;
+
+ /** 采购员电话 */
+ private String phonenumber;
+
+ /** 制造商ID */
+ private Long vendorId;
+
+ /** 仓库ID */
+ private Long warehouseId;
+
}
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectOrderInfoMapper.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectOrderInfoMapper.java
index a083e11b..5982a911 100644
--- a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectOrderInfoMapper.java
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProjectOrderInfoMapper.java
@@ -1,5 +1,6 @@
package com.ruoyi.sip.mapper;
+import java.math.BigDecimal;
import java.util.List;
import com.ruoyi.sip.domain.InventoryDelivery;
@@ -120,4 +121,12 @@ public interface ProjectOrderInfoMapper
List selectUnboundPurchaseOrderProductList();
+ int insertUnboundPurchaseOrderProductMap(@Param("orderId") String orderId,
+ @Param("productCode") String productCode,
+ @Param("purchaseId") Long purchaseId,
+ @Param("quantity") BigDecimal quantity);
+
+ int updateInventoryInnerPurchaseNo(@Param("purchaseNo") String purchaseNo,
+ @Param("innerCode") String innerCode);
+
}
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IDataProcessService.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IDataProcessService.java
index dde36e0c..34be2831 100644
--- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IDataProcessService.java
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IDataProcessService.java
@@ -13,4 +13,6 @@ public interface IDataProcessService {
void projectSendCRM(Long projectId);
+ void generateVirtualPurchase();
+
}
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/DataProcessServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/DataProcessServiceImpl.java
index baa29331..d98b5bd5 100644
--- a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/DataProcessServiceImpl.java
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/DataProcessServiceImpl.java
@@ -1,21 +1,18 @@
package com.ruoyi.sip.service.impl;
+import cn.hutool.core.collection.CollUtil;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.enums.ApproveStatusEnum;
import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.ShiroUtils;
import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.sip.domain.InventoryInfo;
-import com.ruoyi.sip.domain.OmsInventoryInner;
-import com.ruoyi.sip.domain.OmsPayableBill;
-import com.ruoyi.sip.domain.ProductInfo;
-import com.ruoyi.sip.domain.VendorInfo;
+import com.ruoyi.sip.domain.*;
import com.ruoyi.sip.dto.ProjectTransferRequest;
+import com.ruoyi.sip.dto.UnboundPurchaseOrderProductDto;
import com.ruoyi.sip.dto.inventory.OmsPurchaseOrderItemDto;
-import com.ruoyi.sip.mapper.InventoryInfoMapper;
-import com.ruoyi.sip.mapper.OmsInventoryInnerMapper;
-import com.ruoyi.sip.mapper.ProjectInfoMapper;
-import com.ruoyi.sip.mapper.ProjectOrderInfoMapper;
-import com.ruoyi.sip.mapper.ProjectUserCollectInfoMapper;
+import com.ruoyi.sip.mapper.*;
import com.ruoyi.sip.service.*;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.mgt.DefaultSecurityManager;
@@ -26,17 +23,16 @@ import org.apache.shiro.util.ThreadContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
import java.util.stream.Collectors;
@Service
+@Transactional(rollbackFor = Exception.class)
public class DataProcessServiceImpl implements IDataProcessService {
@Resource
@@ -72,6 +68,12 @@ public class DataProcessServiceImpl implements IDataProcessService {
@Autowired
private IInventoryDeliveryService inventoryDeliveryService;
+ @Autowired
+ private ICnareaService cnareaService;
+
+ @Resource
+ private OmsPurchaseOrderMapper omsPurchaseOrderMapper;
+
@Value("${oms.inventory.innerTax:0.13}")
private String defaultTax;
@@ -173,5 +175,141 @@ public class DataProcessServiceImpl implements IDataProcessService {
public void projectSendCRM(Long projectId) {
projectInfoService.scheduleOpportunityUpdateByProjectId(projectId);
}
+
+ @Override
+ public void generateVirtualPurchase() {
+ bindShiroUser(1L, "admin", "平台管理员");
+ List unboundList = projectOrderInfoMapper.selectUnboundPurchaseOrderProductList();
+ for (UnboundPurchaseOrderProductDto unboundDto : unboundList) {
+ /*
+ ---------- 组装新建参数
+ */
+ OmsPurchaseOrder omsPurchaseOrder = new OmsPurchaseOrder();
+ omsPurchaseOrder.setApproveStatus("0");
+ omsPurchaseOrder.setBuyerAddress("重庆市两江新区云杉南路6号涉外商务区B6栋7楼");
+ omsPurchaseOrder.setBuyerName("紫光汇智信息技术有限公司");
+ omsPurchaseOrder.setCurrency("RMB");
+ omsPurchaseOrder.setIsVirtual(true);
+ //采购单子项
+ List purechaseItems = new ArrayList<>();
+ OmsPurchaseOrderItem purchaseItem = new OmsPurchaseOrderItem();
+ purchaseItem.setAmountTotal(unboundDto.getAllPrice());
+ purchaseItem.setPrice(unboundDto.getPrice());
+ purchaseItem.setProductCode(unboundDto.getProductCode());
+ purchaseItem.setProductDescription(unboundDto.getProductDesc());
+ purchaseItem.setProductModel(unboundDto.getModel());
+ purchaseItem.setProductType(unboundDto.getType());
+ purchaseItem.setQuantity(unboundDto.getQuantity());
+ purchaseItem.setTaxRate(unboundDto.getTaxRate());
+ purchaseItem.setTaxTotal(unboundDto.getTaxTotal());
+ purechaseItems.add(purchaseItem);
+ omsPurchaseOrder.setOmsPurchaseOrderItemList(purechaseItems);
+ omsPurchaseOrder.setPayMethod("1");
+ omsPurchaseOrder.setPurchaserId(unboundDto.getUserId());
+ omsPurchaseOrder.setPurchaserEmail(unboundDto.getEmail());
+ omsPurchaseOrder.setPurchaserMobile(unboundDto.getPhonenumber());
+ omsPurchaseOrder.setPurchaserName(unboundDto.getUserName());
+ omsPurchaseOrder.setRemark(unboundDto.getProductCode() + " " + unboundDto.getProjectName());
+ omsPurchaseOrder.setStatus(0);
+ omsPurchaseOrder.setTotalAmount(unboundDto.getAllPrice());
+ omsPurchaseOrder.setVendorId(unboundDto.getVendorId());
+ omsPurchaseOrder.setWarehouseId(unboundDto.getWarehouseId());
+
+ /*
+ ---------- 采购单保存
+ */
+ // 如果 ownerId 或 ownerName 为空,则使用当前登录用户
+ if (omsPurchaseOrder.getOwnerId() == null) {
+ omsPurchaseOrder.setOwnerId(ShiroUtils.getSysUser().getUserId());
+ }
+ if (omsPurchaseOrder.getOwnerName() == null) {
+ omsPurchaseOrder.setOwnerName(ShiroUtils.getSysUser().getUserName());
+ }
+ omsPurchaseOrder.setCreateTime(DateUtils.getNowDate());
+ String purchaseNo = generatePurchaseNo(omsPurchaseOrder.getVendorId(), Boolean.TRUE.equals(omsPurchaseOrder.getIsVirtual()));
+ if (Boolean.TRUE.equals(omsPurchaseOrder.getIsVirtual())) {
+ omsPurchaseOrder.setApproveStatus(ApproveStatusEnum.APPROVE_COMPLETE.getCode());
+ omsPurchaseOrder.setConfirmStatus(OmsPurchaseOrder.ConfirmStatusEnum.CONFIRM.getCode());
+ omsPurchaseOrder.setFlowType(OmsPurchaseOrder.FlowTypeEnum.ONLINE.getCode());
+ }
+ omsPurchaseOrder.setPurchaseNo(purchaseNo);
+ // 设置初始版本号为 1
+ omsPurchaseOrder.setVersion(1);
+ omsPurchaseOrder.setStatus(OmsPurchaseOrder.StatusEnum.COMPLETED.getCode());
+ omsPurchaseOrderMapper.insertOmsPurchaseOrder(omsPurchaseOrder);
+ insertOmsPurchaseOrderItem(omsPurchaseOrder);
+
+ /*
+ ---------- 订单绑定采购单,采购单明细数据修改
+ */
+ projectOrderInfoMapper.insertUnboundPurchaseOrderProductMap(unboundDto.getOrderId()
+ , unboundDto.getProductCode()
+ , omsPurchaseOrder.getId()
+ , unboundDto.getQuantity());
+ projectOrderInfoMapper.updateInventoryInnerPurchaseNo(purchaseNo, unboundDto.getInnerCode());
+ }
+ }
+
+ /**
+ * 生成订单编号
+ *
+ * @param vendorId 制造商ID
+ * @param isVirtual 是否为虚拟采购单
+ * @return 订单编号
+ */
+
+ private String generatePurchaseNo(Long vendorId, boolean isVirtual) {
+ VendorInfo vendorInfo = vendorInfoService.selectVendorInfoByVendorId(vendorId);
+ if (vendorInfo==null || StringUtils.isEmpty(vendorInfo.getProvince())) {
+ throw new ServiceException("制造商所属省为空,无法生成订单编号");
+ }
+ // 获取当前时间,格式为yyyyMMdd
+ String currentDate = DateUtils.dateTimeNow("yyyyMMdd");
+ Cnarea cnarea = new Cnarea();
+ cnarea.setName(vendorInfo.getProvince());
+ cnarea.setLevel("1");
+ List cnareas = cnareaService.queryAll(cnarea);
+ if (CollUtil.isEmpty(cnareas)) {
+ throw new ServiceException("省市未配置,生成订单编号出错,请联系管理员");
+ }
+ String shortCode = cnareas.get(0).getShortCode();
+ StringBuilder result = new StringBuilder();
+ if (isVirtual) {
+ result.append("XN-");
+ }
+ result.append("ZGCV-").append(currentDate).append(shortCode);
+ // 查询当天已有的订单数量,用于生成顺序编码
+ int count = omsPurchaseOrderMapper.selectMaxOrderCode(result.toString());
+ // 生成顺序编码,不足三位补零
+ String sequence = String.format("%03d", count + 1);
+ result.append(sequence);
+ // 拼接订单编号
+ return result.toString();
+ }
+
+ /**
+ * 新增采购单明细表信息
+ *
+ * @param omsPurchaseOrder 采购单主表对象
+ */
+ public void insertOmsPurchaseOrderItem(OmsPurchaseOrder omsPurchaseOrder)
+ {
+ List omsPurchaseOrderItemList = omsPurchaseOrder.getOmsPurchaseOrderItemList();
+ Long id = omsPurchaseOrder.getId();
+ if (StringUtils.isNotNull(omsPurchaseOrderItemList))
+ {
+ List list = new ArrayList();
+ for (OmsPurchaseOrderItem omsPurchaseOrderItem : omsPurchaseOrderItemList)
+ {
+ omsPurchaseOrderItem.setPurchaseId(id);
+ omsPurchaseOrderItem.setInnerQuantity(omsPurchaseOrderItem.getQuantity());
+ list.add(omsPurchaseOrderItem);
+ }
+ if (list.size() > 0)
+ {
+ omsPurchaseOrderMapper.batchOmsPurchaseOrderItem(list);
+ }
+ }
+ }
}
diff --git a/ruoyi-sip/src/main/resources/mapper/sip/ProjectOrderInfoMapper.xml b/ruoyi-sip/src/main/resources/mapper/sip/ProjectOrderInfoMapper.xml
index e0bc9b6c..37c29818 100644
--- a/ruoyi-sip/src/main/resources/mapper/sip/ProjectOrderInfoMapper.xml
+++ b/ruoyi-sip/src/main/resources/mapper/sip/ProjectOrderInfoMapper.xml
@@ -1064,14 +1064,43 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+
+ insert into oms_purchase_order_map(order_id,purchase_id,product_code,bind_num) values(${orderId},${purchaseId},#{productCode},${quantity})
+
+
+
+ update oms_inventory_inner set purchase_no = #{purchaseNo} where inner_code = #{innerCode}
+
+