库存导入bug修复,外貌重构初步

This commit is contained in:
2025-05-13 20:21:02 +08:00
parent 9825e0ba1d
commit d5e527b44e
23 changed files with 392 additions and 70 deletions

View File

@@ -70,7 +70,6 @@ public class SysOssController extends BaseController {
@Log(title = "OSS对象存储", businessType = BusinessType.INSERT) @Log(title = "OSS对象存储", businessType = BusinessType.INSERT)
@PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public R<Map<String, String>> upload(@RequestPart("file") MultipartFile file, public R<Map<String, String>> upload(@RequestPart("file") MultipartFile file,
// ★ 接收 isPublic默认 0
@RequestParam(name = "isPublic", defaultValue = "0") Long isPublic) { @RequestParam(name = "isPublic", defaultValue = "0") Long isPublic) {
if (ObjectUtil.isNull(file)) { if (ObjectUtil.isNull(file)) {
return R.fail("上传文件不能为空"); return R.fail("上传文件不能为空");

View File

@@ -103,17 +103,6 @@ public class OaProgressController extends BaseController {
ExcelUtil.exportExcel(list, "进度管理", OaProgressVo.class, response); ExcelUtil.exportExcel(list, "进度管理", OaProgressVo.class, response);
} }
/**
* 获取进度管理详细信息
*
* @param progressId 主键
*/
@GetMapping("/{progressId}")
public R<OaProgressVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long progressId) {
return R.ok(iOaProgressService.queryById(progressId));
}
/** /**
* 新增进度管理 * 新增进度管理
*/ */
@@ -151,4 +140,19 @@ public class OaProgressController extends BaseController {
public R<List<OaProgressDetail>> getKeyList() { public R<List<OaProgressDetail>> getKeyList() {
return R.ok(iOaProgressService.getKeyList()); return R.ok(iOaProgressService.getKeyList());
} }
/**
* 获取进度管理详细信息
*
* @param projectId 主键
*/
@GetMapping("/{projectId}")
public R<List<OaProgressVo>> getInfo(@NotNull(message = "主键不能为空")
@PathVariable("projectId") Long projectId) {
List<OaProgressVo> progressVos = iOaProgressService.queryByProjectId(projectId);
return R.ok(progressVos);
}
} }

View File

@@ -140,4 +140,16 @@ public class SysOaProjectController extends BaseController {
public TableDataInfo<SysOaProjectVo> files(SysOaWarehouseDetailBo bo, PageQuery pageQuery) { public TableDataInfo<SysOaProjectVo> files(SysOaWarehouseDetailBo bo, PageQuery pageQuery) {
return iSysOaProjectService.queryFiles(bo, pageQuery); return iSysOaProjectService.queryFiles(bo, pageQuery);
} }
/**
* 查询进度管理列表
*/
@GetMapping("/progress-list")
public TableDataInfo<SysOaProjectVo> progressList(SysOaProjectBo bo, PageQuery pageQuery) {
bo.setTradeType(1L);
return iSysOaProjectService.listProjects(bo, pageQuery);
}
} }

View File

@@ -13,6 +13,7 @@ import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.core.domain.BaseEntity; import com.ruoyi.common.core.domain.BaseEntity;
import org.springframework.format.annotation.DateTimeFormat;
/** /**
* 出库单管理业务对象 sys_oa_warehouse_master * 出库单管理业务对象 sys_oa_warehouse_master
@@ -45,6 +46,8 @@ public class SysOaWarehouseMasterBo extends BaseEntity {
/** /**
* 编写日期 * 编写日期
*/ */
@JsonFormat(pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date signTime; private Date signTime;
/** /**

View File

@@ -92,6 +92,8 @@ public class OaProgressVo {
private List<OaProgressVo> children; private List<OaProgressVo> children;
private List<OaProgressDetailVo> tasks;
/** /**
* 联系人电话 * 联系人电话
*/ */

View File

@@ -230,6 +230,11 @@ public class SysOaProjectVo {
*/ */
private Long tradeType; private Long tradeType;
/**
* 总完成度
*/
private Long progress;
/** /**
* 预付款 * 预付款
*/ */

View File

@@ -32,7 +32,7 @@ public class SysOaWarehouseVo extends SysOaWarehouse {
* 序号 * 序号
*/ */
@ExcelProperty(value = "序号") @ExcelProperty(value = "序号")
private Long temp; private String temp;
/** /**

View File

@@ -44,7 +44,6 @@ public class SysOaWarehouseListener extends AnalysisEventListener<SysOaWarehouse
public SysOaWarehouseListener(Boolean isUpdateSupport) { public SysOaWarehouseListener(Boolean isUpdateSupport) {
this.warehouseMasterService = SpringUtils.getBean(ISysOaWarehouseMasterService.class); this.warehouseMasterService = SpringUtils.getBean(ISysOaWarehouseMasterService.class);
// String initPassword = SpringUtils.getBean(ISysConfigService.class).selectConfigByKey("sys.user.initPassword");
this.sysOaWarehouseService = SpringUtils.getBean(ISysOaWarehouseService.class); this.sysOaWarehouseService = SpringUtils.getBean(ISysOaWarehouseService.class);
this.isUpdateSupport = isUpdateSupport; this.isUpdateSupport = isUpdateSupport;
@@ -53,9 +52,13 @@ public class SysOaWarehouseListener extends AnalysisEventListener<SysOaWarehouse
@Override @Override
public void invoke(SysOaWarehouseVo sysOaWarehouseVo, AnalysisContext context) { public void invoke(SysOaWarehouseVo sysOaWarehouseVo, AnalysisContext context) {
SysOaWarehouseBo bo = new SysOaWarehouseBo(); SysOaWarehouseBo bo = new SysOaWarehouseBo();
sysOaWarehouseVo.setId(null);
bo.setName(sysOaWarehouseVo.getName()); bo.setName(sysOaWarehouseVo.getName());
if (Objects.nonNull(sysOaWarehouseVo.getModel())){ if (Objects.nonNull(sysOaWarehouseVo.getModel())){
bo.setModel(sysOaWarehouseVo.getModel().trim()); bo.setModel(sysOaWarehouseVo.getModel().trim());
}
if(Objects.nonNull(sysOaWarehouseVo.getBrand())){
bo.setBrand(sysOaWarehouseVo.getBrand().trim()); bo.setBrand(sysOaWarehouseVo.getBrand().trim());
} }
@@ -63,9 +66,13 @@ public class SysOaWarehouseListener extends AnalysisEventListener<SysOaWarehouse
try { try {
// 验证是否存在这个物料 // 验证是否存在这个物料
if (complaintVo.isEmpty()) { if (complaintVo.isEmpty()) {
if (Objects.isNull(sysOaWarehouseVo.getPrice())) {
sysOaWarehouseVo.setPrice(0.0);
}
SysOaWarehouseBo add = BeanUtil.toBean(sysOaWarehouseVo, SysOaWarehouseBo.class); SysOaWarehouseBo add = BeanUtil.toBean(sysOaWarehouseVo, SysOaWarehouseBo.class);
ValidatorUtils.validate(complaintVo); Long warehouseId = sysOaWarehouseService.insertByBo2(add);
sysOaWarehouseService.insertByBo(add); sysOaWarehouseVo.setId(warehouseId);
successNum++; successNum++;
successMsg.append("<br/>").append(successNum).append("、物料名称: ").append(add.getName()).append(" 导入成功"); successMsg.append("<br/>").append(successNum).append("、物料名称: ").append(add.getName()).append(" 导入成功");
} else if (isUpdateSupport) { } else if (isUpdateSupport) {
@@ -76,9 +83,15 @@ public class SysOaWarehouseListener extends AnalysisEventListener<SysOaWarehouse
update.setId(warehouseVo.getId()); update.setId(warehouseVo.getId());
update.setInventory(warehouseVo.getInventory()+sysOaWarehouseVo.getInventory()); update.setInventory(warehouseVo.getInventory()+sysOaWarehouseVo.getInventory());
// 价格算加权平均 // 价格算加权平均
update.setPrice(warehouseVo.getPrice()*warehouseVo.getInventory()+sysOaWarehouseVo.getPrice()*sysOaWarehouseVo.getInventory()/(warehouseVo.getInventory()+sysOaWarehouseVo.getInventory())); if (Objects.nonNull(sysOaWarehouseVo.getPrice()) && Objects.nonNull(sysOaWarehouseVo.getInventory())) {
update.setPrice((warehouseVo.getPrice()*warehouseVo.getInventory()+sysOaWarehouseVo.getPrice()*sysOaWarehouseVo.getInventory())/(warehouseVo.getInventory()+sysOaWarehouseVo.getInventory()));
}
ValidatorUtils.validate(complaintVo); ValidatorUtils.validate(complaintVo);
sysOaWarehouseService.updateByBo(update); sysOaWarehouseService.updateByBo(update);
warehouseVo.setInventory(sysOaWarehouseVo.getInventory());
warehouseVo.setPrice(sysOaWarehouseVo.getPrice());
sysOaWarehouseVo = warehouseVo;
successNum++; successNum++;
successMsg.append("<br/>").append(successNum).append("、物料名称: ").append(update.getName()).append(" 更新成功"); successMsg.append("<br/>").append(successNum).append("、物料名称: ").append(update.getName()).append(" 更新成功");
} }
@@ -87,7 +100,6 @@ public class SysOaWarehouseListener extends AnalysisEventListener<SysOaWarehouse
failureNum++; failureNum++;
String msg = "<br/>" + failureNum + "、物料名称: " + sysOaWarehouseVo.getName() + " 导入失败:"; String msg = "<br/>" + failureNum + "、物料名称: " + sysOaWarehouseVo.getName() + " 导入失败:";
failureMsg.append(msg).append(e.getMessage()); failureMsg.append(msg).append(e.getMessage());
log.error(msg, e);
} }
} }

View File

@@ -26,4 +26,7 @@ public interface OaProgressMapper extends BaseMapperPlus<OaProgressMapper, OaPro
List<OaProgressDetail> getKeyList(); List<OaProgressDetail> getKeyList();
Page<OaProgressVo> selectVoPagePlus(@Param("page") Page<Object> build,@Param(Constants.WRAPPER) QueryWrapper<OaProgress> lqw); Page<OaProgressVo> selectVoPagePlus(@Param("page") Page<Object> build,@Param(Constants.WRAPPER) QueryWrapper<OaProgress> lqw);
List<OaProgressVo> queryByProjectId(Long projectId);
} }

View File

@@ -43,4 +43,12 @@ public interface SysOaProjectMapper extends BaseMapperPlus<SysOaProjectMapper, S
Page<SysOaProjectVo> selectFileVoList(@Param("page") Page<Object> build, @Param(Constants.WRAPPER) QueryWrapper<SysOaProject> sysOaProjectQueryWrapper); Page<SysOaProjectVo> selectFileVoList(@Param("page") Page<Object> build, @Param(Constants.WRAPPER) QueryWrapper<SysOaProject> sysOaProjectQueryWrapper);
Page<SysOaProjectVo> selectVoAndProgress(@Param("page") Page<Object> build, @Param(Constants.WRAPPER) LambdaQueryWrapper<SysOaProject> sysOaProjectQueryWrapper); Page<SysOaProjectVo> selectVoAndProgress(@Param("page") Page<Object> build, @Param(Constants.WRAPPER) LambdaQueryWrapper<SysOaProject> sysOaProjectQueryWrapper);
/**
* 外贸进度使用list
* @param build
* @param bo
* @return
*/
Page<SysOaProjectVo> selectVoListPage(@Param("page") Page<SysOaProjectVo> build,@Param(Constants.WRAPPER) QueryWrapper<SysOaProject> bo);
} }

View File

@@ -6,6 +6,7 @@ import com.ruoyi.oa.domain.bo.OaProgressBo;
import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.domain.PageQuery; import com.ruoyi.common.core.domain.PageQuery;
import javax.validation.constraints.NotNull;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
@@ -54,4 +55,7 @@ public interface IOaProgressService {
*/ */
List<OaProgressDetail> getKeyList(); List<OaProgressDetail> getKeyList();
List<OaProgressVo> queryByProjectId(Long projectId);
} }

View File

@@ -74,4 +74,6 @@ public interface ISysOaProjectService {
* @return * @return
*/ */
TableDataInfo<SysOaProjectVo> queryPageList2(SysOaProjectBo bo, PageQuery pageQuery); TableDataInfo<SysOaProjectVo> queryPageList2(SysOaProjectBo bo, PageQuery pageQuery);
TableDataInfo<SysOaProjectVo> listProjects(SysOaProjectBo bo, PageQuery pageQuery);
} }

View File

@@ -36,6 +36,13 @@ public interface ISysOaWarehouseService {
*/ */
Long insertByBo(SysOaWarehouseBo bo); Long insertByBo(SysOaWarehouseBo bo);
/**
* 新增仓库管理
*/
Long insertByBo2(SysOaWarehouseBo bo);
/** /**
* 修改仓库管理 * 修改仓库管理
*/ */

View File

@@ -20,6 +20,7 @@ import com.ruoyi.oa.domain.OaProgress;
import com.ruoyi.oa.mapper.OaProgressMapper; import com.ruoyi.oa.mapper.OaProgressMapper;
import com.ruoyi.oa.service.IOaProgressService; import com.ruoyi.oa.service.IOaProgressService;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Collection; import java.util.Collection;
@@ -132,4 +133,10 @@ public class OaProgressServiceImpl implements IOaProgressService {
public List<OaProgressDetail> getKeyList() { public List<OaProgressDetail> getKeyList() {
return baseMapper.getKeyList(); return baseMapper.getKeyList();
} }
@Override
public List<OaProgressVo> queryByProjectId(Long projectId) {
return baseMapper.queryByProjectId(projectId);
}
} }

View File

@@ -135,6 +135,7 @@ public class SysOaProjectServiceImpl implements ISysOaProjectService {
/** /**
* 获取当月每个项目的人力资源成本 * 获取当月每个项目的人力资源成本
*
* @return * @return
*/ */
@Override @Override
@@ -147,6 +148,7 @@ public class SysOaProjectServiceImpl implements ISysOaProjectService {
/** /**
* 统计数据需要 * 统计数据需要
*
* @return * @return
*/ */
@Override @Override
@@ -210,6 +212,7 @@ public class SysOaProjectServiceImpl implements ISysOaProjectService {
/** /**
* 进度使用的查询接口 * 进度使用的查询接口
*
* @param bo * @param bo
* @param pageQuery * @param pageQuery
* @return * @return
@@ -221,6 +224,25 @@ public class SysOaProjectServiceImpl implements ISysOaProjectService {
return TableDataInfo.build(result); return TableDataInfo.build(result);
} }
/**
* 查询项目 进度使用
*
* @param bo
* @param pageQuery
* @return
*/
@Override
public TableDataInfo<SysOaProjectVo> listProjects(SysOaProjectBo bo, PageQuery pageQuery) {
QueryWrapper<SysOaProject> qw = new QueryWrapper<SysOaProject>();
qw.like(StringUtils.isNotBlank(bo.getProjectName()), "sop.project_name", bo.getProjectName());
qw.eq("sop.trade_type", bo.getTradeType());
qw.like(StringUtils.isNotBlank(bo.getProjectNum()), "sop.project_num", bo.getProjectNum());
qw.groupBy("sop.project_id");
Page<SysOaProjectVo> result = baseMapper.selectVoListPage(pageQuery.build(),qw);
return TableDataInfo.build(result);
}
private QueryWrapper<SysOaProject> buildOutWareQueryWrapper(SysOaWarehouseDetailBo bo) { private QueryWrapper<SysOaProject> buildOutWareQueryWrapper(SysOaWarehouseDetailBo bo) {
QueryWrapper<SysOaProject> lqw = Wrappers.query(); QueryWrapper<SysOaProject> lqw = Wrappers.query();
lqw.like(StringUtils.isNotBlank(bo.getProjectName()), "sop.projec_name", bo.getProjectName()); lqw.like(StringUtils.isNotBlank(bo.getProjectName()), "sop.projec_name", bo.getProjectName());
@@ -230,7 +252,6 @@ public class SysOaProjectServiceImpl implements ISysOaProjectService {
} }
private Date getFirstDay(Date time) { private Date getFirstDay(Date time) {
String firstDay = DateUtils.parseDateToStr("yyyy-MM-01", time); String firstDay = DateUtils.parseDateToStr("yyyy-MM-01", time);
return DateUtils.parseDate(firstDay); return DateUtils.parseDate(firstDay);

View File

@@ -150,7 +150,7 @@ public class SysOaTaskServiceImpl implements ISysOaTaskService {
public Boolean insertByBo(SysOaTaskBo bo) { public Boolean insertByBo(SysOaTaskBo bo) {
List<Long> workerIdList = new ArrayList<>(); List<Long> workerIdList = new ArrayList<>();
// 拿到所有的执行人id列表进行遍历添加 // 拿到所有的执行人id列表进行遍历添加
if (bo.getWorkerId()!=null) { if (bo.getWorkerIds()!=null) {
workerIdList = Arrays.stream(bo.getWorkerIds().split(",")) workerIdList = Arrays.stream(bo.getWorkerIds().split(","))
.map(Long::valueOf) .map(Long::valueOf)
.collect(Collectors.toList()); .collect(Collectors.toList());

View File

@@ -138,7 +138,7 @@ public class SysOaWarehouseDetailServiceImpl implements ISysOaWarehouseDetailSer
SysOaWarehouseDetail decrease = toBean(bo, SysOaWarehouseDetail.class); SysOaWarehouseDetail decrease = toBean(bo, SysOaWarehouseDetail.class);
validEntityBeforeSave(decrease); validEntityBeforeSave(decrease);
if (!Objects.nonNull(bo.getType()) || bo.getType() != 1) { if (Objects.isNull(bo.getType()) || bo.getType() != 1L) {
SysOaWarehouse warehouse = warehouseMapper.selectById(decrease.getWarehouseId()); SysOaWarehouse warehouse = warehouseMapper.selectById(decrease.getWarehouseId());
// 1 如果对应仓库表项目数量-将要出库数量<0出库失败, 繁殖 增加该条 // 1 如果对应仓库表项目数量-将要出库数量<0出库失败, 繁殖 增加该条
if(warehouse == null) { if(warehouse == null) {
@@ -153,8 +153,6 @@ public class SysOaWarehouseDetailServiceImpl implements ISysOaWarehouseDetailSer
warehouseMapper.updateById(warehouse); warehouseMapper.updateById(warehouse);
} }
} }
// 2、减少仓库表中对应项目的数量
return baseMapper.insert(decrease) > 0; return baseMapper.insert(decrease) > 0;
} }

View File

@@ -40,8 +40,6 @@ public class SysOaWarehouseMasterServiceImpl implements ISysOaWarehouseMasterSer
private final ISysOaWarehouseDetailService warehouseDetailService; private final ISysOaWarehouseDetailService warehouseDetailService;
/** /**
* 查询出库单管理 * 查询出库单管理
*/ */
@@ -74,7 +72,14 @@ public class SysOaWarehouseMasterServiceImpl implements ISysOaWarehouseMasterSer
QueryWrapper<SysOaWarehouseMaster> lqw = Wrappers.query(); QueryWrapper<SysOaWarehouseMaster> lqw = Wrappers.query();
lqw.eq(bo.getType() != null, "sowm.type", bo.getType()); lqw.eq(bo.getType() != null, "sowm.type", bo.getType());
lqw.eq(bo.getProjectId() != null, "sowm.project_id", bo.getProjectId()); lqw.eq(bo.getProjectId() != null, "sowm.project_id", bo.getProjectId());
lqw.eq(bo.getSignTime() != null, "sowm.sign_time", bo.getSignTime());
if (bo.getSignTime() != null) {
long time = bo.getSignTime().getTime();
lqw.apply(
"DATE(sowm.sign_time) = {0}", // MySQL DATE() 抽取日期部分
new Date(time)); // 20250513
}
lqw.like(StringUtils.isNotBlank(bo.getSignUser()), "sowm.sign_user", bo.getSignUser()); lqw.like(StringUtils.isNotBlank(bo.getSignUser()), "sowm.sign_user", bo.getSignUser());
lqw.eq("sowm.del_flag", 0L); lqw.eq("sowm.del_flag", 0L);
lqw.orderByDesc("sowm.create_time"); lqw.orderByDesc("sowm.create_time");
@@ -95,6 +100,7 @@ public class SysOaWarehouseMasterServiceImpl implements ISysOaWarehouseMasterSer
// 单子新增后 新增出库元素同时减去现有的,这里要记录一个出库时单价 // 单子新增后 新增出库元素同时减去现有的,这里要记录一个出库时单价
for (SysOaWarehouseDetailBo sysOaWarehouseDetailBo : bo.getWarehouseList()) { for (SysOaWarehouseDetailBo sysOaWarehouseDetailBo : bo.getWarehouseList()) {
sysOaWarehouseDetailBo.setMasterId(add.getMasterId()); sysOaWarehouseDetailBo.setMasterId(add.getMasterId());
sysOaWarehouseDetailBo.setType(bo.getType());
warehouseDetailService.insertByBo(sysOaWarehouseDetailBo); warehouseDetailService.insertByBo(sysOaWarehouseDetailBo);
} }
} }

View File

@@ -53,13 +53,16 @@ public class SysOaWarehouseServiceImpl implements ISysOaWarehouseService {
@Override @Override
public TableDataInfo<SysOaWarehouseVo> queryPageList(SysOaWarehouseBo bo, PageQuery pageQuery) { public TableDataInfo<SysOaWarehouseVo> queryPageList(SysOaWarehouseBo bo, PageQuery pageQuery) {
QueryWrapper<SysOaWarehouse> lqw = new QueryWrapper<>(); QueryWrapper<SysOaWarehouse> lqw = new QueryWrapper<>();
lqw.like(StringUtils.isNotBlank(bo.getName()), "sow.name", bo.getName()).or()
.like(StringUtils.isNotBlank(bo.getName()), "sow.brand", bo.getName()).or()
.like(StringUtils.isNotBlank(bo.getName()), "sow.model", bo.getName());
lqw.eq(StringUtils.isNotBlank(bo.getModel()), "sow.model", bo.getModel());
lqw.eq(StringUtils.isNotBlank(bo.getBrand()), "sow.brand", bo.getBrand());
lqw.eq("sow.del_flag", 0); lqw.eq("sow.del_flag", 0);
lqw.and(StringUtils.isNotBlank(bo.getName()),qw -> qw
.like( "sow.name", bo.getName())
.or()
.like("sow.brand", bo.getName())
.or()
.like("sow.model", bo.getName())
)
.eq(StringUtils.isNotBlank(bo.getModel()), "sow.model", bo.getModel())
.eq(StringUtils.isNotBlank(bo.getBrand()), "sow.brand", bo.getBrand());
Page<SysOaWarehouseVo> result = baseMapper.selectListVoPage(pageQuery.build(), lqw); Page<SysOaWarehouseVo> result = baseMapper.selectListVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result); return TableDataInfo.build(result);
} }
@@ -67,17 +70,25 @@ public class SysOaWarehouseServiceImpl implements ISysOaWarehouseService {
@Override @Override
public TableDataInfo<SysOaWarehouseVo> queryPageListThreshold(SysOaWarehouseBo bo, PageQuery pageQuery, boolean b) { public TableDataInfo<SysOaWarehouseVo> queryPageListThreshold(SysOaWarehouseBo bo, PageQuery pageQuery, boolean b) {
QueryWrapper<SysOaWarehouse> lqw = new QueryWrapper<>(); QueryWrapper<SysOaWarehouse> lqw = new QueryWrapper<>();
lqw.like(StringUtils.isNotBlank(bo.getName()), "sow.name", bo.getName()).or()
.like(StringUtils.isNotBlank(bo.getName()), "sow.brand", bo.getName()).or()
.like(StringUtils.isNotBlank(bo.getName()), "sow.model", bo.getName());
lqw.eq(StringUtils.isNotBlank(bo.getModel()), "sow.model", bo.getModel());
lqw.eq(StringUtils.isNotBlank(bo.getBrand()), "sow.brand", bo.getBrand());
lqw.eq("sow.del_flag", 0); lqw.eq("sow.del_flag", 0);
if (b){ if (b){
lqw.apply("sow.inventory < sow.threshold"); lqw.apply("sow.inventory < sow.threshold");
}else{ }else{
lqw.apply("sow.inventory >= sow.threshold"); lqw.apply("sow.inventory >= sow.threshold");
} }
lqw.eq(StringUtils.isNotBlank(bo.getModel()), "sow.model", bo.getModel());
lqw.eq(StringUtils.isNotBlank(bo.getBrand()), "sow.brand", bo.getBrand());
lqw.and(StringUtils.isNotBlank(bo.getName()),qw -> qw
.like( "sow.name", bo.getName())
.or()
.like("sow.brand", bo.getName())
.or()
.like("sow.model", bo.getName())
)
.eq(StringUtils.isNotBlank(bo.getModel()), "sow.model", bo.getModel())
.eq(StringUtils.isNotBlank(bo.getBrand()), "sow.brand", bo.getBrand());
Page<SysOaWarehouseVo> result = baseMapper.selectListVoPage(pageQuery.build(), lqw); Page<SysOaWarehouseVo> result = baseMapper.selectListVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result); return TableDataInfo.build(result);
} }
@@ -164,6 +175,7 @@ public class SysOaWarehouseServiceImpl implements ISysOaWarehouseService {
/** /**
* 新增仓库管理 * 新增仓库管理
*/ */
@Override
public Long insertByBo2(SysOaWarehouseBo bo) { public Long insertByBo2(SysOaWarehouseBo bo) {
SysOaWarehouse add = BeanUtil.toBean(bo, SysOaWarehouse.class); SysOaWarehouse add = BeanUtil.toBean(bo, SysOaWarehouse.class);
validEntityBeforeSave(add); validEntityBeforeSave(add);
@@ -172,7 +184,6 @@ public class SysOaWarehouseServiceImpl implements ISysOaWarehouseService {
lqw.eq(SysOaWarehouse::getName, bo.getName()); lqw.eq(SysOaWarehouse::getName, bo.getName());
lqw.eq(StringUtils.isNotBlank(bo.getModel()), SysOaWarehouse::getModel, bo.getModel()); lqw.eq(StringUtils.isNotBlank(bo.getModel()), SysOaWarehouse::getModel, bo.getModel());
SysOaWarehouse select = baseMapper.selectOne(lqw); SysOaWarehouse select = baseMapper.selectOne(lqw);
System.out.println(select);
// 2、 无则直接新增项目 有则直接增加库存数量 // 2、 无则直接新增项目 有则直接增加库存数量
if (select == null) { if (select == null) {
baseMapper.insert(add); baseMapper.insert(add);

View File

@@ -4,24 +4,118 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.oa.mapper.OaProgressMapper"> <mapper namespace="com.ruoyi.oa.mapper.OaProgressMapper">
<resultMap type="com.ruoyi.oa.domain.OaProgress" id="OaProgressResult"> <!-- 1. 定义 OaProgressVo 的映射:同时嵌套子阶段和子任务 -->
<result property="progressId" column="progress_id"/> <resultMap id="OaProgressResult" type="com.ruoyi.oa.domain.vo.OaProgressVo">
<id property="progressId" column="progress_id"/>
<result property="projectId" column="project_id"/> <result property="projectId" column="project_id"/>
<result property="type" column="type"/> <result property="type" column="type"/>
<result property="progressName" column="progress_name"/> <result property="progressName" column="progress_name"/>
<result property="parentId" column="parent_id"/> <result property="parentId" column="parent_id"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
<result property="delFlag" column="del_flag"/>
<result property="sort" column="sort"/> <result property="sort" column="sort"/>
<result property="remark" column="remark"/> <result property="remark" column="remark"/>
<result property="status" column="status"/> <result property="status" column="status"/>
<result property="timeRemark" column="time_remark"/> <result property="timeRemark" column="time_remark"/>
<result property="contactPhone" column="contact_phone"/> <result property="contactPhone" column="contact_phone"/>
<!-- 嵌套查询一级或二级子阶段 -->
<collection property="children"
ofType="com.ruoyi.oa.domain.vo.OaProgressVo"
javaType="list"
select="queryByParentId"
column="progress_id"/>
<!-- 嵌套查询本阶段下的所有任务明细 -->
<collection property="tasks"
ofType="com.ruoyi.oa.domain.vo.OaProgressDetailVo"
javaType="list"
select="queryDetailsByProgressId"
column="progress_id"/>
</resultMap> </resultMap>
<!-- 2. 定义 OaProgressDetailVo 的映射 -->
<resultMap id="OaProgressDetailResult" type="com.ruoyi.oa.domain.vo.OaProgressDetailVo">
<id property="detailId" column="detail_id"/>
<result property="progressId" column="progress_id"/>
<result property="detailName" column="detail_name"/>
<result property="planStartDate" column="plan_start_date"/>
<result property="planEndDate" column="plan_end_date"/>
<result property="actualStartDate" column="actual_start_date"/>
<result property="actualEndDate" column="actual_end_date"/>
<result property="completePercent" column="complete_percent"/>
<result property="planPayDate" column="plan_pay_date"/>
<result property="payAmount" column="pay_amount"/>
<result property="paidAmount" column="paid_amount"/>
<result property="remark" column="remark"/>
<result property="detailStatus" column="detail_status"/>
</resultMap>
<!-- 3. 查询所有父进度parent_id = 0-->
<select id="queryByProjectId"
parameterType="java.lang.Long"
resultMap="OaProgressResult">
SELECT
progress_id,
project_id,
type,
progress_name,
parent_id,
sort,
remark,
status,
time_remark,
contact_phone
FROM oa_progress
WHERE project_id = #{projectId}
AND parent_id = 0
AND del_flag = 0
ORDER BY sort
</select>
<!-- 4. 根据 parentId 查询子进度 -->
<select id="queryByParentId"
parameterType="java.lang.Long"
resultMap="OaProgressResult">
SELECT
progress_id,
project_id,
type,
progress_name,
parent_id,
sort,
remark,
status,
time_remark,
contact_phone
FROM oa_progress
WHERE parent_id = #{parentId}
AND del_flag = 0
ORDER BY sort
</select>
<!-- 5. 根据 progressId 查询对应的所有任务明细 -->
<select id="queryDetailsByProgressId"
parameterType="java.lang.Long"
resultMap="OaProgressDetailResult">
SELECT
detail_id,
progress_id,
detail_name,
plan_start_date,
plan_end_date,
actual_start_date,
actual_end_date,
complete_percent,
plan_pay_date,
pay_amount,
paid_amount,
remark,
detail_status
FROM oa_progress_detail
WHERE progress_id = #{progressId}
AND del_flag = 0
ORDER BY plan_start_date
</select>
<select id="getKeyList" resultType="com.ruoyi.oa.domain.OaProgressDetail"> <select id="getKeyList" resultType="com.ruoyi.oa.domain.OaProgressDetail">
select distinct detail_name, department select distinct detail_name, department
@@ -101,4 +195,6 @@
</select> </select>
</mapper> </mapper>

View File

@@ -480,5 +480,28 @@
${ew.getCustomSqlSegment} ${ew.getCustomSqlSegment}
</select> </select>
<select id="selectVoListPage" resultType="com.ruoyi.oa.domain.vo.SysOaProjectVo">
SELECT
sop.project_id,
sop.project_name,
sop.project_num,
sop.begin_time,
sop.finish_time,
sop.functionary,
IFNULL(
SUM(CASE WHEN d.detail_status = 1 THEN 1 ELSE 0 END) * 100
/ NULLIF(COUNT(d.detail_id), 0)
, 0) AS progress
FROM sys_oa_project sop
LEFT JOIN oa_progress pr
ON pr.project_id = sop.project_id
AND pr.del_flag = 0
LEFT JOIN oa_progress_detail d
ON d.progress_id = pr.progress_id
AND d.del_flag = 0
${ ew.getCustomSqlSegment}
</select>
</mapper> </mapper>

View File

@@ -69,6 +69,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
left join sys_oa_warehouse_master sowm on sowm.master_id = sowt.master_id left join sys_oa_warehouse_master sowm on sowm.master_id = sowt.master_id
where sowt.warehouse_id = sow.id where sowt.warehouse_id = sow.id
and sowm.type = 2 and sowm.type = 2
and sowt.del_flag = '0'
and sowm.del_flag = '0'
and sowm.status = 0 and sowm.status = 0
) as task_inventory ) as task_inventory
from sys_oa_warehouse sow from sys_oa_warehouse sow

97
script/sql/progress.sql Normal file
View File

@@ -0,0 +1,97 @@
create table if not exists sys_oa_project
(
project_id bigint not null comment 'ID'
primary key,
project_name varchar(126) default '' null comment '项目名称',
project_num varchar(64) default '' null comment '项目编号',
project_type char null comment '项目类型(1中标2其他)',
address varchar(126) default '' null comment '项目地址',
funds decimal(24, 2) null comment '项目总款',
functionary varchar(32) default '' null comment '项目负责人',
begin_time datetime null comment '开始日期',
finish_time datetime null comment '结束日期',
delivery varchar(64) null comment '交货期',
guarantee varchar(64) null comment '质保期',
introduction varchar(256) default '' null comment '项目介绍',
project_grade char default '0' null comment '优先级0一般 1中 2高',
project_status char default '0' null comment '状态0进行中 1完结',
contract_id bigint null comment '关联合同ID',
invoice_name varchar(64) collate utf8mb4_general_ci null comment '开票单位名称',
invoice_number varchar(32) collate utf8mb4_general_ci null comment '纳税人识别号',
invoice_address varchar(128) collate utf8mb4_general_ci null comment '开票地址电话',
invoice_bank varchar(128) collate utf8mb4_general_ci null comment '开户行及账号',
accessory text null comment '附件',
bail json null comment '履约保证金',
remark varchar(256) null comment '备注',
create_by varchar(32) default '' null comment '创建者',
create_time datetime null comment '创建时间',
update_by varchar(32) default '' null comment '更新者',
update_time datetime null comment '更新时间',
is_postpone int default 0 null comment '是否延期',
postpone_reason varchar(1024) null comment '延期原因',
postpone_time datetime null comment '延期至日期',
color varchar(20) null comment '代表颜色',
trade_type int default 0 null comment '交易类型',
pre_pay double default 0 null comment '预付款'
)
comment '项目管理表' charset = utf8mb4;
create table if not exists oa_progress
(
progress_id bigint auto_increment comment '主键ID'
primary key,
project_id bigint default 0 not null comment '所属项目ID(可根据实际需要)',
type tinyint default 1 not null comment '进度类型1-项目进度2-付款进度(可根据实际约定)',
progress_name varchar(200) default '' not null comment '进度名称',
parent_id bigint default 0 not null comment '父进度ID0或NULL表示没有父节点',
create_by varchar(40) default '' not null comment '创建者',
create_time datetime default CURRENT_TIMESTAMP not null comment '创建时间',
update_by varchar(40) default '' not null comment '更新者',
update_time datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间',
del_flag tinyint default 0 not null comment '删除标志0-正常1-删除',
sort int default 0 not null comment '排序字段(如需)',
remark varchar(500) default '' not null comment '备注(如需)',
status int default 0 null comment '状态位',
amount int default 0 null comment '设备数量',
time_remark varchar(200) null comment '时间(备注)',
contact_phone varchar(20) null comment '联系人电话'
)
comment '项目进度主表';
create index idx_parent_id
on oa_progress (parent_id);
create index idx_project_id
on oa_progress (project_id);
create index idx_type
on oa_progress (type);
create table if not exists oa_progress_detail
(
detail_id bigint auto_increment comment '主键ID'
primary key,
progress_id bigint not null comment '关联的进度ID关联 project_progress.id',
detail_name varchar(50) null comment '子进度名称',
plan_start_date date null comment '计划开始日期(项目进度)',
plan_end_date date null comment '计划结束日期(项目进度)',
actual_start_date date null comment '实际开始日期(项目进度)',
actual_end_date date null comment '实际结束日期(项目进度)',
complete_percent decimal(5, 2) default 0.00 not null comment '完成百分比(项目进度)',
plan_pay_date date null comment '计划付款日期(付款进度)',
pay_amount decimal(18, 2) default 0.00 not null comment '应付金额(付款进度)',
paid_amount decimal(18, 2) default 0.00 not null comment '已付金额(付款进度)',
detail_status int default 0 null comment '子进度状态',
create_by varchar(40) default '' not null comment '创建者',
create_time datetime default CURRENT_TIMESTAMP not null comment '创建时间',
update_by varchar(40) default '' not null comment '更新者',
update_time datetime default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP comment '更新时间',
del_flag tinyint default 0 not null comment '删除标志0-正常1-删除',
remark varchar(500) default '' not null comment '备注(如需)',
department varchar(30) null comment '负责部门'
)
comment '项目进度/付款进度扩展表';
create index idx_progress_id
on oa_progress_detail (progress_id);