fubin преди 2 години
родител
ревизия
7a68969149

+ 37 - 4
src/main/java/com/dk/mdm/controller/ivt/OutboundController.java

@@ -1,17 +1,18 @@
 package com.dk.mdm.controller.ivt;
 
+import com.dk.common.response.ResponseResultVO;
 import com.dk.mdm.model.pojo.ivt.Outbound;
-import com.dk.common.controller.BaseController;
 import com.dk.common.service.BaseService;
-import org.springframework.web.bind.annotation.RequestMapping;
+import com.dk.mdm.model.vo.ivt.OutboundVO;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.RestController;
 import io.swagger.annotations.Api;
 import com.dk.mdm.service.ivt.OutboundService;
 
 @Api(tags = "出库单API接口")
 @RestController
-@RequestMapping("/outbound")
+@RequestMapping("/ivt/outbound")
 public class OutboundController{
 
     public BaseService<Outbound> getService() {
@@ -21,4 +22,36 @@ public class OutboundController{
     @Autowired
     private OutboundService outboundService;
 
+    /**
+     * @desc : 新建出库单
+     * @author : 付斌
+     * @date : 2023/1/9 10:48
+     */
+    @ApiOperation(value = "新建出库单", notes = "新建出库单")
+    @PostMapping({"insert"})
+    public ResponseResultVO<?> insert(@RequestBody OutboundVO outboundVO) {
+        return outboundService.insert(outboundVO);
+    }
+
+    /**
+     * @desc   : 获取出库单信息(编辑用)
+     * @author : 付斌
+     * @date   : 2024-03-03 9:28
+     */
+    @ApiOperation(value = "编辑出库单", notes = "编辑出库单")
+    @PostMapping({"get_outbound_for_update/{id}"})
+    public ResponseResultVO<?> getOutboundForUpdate(@PathVariable String id) {
+        return outboundService.getOutboundForUpdate(id);
+    }
+
+    /**
+     * @desc : 编辑出库单
+     * @author : 付斌
+     * @date : 2023/1/9 10:49
+     */
+    @ApiOperation(value = "编辑出库单", notes = "编辑出库单")
+    @PostMapping({"update"})
+    public ResponseResultVO<Boolean> update(@RequestBody OutboundVO outboundVO) {
+        return outboundService.update(outboundVO);
+    }
 }

+ 1 - 1
src/main/java/com/dk/mdm/controller/ivt/OutboundItemController.java

@@ -11,7 +11,7 @@ import com.dk.mdm.service.ivt.OutboundItemService;
 
 @Api(tags = "出库明细API接口")
 @RestController
-@RequestMapping("/outboundItem")
+@RequestMapping("/ivt/outboundItem")
 public class OutboundItemController{
 
     public BaseService<OutboundItem> getService() {

+ 1 - 2
src/main/java/com/dk/mdm/controller/sale/OutReturnController.java

@@ -1,7 +1,6 @@
 package com.dk.mdm.controller.sale;
 
 import com.dk.mdm.model.pojo.sale.OutReturn;
-import com.dk.common.controller.BaseController;
 import com.dk.common.service.BaseService;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -11,7 +10,7 @@ import com.dk.mdm.service.sale.OutReturnService;
 
 @Api(tags = "出库退货API接口")
 @RestController
-@RequestMapping("/outReturn")
+@RequestMapping("/sale/outReturn")
 public class OutReturnController{
 
     public BaseService<OutReturn> getService() {

+ 1 - 2
src/main/java/com/dk/mdm/controller/sale/OutReturnItemController.java

@@ -1,7 +1,6 @@
 package com.dk.mdm.controller.sale;
 
 import com.dk.mdm.model.pojo.sale.OutReturnItem;
-import com.dk.common.controller.BaseController;
 import com.dk.common.service.BaseService;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -11,7 +10,7 @@ import com.dk.mdm.service.sale.OutReturnItemService;
 
 @Api(tags = "出库退货明细API接口")
 @RestController
-@RequestMapping("/outReturnItem")
+@RequestMapping("/sale/outReturnItem")
 public class OutReturnItemController{
 
     public BaseService<OutReturnItem> getService() {

+ 21 - 0
src/main/java/com/dk/mdm/infrastructure/convert/ivt/OutboundConvert.java

@@ -0,0 +1,21 @@
+package com.dk.mdm.infrastructure.convert.ivt;
+
+import com.dk.mdm.model.pojo.ivt.Outbound;
+import com.dk.mdm.model.vo.ivt.OutboundVO;
+import org.mapstruct.Mapper;
+
+/**
+ * @desc   : Outbound转换类
+ * @author : 付斌
+ * @date   : 2024-02-28 10:18
+ */
+@Mapper(componentModel = "spring")
+public interface OutboundConvert {
+
+    /**
+     * @desc   : 转换vo为pojo
+     * @author : 付斌
+     * @date   : 2024-02-28 15:26
+     */
+    Outbound convertToPo(OutboundVO outboundVO);
+}

+ 21 - 0
src/main/java/com/dk/mdm/infrastructure/convert/ivt/OutboundItemConvert.java

@@ -0,0 +1,21 @@
+package com.dk.mdm.infrastructure.convert.ivt;
+
+import com.dk.mdm.model.pojo.ivt.OutboundItem;
+import com.dk.mdm.model.vo.ivt.OutboundItemVO;
+import org.mapstruct.Mapper;
+
+/**
+ * @desc   : OutboundItem转换类
+ * @author : 付斌
+ * @date   : 2024-02-28 10:18
+ */
+@Mapper(componentModel = "spring")
+public interface OutboundItemConvert {
+
+    /**
+     * @desc   : 转换vo为pojo
+     * @author : 付斌
+     * @date   : 2024-02-28 15:25
+     */
+    OutboundItem convertToPo(OutboundItemVO outboundVO);
+}

+ 17 - 1
src/main/java/com/dk/mdm/mapper/ivt/OutboundItemMapper.java

@@ -2,13 +2,29 @@ package com.dk.mdm.mapper.ivt;
 
 import com.dk.mdm.model.pojo.ivt.OutboundItem;
 import com.dk.common.mapper.BaseMapper;
+import com.dk.mdm.model.query.ivt.OutboundItemQuery;
+import com.dk.mdm.model.response.ivt.OutboundItemResponse;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 /**
 *  出库明细 Mapper
 */
 @Repository
 public interface OutboundItemMapper extends BaseMapper<OutboundItem>{
-	
+    /**
+     * @desc   : 根据条件进行查询
+     * @author : 付斌
+     * @date   : 2024-02-28 10:18
+     */
+    List<OutboundItemResponse> selectByCond(OutboundItemQuery orderQuery);
+
+    /**
+     * @desc   : 根据条件进行查询(数量)
+     * @author : 付斌
+     * @date   : 2024-02-28 10:19
+     */
+    Long countByCond(OutboundItemQuery orderQuery);
 }
 

+ 7 - 1
src/main/java/com/dk/mdm/mapper/ivt/OutboundMapper.java

@@ -2,6 +2,7 @@ package com.dk.mdm.mapper.ivt;
 
 import com.dk.mdm.model.pojo.ivt.Outbound;
 import com.dk.common.mapper.BaseMapper;
+import com.dk.mdm.model.response.ivt.OutboundResponse;
 import org.springframework.stereotype.Repository;
 
 /**
@@ -9,6 +10,11 @@ import org.springframework.stereotype.Repository;
 */
 @Repository
 public interface OutboundMapper extends BaseMapper<Outbound>{
-	
+    /**
+     * @desc   : 根据Id进行查询
+     * @author : 付斌
+     * @date   : 2024-03-03 9:25
+     */
+    OutboundResponse selectById(String id);
 }
 

+ 6 - 0
src/main/java/com/dk/mdm/model/vo/ivt/OutboundVO.java

@@ -21,6 +21,7 @@ import lombok.experimental.Accessors;
 import java.io.Serializable;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
+import java.util.List;
 
 /**
  *  出库单
@@ -316,6 +317,11 @@ public class OutboundVO extends PageInfo<OutboundVO> implements Serializable {
     @ApiModelProperty(value = "数据操作数据库用户 (触发器自动处理)")
     private String opDbUser;
 
+    @ApiModelProperty(value = "出库明细")
+    private List<OutboundItemVO> outboundItemList;
+
+    @ApiModelProperty(value = "删除明细")
+    private List<OutboundItemVO> deleteItemList;
 
     /*
      * 相关属性

+ 110 - 0
src/main/java/com/dk/mdm/service/ivt/OutboundService.java

@@ -1,13 +1,36 @@
 package com.dk.mdm.service.ivt;
 
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.dk.common.exception.BaseBusinessException;
+import com.dk.common.infrastructure.constant.Constant;
+import com.dk.common.infrastructure.enums.ErrorCodeEnum;
+import com.dk.common.response.ResponseCodeEnum;
+import com.dk.common.response.ResponseResultUtil;
+import com.dk.common.response.ResponseResultVO;
+import com.dk.mdm.infrastructure.convert.ivt.OutboundConvert;
+import com.dk.mdm.infrastructure.convert.ivt.OutboundItemConvert;
+import com.dk.mdm.mapper.ivt.OutboundItemMapper;
 import com.dk.mdm.model.pojo.ivt.Outbound;
 import com.dk.mdm.mapper.ivt.OutboundMapper;
 import com.dk.common.service.BaseService;
 import com.dk.common.mapper.BaseMapper;
+import com.dk.mdm.model.pojo.ivt.OutboundItem;
+import com.dk.mdm.model.query.ivt.OutboundItemQuery;
+import com.dk.mdm.model.response.ivt.OutboundItemResponse;
+import com.dk.mdm.model.response.ivt.OutboundResponse;
+import com.dk.mdm.model.vo.ivt.OutboundItemVO;
+import com.dk.mdm.model.vo.ivt.OutboundVO;
+import com.dk.mdm.service.common.CommonService;
 import org.springframework.stereotype.Service;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+import java.util.stream.Collectors;
+
 @Service
 @Transactional
 public class OutboundService extends BaseService<Outbound> {
@@ -20,4 +43,91 @@ public class OutboundService extends BaseService<Outbound> {
 	@Autowired
 	private OutboundMapper outboundMapper;
 
+	@Autowired
+	private OutboundItemService outboundItemService;
+
+	@Autowired
+	private OutboundItemMapper outboundItemMapper;
+
+	@Autowired
+	private CommonService commonService;
+
+	@Autowired
+	private OutboundConvert outboundConvert;
+
+	@Autowired
+	private OutboundItemConvert outboundItemConvert;
+
+	/**
+	 * @desc : 新建方法
+	 * @author : 付斌
+	 * @date : 2023/1/9 10:49
+	 */
+	@Transactional(
+			rollbackFor = {Exception.class}
+	)
+	public ResponseResultVO<?> insert(OutboundVO outboundVO) {
+
+		// 获取单号
+		Map<String , Object> codeMap = commonService.getUniqueNoteCode(Constant.docNameConstant.OUTBOUND.getName(),false);
+		outboundVO.setOutId(codeMap.get("outId").toString()).setOutNo(codeMap.get("outNote").toString()).setOutType(Constant.OutType.SALE.getName());
+		// 转化实体
+		Outbound outbound = outboundConvert.convertToPo(outboundVO);
+		// 总单保存
+		super.insert(outbound);
+
+		// 明细保存
+		if (outboundVO.getOutboundItemList() != null && outboundVO.getOutboundItemList().size() > 0) {
+			for (OutboundItemVO outboundItemVO : outboundVO.getOutboundItemList()) {
+				OutboundItem outboundItem = outboundItemConvert.convertToPo(outboundItemVO);
+				outboundItem.setOutId(outbound.getOutId()).setCpId(outbound.getCpId()).setOutStatus(Constant.OutStatus.CHUKUZHONG.getName());
+				outboundItemMapper.insert(outboundItem);
+			}
+		}
+		return ResponseResultUtil.success();
+	}
+
+	/**
+	 * @desc   : 获取订单信息(编辑用)
+	 * @author : 付斌
+	 * @date   : 2024-03-02 17:27
+	 */
+	public ResponseResultVO<?> getOutboundForUpdate(String id) {
+		Map<String, Object> outboundInfo = new HashMap<>();
+		OutboundResponse outboundResponse = outboundMapper.selectById(id);
+		outboundInfo.put("outbound", outboundResponse);
+
+		// 商品明细
+		List<OutboundItemResponse> outboundItemResponse = outboundItemMapper.selectByCond(new OutboundItemQuery().setOutId(id));
+		outboundInfo.put("outboundItem", outboundItemResponse);
+		return ResponseResultUtil.success(outboundInfo);
+	}
+
+	/**
+	 * @desc : 编辑方法
+	 * @author : 付斌
+	 * @date : 2023/1/9 10:49
+	 */
+	@Transactional(
+			rollbackFor = {Exception.class}
+	)
+	public ResponseResultVO<Boolean> update(OutboundVO outboundVO) {
+		// 转化实体
+		Outbound outbound = outboundConvert.convertToPo(outboundVO);
+
+		// 编辑的
+		List<OutboundItemVO> editOutboundItemVOList = outboundVO.getOutboundItemList().stream().filter(it -> it.getItemId() != null).collect(Collectors.toList());
+		for (OutboundItemVO outboundItemVO : editOutboundItemVOList) {
+			// 商品数量不能小于出库中数量
+			if(outboundItemVO.getItemQty().compareTo(outboundItemVO.getOutingQty()) == -1){
+				throw new BaseBusinessException(ResponseCodeEnum.OPERATE_FAIL.getCode(), ErrorCodeEnum.ITEMQTY_NO_LESS_OUTQTY.getMessage());
+			} else {
+				OutboundItem outboundItem = outboundItemConvert.convertToPo(outboundItemVO);
+				outboundItemService.updateByUuid(outboundItem);
+			}
+		}
+
+		return ResponseResultUtil.success(super.update(outbound, new UpdateWrapper<Outbound>().lambda().eq(Outbound::getOutId,
+				UUID.fromString(outbound.getOutId()))));
+	}
 }