Merge remote-tracking branch 'origin/main'
This commit is contained in:
@@ -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("上传文件不能为空");
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
/**
|
||||
|
||||
@@ -92,6 +92,8 @@ public class OaProgressVo {
|
||||
|
||||
private List<OaProgressVo> children;
|
||||
|
||||
private List<OaProgressDetailVo> tasks;
|
||||
|
||||
/**
|
||||
* 联系人电话
|
||||
*/
|
||||
|
||||
@@ -230,6 +230,11 @@ public class SysOaProjectVo {
|
||||
*/
|
||||
private Long tradeType;
|
||||
|
||||
/**
|
||||
* 总完成度
|
||||
*/
|
||||
private Long progress;
|
||||
|
||||
/**
|
||||
* 预付款
|
||||
*/
|
||||
|
||||
@@ -32,7 +32,7 @@ public class SysOaWarehouseVo extends SysOaWarehouse {
|
||||
* 序号
|
||||
*/
|
||||
@ExcelProperty(value = "序号")
|
||||
private Long temp;
|
||||
private String temp;
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
@@ -74,4 +74,6 @@ public interface ISysOaProjectService {
|
||||
* @return
|
||||
*/
|
||||
TableDataInfo<SysOaProjectVo> queryPageList2(SysOaProjectBo bo, PageQuery pageQuery);
|
||||
|
||||
TableDataInfo<SysOaProjectVo> listProjects(SysOaProjectBo bo, PageQuery pageQuery);
|
||||
}
|
||||
|
||||
@@ -36,6 +36,13 @@ public interface ISysOaWarehouseService {
|
||||
*/
|
||||
Long insertByBo(SysOaWarehouseBo bo);
|
||||
|
||||
|
||||
/**
|
||||
* 新增仓库管理
|
||||
*/
|
||||
Long insertByBo2(SysOaWarehouseBo bo);
|
||||
|
||||
|
||||
/**
|
||||
* 修改仓库管理
|
||||
*/
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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)); // 2025‑05‑13
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
97
script/sql/progress.sql
Normal 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 '父进度ID,0或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);
|
||||
|
||||
Reference in New Issue
Block a user