diff --git a/ruoyi-admin/src/main/resources/mybatis/mybatis-config.xml b/ruoyi-admin/src/main/resources/mybatis/mybatis-config.xml
index ac47c038..10cf6b0b 100644
--- a/ruoyi-admin/src/main/resources/mybatis/mybatis-config.xml
+++ b/ruoyi-admin/src/main/resources/mybatis/mybatis-config.xml
@@ -14,7 +14,7 @@ PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
-
+
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/DeliveryListController.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/DeliveryListController.java
new file mode 100644
index 00000000..b06bad62
--- /dev/null
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/controller/DeliveryListController.java
@@ -0,0 +1,136 @@
+package com.ruoyi.sip.controller;
+
+import java.util.List;
+
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.sip.domain.DeliveryList;
+import com.ruoyi.sip.service.IDeliveryListService;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.common.core.page.TableDataInfo;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * 发货清单Controller
+ *
+ * @author ruoyi
+ * @date 2025-04-11
+ */
+@Controller
+@RequestMapping("/sip/list")
+public class DeliveryListController extends BaseController {
+ private String prefix = "sip/list";
+
+ @Autowired
+ private IDeliveryListService deliveryListService;
+
+ @RequiresPermissions("sip:list:view")
+ @GetMapping()
+ public String list() {
+ return prefix + "/list";
+ }
+
+ /**
+ * 查询发货清单列表
+ */
+ @RequiresPermissions("sip:list:list")
+ @PostMapping("/list")
+ @ResponseBody
+ public TableDataInfo list(DeliveryList deliveryList) {
+ startPage();
+ List list = deliveryListService.selectDeliveryListList(deliveryList);
+ return getDataTable(list);
+ }
+
+ /**
+ * 导入数据
+ */
+
+ @PostMapping("/importData")
+ @ResponseBody
+ public AjaxResult importData(MultipartFile file, Long deliveryId) throws Exception
+ {
+ ExcelUtil util = new ExcelUtil(DeliveryList.class);
+ List deliveryList = util.importExcel(file.getInputStream());
+
+ deliveryListService.importData(deliveryList, deliveryId);
+ return AjaxResult.success("导入成功");
+ }
+
+ /**
+ * 导出发货清单列表
+ */
+ @RequiresPermissions("sip:list:export")
+ @Log(title = "发货清单", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ @ResponseBody
+ public AjaxResult export(DeliveryList deliveryList) {
+ List list = deliveryListService.selectDeliveryListList(deliveryList);
+ ExcelUtil util = new ExcelUtil(DeliveryList.class);
+ return util.exportExcel(list, "发货清单数据");
+ }
+
+ /**
+ * 新增发货清单
+ */
+ @RequiresPermissions("sip:list:add")
+ @GetMapping("/add")
+ public String add() {
+ return prefix + "/add";
+ }
+
+ /**
+ * 新增保存发货清单
+ */
+ @RequiresPermissions("sip:list:add")
+ @Log(title = "发货清单", businessType = BusinessType.INSERT)
+ @PostMapping("/add")
+ @ResponseBody
+ public AjaxResult addSave(DeliveryList deliveryList) {
+ return toAjax(deliveryListService.insertDeliveryList(deliveryList));
+ }
+
+ /**
+ * 修改发货清单
+ */
+ @RequiresPermissions("sip:list:edit")
+ @GetMapping("/edit/{id}")
+ public String edit(@PathVariable("id") Long id, ModelMap mmap) {
+ DeliveryList deliveryList = deliveryListService.selectDeliveryListById(id);
+ mmap.put("deliveryList", deliveryList);
+ return prefix + "/edit";
+ }
+
+ /**
+ * 修改保存发货清单
+ */
+ @RequiresPermissions("sip:list:edit")
+ @Log(title = "发货清单", businessType = BusinessType.UPDATE)
+ @PostMapping("/edit")
+ @ResponseBody
+ public AjaxResult editSave(DeliveryList deliveryList) {
+ return toAjax(deliveryListService.updateDeliveryList(deliveryList));
+ }
+
+ /**
+ * 删除发货清单
+ */
+ @RequiresPermissions("sip:list:remove")
+ @Log(title = "发货清单", businessType = BusinessType.DELETE)
+ @PostMapping("/remove")
+ @ResponseBody
+ public AjaxResult remove(String ids) {
+ return toAjax(deliveryListService.deleteDeliveryListByIds(ids));
+ }
+}
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/DeliveryList.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/DeliveryList.java
new file mode 100644
index 00000000..67e00e5e
--- /dev/null
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/domain/DeliveryList.java
@@ -0,0 +1,158 @@
+package com.ruoyi.sip.domain;
+
+import java.util.Date;
+import java.util.StringJoiner;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.ruoyi.common.annotation.Excel;
+import com.ruoyi.common.core.domain.BaseEntity;
+
+/**
+ * 发货清单对象 delivery_list
+ *
+ * @author ruoyi
+ * @date 2025-04-11
+ */
+public class DeliveryList extends BaseEntity
+{
+ private static final long serialVersionUID = 1L;
+
+ /** 主键,自增 */
+ private Long id;
+
+ /** 关联发货单id */
+// @Excel(name = "关联发货单id")
+ private Long deliveryId;
+// @Excel(name = "合同编号")
+ private String orderCode;
+ /** 产品编码id */
+
+ @Excel(name = "产品编码")
+ private String productCode;
+
+ /** 产品序列号 */
+ @Excel(name = "产品序列号")
+ private String serialNumber;
+ @Excel(name = "备注")
+ private String remark;
+
+ /** 创建时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+// @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd")
+ private Date createdAt;
+
+ /** 更新时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+// @Excel(name = "更新时间", width = 30, dateFormat = "yyyy-MM-dd")
+ private Date updatedAt;
+
+ /** 删除时间 */
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+// @Excel(name = "删除时间", width = 30, dateFormat = "yyyy-MM-dd")
+ private Date deletedAt;
+
+
+
+ public String getOrderCode() {
+ return orderCode;
+ }
+
+ public void setOrderCode(String orderCode) {
+ this.orderCode = orderCode;
+ }
+
+ public String getProductCode() {
+ return productCode;
+ }
+
+ public void setProductCode(String productCode) {
+ this.productCode = productCode;
+ }
+
+ public void setId(Long id)
+ {
+ this.id = id;
+ }
+
+ public Long getId()
+ {
+ return id;
+ }
+
+ public void setDeliveryId(Long deliveryId)
+ {
+ this.deliveryId = deliveryId;
+ }
+
+ public Long getDeliveryId()
+ {
+ return deliveryId;
+ }
+
+ @Override
+ public String getRemark() {
+ return remark;
+ }
+
+ @Override
+ public void setRemark(String remark) {
+ this.remark = remark;
+ }
+
+ public void setSerialNumber(String serialNumber)
+ {
+ this.serialNumber = serialNumber;
+ }
+
+ public String getSerialNumber()
+ {
+ return serialNumber;
+ }
+
+ public void setCreatedAt(Date createdAt)
+ {
+ this.createdAt = createdAt;
+ }
+
+ public Date getCreatedAt()
+ {
+ return createdAt;
+ }
+
+ public void setUpdatedAt(Date updatedAt)
+ {
+ this.updatedAt = updatedAt;
+ }
+
+ public Date getUpdatedAt()
+ {
+ return updatedAt;
+ }
+
+ public void setDeletedAt(Date deletedAt)
+ {
+ this.deletedAt = deletedAt;
+ }
+
+ public Date getDeletedAt()
+ {
+ return deletedAt;
+ }
+
+ @Override
+ public String toString() {
+ return new StringJoiner(", ", DeliveryList.class.getSimpleName() + "[", "]")
+ .add("id=" + id)
+ .add("deliveryId=" + deliveryId)
+ .add("orderCode='" + orderCode + "'")
+ .add("productCode='" + productCode + "'")
+ .add("serialNumber='" + serialNumber + "'")
+ .add("remark='" + remark + "'")
+ .add("createdAt=" + createdAt)
+ .add("updatedAt=" + updatedAt)
+ .add("deletedAt=" + deletedAt)
+ .toString();
+ }
+}
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/DeliveryListMapper.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/DeliveryListMapper.java
new file mode 100644
index 00000000..25116644
--- /dev/null
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/DeliveryListMapper.java
@@ -0,0 +1,62 @@
+package com.ruoyi.sip.mapper;
+
+import java.util.List;
+import com.ruoyi.sip.domain.DeliveryList;
+
+/**
+ * 发货清单Mapper接口
+ *
+ * @author ruoyi
+ * @date 2025-04-11
+ */
+public interface DeliveryListMapper
+{
+ /**
+ * 查询发货清单
+ *
+ * @param id 发货清单主键
+ * @return 发货清单
+ */
+ public DeliveryList selectDeliveryListById(Long id);
+
+ /**
+ * 查询发货清单列表
+ *
+ * @param deliveryList 发货清单
+ * @return 发货清单集合
+ */
+ public List selectDeliveryListList(DeliveryList deliveryList);
+
+ /**
+ * 新增发货清单
+ *
+ * @param deliveryList 发货清单
+ * @return 结果
+ */
+ public int insertDeliveryList(DeliveryList deliveryList);
+ public int insertBatch(List deliveryList);
+
+ /**
+ * 修改发货清单
+ *
+ * @param deliveryList 发货清单
+ * @return 结果
+ */
+ public int updateDeliveryList(DeliveryList deliveryList);
+
+ /**
+ * 删除发货清单
+ *
+ * @param id 发货清单主键
+ * @return 结果
+ */
+ public int deleteDeliveryListById(Long id);
+
+ /**
+ * 批量删除发货清单
+ *
+ * @param ids 需要删除的数据主键集合
+ * @return 结果
+ */
+ public int deleteDeliveryListByIds(String[] ids);
+}
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OrderInfoMapper.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OrderInfoMapper.java
index ab8d1f40..7647004e 100644
--- a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OrderInfoMapper.java
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/OrderInfoMapper.java
@@ -97,4 +97,6 @@ public interface OrderInfoMapper
* @param orderListList
*/
void updateListBatch(List orderListList);
+
+ List listOrderListByDeliveryId(Long deliveryId);
}
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProductInfoMapper.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProductInfoMapper.java
index 3322f7f9..661908dc 100644
--- a/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProductInfoMapper.java
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/mapper/ProductInfoMapper.java
@@ -2,6 +2,7 @@ package com.ruoyi.sip.mapper;
import java.util.List;
import com.ruoyi.sip.domain.ProductInfo;
+import org.apache.ibatis.annotations.Param;
/**
* 产品管理Mapper接口
@@ -58,4 +59,8 @@ public interface ProductInfoMapper
* @return 结果
*/
public int deleteProductInfoByIds(String[] ids);
+
+
+
+ List listByProductCodeList(@Param("list") List productCodeList);
}
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IDeliveryListService.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IDeliveryListService.java
new file mode 100644
index 00000000..1f74900f
--- /dev/null
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/IDeliveryListService.java
@@ -0,0 +1,63 @@
+package com.ruoyi.sip.service;
+
+import java.util.List;
+import com.ruoyi.sip.domain.DeliveryList;
+
+/**
+ * 发货清单Service接口
+ *
+ * @author ruoyi
+ * @date 2025-04-11
+ */
+public interface IDeliveryListService
+{
+ /**
+ * 查询发货清单
+ *
+ * @param id 发货清单主键
+ * @return 发货清单
+ */
+ public DeliveryList selectDeliveryListById(Long id);
+
+ /**
+ * 查询发货清单列表
+ *
+ * @param deliveryList 发货清单
+ * @return 发货清单集合
+ */
+ public List selectDeliveryListList(DeliveryList deliveryList);
+
+ /**
+ * 新增发货清单
+ *
+ * @param deliveryList 发货清单
+ * @return 结果
+ */
+ public int insertDeliveryList(DeliveryList deliveryList);
+
+ /**
+ * 修改发货清单
+ *
+ * @param deliveryList 发货清单
+ * @return 结果
+ */
+ public int updateDeliveryList(DeliveryList deliveryList);
+
+ /**
+ * 批量删除发货清单
+ *
+ * @param ids 需要删除的发货清单主键集合
+ * @return 结果
+ */
+ public int deleteDeliveryListByIds(String ids);
+
+ /**
+ * 删除发货清单信息
+ *
+ * @param id 发货清单主键
+ * @return 结果
+ */
+ public int deleteDeliveryListById(Long id);
+
+ void importData(List deliveryList, Long deliveryId);
+}
diff --git a/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/DeliveryListServiceImpl.java b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/DeliveryListServiceImpl.java
new file mode 100644
index 00000000..18fa2b09
--- /dev/null
+++ b/ruoyi-sip/src/main/java/com/ruoyi/sip/service/impl/DeliveryListServiceImpl.java
@@ -0,0 +1,130 @@
+package com.ruoyi.sip.service.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.sip.domain.OrderList;
+import com.ruoyi.sip.domain.ProductInfo;
+import com.ruoyi.sip.mapper.OrderInfoMapper;
+import com.ruoyi.sip.mapper.ProductInfoMapper;
+import org.springframework.stereotype.Service;
+import com.ruoyi.sip.mapper.DeliveryListMapper;
+import com.ruoyi.sip.domain.DeliveryList;
+import com.ruoyi.sip.service.IDeliveryListService;
+import com.ruoyi.common.core.text.Convert;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+
+/**
+ * 发货清单Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2025-04-11
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class DeliveryListServiceImpl implements IDeliveryListService {
+ @Resource
+ private DeliveryListMapper deliveryListMapper;
+
+ @Resource
+ private ProductInfoMapper productInfoMapper;
+
+ @Resource
+ private OrderInfoMapper infoMapper;
+
+ /**
+ * 查询发货清单
+ *
+ * @param id 发货清单主键
+ * @return 发货清单
+ */
+ @Override
+ public DeliveryList selectDeliveryListById(Long id) {
+ return deliveryListMapper.selectDeliveryListById(id);
+ }
+
+ /**
+ * 查询发货清单列表
+ *
+ * @param deliveryList 发货清单
+ * @return 发货清单
+ */
+ @Override
+ public List selectDeliveryListList(DeliveryList deliveryList) {
+ return deliveryListMapper.selectDeliveryListList(deliveryList);
+ }
+
+ /**
+ * 新增发货清单
+ *
+ * @param deliveryList 发货清单
+ * @return 结果
+ */
+ @Override
+ public int insertDeliveryList(DeliveryList deliveryList) {
+ return deliveryListMapper.insertDeliveryList(deliveryList);
+ }
+
+ /**
+ * 修改发货清单
+ *
+ * @param deliveryList 发货清单
+ * @return 结果
+ */
+ @Override
+ public int updateDeliveryList(DeliveryList deliveryList) {
+ return deliveryListMapper.updateDeliveryList(deliveryList);
+ }
+
+ /**
+ * 批量删除发货清单
+ *
+ * @param ids 需要删除的发货清单主键
+ * @return 结果
+ */
+ @Override
+ public int deleteDeliveryListByIds(String ids) {
+ return deliveryListMapper.deleteDeliveryListByIds(Convert.toStrArray(ids));
+ }
+
+ /**
+ * 删除发货清单信息
+ *
+ * @param id 发货清单主键
+ * @return 结果
+ */
+ @Override
+ public int deleteDeliveryListById(Long id) {
+ return deliveryListMapper.deleteDeliveryListById(id);
+ }
+
+ @Override
+ public void importData(List deliveryList, Long deliveryId) {
+ List productCodeList = deliveryList.stream().map(DeliveryList::getProductCode).collect(Collectors.toList());
+ if (productCodeList.isEmpty()) {
+ throw new ServiceException("产品编码为空");
+ }
+ List orderLists = infoMapper.listOrderListByDeliveryId(deliveryId);
+ if (orderLists.isEmpty()) {
+ throw new ServiceException("发货单中没有产品");
+ }
+ List existsProductCodeList = orderLists.stream().map(OrderList::getProductCode).collect(Collectors.toList());
+ List notExistsProductCodeList = productCodeList.stream().filter(productCode -> !existsProductCodeList.contains(productCode)).collect(Collectors.toList());
+ if (!notExistsProductCodeList.isEmpty()) {
+ throw new ServiceException(StringUtils.format("产品编码为[{}]的产品在发货单中未找到,请确认后重试;", String.join(",", notExistsProductCodeList)));
+ }
+
+ for (DeliveryList list : deliveryList) {
+ list.setDeliveryId(deliveryId);
+ }
+
+ deliveryListMapper.insertBatch(deliveryList);
+ }
+}
diff --git a/ruoyi-sip/src/main/resources/mapper/manage/DeliveryListMapper.xml b/ruoyi-sip/src/main/resources/mapper/manage/DeliveryListMapper.xml
new file mode 100644
index 00000000..dd9283a2
--- /dev/null
+++ b/ruoyi-sip/src/main/resources/mapper/manage/DeliveryListMapper.xml
@@ -0,0 +1,102 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ select id, delivery_id, product_code, serial_number, remark, created_at, updated_at, deleted_at from delivery_list
+
+
+
+
+
+
+
+ insert into delivery_list
+
+ delivery_id,
+ product_code,
+ serial_number,
+ remark,
+ created_at,
+ updated_at,
+ deleted_at,
+
+
+ #{deliveryId},
+ #{productCode},
+ #{serialNumber},
+ #{remark},
+ #{createdAt},
+ #{updatedAt},
+ #{deletedAt},
+
+
+
+ insert into delivery_list (delivery_id, product_code, serial_number, remark, created_at, updated_at)
+ values
+
+ (#{item.deliveryId}, #{item.productCode}, #{item.serialNumber}, #{item.remark}, now(),now())
+
+
+
+
+ update delivery_list
+
+ delivery_id = #{deliveryId},
+ product_code = #{productCode},
+ serial_number = #{serialNumber},
+ remark = #{remark},
+ created_at = #{createdAt},
+ updated_at = #{updatedAt},
+ deleted_at = #{deletedAt},
+
+ where id = #{id}
+
+
+
+ delete from delivery_list where id = #{id}
+
+
+
+ delete from delivery_list where id in
+
+ #{id}
+
+
+
+
\ No newline at end of file
diff --git a/ruoyi-sip/src/main/resources/mapper/manage/OrderInfoMapper.xml b/ruoyi-sip/src/main/resources/mapper/manage/OrderInfoMapper.xml
index 5d06858f..f58f1e01 100644
--- a/ruoyi-sip/src/main/resources/mapper/manage/OrderInfoMapper.xml
+++ b/ruoyi-sip/src/main/resources/mapper/manage/OrderInfoMapper.xml
@@ -101,9 +101,34 @@
+
@@ -176,7 +201,7 @@
update order_list
- product_id = #{productId},
+ product_code = #{productCode},
quantity = #{quantity},
price = #{price},
amount = #{amount},
@@ -203,7 +228,7 @@
- delete from order_list where order_id in
+ update order_list set status=1,delete_at=now() where order_id in
#{orderId}
@@ -216,9 +241,11 @@
- insert into order_list( id, order_id, product_code, quantity, price, amount, remark, created_at, updated_at, deleted_at) values
+ insert into order_list( id, order_id, product_code, quantity, price, amount, remark, created_at, updated_at,
+ deleted_at) values
- ( #{item.id}, #{item.orderId}, #{item.productCode}, #{item.quantity}, #{item.price}, #{item.amount}, #{item.remark}, #{item.createdAt}, #{item.updatedAt}, #{item.deletedAt})
+ ( #{item.id}, #{item.orderId}, #{item.productCode}, #{item.quantity}, #{item.price}, #{item.amount},
+ #{item.remark}, #{item.createdAt}, #{item.updatedAt}, #{item.deletedAt})
diff --git a/ruoyi-sip/src/main/resources/mapper/system/ProductInfoMapper.xml b/ruoyi-sip/src/main/resources/mapper/system/ProductInfoMapper.xml
index 34de38d6..a3f2f474 100644
--- a/ruoyi-sip/src/main/resources/mapper/system/ProductInfoMapper.xml
+++ b/ruoyi-sip/src/main/resources/mapper/system/ProductInfoMapper.xml
@@ -34,6 +34,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where id = #{id}
+
+
insert into product_info