入库单新建、修改、删除
parent
4e619f5a3a
commit
f24d64d601
|
|
@ -61,7 +61,7 @@ public class CustomerQueryService {
|
||||||
* 根据客户id集合查询客户信息
|
* 根据客户id集合查询客户信息
|
||||||
*
|
*
|
||||||
* @param customerIdList 客户id集合
|
* @param customerIdList 客户id集合
|
||||||
* @return Map<Long, AreaEntity>
|
* @return Map<Long, CustomerEntity>
|
||||||
*/
|
*/
|
||||||
public Map<Long, CustomerEntity> queryCustomerList(List<Long> customerIdList) {
|
public Map<Long, CustomerEntity> queryCustomerList(List<Long> customerIdList) {
|
||||||
if (CollectionUtils.isEmpty(customerIdList)) {
|
if (CollectionUtils.isEmpty(customerIdList)) {
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ package net.lab1024.sa.admin.module.business.base.item.service;
|
||||||
|
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import com.google.common.collect.Maps;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import net.lab1024.sa.admin.module.business.base.item.dao.ItemDao;
|
import net.lab1024.sa.admin.module.business.base.item.dao.ItemDao;
|
||||||
import net.lab1024.sa.admin.module.business.base.item.domain.entity.ItemEntity;
|
import net.lab1024.sa.admin.module.business.base.item.domain.entity.ItemEntity;
|
||||||
|
|
@ -9,6 +10,7 @@ import net.lab1024.sa.admin.module.business.base.item.domain.form.ItemQueryForm;
|
||||||
import net.lab1024.sa.admin.module.business.base.item.domain.form.ItemSelect;
|
import net.lab1024.sa.admin.module.business.base.item.domain.form.ItemSelect;
|
||||||
import net.lab1024.sa.admin.module.business.base.item.domain.vo.ItemVO;
|
import net.lab1024.sa.admin.module.business.base.item.domain.vo.ItemVO;
|
||||||
import net.lab1024.sa.admin.module.business.base.item.domain.vo.ItemsExcelVO;
|
import net.lab1024.sa.admin.module.business.base.item.domain.vo.ItemsExcelVO;
|
||||||
|
import net.lab1024.sa.admin.module.business.base.item.manager.ItemManager;
|
||||||
import net.lab1024.sa.base.common.domain.PageResult;
|
import net.lab1024.sa.base.common.domain.PageResult;
|
||||||
import net.lab1024.sa.base.common.util.SmartPageUtil;
|
import net.lab1024.sa.base.common.util.SmartPageUtil;
|
||||||
import net.lab1024.sa.base.module.support.dict.constant.DictConst;
|
import net.lab1024.sa.base.module.support.dict.constant.DictConst;
|
||||||
|
|
@ -23,9 +25,13 @@ import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class ItemQueryService {
|
public class ItemQueryService {
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private ItemDao itemDao;
|
private ItemDao itemDao;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private ItemManager itemManager;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private DictCacheService dictCacheService;
|
private DictCacheService dictCacheService;
|
||||||
|
|
||||||
|
|
@ -56,6 +62,27 @@ public class ItemQueryService {
|
||||||
return itemDao.selectList(queryWrapper);
|
return itemDao.selectList(queryWrapper);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据物料id集合查询物料信息
|
||||||
|
*
|
||||||
|
* @param itemIdList 客户id集合
|
||||||
|
* @return Map<Long, AreaEntity>
|
||||||
|
*/
|
||||||
|
public Map<Long, ItemEntity> queryItemList(List<Long> itemIdList) {
|
||||||
|
if (CollectionUtils.isEmpty(itemIdList)) {
|
||||||
|
return Collections.emptyMap();
|
||||||
|
}
|
||||||
|
itemIdList = itemIdList.stream().distinct().collect(Collectors.toList());
|
||||||
|
Map<Long, ItemEntity> itemMap = Maps.newHashMap();
|
||||||
|
for (Long itemId : itemIdList) {
|
||||||
|
ItemEntity item = itemManager.queryItem(itemId);
|
||||||
|
if (item != null) {
|
||||||
|
itemMap.put(itemId, item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return itemMap;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据物料编码查询
|
* 根据物料编码查询
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,76 @@
|
||||||
|
package net.lab1024.sa.admin.module.business.receive.asnDetail.controller;
|
||||||
|
|
||||||
|
import net.lab1024.sa.admin.module.business.receive.asnDetail.domain.form.AsnDetailAddForm;
|
||||||
|
import net.lab1024.sa.admin.module.business.receive.asnDetail.domain.form.AsnDetailQueryForm;
|
||||||
|
import net.lab1024.sa.admin.module.business.receive.asnDetail.domain.form.AsnDetailUpdateForm;
|
||||||
|
import net.lab1024.sa.admin.module.business.receive.asnDetail.domain.vo.AsnDetailVO;
|
||||||
|
import net.lab1024.sa.admin.module.business.receive.asnDetail.service.AsnDetailQueryService;
|
||||||
|
import net.lab1024.sa.admin.module.business.receive.asnDetail.service.AsnDetailService;
|
||||||
|
import net.lab1024.sa.base.common.domain.RequestUser;
|
||||||
|
import net.lab1024.sa.base.common.domain.ValidateList;
|
||||||
|
import net.lab1024.sa.base.common.util.SmartRequestUtil;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import net.lab1024.sa.base.common.domain.ResponseDTO;
|
||||||
|
import net.lab1024.sa.base.common.domain.PageResult;
|
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
|
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import jakarta.validation.Valid;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 入库明细 Controller
|
||||||
|
*
|
||||||
|
* @Author 霍锦
|
||||||
|
* @Date 2025-03-26 15:16:28
|
||||||
|
* @Copyright 友仓
|
||||||
|
*/
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@Tag(name = "入库明细")
|
||||||
|
public class AsnDetailController {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private AsnDetailService asnDetailService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private AsnDetailQueryService asnDetailQueryService;
|
||||||
|
|
||||||
|
@Operation(summary = "分页查询 @author 霍锦")
|
||||||
|
@PostMapping("/asnDetail/queryPage")
|
||||||
|
@SaCheckPermission("asnDetail:query")
|
||||||
|
public ResponseDTO<PageResult<AsnDetailVO>> queryPage(@RequestBody @Valid AsnDetailQueryForm queryForm) {
|
||||||
|
return ResponseDTO.ok(asnDetailQueryService.queryPage(queryForm));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Operation(summary = "添加 @author 霍锦")
|
||||||
|
@PostMapping("/asnDetail/add")
|
||||||
|
@SaCheckPermission("asnDetail:add")
|
||||||
|
public ResponseDTO<String> add(@RequestBody @Valid AsnDetailAddForm addForm) {
|
||||||
|
RequestUser requestUser = SmartRequestUtil.getRequestUser();
|
||||||
|
addForm.setCreateUserId(requestUser.getUserId());
|
||||||
|
addForm.setCreateUserName(requestUser.getUserName());
|
||||||
|
return asnDetailService.add(addForm);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Operation(summary = "更新 @author 霍锦")
|
||||||
|
@PostMapping("/asnDetail/update")
|
||||||
|
@SaCheckPermission("asnDetail:update")
|
||||||
|
public ResponseDTO<String> update(@RequestBody @Valid AsnDetailUpdateForm updateForm) {
|
||||||
|
return asnDetailService.update(updateForm);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Operation(summary = "批量删除 @author 霍锦")
|
||||||
|
@PostMapping("/asnDetail/batchDelete")
|
||||||
|
@SaCheckPermission("asnDetail:batchDelete")
|
||||||
|
public ResponseDTO<String> batchDelete(@RequestBody ValidateList<Long> idList) {
|
||||||
|
return asnDetailService.batchDelete(idList);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Operation(summary = "单个删除 @author 霍锦")
|
||||||
|
@GetMapping("/asnDetail/delete")
|
||||||
|
@SaCheckPermission("asnDetail:delete")
|
||||||
|
public ResponseDTO<String> delete(@RequestParam Long asnDetailId) {
|
||||||
|
return asnDetailService.delete(asnDetailId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,34 @@
|
||||||
|
package net.lab1024.sa.admin.module.business.receive.asnDetail.dao;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import net.lab1024.sa.admin.module.business.receive.asnDetail.domain.entity.AsnDetailEntity;
|
||||||
|
import net.lab1024.sa.admin.module.business.receive.asnDetail.domain.form.AsnDetailQueryForm;
|
||||||
|
import net.lab1024.sa.admin.module.business.receive.asnDetail.domain.vo.AsnDetailVO;
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import org.apache.ibatis.annotations.Mapper;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 入库明细 Dao
|
||||||
|
*
|
||||||
|
* @Author 霍锦
|
||||||
|
* @Date 2025-03-26 15:16:28
|
||||||
|
* @Copyright 友仓
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Mapper
|
||||||
|
@Component
|
||||||
|
public interface AsnDetailDao extends BaseMapper<AsnDetailEntity> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页 查询
|
||||||
|
*
|
||||||
|
* @param page
|
||||||
|
* @param queryForm
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
List<AsnDetailVO> queryPage(Page page, @Param("queryForm") AsnDetailQueryForm queryForm);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,72 @@
|
||||||
|
package net.lab1024.sa.admin.module.business.receive.asnDetail.domain.entity;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.FieldFill;
|
||||||
|
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 java.math.BigDecimal;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 入库明细 实体类
|
||||||
|
*
|
||||||
|
* @Author 霍锦
|
||||||
|
* @Date 2025-03-26 15:16:28
|
||||||
|
* @Copyright 友仓
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@TableName("t_asn_detail")
|
||||||
|
public class AsnDetailEntity {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 入库明细id
|
||||||
|
*/
|
||||||
|
@TableId(type = IdType.AUTO)
|
||||||
|
private Long asnDetailId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 入库单id
|
||||||
|
*/
|
||||||
|
private Long asnId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 物料id
|
||||||
|
*/
|
||||||
|
private Long itemId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 订单数量
|
||||||
|
*/
|
||||||
|
private BigDecimal orderQuantity;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 收货数量
|
||||||
|
*/
|
||||||
|
private BigDecimal receivedQuantity;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建时间
|
||||||
|
*/
|
||||||
|
@TableField(fill = FieldFill.INSERT)
|
||||||
|
private LocalDateTime createTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建人ID
|
||||||
|
*/
|
||||||
|
private Long createUserId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建人
|
||||||
|
*/
|
||||||
|
private String createUserName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新时间
|
||||||
|
*/
|
||||||
|
@TableField(fill = FieldFill.INSERT_UPDATE)
|
||||||
|
private LocalDateTime updateTime;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,40 @@
|
||||||
|
package net.lab1024.sa.admin.module.business.receive.asnDetail.domain.form;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import jakarta.validation.constraints.DecimalMin;
|
||||||
|
import jakarta.validation.constraints.NotBlank;
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 入库明细 新建表单
|
||||||
|
*
|
||||||
|
* @Author 霍锦
|
||||||
|
* @Date 2025-03-26 15:16:28
|
||||||
|
* @Copyright 友仓
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class AsnDetailAddForm {
|
||||||
|
@Schema(description = "入库单", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
@NotNull(message = "入库单 不能为空")
|
||||||
|
private Long asnId;
|
||||||
|
|
||||||
|
@Schema(description = "物料", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
@NotNull(message = "物料 不能为空")
|
||||||
|
private Long itemId;
|
||||||
|
|
||||||
|
@Schema(description = "订单数量")
|
||||||
|
@NotNull(message = "订单数量不能为空")
|
||||||
|
@DecimalMin(value = "1", message = "订单数量最低1")
|
||||||
|
private BigDecimal orderQuantity;
|
||||||
|
|
||||||
|
@Schema(hidden = true)
|
||||||
|
private Long createUserId;
|
||||||
|
|
||||||
|
@Schema(hidden = true)
|
||||||
|
private String createUserName;
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
package net.lab1024.sa.admin.module.business.receive.asnDetail.domain.form;
|
||||||
|
|
||||||
|
import net.lab1024.sa.base.common.domain.PageParam;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 入库明细 分页查询表单
|
||||||
|
*
|
||||||
|
* @Author 霍锦
|
||||||
|
* @Date 2025-03-26 15:16:28
|
||||||
|
* @Copyright 友仓
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = false)
|
||||||
|
public class AsnDetailQueryForm extends PageParam {
|
||||||
|
|
||||||
|
@Schema(description = "入库单")
|
||||||
|
private Long asnId;
|
||||||
|
|
||||||
|
@Schema(description = "物料")
|
||||||
|
private Long itemId;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
package net.lab1024.sa.admin.module.business.receive.asnDetail.domain.form;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import jakarta.validation.constraints.NotNull;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 入库明细 更新表单
|
||||||
|
*
|
||||||
|
* @Author 霍锦
|
||||||
|
* @Date 2025-03-26 15:16:28
|
||||||
|
* @Copyright 友仓
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class AsnDetailUpdateForm extends AsnDetailAddForm{
|
||||||
|
|
||||||
|
@Schema(description = "入库明细id", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
@NotNull(message = "入库明细id 不能为空")
|
||||||
|
private Long asnDetailId;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,46 @@
|
||||||
|
package net.lab1024.sa.admin.module.business.receive.asnDetail.domain.vo;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 入库明细 列表VO
|
||||||
|
*
|
||||||
|
* @Author 霍锦
|
||||||
|
* @Date 2025-03-26 15:16:28
|
||||||
|
* @Copyright 友仓
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class AsnDetailVO {
|
||||||
|
|
||||||
|
|
||||||
|
@Schema(description = "入库明细id")
|
||||||
|
private Long asnDetailId;
|
||||||
|
|
||||||
|
@Schema(description = "入库单id")
|
||||||
|
private Long asnId;
|
||||||
|
|
||||||
|
@Schema(description = "物料id")
|
||||||
|
private Long itemId;
|
||||||
|
|
||||||
|
@Schema(description = "物料编码")
|
||||||
|
private String itemCode;
|
||||||
|
|
||||||
|
@Schema(description = "物料名称")
|
||||||
|
private String itemName;
|
||||||
|
|
||||||
|
@Schema(description = "订单数量")
|
||||||
|
private BigDecimal orderQuantity;
|
||||||
|
|
||||||
|
@Schema(description = "收货数量")
|
||||||
|
private BigDecimal receivedQuantity;
|
||||||
|
|
||||||
|
@Schema(description = "创建时间")
|
||||||
|
private LocalDateTime createTime;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
package net.lab1024.sa.admin.module.business.receive.asnDetail.manager;
|
||||||
|
|
||||||
|
import net.lab1024.sa.admin.module.business.receive.asnDetail.domain.entity.AsnDetailEntity;
|
||||||
|
import net.lab1024.sa.admin.module.business.receive.asnDetail.dao.AsnDetailDao;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 入库明细 Manager
|
||||||
|
*
|
||||||
|
* @Author 霍锦
|
||||||
|
* @Date 2025-03-26 15:16:28
|
||||||
|
* @Copyright 友仓
|
||||||
|
*/
|
||||||
|
@Service
|
||||||
|
public class AsnDetailManager extends ServiceImpl<AsnDetailDao, AsnDetailEntity> {
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,66 @@
|
||||||
|
package net.lab1024.sa.admin.module.business.receive.asnDetail.service;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import net.lab1024.sa.admin.module.business.base.address.domain.entity.AddressEntity;
|
||||||
|
import net.lab1024.sa.admin.module.business.base.customer.domain.entity.CustomerEntity;
|
||||||
|
import net.lab1024.sa.admin.module.business.base.item.domain.entity.ItemEntity;
|
||||||
|
import net.lab1024.sa.admin.module.business.base.item.service.ItemQueryService;
|
||||||
|
import net.lab1024.sa.admin.module.business.receive.asn.domain.vo.AsnVO;
|
||||||
|
import net.lab1024.sa.admin.module.business.receive.asnDetail.dao.AsnDetailDao;
|
||||||
|
import net.lab1024.sa.admin.module.business.receive.asnDetail.domain.entity.AsnDetailEntity;
|
||||||
|
import net.lab1024.sa.admin.module.business.receive.asnDetail.domain.form.AsnDetailQueryForm;
|
||||||
|
import net.lab1024.sa.admin.module.business.receive.asnDetail.domain.vo.AsnDetailVO;
|
||||||
|
import net.lab1024.sa.base.common.domain.PageResult;
|
||||||
|
import net.lab1024.sa.base.common.util.SmartPageUtil;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class AsnDetailQueryService {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private AsnDetailDao asnDetailDao;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private ItemQueryService itemQueryService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分页查询
|
||||||
|
*
|
||||||
|
* @param queryForm 查询条件
|
||||||
|
* @return PageResult<AsnDetailVO>
|
||||||
|
*/
|
||||||
|
public PageResult<AsnDetailVO> queryPage(AsnDetailQueryForm queryForm) {
|
||||||
|
Page<?> page = SmartPageUtil.convert2PageQuery(queryForm);
|
||||||
|
List<AsnDetailVO> list = asnDetailDao.queryPage(page, queryForm);
|
||||||
|
// 查询物料名称
|
||||||
|
List<Long> itemIdList = list.stream().map(AsnDetailVO::getItemId).distinct().collect(Collectors.toList());
|
||||||
|
Map<Long, ItemEntity> itemMap = itemQueryService.queryItemList(itemIdList);
|
||||||
|
list.forEach(asnDetailVO -> {
|
||||||
|
ItemEntity item = itemMap.get(asnDetailVO.getItemId());
|
||||||
|
if (item != null) {
|
||||||
|
asnDetailVO.setItemCode(item.getItemCode());
|
||||||
|
asnDetailVO.setItemName(item.getItemName());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return SmartPageUtil.convert2PageResult(page, list);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据入库单id查询入库单详情
|
||||||
|
*
|
||||||
|
* @param asnId 入库单id
|
||||||
|
* @return List<AsnDetailEntity>
|
||||||
|
*/
|
||||||
|
public List<AsnDetailEntity> queryByAsnId(Long asnId) {
|
||||||
|
LambdaQueryWrapper<AsnDetailEntity> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
queryWrapper.eq(AsnDetailEntity::getAsnId, asnId);
|
||||||
|
return asnDetailDao.selectList(queryWrapper);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,157 @@
|
||||||
|
package net.lab1024.sa.admin.module.business.receive.asnDetail.service;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import net.lab1024.sa.admin.module.business.receive.asn.constant.AsnOrderStatusEnum;
|
||||||
|
import net.lab1024.sa.admin.module.business.receive.asn.dao.AsnDao;
|
||||||
|
import net.lab1024.sa.admin.module.business.receive.asn.domain.entity.AsnEntity;
|
||||||
|
import net.lab1024.sa.admin.module.business.receive.asnDetail.dao.AsnDetailDao;
|
||||||
|
import net.lab1024.sa.admin.module.business.receive.asnDetail.domain.entity.AsnDetailEntity;
|
||||||
|
import net.lab1024.sa.admin.module.business.receive.asnDetail.domain.form.AsnDetailAddForm;
|
||||||
|
import net.lab1024.sa.admin.module.business.receive.asnDetail.domain.form.AsnDetailUpdateForm;
|
||||||
|
import net.lab1024.sa.admin.module.business.receive.asnDetail.manager.AsnDetailManager;
|
||||||
|
import net.lab1024.sa.base.common.code.UserErrorCode;
|
||||||
|
import net.lab1024.sa.base.common.util.SmartBeanUtil;
|
||||||
|
import net.lab1024.sa.base.common.domain.ResponseDTO;
|
||||||
|
import net.lab1024.sa.base.common.util.SmartBigDecimalUtil;
|
||||||
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 入库明细 Service
|
||||||
|
*
|
||||||
|
* @author 霍锦
|
||||||
|
* @since 2025-03-26 15:16:28
|
||||||
|
* copyright 友仓
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class AsnDetailService {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private AsnDao asnDao;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private AsnDetailDao asnDetailDao;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private AsnDetailManager asnDetailManager;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private AsnDetailQueryService asnDetailQueryService;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加
|
||||||
|
*
|
||||||
|
* @param addForm 添加表单
|
||||||
|
* @return ResponseDTO<String>
|
||||||
|
*/
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public ResponseDTO<String> add(AsnDetailAddForm addForm) {
|
||||||
|
AsnDetailEntity asnDetailEntity = SmartBeanUtil.copy(addForm, AsnDetailEntity.class);
|
||||||
|
asnDetailDao.insert(asnDetailEntity);
|
||||||
|
//刷新出库单
|
||||||
|
refreshAsn(addForm.getAsnId());
|
||||||
|
return ResponseDTO.ok();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新
|
||||||
|
*
|
||||||
|
* @param updateForm 更新表单
|
||||||
|
* @return ResponseDTO<String>
|
||||||
|
*/
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public ResponseDTO<String> update(AsnDetailUpdateForm updateForm) {
|
||||||
|
AsnDetailEntity asnDetailEntity = SmartBeanUtil.copy(updateForm, AsnDetailEntity.class);
|
||||||
|
asnDetailDao.updateById(asnDetailEntity);
|
||||||
|
//刷新出库单
|
||||||
|
refreshAsn(updateForm.getAsnId());
|
||||||
|
return ResponseDTO.ok();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量删除
|
||||||
|
*
|
||||||
|
* @param idList id集合
|
||||||
|
* @return ResponseDTO<String>
|
||||||
|
*/
|
||||||
|
public ResponseDTO<String> batchDelete(List<Long> idList) {
|
||||||
|
if (CollectionUtils.isEmpty(idList)) {
|
||||||
|
return ResponseDTO.userErrorParam(UserErrorCode.PARAM_ERROR.getMsg());
|
||||||
|
}
|
||||||
|
Set<Long> asnIds = new HashSet<>();
|
||||||
|
for (Long id : idList) {
|
||||||
|
AsnDetailEntity asnDetail = asnDetailDao.selectById(id);
|
||||||
|
asnIds.add(asnDetail.getAsnId());
|
||||||
|
}
|
||||||
|
asnDetailManager.removeBatchByIds(idList);
|
||||||
|
|
||||||
|
//刷新出库单
|
||||||
|
if (CollectionUtils.isNotEmpty(asnIds)) {
|
||||||
|
for (Long asnId : asnIds) {
|
||||||
|
refreshAsn(asnId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ResponseDTO.ok();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 单个删除
|
||||||
|
*
|
||||||
|
* @param asnDetailId id
|
||||||
|
* @return ResponseDTO<String>
|
||||||
|
*/
|
||||||
|
public ResponseDTO<String> delete(Long asnDetailId) {
|
||||||
|
if (null == asnDetailId) {
|
||||||
|
return ResponseDTO.userErrorParam(UserErrorCode.PARAM_ERROR.getMsg());
|
||||||
|
}
|
||||||
|
AsnDetailEntity asnDetail = asnDetailDao.selectById(asnDetailId);
|
||||||
|
Long asnId = asnDetail.getAsnId();
|
||||||
|
asnDetailDao.deleteById(asnDetailId);
|
||||||
|
//刷新出库单
|
||||||
|
refreshAsn(asnId);
|
||||||
|
|
||||||
|
return ResponseDTO.ok();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void refreshAsn(Long asnId) {
|
||||||
|
//入库单
|
||||||
|
AsnEntity asn = asnDao.selectById(asnId);
|
||||||
|
|
||||||
|
//获取订单明细
|
||||||
|
List<AsnDetailEntity> asnDetails = asnDetailQueryService.queryByAsnId(asnId);
|
||||||
|
if (CollectionUtils.isEmpty(asnDetails)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//订单数量
|
||||||
|
BigDecimal orderQuantity = asnDetails.stream().map(AsnDetailEntity::getOrderQuantity).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
|
||||||
|
//收货数量
|
||||||
|
BigDecimal receivedQuantity = asnDetails.stream().map(AsnDetailEntity::getReceivedQuantity).reduce(BigDecimal.ZERO, BigDecimal::add);
|
||||||
|
|
||||||
|
//当前状态
|
||||||
|
String status = asn.getStatus();
|
||||||
|
if (orderQuantity.compareTo(BigDecimal.ZERO) >= 0 && receivedQuantity.compareTo(BigDecimal.ZERO) == 0) {
|
||||||
|
status = AsnOrderStatusEnum.CREATED.getValue();
|
||||||
|
} else if (SmartBigDecimalUtil.subtract(orderQuantity, receivedQuantity, 2).compareTo(BigDecimal.ZERO) > 0) {
|
||||||
|
status = AsnOrderStatusEnum.IN_PROGRESS.getValue();
|
||||||
|
} else if (SmartBigDecimalUtil.subtract(orderQuantity, receivedQuantity, 2).compareTo(BigDecimal.ZERO) == 0 && receivedQuantity.compareTo(BigDecimal.ZERO) > 0) {
|
||||||
|
status = AsnOrderStatusEnum.COMPLETED.getValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
asn.setOrderQuantity(orderQuantity);
|
||||||
|
asn.setReceivedQuantity(receivedQuantity);
|
||||||
|
asn.setStatus(status);
|
||||||
|
asnDao.updateById(asn);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,22 @@
|
||||||
|
# 默认是按前端工程文件的 /views/business 文件夹的路径作为前端组件路径,如果你没把生成的 .vue 前端代码放在 /views/business 下,
|
||||||
|
# 那就根据自己实际情况修改下面 SQL 的 path,component 字段值,避免执行 SQL 后菜单无法访问。
|
||||||
|
# 如果你一切都是按照默认,那么下面的 SQL 基本不用改
|
||||||
|
|
||||||
|
INSERT INTO t_menu ( menu_name, menu_type, parent_id, path, component, frame_flag, cache_flag, visible_flag, disabled_flag, perms_type, create_user_id )
|
||||||
|
VALUES ( '入库明细', 2, 0, '/asn-detail/list', '/business/asn-detail/asn-detail-list.vue', false, false, true, false, 1, 1 );
|
||||||
|
|
||||||
|
# 按菜单名称查询该菜单的 menu_id 作为按钮权限的 父菜单ID 与 功能点关联菜单ID
|
||||||
|
SET @parent_id = NULL;
|
||||||
|
SELECT t_menu.menu_id INTO @parent_id FROM t_menu WHERE t_menu.menu_name = '入库明细';
|
||||||
|
|
||||||
|
INSERT INTO t_menu ( menu_name, menu_type, parent_id, frame_flag, cache_flag, visible_flag, disabled_flag, api_perms, perms_type, context_menu_id, create_user_id )
|
||||||
|
VALUES ( '查询', 3, @parent_id, false, false, true, false, 'asnDetail:query', 1, @parent_id, 1 );
|
||||||
|
|
||||||
|
INSERT INTO t_menu ( menu_name, menu_type, parent_id, frame_flag, cache_flag, visible_flag, disabled_flag, api_perms, perms_type, context_menu_id, create_user_id )
|
||||||
|
VALUES ( '添加', 3, @parent_id, false, false, true, false, 'asnDetail:add', 1, @parent_id, 1 );
|
||||||
|
|
||||||
|
INSERT INTO t_menu ( menu_name, menu_type, parent_id, frame_flag, cache_flag, visible_flag, disabled_flag, api_perms, perms_type, context_menu_id, create_user_id )
|
||||||
|
VALUES ( '更新', 3, @parent_id, false, false, true, false, 'asnDetail:update', 1, @parent_id, 1 );
|
||||||
|
|
||||||
|
INSERT INTO t_menu ( menu_name, menu_type, parent_id, frame_flag, cache_flag, visible_flag, disabled_flag, api_perms, perms_type, context_menu_id, create_user_id )
|
||||||
|
VALUES ( '删除', 3, @parent_id, false, false, true, false, 'asnDetail:delete', 1, @parent_id, 1 );
|
||||||
|
|
@ -0,0 +1,36 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
|
<mapper namespace="net.lab1024.sa.admin.module.business.receive.asnDetail.dao.AsnDetailDao">
|
||||||
|
|
||||||
|
<!-- 查询结果列 -->
|
||||||
|
<sql id="base_columns">
|
||||||
|
t_asn_detail.asn_detail_id,
|
||||||
|
t_asn_detail.asn_id,
|
||||||
|
t_asn_detail.item_id,
|
||||||
|
t_asn_detail.order_quantity,
|
||||||
|
t_asn_detail.received_quantity,
|
||||||
|
t_asn_detail.create_time,
|
||||||
|
t_asn_detail.create_user_id,
|
||||||
|
t_asn_detail.create_user_name,
|
||||||
|
t_asn_detail.update_time
|
||||||
|
</sql>
|
||||||
|
|
||||||
|
<!-- 分页查询 -->
|
||||||
|
<select id="queryPage" resultType="net.lab1024.sa.admin.module.business.receive.asnDetail.domain.vo.AsnDetailVO">
|
||||||
|
SELECT
|
||||||
|
<include refid="base_columns"/>
|
||||||
|
FROM t_asn_detail
|
||||||
|
<where>
|
||||||
|
<!--入库单-->
|
||||||
|
<if test="queryForm.asnId != null ">
|
||||||
|
AND t_asn_detail.asn_id=#{queryForm.asnId}
|
||||||
|
</if>
|
||||||
|
<!--物料-->
|
||||||
|
<if test="queryForm.itemId != null ">
|
||||||
|
AND t_asn_detail.item_id=#{queryForm.itemId}
|
||||||
|
</if>
|
||||||
|
</where>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
|
||||||
|
</mapper>
|
||||||
Loading…
Reference in New Issue