Merge remote-tracking branch 'origin/lcj' into lcj
This commit is contained in:
@ -183,6 +183,4 @@ public class BusMaterialbatchdemandplanController extends BaseController {
|
||||
// return toAjax(busMaterialbatchdemandplanService.deleteWithValidByIds(List.of(ids), true));
|
||||
// }
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
@ -7,6 +7,7 @@ import jakarta.servlet.http.HttpServletResponse;
|
||||
import jakarta.validation.constraints.*;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import org.dromara.cailiaoshebei.domain.dto.BusMrpDto;
|
||||
import org.dromara.cailiaoshebei.domain.dto.BusMrpExportDto;
|
||||
import org.dromara.cailiaoshebei.domain.vo.BusMrpVo;
|
||||
import org.dromara.design.domain.dto.desCollect.DesCollectBatchDto;
|
||||
import org.dromara.design.domain.vo.DesCollectVo;
|
||||
@ -117,4 +118,15 @@ public class BusMrpBaseController extends BaseController {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 导入物资需求批次计划
|
||||
*/
|
||||
@SaCheckPermission("cailiaoshebei:mrpBase:add")
|
||||
@Log(title = "物资-批次需求计划基础信息", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping("/import")
|
||||
public R<Void> importData(BusMrpExportDto dto) {
|
||||
return toAjax(busMrpBaseService.importData(dto));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,11 +1,18 @@
|
||||
package org.dromara.cailiaoshebei.controller;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import jakarta.validation.constraints.*;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import org.dromara.cailiaoshebei.domain.BusPlanDocAssociation;
|
||||
import org.dromara.cailiaoshebei.domain.bo.BusMaterialbatchdemandplanBo;
|
||||
import org.dromara.cailiaoshebei.domain.vo.BusMaterialbatchdemandplanVo;
|
||||
import org.dromara.cailiaoshebei.service.IBusMaterialbatchdemandplanService;
|
||||
import org.dromara.cailiaoshebei.service.IBusPlanDocAssociationService;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.dromara.common.idempotent.annotation.RepeatSubmit;
|
||||
@ -36,6 +43,10 @@ public class BusPurchaseDocController extends BaseController {
|
||||
|
||||
private final IBusPurchaseDocService busPurchaseDocService;
|
||||
|
||||
private final IBusMaterialbatchdemandplanService materialbatchdemandplanService;
|
||||
|
||||
private final IBusPlanDocAssociationService planDocAssociationService;
|
||||
|
||||
/**
|
||||
* 查询物资-采购联系单列表
|
||||
*/
|
||||
@ -102,4 +113,22 @@ public class BusPurchaseDocController extends BaseController {
|
||||
@PathVariable Long[] ids) {
|
||||
return toAjax(busPurchaseDocService.deleteWithValidByIds(List.of(ids), true));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 查询采购单关联的计划
|
||||
*/
|
||||
@GetMapping("/planList/{id}")
|
||||
public R<List<BusMaterialbatchdemandplanVo>> list(@NotNull(message = "主键不能为空")
|
||||
@PathVariable("id") Long id) {
|
||||
List<BusPlanDocAssociation> list = planDocAssociationService.list(Wrappers.lambdaQuery(BusPlanDocAssociation.class)
|
||||
.eq(BusPlanDocAssociation::getDocId, id));
|
||||
List<Long> list1 = list.stream().map(BusPlanDocAssociation::getPlanId).toList();
|
||||
if (list1.isEmpty()) {
|
||||
return R.ok(new ArrayList<>());
|
||||
}
|
||||
BusMaterialbatchdemandplanBo bo = new BusMaterialbatchdemandplanBo();
|
||||
bo.setIds(list1);
|
||||
return R.ok(materialbatchdemandplanService.queryList(bo));
|
||||
}
|
||||
}
|
||||
|
@ -6,6 +6,7 @@ import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 物资-物流单号对象 bus_ltn
|
||||
@ -45,7 +46,7 @@ public class BusLtn extends BaseEntity {
|
||||
/**
|
||||
* 数量
|
||||
*/
|
||||
private Long num;
|
||||
private BigDecimal num;
|
||||
|
||||
/**
|
||||
* 物流单号
|
||||
|
@ -33,6 +33,11 @@ public class BusPurchaseDoc extends BaseEntity {
|
||||
*/
|
||||
private Long projectId;
|
||||
|
||||
/**
|
||||
* 1-采购单,2-补货单
|
||||
*/
|
||||
private String docType;
|
||||
|
||||
/**
|
||||
* 采购单编号
|
||||
*/
|
||||
|
@ -9,6 +9,8 @@ import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import jakarta.validation.constraints.*;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 物资-物流单号业务对象 bus_ltn
|
||||
*
|
||||
@ -46,7 +48,7 @@ public class BusLtnBo extends BaseEntity {
|
||||
/**
|
||||
* 数量
|
||||
*/
|
||||
private Long num;
|
||||
private BigDecimal num;
|
||||
|
||||
/**
|
||||
* 物流单号
|
||||
|
@ -11,6 +11,8 @@ import jakarta.validation.constraints.*;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
|
||||
/**
|
||||
@ -105,4 +107,10 @@ public class BusMaterialbatchdemandplanBo extends BaseEntity {
|
||||
* 质量标准
|
||||
*/
|
||||
private String qs;
|
||||
|
||||
|
||||
/**
|
||||
* 主键集合
|
||||
*/
|
||||
private List<Long> ids;
|
||||
}
|
||||
|
@ -10,6 +10,8 @@ import org.dromara.common.core.validate.AddGroup;
|
||||
import org.dromara.common.core.validate.EditGroup;
|
||||
import org.dromara.common.mybatis.core.domain.BaseEntity;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 物资-物流单号业务对象 bus_ltn
|
||||
*
|
||||
@ -28,7 +30,7 @@ public class BusLtnListDto{
|
||||
/**
|
||||
* 数量
|
||||
*/
|
||||
private Long num;
|
||||
private BigDecimal num;
|
||||
|
||||
/**
|
||||
* 物流单号
|
||||
|
@ -0,0 +1,60 @@
|
||||
package org.dromara.cailiaoshebei.domain.dto;
|
||||
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.dromara.cailiaoshebei.domain.BusMaterialbatchdemandplan;
|
||||
import org.dromara.common.core.validate.EditGroup;
|
||||
import org.dromara.common.mybatis.core.domain.BaseEntity;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 物资-批次需求计划业务对象 bus_materialbatchdemandplan
|
||||
*
|
||||
* @author Lion Li
|
||||
* @date 2025-08-02
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@AutoMapper(target = BusMaterialbatchdemandplan.class, reverseConvertGenerate = false)
|
||||
public class BusMaterialbatchdemandplanExportDto extends BaseEntity {
|
||||
|
||||
/**
|
||||
* 设备材料名称
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 规格型号
|
||||
*/
|
||||
private String specification;
|
||||
|
||||
/**
|
||||
* 计量单位
|
||||
*/
|
||||
private String unit;
|
||||
|
||||
/**
|
||||
* 需求数量
|
||||
*/
|
||||
private Long demandQuantity;
|
||||
|
||||
/**
|
||||
* 质量标准
|
||||
*/
|
||||
private String qs;
|
||||
|
||||
/**
|
||||
* 计划到场时间
|
||||
*/
|
||||
private LocalDate arrivalTime;
|
||||
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
}
|
@ -0,0 +1,43 @@
|
||||
package org.dromara.cailiaoshebei.domain.dto;
|
||||
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
import org.dromara.cailiaoshebei.domain.bo.BusMaterialbatchdemandplanBo;
|
||||
import org.dromara.cailiaoshebei.domain.bo.BusMrpBaseBo;
|
||||
import org.dromara.common.core.validate.AddGroup;
|
||||
import org.dromara.common.core.validate.EditGroup;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class BusMrpExportDto {
|
||||
|
||||
/**
|
||||
* 项目ID
|
||||
*/
|
||||
@NotNull(message = "项目ID不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Long projectId;
|
||||
|
||||
/**
|
||||
* 计划编号
|
||||
*/
|
||||
@NotBlank(message = "计划编号不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String planCode;
|
||||
|
||||
/**
|
||||
* 物资类别
|
||||
*/
|
||||
private String matCat;
|
||||
|
||||
/**
|
||||
* 编制日期
|
||||
*/
|
||||
private LocalDate preparedDate;
|
||||
|
||||
|
||||
|
||||
private MultipartFile file;
|
||||
}
|
@ -10,6 +10,7 @@ import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
|
||||
@ -52,11 +53,16 @@ public class BusLtnVo implements Serializable {
|
||||
@ExcelProperty(value = "计划id")
|
||||
private Long planId;
|
||||
|
||||
/**
|
||||
* 物资名称
|
||||
*/
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 数量
|
||||
*/
|
||||
@ExcelProperty(value = "数量")
|
||||
private Long num;
|
||||
private BigDecimal num;
|
||||
|
||||
/**
|
||||
* 物流单号
|
||||
|
@ -154,6 +154,16 @@ public class BusPurchaseDocVo implements Serializable {
|
||||
*/
|
||||
private Long mrpBaseId;
|
||||
|
||||
/**
|
||||
* 计划编号
|
||||
*/
|
||||
private String planCode;
|
||||
|
||||
/**
|
||||
* 1-采购单,2-补货单
|
||||
*/
|
||||
private String docType;
|
||||
|
||||
/**
|
||||
* 关联计划
|
||||
*/
|
||||
|
@ -1,6 +1,7 @@
|
||||
package org.dromara.cailiaoshebei.service;
|
||||
|
||||
import org.dromara.cailiaoshebei.domain.dto.BusMrpDto;
|
||||
import org.dromara.cailiaoshebei.domain.dto.BusMrpExportDto;
|
||||
import org.dromara.cailiaoshebei.domain.vo.BusMrpBaseVo;
|
||||
import org.dromara.cailiaoshebei.domain.bo.BusMrpBaseBo;
|
||||
import org.dromara.cailiaoshebei.domain.BusMrpBase;
|
||||
@ -76,4 +77,9 @@ public interface IBusMrpBaseService extends IService<BusMrpBase>{
|
||||
* 批量新增或修改物资-批次需求计划
|
||||
*/
|
||||
Boolean batchAddOrUpdate(BusMrpDto dto);
|
||||
|
||||
/**
|
||||
* 导入物资需求批次计划
|
||||
*/
|
||||
Boolean importData(BusMrpExportDto dto);
|
||||
}
|
||||
|
@ -7,7 +7,10 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@ -67,4 +70,9 @@ public interface IBusPurchaseDocService extends IService<BusPurchaseDoc>{
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
|
||||
/**
|
||||
* 创建补货采购单
|
||||
*/
|
||||
void create(Long id, HashMap<Long, BigDecimal> map);
|
||||
}
|
||||
|
@ -1,8 +1,13 @@
|
||||
package org.dromara.cailiaoshebei.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.dromara.cailiaoshebei.domain.dto.BusLtnDto;
|
||||
import org.dromara.cailiaoshebei.domain.dto.BusLtnListDto;
|
||||
import org.dromara.cailiaoshebei.domain.vo.BusPurchaseDocVo;
|
||||
import org.dromara.cailiaoshebei.service.IBusMaterialbatchdemandplanService;
|
||||
import org.dromara.cailiaoshebei.service.IBusPurchaseDocService;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.common.core.utils.MapstructUtils;
|
||||
@ -13,6 +18,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.dromara.cailiaoshebei.domain.bo.BusLtnBo;
|
||||
import org.dromara.cailiaoshebei.domain.vo.BusLtnVo;
|
||||
@ -20,6 +26,7 @@ import org.dromara.cailiaoshebei.domain.BusLtn;
|
||||
import org.dromara.cailiaoshebei.mapper.BusLtnMapper;
|
||||
import org.dromara.cailiaoshebei.service.IBusLtnService;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Collection;
|
||||
@ -38,6 +45,12 @@ public class BusLtnServiceImpl extends ServiceImpl<BusLtnMapper, BusLtn> impleme
|
||||
|
||||
private final IBusPurchaseDocService purchaseDocService;
|
||||
|
||||
private final IBusMaterialbatchdemandplanService planService;
|
||||
|
||||
@Resource
|
||||
@Lazy
|
||||
private IBusLtnService busLtnService;
|
||||
|
||||
/**
|
||||
* 查询物资-物流单号
|
||||
*
|
||||
@ -60,6 +73,9 @@ public class BusLtnServiceImpl extends ServiceImpl<BusLtnMapper, BusLtn> impleme
|
||||
public TableDataInfo<BusLtnVo> queryPageList(BusLtnBo bo, PageQuery pageQuery) {
|
||||
LambdaQueryWrapper<BusLtn> lqw = buildQueryWrapper(bo);
|
||||
Page<BusLtnVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
result.getRecords().forEach(e -> {
|
||||
e.setName(planService.queryById(e.getPlanId()).getName());
|
||||
});
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
@ -146,10 +162,19 @@ public class BusLtnServiceImpl extends ServiceImpl<BusLtnMapper, BusLtn> impleme
|
||||
if (busPurchaseDocVo == null) {
|
||||
throw new ServiceException("采购单不存在");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
return null;
|
||||
busLtnService.getBaseMapper().delete(Wrappers.lambdaQuery(BusLtn.class)
|
||||
.eq(BusLtn::getDocId, dto.getDocId()));
|
||||
ArrayList<BusLtn> busLtns = new ArrayList<>();
|
||||
for (BusLtnListDto ltnListDto : dto.getList()) {
|
||||
BusLtn busLtn = BeanUtil.copyProperties(ltnListDto, BusLtn.class);
|
||||
busLtn.setProjectId(busPurchaseDocVo.getProjectId());
|
||||
busLtn.setDocId(dto.getDocId());
|
||||
busLtns.add(busLtn);
|
||||
}
|
||||
boolean save = true;
|
||||
if(CollectionUtil.isNotEmpty(busLtns)){
|
||||
save = busLtnService.saveBatch(busLtns);
|
||||
}
|
||||
return save;
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package org.dromara.cailiaoshebei.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import jakarta.annotation.Resource;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@ -113,6 +114,7 @@ public class BusMaterialbatchdemandplanServiceImpl extends ServiceImpl<BusMateri
|
||||
lqw.eq(bo.getDemandQuantity() != null, BusMaterialbatchdemandplan::getDemandQuantity, bo.getDemandQuantity());
|
||||
lqw.eq(bo.getArrivalTime() != null, BusMaterialbatchdemandplan::getArrivalTime, bo.getArrivalTime());
|
||||
lqw.eq(bo.getMrpBaseId()!=null, BusMaterialbatchdemandplan::getMrpBaseId, bo.getMrpBaseId());
|
||||
lqw.in(CollectionUtil.isNotEmpty(bo.getIds()), BusMaterialbatchdemandplan::getId, bo.getIds());
|
||||
return lqw;
|
||||
}
|
||||
|
||||
|
@ -1,12 +1,15 @@
|
||||
package org.dromara.cailiaoshebei.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.cailiaoshebei.domain.BusMaterialbatchdemandplan;
|
||||
import org.dromara.cailiaoshebei.domain.bo.BusMaterialbatchdemandplanBo;
|
||||
import org.dromara.cailiaoshebei.domain.dto.BusMaterialbatchdemandplanExportDto;
|
||||
import org.dromara.cailiaoshebei.domain.dto.BusMrpDto;
|
||||
import org.dromara.cailiaoshebei.domain.dto.BusMrpExportDto;
|
||||
import org.dromara.cailiaoshebei.domain.vo.BusMaterialbatchdemandplanVo;
|
||||
import org.dromara.cailiaoshebei.domain.vo.BusMrpVo;
|
||||
import org.dromara.cailiaoshebei.service.IBusMaterialbatchdemandplanService;
|
||||
@ -22,6 +25,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.common.utils.excel.ExcelDynamicReader;
|
||||
import org.dromara.design.domain.DesCollect;
|
||||
import org.springframework.context.event.EventListener;
|
||||
import org.springframework.stereotype.Service;
|
||||
@ -32,6 +36,7 @@ import org.dromara.cailiaoshebei.mapper.BusMrpBaseMapper;
|
||||
import org.dromara.cailiaoshebei.service.IBusMrpBaseService;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Collection;
|
||||
@ -58,13 +63,13 @@ public class BusMrpBaseServiceImpl extends ServiceImpl<BusMrpBaseMapper, BusMrpB
|
||||
* @return 物资-批次需求计划基础信息
|
||||
*/
|
||||
@Override
|
||||
public BusMrpVo queryById(Long id){
|
||||
public BusMrpVo queryById(Long id) {
|
||||
BusMrpVo busMrpVo = new BusMrpVo();
|
||||
|
||||
BusMrpBaseVo busMrpBaseVo = baseMapper.selectVoById(id);
|
||||
BusMaterialbatchdemandplanBo planBo = new BusMaterialbatchdemandplanBo();
|
||||
BusMaterialbatchdemandplanBo planBo = new BusMaterialbatchdemandplanBo();
|
||||
planBo.setMrpBaseId(id);
|
||||
List<BusMaterialbatchdemandplanVo> voList = planservice.queryList(planBo);
|
||||
List<BusMaterialbatchdemandplanVo> voList = planservice.queryList(planBo);
|
||||
busMrpVo.setMrpBaseBo(busMrpBaseVo);
|
||||
busMrpVo.setPlanList(voList);
|
||||
|
||||
@ -142,7 +147,7 @@ public class BusMrpBaseServiceImpl extends ServiceImpl<BusMrpBaseMapper, BusMrpB
|
||||
/**
|
||||
* 保存前的数据校验
|
||||
*/
|
||||
private void validEntityBeforeSave(BusMrpBase entity){
|
||||
private void validEntityBeforeSave(BusMrpBase entity) {
|
||||
//TODO 做一些数据校验,如唯一约束
|
||||
}
|
||||
|
||||
@ -156,11 +161,11 @@ public class BusMrpBaseServiceImpl extends ServiceImpl<BusMrpBaseMapper, BusMrpB
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||
if(isValid){
|
||||
if (isValid) {
|
||||
//TODO 做一些业务上的校验,判断是否需要校验
|
||||
}
|
||||
planservice.remove(Wrappers.<BusMaterialbatchdemandplan>lambdaQuery()
|
||||
.in(BusMaterialbatchdemandplan::getMrpBaseId,ids));
|
||||
.in(BusMaterialbatchdemandplan::getMrpBaseId, ids));
|
||||
|
||||
return baseMapper.deleteByIds(ids) > 0;
|
||||
}
|
||||
@ -173,10 +178,10 @@ public class BusMrpBaseServiceImpl extends ServiceImpl<BusMrpBaseMapper, BusMrpB
|
||||
boolean b = saveOrUpdate(convert);
|
||||
|
||||
planservice.remove(Wrappers.<BusMaterialbatchdemandplan>lambdaQuery()
|
||||
.eq(BusMaterialbatchdemandplan::getMrpBaseId,convert.getId()));
|
||||
.eq(BusMaterialbatchdemandplan::getMrpBaseId, convert.getId()));
|
||||
|
||||
if(CollectionUtil.isNotEmpty(dto.getPlanList())){
|
||||
List<BusMaterialbatchdemandplan> plans = MapstructUtils.convert(dto.getPlanList(), BusMaterialbatchdemandplan.class);
|
||||
if (CollectionUtil.isNotEmpty(dto.getPlanList())) {
|
||||
List<BusMaterialbatchdemandplan> plans = MapstructUtils.convert(dto.getPlanList(), BusMaterialbatchdemandplan.class);
|
||||
plans.forEach(item -> {
|
||||
item.setMrpBaseId(convert.getId());
|
||||
item.setProjectId(convert.getProjectId());
|
||||
@ -186,6 +191,31 @@ public class BusMrpBaseServiceImpl extends ServiceImpl<BusMrpBaseMapper, BusMrpB
|
||||
return b;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean importData(BusMrpExportDto dto) {
|
||||
|
||||
try {
|
||||
List<BusMaterialbatchdemandplanExportDto> dtoList = ExcelDynamicReader.readExcel(dto.getFile(), 1, 1, 7, BusMaterialbatchdemandplanExportDto.class);
|
||||
BusMrpBase busMrpBase = BeanUtil.copyProperties(dto, BusMrpBase.class);
|
||||
save(busMrpBase);
|
||||
|
||||
ArrayList<BusMaterialbatchdemandplan> busMaterialbatchdemandplans = new ArrayList<>();
|
||||
|
||||
for (BusMaterialbatchdemandplanExportDto plan : dtoList) {
|
||||
BusMaterialbatchdemandplan plan1 = BeanUtil.copyProperties(plan, BusMaterialbatchdemandplan.class);
|
||||
plan1.setMrpBaseId(busMrpBase.getId());
|
||||
plan1.setProjectId(busMrpBase.getProjectId());
|
||||
|
||||
busMaterialbatchdemandplans.add(plan1);
|
||||
}
|
||||
planservice.saveBatch(busMaterialbatchdemandplans);
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 总体流程监听(例如: 草稿,撤销,退回,作废,终止,已完成,单任务完成等)
|
||||
* 正常使用只需#processEvent.flowCode=='leave1'
|
||||
@ -232,24 +262,5 @@ public class BusMrpBaseServiceImpl extends ServiceImpl<BusMrpBaseMapper, BusMrpB
|
||||
log.info("监听删除流程事件,收资清单审核任务执行了{}", processDeleteEvent.toString());
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
@ -1,11 +1,22 @@
|
||||
package org.dromara.cailiaoshebei.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.cailiaoshebei.domain.BusMaterialbatchdemandplan;
|
||||
import org.dromara.cailiaoshebei.domain.BusMrpBase;
|
||||
import org.dromara.cailiaoshebei.domain.BusPlanDocAssociation;
|
||||
import org.dromara.cailiaoshebei.domain.bo.BusPlanDocAssociationBo;
|
||||
import org.dromara.cailiaoshebei.domain.vo.BusPlanDocAssociationVo;
|
||||
import org.dromara.cailiaoshebei.service.IBusMaterialbatchdemandplanService;
|
||||
import org.dromara.cailiaoshebei.service.IBusMrpBaseService;
|
||||
import org.dromara.cailiaoshebei.service.IBusPlanDocAssociationService;
|
||||
import org.dromara.common.core.domain.event.ProcessDeleteEvent;
|
||||
import org.dromara.common.core.domain.event.ProcessEvent;
|
||||
import org.dromara.common.core.domain.event.ProcessTaskEvent;
|
||||
import org.dromara.common.core.enums.BusinessStatusEnum;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.common.core.utils.MapstructUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
@ -14,6 +25,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.context.event.EventListener;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.dromara.cailiaoshebei.domain.bo.BusPurchaseDocBo;
|
||||
import org.dromara.cailiaoshebei.domain.vo.BusPurchaseDocVo;
|
||||
@ -22,9 +35,11 @@ import org.dromara.cailiaoshebei.mapper.BusPurchaseDocMapper;
|
||||
import org.dromara.cailiaoshebei.service.IBusPurchaseDocService;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Collection;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* 物资-采购联系单Service业务层处理
|
||||
@ -34,12 +49,18 @@ import java.util.Collection;
|
||||
*/
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
@Slf4j
|
||||
public class BusPurchaseDocServiceImpl extends ServiceImpl<BusPurchaseDocMapper, BusPurchaseDoc> implements IBusPurchaseDocService {
|
||||
|
||||
private final BusPurchaseDocMapper baseMapper;
|
||||
|
||||
private final IBusPlanDocAssociationService planDocAssociationService;
|
||||
|
||||
private final IBusMaterialbatchdemandplanService materialbatchdemandplanService;
|
||||
|
||||
private final IBusMrpBaseService mrpBaseService;
|
||||
|
||||
|
||||
/**
|
||||
* 查询物资-采购联系单
|
||||
*
|
||||
@ -47,7 +68,7 @@ public class BusPurchaseDocServiceImpl extends ServiceImpl<BusPurchaseDocMapper,
|
||||
* @return 物资-采购联系单
|
||||
*/
|
||||
@Override
|
||||
public BusPurchaseDocVo queryById(Long id){
|
||||
public BusPurchaseDocVo queryById(Long id) {
|
||||
BusPurchaseDocVo busPurchaseDocVo = baseMapper.selectVoById(id);
|
||||
BusPlanDocAssociationBo busPlanDocAssociationBo = new BusPlanDocAssociationBo();
|
||||
busPlanDocAssociationBo.setDocId(id);
|
||||
@ -67,6 +88,9 @@ public class BusPurchaseDocServiceImpl extends ServiceImpl<BusPurchaseDocMapper,
|
||||
public TableDataInfo<BusPurchaseDocVo> queryPageList(BusPurchaseDocBo bo, PageQuery pageQuery) {
|
||||
LambdaQueryWrapper<BusPurchaseDoc> lqw = buildQueryWrapper(bo);
|
||||
Page<BusPurchaseDocVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
result.getRecords().forEach(v -> {
|
||||
v.setPlanCode(mrpBaseService.getById(v.getMrpBaseId()).getPlanCode());
|
||||
});
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
@ -116,6 +140,11 @@ public class BusPurchaseDocServiceImpl extends ServiceImpl<BusPurchaseDocMapper,
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean insertByBo(BusPurchaseDocBo bo) {
|
||||
|
||||
if (CollectionUtil.isEmpty(bo.getAssociationList())) {
|
||||
throw new ServiceException("请与计划关联");
|
||||
}
|
||||
|
||||
BusPurchaseDoc add = MapstructUtils.convert(bo, BusPurchaseDoc.class);
|
||||
validEntityBeforeSave(add);
|
||||
boolean flag = baseMapper.insert(add) > 0;
|
||||
@ -123,14 +152,13 @@ public class BusPurchaseDocServiceImpl extends ServiceImpl<BusPurchaseDocMapper,
|
||||
bo.setId(add.getId());
|
||||
}
|
||||
//存入联系表
|
||||
if(CollectionUtil.isNotEmpty(bo.getAssociationList())){
|
||||
List<BusPlanDocAssociation> convert = MapstructUtils.convert(bo.getAssociationList(), BusPlanDocAssociation.class);
|
||||
convert.forEach(item -> {
|
||||
item.setProjectId(add.getProjectId());
|
||||
item.setDocId(add.getId());
|
||||
});
|
||||
planDocAssociationService.saveBatch(convert);
|
||||
}
|
||||
List<BusPlanDocAssociation> convert = MapstructUtils.convert(bo.getAssociationList(), BusPlanDocAssociation.class);
|
||||
convert.forEach(item -> {
|
||||
item.setProjectId(add.getProjectId());
|
||||
item.setDocId(add.getId());
|
||||
});
|
||||
planDocAssociationService.saveBatch(convert);
|
||||
|
||||
return flag;
|
||||
}
|
||||
|
||||
@ -149,7 +177,7 @@ public class BusPurchaseDocServiceImpl extends ServiceImpl<BusPurchaseDocMapper,
|
||||
.eq(BusPlanDocAssociation::getProjectId, update.getProjectId())
|
||||
.eq(BusPlanDocAssociation::getDocId, update.getId()));
|
||||
|
||||
if(CollectionUtil.isNotEmpty(bo.getAssociationList())){
|
||||
if (CollectionUtil.isNotEmpty(bo.getAssociationList())) {
|
||||
List<BusPlanDocAssociation> convert = MapstructUtils.convert(bo.getAssociationList(), BusPlanDocAssociation.class);
|
||||
convert.forEach(item -> {
|
||||
item.setProjectId(update.getProjectId());
|
||||
@ -163,7 +191,7 @@ public class BusPurchaseDocServiceImpl extends ServiceImpl<BusPurchaseDocMapper,
|
||||
/**
|
||||
* 保存前的数据校验
|
||||
*/
|
||||
private void validEntityBeforeSave(BusPurchaseDoc entity){
|
||||
private void validEntityBeforeSave(BusPurchaseDoc entity) {
|
||||
//TODO 做一些数据校验,如唯一约束
|
||||
}
|
||||
|
||||
@ -176,9 +204,92 @@ public class BusPurchaseDocServiceImpl extends ServiceImpl<BusPurchaseDocMapper,
|
||||
*/
|
||||
@Override
|
||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||
if(isValid){
|
||||
if (isValid) {
|
||||
//TODO 做一些业务上的校验,判断是否需要校验
|
||||
}
|
||||
return baseMapper.deleteByIds(ids) > 0;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
@Async
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void create(Long id, HashMap<Long, BigDecimal> map) {
|
||||
BusPurchaseDoc busPurchaseDoc = baseMapper.selectById(id);
|
||||
if (busPurchaseDoc == null) {
|
||||
return;
|
||||
}
|
||||
if (CollectionUtil.isEmpty(map.keySet())) {
|
||||
return;
|
||||
}
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss"); // 年月日时分秒格式
|
||||
String dateTimeStr = now.format(formatter);
|
||||
busPurchaseDoc.setId(null);
|
||||
busPurchaseDoc.setDocCode("BH-" + busPurchaseDoc.getDocCode() + "-" + dateTimeStr);
|
||||
busPurchaseDoc.setFeedbackUrl(null);
|
||||
busPurchaseDoc.setStatus(BusinessStatusEnum.DRAFT.getStatus());
|
||||
busPurchaseDoc.setDocType("2");
|
||||
save(busPurchaseDoc);
|
||||
|
||||
//创建计划
|
||||
ArrayList<BusPlanDocAssociation> busPlanDocAssociations = new ArrayList<>();
|
||||
for (Long planId : map.keySet()) {
|
||||
BusPlanDocAssociation busPlanDocAssociation = new BusPlanDocAssociation();
|
||||
busPlanDocAssociation.setProjectId(busPurchaseDoc.getProjectId());
|
||||
busPlanDocAssociation.setPlanId(planId);
|
||||
busPlanDocAssociation.setDocId(busPurchaseDoc.getId());
|
||||
|
||||
busPlanDocAssociations.add(busPlanDocAssociation);
|
||||
}
|
||||
planDocAssociationService.saveBatch(busPlanDocAssociations);
|
||||
}
|
||||
|
||||
/**
|
||||
* 总体流程监听(例如: 草稿,撤销,退回,作废,终止,已完成,单任务完成等)
|
||||
* 正常使用只需#processEvent.flowCode=='leave1'
|
||||
* 示例为了方便则使用startsWith匹配了全部示例key
|
||||
*
|
||||
* @param processEvent 参数
|
||||
*/
|
||||
@EventListener(condition = "#processEvent.flowCode.endsWith('purchaseDoc')")
|
||||
public void processHandler(ProcessEvent processEvent) {
|
||||
log.info("收资清单审核任务执行了{}", processEvent.toString());
|
||||
BusPurchaseDoc purchaseDoc = this.getById(Convert.toLong(processEvent.getBusinessId()));
|
||||
purchaseDoc.setStatus(processEvent.getStatus());
|
||||
if (processEvent.getSubmit()) {
|
||||
purchaseDoc.setStatus(BusinessStatusEnum.WAITING.getStatus());
|
||||
purchaseDoc.setPreparedDate(LocalDate.now());
|
||||
}
|
||||
this.updateById(purchaseDoc);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 执行任务创建监听
|
||||
* 示例:也可通过 @EventListener(condition = "#processTaskEvent.flowCode=='leave1'")进行判断
|
||||
* 在方法中判断流程节点key
|
||||
* if ("xxx".equals(processTaskEvent.getNodeCode())) {
|
||||
* //执行业务逻辑
|
||||
* }
|
||||
*
|
||||
* @param processTaskEvent 参数
|
||||
*/
|
||||
@EventListener(condition = "#processTaskEvent.flowCode.endsWith('purchaseDoc')")
|
||||
public void processTaskHandler(ProcessTaskEvent processTaskEvent) {
|
||||
log.info("收资清单审核任务创建了{}", processTaskEvent.toString());
|
||||
}
|
||||
|
||||
/**
|
||||
* 监听删除流程事件
|
||||
* 正常使用只需#processDeleteEvent.flowCode=='leave1'
|
||||
* 示例为了方便则使用startsWith匹配了全部示例key
|
||||
*
|
||||
* @param processDeleteEvent 参数
|
||||
*/
|
||||
@EventListener(condition = "#processDeleteEvent.flowCode.endsWith('purchaseDoc')")
|
||||
public void processDeleteHandler(ProcessDeleteEvent processDeleteEvent) {
|
||||
log.info("监听删除流程事件,收资清单审核任务执行了{}", processDeleteEvent.toString());
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -66,4 +66,5 @@ public class DesVolumeFileController extends BaseController {
|
||||
@PathVariable Long[] ids) {
|
||||
return toAjax(desVolumeFileService.deleteByIds(List.of(ids)));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,106 @@
|
||||
package org.dromara.design.controller;
|
||||
import java.util.List;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import jakarta.validation.constraints.*;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import org.dromara.design.domain.vo.volumefileviewer.DesVolumeFileViewerVo;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.dromara.common.idempotent.annotation.RepeatSubmit;
|
||||
import org.dromara.common.log.annotation.Log;
|
||||
import org.dromara.common.web.core.BaseController;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.core.validate.AddGroup;
|
||||
import org.dromara.common.core.validate.EditGroup;
|
||||
import org.dromara.common.log.enums.BusinessType;
|
||||
import org.dromara.common.excel.utils.ExcelUtil;
|
||||
import org.dromara.design.domain.bo.DesVolumeFileViewerBo;
|
||||
import org.dromara.design.service.IDesVolumeFileViewerService;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
|
||||
/**
|
||||
* 卷册文件查阅人
|
||||
*
|
||||
* @author lilemy
|
||||
* @date 2025-08-14
|
||||
*/
|
||||
@Validated
|
||||
@RequiredArgsConstructor
|
||||
@RestController
|
||||
@RequestMapping("/design/volumeFileViewer")
|
||||
public class DesVolumeFileViewerController extends BaseController {
|
||||
|
||||
private final IDesVolumeFileViewerService desVolumeFileViewerService;
|
||||
|
||||
/**
|
||||
* 查询卷册文件查阅人列表
|
||||
*/
|
||||
@SaCheckPermission("design:volumeFileViewer:list")
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<DesVolumeFileViewerVo> list(DesVolumeFileViewerBo bo, PageQuery pageQuery) {
|
||||
return desVolumeFileViewerService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出卷册文件查阅人列表
|
||||
*/
|
||||
@SaCheckPermission("design:volumeFileViewer:export")
|
||||
@Log(title = "卷册文件查阅人", businessType = BusinessType.EXPORT)
|
||||
@PostMapping("/export")
|
||||
public void export(DesVolumeFileViewerBo bo, HttpServletResponse response) {
|
||||
List<DesVolumeFileViewerVo> list = desVolumeFileViewerService.queryList(bo);
|
||||
ExcelUtil.exportExcel(list, "卷册文件查阅人", DesVolumeFileViewerVo.class, response);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取卷册文件查阅人详细信息
|
||||
*
|
||||
* @param id 主键
|
||||
*/
|
||||
@SaCheckPermission("design:volumeFileViewer:query")
|
||||
@GetMapping("/{id}")
|
||||
public R<DesVolumeFileViewerVo> getInfo(@NotNull(message = "主键不能为空")
|
||||
@PathVariable Long id) {
|
||||
return R.ok(desVolumeFileViewerService.queryById(id));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增卷册文件查阅人
|
||||
*/
|
||||
@SaCheckPermission("design:volumeFileViewer:add")
|
||||
@Log(title = "卷册文件查阅人", businessType = BusinessType.INSERT)
|
||||
@RepeatSubmit()
|
||||
@PostMapping()
|
||||
public R<Void> add(@Validated(AddGroup.class) @RequestBody DesVolumeFileViewerBo bo) {
|
||||
return toAjax(desVolumeFileViewerService.insertByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改卷册文件查阅人
|
||||
*/
|
||||
@SaCheckPermission("design:volumeFileViewer:edit")
|
||||
@Log(title = "卷册文件查阅人", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PutMapping()
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody DesVolumeFileViewerBo bo) {
|
||||
return toAjax(desVolumeFileViewerService.updateByBo(bo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除卷册文件查阅人
|
||||
*
|
||||
* @param ids 主键串
|
||||
*/
|
||||
@SaCheckPermission("design:volumeFileViewer:remove")
|
||||
@Log(title = "卷册文件查阅人", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/{ids}")
|
||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||
@PathVariable Long[] ids) {
|
||||
return toAjax(desVolumeFileViewerService.deleteWithValidByIds(List.of(ids), true));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6,6 +6,7 @@ import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* 卷册文件查阅人对象 des_volume_file_viewer
|
||||
@ -31,6 +32,11 @@ public class DesVolumeFileViewer implements Serializable {
|
||||
*/
|
||||
private Long volumeCatalogId;
|
||||
|
||||
/**
|
||||
* 卷册文件ID
|
||||
*/
|
||||
private Long volumeFileId;
|
||||
|
||||
/**
|
||||
* 用户ID
|
||||
*/
|
||||
@ -41,4 +47,10 @@ public class DesVolumeFileViewer implements Serializable {
|
||||
*/
|
||||
private String status;
|
||||
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private LocalDateTime createTime;
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,43 @@
|
||||
package org.dromara.design.domain.bo;
|
||||
|
||||
|
||||
import org.dromara.design.domain.DesVolumeFileViewer;
|
||||
import org.dromara.common.mybatis.core.domain.BaseEntity;
|
||||
import org.dromara.common.core.validate.AddGroup;
|
||||
import org.dromara.common.core.validate.EditGroup;
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import jakarta.validation.constraints.*;
|
||||
|
||||
/**
|
||||
* 卷册文件查阅人业务对象 des_volume_file_viewer
|
||||
*
|
||||
* @author lilemy
|
||||
* @date 2025-08-14
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@AutoMapper(target = DesVolumeFileViewer.class, reverseConvertGenerate = false)
|
||||
public class DesVolumeFileViewerBo extends BaseEntity {
|
||||
|
||||
/**
|
||||
* 主键ID
|
||||
*/
|
||||
@NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 卷册文件ID
|
||||
*/
|
||||
@NotNull(message = "卷册文件ID不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Long volumeFileId;
|
||||
|
||||
|
||||
private Long userId;
|
||||
|
||||
|
||||
private String status;
|
||||
|
||||
|
||||
}
|
@ -1,15 +1,22 @@
|
||||
package org.dromara.design.domain.vo.volumefileviewer;
|
||||
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import lombok.Data;
|
||||
import org.dromara.common.translation.annotation.Translation;
|
||||
import org.dromara.common.translation.constant.TransConstant;
|
||||
import org.dromara.design.domain.DesPrelimScheme;
|
||||
import org.dromara.design.domain.DesVolumeFileViewer;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* @author lilemy
|
||||
* @date 2025-07-30 19:52
|
||||
*/
|
||||
@Data
|
||||
@AutoMapper(target = DesVolumeFileViewer.class)
|
||||
public class DesVolumeFileViewerVo implements Serializable {
|
||||
|
||||
@Serial
|
||||
@ -30,8 +37,20 @@ public class DesVolumeFileViewerVo implements Serializable {
|
||||
*/
|
||||
private Long userId;
|
||||
|
||||
/**
|
||||
* 用户ID
|
||||
*/
|
||||
@Translation(type = TransConstant.USER_ID_TO_NAME, mapper = "userId")
|
||||
private String userName;
|
||||
|
||||
|
||||
/**
|
||||
* 状态(1未查阅 2已查阅)
|
||||
*/
|
||||
private String status;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private LocalDateTime createTime;
|
||||
}
|
||||
|
@ -1,14 +1,73 @@
|
||||
package org.dromara.design.service;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
|
||||
import org.dromara.design.domain.DesVolumeFileViewer;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.dromara.design.domain.bo.DesVolumeFileViewerBo;
|
||||
import org.dromara.design.domain.vo.volumefileviewer.DesVolumeFileViewerVo;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 卷册文件查阅人Service接口
|
||||
*
|
||||
* @author lilemy
|
||||
* @date 2025-07-30
|
||||
* @date 2025-08-14
|
||||
*/
|
||||
public interface IDesVolumeFileViewerService extends IService<DesVolumeFileViewer> {
|
||||
public interface IDesVolumeFileViewerService extends IService<DesVolumeFileViewer>{
|
||||
|
||||
/**
|
||||
* 查询卷册文件查阅人
|
||||
*
|
||||
* @param id 主键
|
||||
* @return 卷册文件查阅人
|
||||
*/
|
||||
DesVolumeFileViewerVo queryById(Long id);
|
||||
|
||||
/**
|
||||
* 分页查询卷册文件查阅人列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @param pageQuery 分页参数
|
||||
* @return 卷册文件查阅人分页列表
|
||||
*/
|
||||
TableDataInfo<DesVolumeFileViewerVo> queryPageList(DesVolumeFileViewerBo bo, PageQuery pageQuery);
|
||||
|
||||
/**
|
||||
* 查询符合条件的卷册文件查阅人列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @return 卷册文件查阅人列表
|
||||
*/
|
||||
List<DesVolumeFileViewerVo> queryList(DesVolumeFileViewerBo bo);
|
||||
|
||||
/**
|
||||
* 新增卷册文件查阅人
|
||||
*
|
||||
* @param bo 卷册文件查阅人
|
||||
* @return 是否新增成功
|
||||
*/
|
||||
Boolean insertByBo(DesVolumeFileViewerBo bo);
|
||||
|
||||
/**
|
||||
* 修改卷册文件查阅人
|
||||
*
|
||||
* @param bo 卷册文件查阅人
|
||||
* @return 是否修改成功
|
||||
*/
|
||||
Boolean updateByBo(DesVolumeFileViewerBo bo);
|
||||
|
||||
/**
|
||||
* 校验并批量删除卷册文件查阅人信息
|
||||
*
|
||||
* @param ids 待删除的主键集合
|
||||
* @param isValid 是否进行有效性校验
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
}
|
||||
|
||||
|
@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollUtil;
|
||||
import cn.hutool.core.convert.Convert;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
@ -217,6 +218,9 @@ public class DesDesignChangeServiceImpl extends ServiceImpl<DesDesignChangeMappe
|
||||
@Override
|
||||
public DesDesignChangeVo insertByBo(DesDesignChangeCreateReq req) {
|
||||
DesDesignChange entity = new DesDesignChange();
|
||||
if (StrUtil.isBlank(req.getVolumeNo())) {
|
||||
throw new ServiceException("请选择卷号");
|
||||
}
|
||||
BeanUtils.copyProperties(req, entity);
|
||||
validEntityBeforeSave(entity, true);
|
||||
entity.setDetail(JSONUtil.toJsonStr(req.getExtendDetail()));
|
||||
|
@ -1,19 +1,140 @@
|
||||
package org.dromara.design.service.impl;
|
||||
|
||||
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import org.dromara.common.core.utils.MapstructUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.dromara.design.domain.vo.volumefileviewer.DesVolumeFileViewerVo;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.dromara.design.domain.bo.DesVolumeFileViewerBo;
|
||||
|
||||
import org.dromara.design.domain.DesVolumeFileViewer;
|
||||
import org.dromara.design.mapper.DesVolumeFileViewerMapper;
|
||||
import org.dromara.design.service.IDesVolumeFileViewerService;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* 卷册文件查阅人Service业务层处理
|
||||
*
|
||||
* @author lilemy
|
||||
* @date 2025-07-30
|
||||
* @date 2025-08-14
|
||||
*/
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
public class DesVolumeFileViewerServiceImpl extends ServiceImpl<DesVolumeFileViewerMapper, DesVolumeFileViewer>
|
||||
implements IDesVolumeFileViewerService {
|
||||
public class DesVolumeFileViewerServiceImpl extends ServiceImpl<DesVolumeFileViewerMapper, DesVolumeFileViewer> implements IDesVolumeFileViewerService {
|
||||
|
||||
private final DesVolumeFileViewerMapper baseMapper;
|
||||
|
||||
/**
|
||||
* 查询卷册文件查阅人
|
||||
*
|
||||
* @param id 主键
|
||||
* @return 卷册文件查阅人
|
||||
*/
|
||||
@Override
|
||||
public DesVolumeFileViewerVo queryById(Long id){
|
||||
return baseMapper.selectVoById(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 分页查询卷册文件查阅人列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @param pageQuery 分页参数
|
||||
* @return 卷册文件查阅人分页列表
|
||||
*/
|
||||
@Override
|
||||
public TableDataInfo<DesVolumeFileViewerVo> queryPageList(DesVolumeFileViewerBo bo, PageQuery pageQuery) {
|
||||
LambdaQueryWrapper<DesVolumeFileViewer> lqw = buildQueryWrapper(bo);
|
||||
Page<DesVolumeFileViewerVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||
return TableDataInfo.build(result);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询符合条件的卷册文件查阅人列表
|
||||
*
|
||||
* @param bo 查询条件
|
||||
* @return 卷册文件查阅人列表
|
||||
*/
|
||||
@Override
|
||||
public List<DesVolumeFileViewerVo> queryList(DesVolumeFileViewerBo bo) {
|
||||
LambdaQueryWrapper<DesVolumeFileViewer> lqw = buildQueryWrapper(bo);
|
||||
return baseMapper.selectVoList(lqw);
|
||||
}
|
||||
|
||||
private LambdaQueryWrapper<DesVolumeFileViewer> buildQueryWrapper(DesVolumeFileViewerBo bo) {
|
||||
Map<String, Object> params = bo.getParams();
|
||||
LambdaQueryWrapper<DesVolumeFileViewer> lqw = Wrappers.lambdaQuery();
|
||||
lqw.orderByDesc(DesVolumeFileViewer::getId);
|
||||
lqw.eq(bo.getVolumeFileId() != null, DesVolumeFileViewer::getVolumeFileId, bo.getVolumeFileId());
|
||||
lqw.eq(bo.getUserId() != null, DesVolumeFileViewer::getUserId, bo.getUserId());
|
||||
lqw.eq(StringUtils.isNotBlank(bo.getStatus()), DesVolumeFileViewer::getStatus, bo.getStatus());
|
||||
return lqw;
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增卷册文件查阅人
|
||||
*
|
||||
* @param bo 卷册文件查阅人
|
||||
* @return 是否新增成功
|
||||
*/
|
||||
@Override
|
||||
public Boolean insertByBo(DesVolumeFileViewerBo bo) {
|
||||
DesVolumeFileViewer add = MapstructUtils.convert(bo, DesVolumeFileViewer.class);
|
||||
validEntityBeforeSave(add);
|
||||
add.setUserId(LoginHelper.getUserId());
|
||||
boolean flag = baseMapper.insert(add) > 0;
|
||||
if (flag) {
|
||||
bo.setId(add.getId());
|
||||
}
|
||||
return flag;
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改卷册文件查阅人
|
||||
*
|
||||
* @param bo 卷册文件查阅人
|
||||
* @return 是否修改成功
|
||||
*/
|
||||
@Override
|
||||
public Boolean updateByBo(DesVolumeFileViewerBo bo) {
|
||||
DesVolumeFileViewer update = MapstructUtils.convert(bo, DesVolumeFileViewer.class);
|
||||
validEntityBeforeSave(update);
|
||||
return baseMapper.updateById(update) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存前的数据校验
|
||||
*/
|
||||
private void validEntityBeforeSave(DesVolumeFileViewer entity){
|
||||
//TODO 做一些数据校验,如唯一约束
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验并批量删除卷册文件查阅人信息
|
||||
*
|
||||
* @param ids 待删除的主键集合
|
||||
* @param isValid 是否进行有效性校验
|
||||
* @return 是否删除成功
|
||||
*/
|
||||
@Override
|
||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
||||
if(isValid){
|
||||
//TODO 做一些业务上的校验,判断是否需要校验
|
||||
}
|
||||
return baseMapper.deleteByIds(ids) > 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -74,4 +74,9 @@ public class MatMaterialReceiveItem extends BaseEntity {
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 需求计划Id
|
||||
*/
|
||||
private Long planId;
|
||||
|
||||
}
|
||||
|
@ -55,4 +55,10 @@ public class MatMaterialReceiveItemDto {
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
|
||||
/**
|
||||
* 需求计划Id
|
||||
*/
|
||||
private Long planId;
|
||||
|
||||
}
|
||||
|
@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.materials.domain.MatMaterials;
|
||||
import org.dromara.materials.domain.dto.materialreceiveitem.MatMaterialReceiveItemDto;
|
||||
import org.dromara.materials.domain.dto.materials.MatMaterialsCreateReq;
|
||||
import org.dromara.materials.domain.dto.materials.MatMaterialsGisReq;
|
||||
import org.dromara.materials.domain.dto.materials.MatMaterialsQueryReq;
|
||||
@ -105,4 +106,11 @@ public interface IMatMaterialsService extends IService<MatMaterials> {
|
||||
* @return 材料分页对象视图
|
||||
*/
|
||||
Page<MatMaterialsVo> getMaterialsVoPage(Page<MatMaterials> materialsPage);
|
||||
|
||||
/**
|
||||
* 生成材料并入库
|
||||
*/
|
||||
void create(Long projectId, List<MatMaterialReceiveItemDto> itemList);
|
||||
|
||||
|
||||
}
|
||||
|
@ -10,6 +10,8 @@ import com.deepoove.poi.plugin.table.LoopRowTableRenderPolicy;
|
||||
import jakarta.annotation.Resource;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.cailiaoshebei.domain.BusMaterialbatchdemandplan;
|
||||
import org.dromara.cailiaoshebei.service.IBusPurchaseDocService;
|
||||
import org.dromara.common.core.constant.HttpStatus;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.common.core.utils.ObjectUtils;
|
||||
@ -34,6 +36,7 @@ import org.dromara.materials.domain.vo.materialreceive.MatMaterialReceiveVo;
|
||||
import org.dromara.materials.mapper.MatMaterialReceiveMapper;
|
||||
import org.dromara.materials.service.IMatMaterialReceiveItemService;
|
||||
import org.dromara.materials.service.IMatMaterialReceiveService;
|
||||
import org.dromara.materials.service.IMatMaterialsService;
|
||||
import org.dromara.project.service.IBusProjectService;
|
||||
import org.dromara.system.domain.vo.SysOssVo;
|
||||
import org.dromara.system.service.ISysOssService;
|
||||
@ -72,6 +75,12 @@ public class MatMaterialReceiveServiceImpl extends ServiceImpl<MatMaterialReceiv
|
||||
@Resource
|
||||
private IMatMaterialReceiveItemService materialReceiveItemService;
|
||||
|
||||
@Resource
|
||||
private IBusPurchaseDocService purchaseDocService;
|
||||
|
||||
@Resource
|
||||
private IMatMaterialsService materialsService;
|
||||
|
||||
/**
|
||||
* 查询物料接收单
|
||||
*
|
||||
@ -237,22 +246,37 @@ public class MatMaterialReceiveServiceImpl extends ServiceImpl<MatMaterialReceiv
|
||||
throw new ServiceException("物料接收单新增失败", HttpStatus.ERROR);
|
||||
}
|
||||
List<MatMaterialReceiveItemDto> itemList = req.getItemList();
|
||||
|
||||
HashMap<Long, BigDecimal> map = new HashMap<>();
|
||||
|
||||
if (CollUtil.isNotEmpty(itemList)) {
|
||||
List<MatMaterialReceiveItem> materialReceiveItemList = itemList.stream().map(item -> {
|
||||
List<MatMaterialReceiveItem> materialReceiveItemList = new ArrayList<>();
|
||||
for (MatMaterialReceiveItemDto item : itemList) {
|
||||
MatMaterialReceiveItem materialReceiveItem = new MatMaterialReceiveItem();
|
||||
BeanUtils.copyProperties(item, materialReceiveItem);
|
||||
materialReceiveItem.setReceiveId(materialReceive.getId());
|
||||
materialReceiveItem.setProjectId(materialReceive.getProjectId());
|
||||
return materialReceiveItem;
|
||||
}).toList();
|
||||
//生成缺货采购单
|
||||
if(item.getShortageQuantity().compareTo(BigDecimal.ZERO) > 0){
|
||||
map.put(item.getPlanId(),item.getShortageQuantity());
|
||||
}
|
||||
materialReceiveItemList.add(materialReceiveItem);
|
||||
}
|
||||
boolean result = materialReceiveItemService.saveBatch(materialReceiveItemList);
|
||||
if (!result) {
|
||||
throw new RuntimeException("物料接收单明细项新增失败");
|
||||
}
|
||||
//生成缺货采购单
|
||||
purchaseDocService.create(materialReceive.getDocId(), map);
|
||||
//生成库存
|
||||
materialsService.create(materialReceive.getProjectId(), itemList);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 修改物料接收单
|
||||
*
|
||||
|
@ -5,6 +5,7 @@ import cn.hutool.json.JSONObject;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import jakarta.annotation.Resource;
|
||||
@ -18,6 +19,9 @@ import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.dromara.materials.domain.MatMaterials;
|
||||
import org.dromara.materials.domain.MatMaterialsInventory;
|
||||
import org.dromara.materials.domain.dto.materialreceiveitem.MatMaterialReceiveItemDto;
|
||||
import org.dromara.materials.domain.dto.materialsinventory.MatMaterialsInventoryCreateReq;
|
||||
import org.dromara.materials.domain.dto.materialsinventory.MatMaterialsInventoryUpdateReq;
|
||||
import org.dromara.materials.domain.enums.MatMaterialsInventoryOutPutEnum;
|
||||
import org.dromara.materials.domain.dto.materials.MatMaterialsCreateReq;
|
||||
import org.dromara.materials.domain.dto.materials.MatMaterialsGisReq;
|
||||
@ -33,12 +37,11 @@ import org.dromara.project.domain.BusProject;
|
||||
import org.dromara.project.service.IBusProjectService;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.scheduling.annotation.Async;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@ -61,6 +64,7 @@ public class MatMaterialsServiceImpl extends ServiceImpl<MatMaterialsMapper, Mat
|
||||
@Resource
|
||||
private IMatMaterialsInventoryService materialsInventoryService;
|
||||
|
||||
|
||||
/**
|
||||
* 查询材料名称
|
||||
*
|
||||
@ -345,4 +349,43 @@ public class MatMaterialsServiceImpl extends ServiceImpl<MatMaterialsMapper, Mat
|
||||
materialsVoPage.setRecords(materialsVoList);
|
||||
return materialsVoPage;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Async
|
||||
public void create(Long projectId,List<MatMaterialReceiveItemDto> itemList) {
|
||||
for (MatMaterialReceiveItemDto item : itemList) {
|
||||
|
||||
Long materialsId ;
|
||||
|
||||
MatMaterials one = this.getOne(Wrappers.<MatMaterials>lambdaQuery()
|
||||
.eq(MatMaterials::getMaterialsName, item.getName())
|
||||
.eq(MatMaterials::getTypeSpecificationName, item.getSpecification()));
|
||||
if (one != null) {
|
||||
materialsId = one.getId();
|
||||
BigDecimal bigDecimal = new BigDecimal(one.getQuantityCount());
|
||||
BigDecimal add = item.getQuantity().add(bigDecimal);
|
||||
one.setQuantityCount(add.toString());
|
||||
}else {
|
||||
MatMaterials matMaterials = new MatMaterials();
|
||||
matMaterials.setMaterialsName(item.getName());
|
||||
matMaterials.setProjectId(projectId);
|
||||
matMaterials.setTypeSpecificationName(item.getSpecification());
|
||||
matMaterials.setWeightId(item.getUnit());
|
||||
matMaterials.setQuantityCount(item.getQuantity().toString());
|
||||
|
||||
save(matMaterials);
|
||||
materialsId = matMaterials.getId();
|
||||
}
|
||||
|
||||
MatMaterialsInventoryCreateReq req = new MatMaterialsInventoryCreateReq();
|
||||
|
||||
req.setMaterialsId(materialsId);
|
||||
req.setProjectId(projectId);
|
||||
req.setOutPut("0");
|
||||
req.setNumber(item.getAcceptedQuantity().longValue());
|
||||
req.setOutPutTime(new Date());
|
||||
req.setOperator(LoginHelper.getUsername());
|
||||
materialsInventoryService.insertByBo(req);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user