Merge remote-tracking branch 'origin/main'

This commit is contained in:
coolleave
2025-05-13 21:21:31 +08:00
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)
@PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public R<Map<String, String>> upload(@RequestPart("file") MultipartFile file,
// ★ 接收 isPublic默认 0
@RequestParam(name = "isPublic", defaultValue = "0") Long isPublic) {
if (ObjectUtil.isNull(file)) {
return R.fail("上传文件不能为空");

View File

@@ -103,17 +103,6 @@ public class OaProgressController extends BaseController {
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() {
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) {
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.ruoyi.common.core.domain.BaseEntity;
import org.springframework.format.annotation.DateTimeFormat;
/**
* 出库单管理业务对象 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;
/**

View File

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

View File

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

View File

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

View File

@@ -44,7 +44,6 @@ public class SysOaWarehouseListener extends AnalysisEventListener<SysOaWarehouse
public SysOaWarehouseListener(Boolean isUpdateSupport) {
this.warehouseMasterService = SpringUtils.getBean(ISysOaWarehouseMasterService.class);
// String initPassword = SpringUtils.getBean(ISysConfigService.class).selectConfigByKey("sys.user.initPassword");
this.sysOaWarehouseService = SpringUtils.getBean(ISysOaWarehouseService.class);
this.isUpdateSupport = isUpdateSupport;
@@ -53,9 +52,13 @@ public class SysOaWarehouseListener extends AnalysisEventListener<SysOaWarehouse
@Override
public void invoke(SysOaWarehouseVo sysOaWarehouseVo, AnalysisContext context) {
SysOaWarehouseBo bo = new SysOaWarehouseBo();
sysOaWarehouseVo.setId(null);
bo.setName(sysOaWarehouseVo.getName());
if (Objects.nonNull(sysOaWarehouseVo.getModel())){
bo.setModel(sysOaWarehouseVo.getModel().trim());
}
if(Objects.nonNull(sysOaWarehouseVo.getBrand())){
bo.setBrand(sysOaWarehouseVo.getBrand().trim());
}
@@ -63,9 +66,13 @@ public class SysOaWarehouseListener extends AnalysisEventListener<SysOaWarehouse
try {
// 验证是否存在这个物料
if (complaintVo.isEmpty()) {
if (Objects.isNull(sysOaWarehouseVo.getPrice())) {
sysOaWarehouseVo.setPrice(0.0);
}
SysOaWarehouseBo add = BeanUtil.toBean(sysOaWarehouseVo, SysOaWarehouseBo.class);
ValidatorUtils.validate(complaintVo);
sysOaWarehouseService.insertByBo(add);
Long warehouseId = sysOaWarehouseService.insertByBo2(add);
sysOaWarehouseVo.setId(warehouseId);
successNum++;
successMsg.append("<br/>").append(successNum).append("、物料名称: ").append(add.getName()).append(" 导入成功");
} else if (isUpdateSupport) {
@@ -76,9 +83,15 @@ public class SysOaWarehouseListener extends AnalysisEventListener<SysOaWarehouse
update.setId(warehouseVo.getId());
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);
sysOaWarehouseService.updateByBo(update);
warehouseVo.setInventory(sysOaWarehouseVo.getInventory());
warehouseVo.setPrice(sysOaWarehouseVo.getPrice());
sysOaWarehouseVo = warehouseVo;
successNum++;
successMsg.append("<br/>").append(successNum).append("、物料名称: ").append(update.getName()).append(" 更新成功");
}
@@ -87,7 +100,6 @@ public class SysOaWarehouseListener extends AnalysisEventListener<SysOaWarehouse
failureNum++;
String msg = "<br/>" + failureNum + "、物料名称: " + sysOaWarehouseVo.getName() + " 导入失败:";
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();
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> 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.domain.PageQuery;
import javax.validation.constraints.NotNull;
import java.util.Collection;
import java.util.List;
@@ -54,4 +55,7 @@ public interface IOaProgressService {
*/
List<OaProgressDetail> getKeyList();
List<OaProgressVo> queryByProjectId(Long projectId);
}

View File

@@ -74,4 +74,6 @@ public interface ISysOaProjectService {
* @return
*/
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 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.service.IOaProgressService;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Collection;
@@ -132,4 +133,10 @@ public class OaProgressServiceImpl implements IOaProgressService {
public List<OaProgressDetail> getKeyList() {
return baseMapper.getKeyList();
}
@Override
public List<OaProgressVo> queryByProjectId(Long projectId) {
return baseMapper.queryByProjectId(projectId);
}
}

View File

@@ -39,7 +39,7 @@ public class SysOaProjectServiceImpl implements ISysOaProjectService {
* 查询项目管理
*/
@Override
public SysOaProjectVo queryById(Long projectId){
public SysOaProjectVo queryById(Long projectId) {
return baseMapper.selectVoById(projectId);
}
@@ -68,7 +68,7 @@ public class SysOaProjectServiceImpl implements ISysOaProjectService {
lqw.like(StringUtils.isNotBlank(bo.getProjectName()), SysOaProject::getProjectName, bo.getProjectName());
lqw.eq(StringUtils.isNotBlank(bo.getProjectNum()), SysOaProject::getProjectNum, bo.getProjectNum());
lqw.eq(bo.getTradeType() != null, SysOaProject::getTradeType, bo.getTradeType());
lqw.gt(bo.getPrePay()!=null&&bo.getPrePay()>0, SysOaProject::getPrePay,0);
lqw.gt(bo.getPrePay() != null && bo.getPrePay() > 0, SysOaProject::getPrePay, 0);
lqw.eq(StringUtils.isNotBlank(bo.getProjectType()), SysOaProject::getProjectType, bo.getProjectType());
lqw.eq(StringUtils.isNotBlank(bo.getProjectStatus()), SysOaProject::getProjectStatus, bo.getProjectStatus());
lqw.eq(StringUtils.isNotBlank(bo.getCreateBy()), SysOaProject::getCreateBy, bo.getCreateBy());
@@ -105,7 +105,7 @@ public class SysOaProjectServiceImpl implements ISysOaProjectService {
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(SysOaProject entity){
private void validEntityBeforeSave(SysOaProject entity) {
//TODO 做一些数据校验,如唯一约束
}
@@ -114,7 +114,7 @@ public class SysOaProjectServiceImpl implements ISysOaProjectService {
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
@@ -135,24 +135,26 @@ public class SysOaProjectServiceImpl implements ISysOaProjectService {
/**
* 获取当月每个项目的人力资源成本
*
* @return
*/
@Override
public List<SysOaProjectVo> getProjectDataByMonth(Date date) {
if (date==null){
if (date == null) {
date = new Date();
}
return baseMapper.getProjectDataByMonth(getFirstDay(date),getLastDay(date));
return baseMapper.getProjectDataByMonth(getFirstDay(date), getLastDay(date));
}
/**
* 统计数据需要
*
* @return
*/
@Override
public List<SysOaProjectVo> getProjectDataByMonthAndDate() {
Date date = new Date();
List<SysOaProjectVo> projectVos = baseMapper.getProjectDataByMonthAndDate(getFirstDay(date),getLastDay(date));
List<SysOaProjectVo> projectVos = baseMapper.getProjectDataByMonthAndDate(getFirstDay(date), getLastDay(date));
return projectVos;
}
@@ -160,7 +162,7 @@ public class SysOaProjectServiceImpl implements ISysOaProjectService {
@Override
public TableDataInfo<SysOaProjectVo> queryFiles(SysOaWarehouseDetailBo bo, PageQuery pageQuery) {
QueryWrapper<SysOaProject> sysOaProjectQueryWrapper = buildOutWareQueryWrapper(bo);
sysOaProjectQueryWrapper.groupBy("sop.project_id","sop.project_name","t.task_id","t.task_type","t.status","nick_name","ti.item_id","ti.sign_time","sop.create_time");
sysOaProjectQueryWrapper.groupBy("sop.project_id", "sop.project_name", "t.task_id", "t.task_type", "t.status", "nick_name", "ti.item_id", "ti.sign_time", "sop.create_time");
// sysOaProjectQueryWrapper.having("file_urls IS NOT NULL");
Page<SysOaProjectVo> result = baseMapper.selectFileVoList(pageQuery.build(), sysOaProjectQueryWrapper);
List<SysOaProjectVo> projects = result.getRecords();
@@ -210,6 +212,7 @@ public class SysOaProjectServiceImpl implements ISysOaProjectService {
/**
* 进度使用的查询接口
*
* @param bo
* @param pageQuery
* @return
@@ -221,6 +224,25 @@ public class SysOaProjectServiceImpl implements ISysOaProjectService {
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) {
QueryWrapper<SysOaProject> lqw = Wrappers.query();
lqw.like(StringUtils.isNotBlank(bo.getProjectName()), "sop.projec_name", bo.getProjectName());
@@ -230,20 +252,19 @@ public class SysOaProjectServiceImpl implements ISysOaProjectService {
}
private Date getFirstDay(Date time){
private Date getFirstDay(Date time) {
String firstDay = DateUtils.parseDateToStr("yyyy-MM-01", time);
return DateUtils.parseDate(firstDay);
return DateUtils.parseDate(firstDay);
}
private Date getLastDay(Date time){
private Date getLastDay(Date time) {
String format = "yyyy-MM-";
// 计算某月的天数
Calendar calendar = Calendar.getInstance();
calendar.setTime(time);
String dateLength = String.valueOf(calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
// 将字符串拼接
format +=dateLength;
format += dateLength;
return DateUtils.parseDate(DateUtils.parseDateToStr(format, time));
}

View File

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

View File

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

View File

@@ -40,13 +40,11 @@ public class SysOaWarehouseMasterServiceImpl implements ISysOaWarehouseMasterSer
private final ISysOaWarehouseDetailService warehouseDetailService;
/**
* 查询出库单管理
*/
@Override
public SysOaWarehouseMasterVo queryById(Long masterId){
public SysOaWarehouseMasterVo queryById(Long masterId) {
return baseMapper.selectVoById(masterId);
}
@@ -74,7 +72,14 @@ public class SysOaWarehouseMasterServiceImpl implements ISysOaWarehouseMasterSer
QueryWrapper<SysOaWarehouseMaster> lqw = Wrappers.query();
lqw.eq(bo.getType() != null, "sowm.type", bo.getType());
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.eq("sowm.del_flag", 0L);
lqw.orderByDesc("sowm.create_time");
@@ -95,6 +100,7 @@ public class SysOaWarehouseMasterServiceImpl implements ISysOaWarehouseMasterSer
// 单子新增后 新增出库元素同时减去现有的,这里要记录一个出库时单价
for (SysOaWarehouseDetailBo sysOaWarehouseDetailBo : bo.getWarehouseList()) {
sysOaWarehouseDetailBo.setMasterId(add.getMasterId());
sysOaWarehouseDetailBo.setType(bo.getType());
warehouseDetailService.insertByBo(sysOaWarehouseDetailBo);
}
}
@@ -108,10 +114,10 @@ public class SysOaWarehouseMasterServiceImpl implements ISysOaWarehouseMasterSer
public Boolean updateByBo(SysOaWarehouseMasterBo bo) {
System.out.println(bo);
// 判断是否为采购单,采购单,用户是直接点击完成按钮,所以直接更新单子状态就可以
if (bo.getType()!=2L){
if (bo.getType() != 2L) {
SysOaWarehouseMaster update = BeanUtil.toBean(bo, SysOaWarehouseMaster.class);
validEntityBeforeSave(update);
boolean flag = baseMapper.updateById(update) > 0;
boolean flag = baseMapper.updateById(update) > 0;
if (flag) {
List<SysOaWarehouseDetailBo> warehouseList = bo.getWarehouseList();
for (SysOaWarehouseDetailBo sysOaWarehouseDetailBo : warehouseList) {
@@ -123,7 +129,7 @@ public class SysOaWarehouseMasterServiceImpl implements ISysOaWarehouseMasterSer
}
return flag;
}else{
} else {
SysOaWarehouseMaster update = BeanUtil.toBean(bo, SysOaWarehouseMaster.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
@@ -134,7 +140,7 @@ public class SysOaWarehouseMasterServiceImpl implements ISysOaWarehouseMasterSer
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(SysOaWarehouseMaster entity){
private void validEntityBeforeSave(SysOaWarehouseMaster entity) {
//TODO 做一些数据校验,如唯一约束
}
@@ -144,7 +150,7 @@ public class SysOaWarehouseMasterServiceImpl implements ISysOaWarehouseMasterSer
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
System.out.println(ids);
if(isValid){
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;

View File

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

View File

@@ -4,24 +4,118 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.oa.mapper.OaProgressMapper">
<resultMap type="com.ruoyi.oa.domain.OaProgress" id="OaProgressResult">
<result property="progressId" column="progress_id"/>
<result property="projectId" column="project_id"/>
<result property="type" column="type"/>
<!-- 1. 定义 OaProgressVo 的映射:同时嵌套子阶段和子任务 -->
<resultMap id="OaProgressResult" type="com.ruoyi.oa.domain.vo.OaProgressVo">
<id property="progressId" column="progress_id"/>
<result property="projectId" column="project_id"/>
<result property="type" column="type"/>
<result property="progressName" column="progress_name"/>
<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="remark" column="remark"/>
<result property="status" column="status"/>
<result property="timeRemark" column="time_remark"/>
<result property="parentId" column="parent_id"/>
<result property="sort" column="sort"/>
<result property="remark" column="remark"/>
<result property="status" column="status"/>
<result property="timeRemark" column="time_remark"/>
<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>
<!-- 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 distinct detail_name, department
@@ -101,4 +195,6 @@
</select>
</mapper>

View File

@@ -480,5 +480,28 @@
${ew.getCustomSqlSegment}
</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>

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
where sowt.warehouse_id = sow.id
and sowm.type = 2
and sowt.del_flag = '0'
and sowm.del_flag = '0'
and sowm.status = 0
) as task_inventory
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);