[add] 添加分包物料管理相关接口 [update] 修改分包包结构,修改知识库部分逻辑

This commit is contained in:
lcj
2025-06-27 20:00:51 +08:00
parent 48fb86cf84
commit 3671f6c81a
123 changed files with 3119 additions and 1009 deletions

View File

@ -283,6 +283,6 @@ sparta:
url: http://119.3.204.120:8040
client-id: test
client-secret: 115fcb08fa6742a1b086d9bb80a6ad59
# 身份证加密密钥
# 身份证加密密钥32 位)
id-card:
encrypt-key: 7ae260d150a14027d2238a1cf80a48ef

View File

@ -267,13 +267,21 @@ justauth:
redirect-uri: ${justauth.address}/social-callback?source=gitlab
# 和风天气 https://dev.qweather.com/
weather:
key-id: xx
project-id: xx
private-key: xx
api-host: xx
key-id: T65EAABUXC
project-id: 2JTHPUQ5YY
private-key: MC4CAQAwBQYDK2VwBCIEIMAglX7IsxYiTeM+FXXnvCUsIggajeP4s8gAllewm6BN
api-host: n35rk53njv.re.qweatherapi.com
# dxf转 geojson 执行文件名
dxf2GeoJson:
file-name: main
ys7:
app-key: 3acf9f1a43dc4209841e0893003db0a2
app-secret: 4bbf3e9394f55d3af6e3af27b2d3db36
# 斯巴达算法
sparta:
url: http://119.3.204.120:8040
client-id: test
client-secret: 115fcb08fa6742a1b086d9bb80a6ad59
# 身份证加密密钥32 位)
id-card:
encrypt-key: 7ae260d150a14027d2238a1cf80a48ef

View File

@ -121,7 +121,9 @@ security:
- /*/api-docs/**
- /warm-flow-ui/token-name
- /other/ys7Device/webhook
# todo 仅测试
- /facility/matrix/**
- /changxie/callback
# 多租户配置
tenant:

View File

@ -1,10 +1,10 @@
package org.dromara.project.constant;
package org.dromara.contractor.constant;
/**
* @author lcj
* @date 2025/4/2 17:18
*/
public interface BusConstructionUserConstant {
public interface SubConstructionUserConstant {
/**
* 施工人员文件类型字典

View File

@ -1,4 +1,4 @@
package org.dromara.project.controller;
package org.dromara.contractor.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import jakarta.servlet.http.HttpServletResponse;
@ -15,13 +15,13 @@ import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.project.domain.exportvo.BusConstructionUserExportVo;
import org.dromara.project.domain.dto.constructionuser.*;
import org.dromara.project.domain.vo.constructionuser.BusConstructionUserAttendanceMonthVo;
import org.dromara.project.domain.vo.constructionuser.BusConstructionUserAttendanceTotalVo;
import org.dromara.project.domain.vo.constructionuser.BusConstructionUserGisVo;
import org.dromara.project.domain.vo.constructionuser.BusConstructionUserVo;
import org.dromara.project.service.IBusConstructionUserService;
import org.dromara.contractor.domain.dto.constructionuser.*;
import org.dromara.contractor.domain.exportvo.BusConstructionUserExportVo;
import org.dromara.contractor.domain.vo.constructionuser.SubConstructionUserAttendanceMonthVo;
import org.dromara.contractor.domain.vo.constructionuser.SubConstructionUserAttendanceTotalVo;
import org.dromara.contractor.domain.vo.constructionuser.SubConstructionUserGisVo;
import org.dromara.contractor.domain.vo.constructionuser.SubConstructionUserVo;
import org.dromara.contractor.service.ISubConstructionUserService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -37,46 +37,46 @@ import java.util.List;
@RequiredArgsConstructor
@RestController
@RequestMapping("/project/constructionUser")
public class BusConstructionUserController extends BaseController {
public class SubConstructionUserController extends BaseController {
private final IBusConstructionUserService busConstructionUserService;
private final ISubConstructionUserService constructionUserService;
/**
* 查询施工人员列表
*/
@SaCheckPermission("project:constructionUser:list")
@SaCheckPermission("contractor:constructionUser:list")
@GetMapping("/list")
public TableDataInfo<BusConstructionUserVo> list(BusConstructionUserQueryReq req, PageQuery pageQuery) {
return busConstructionUserService.queryPageList(req, pageQuery);
public TableDataInfo<SubConstructionUserVo> list(SubConstructionUserQueryReq req, PageQuery pageQuery) {
return constructionUserService.queryPageList(req, pageQuery);
}
/**
* 查询每个施工人员总的考勤列表
*/
@SaCheckPermission("project:attendance:list")
@SaCheckPermission("contractor:attendance:list")
@GetMapping("/list/attendance/total")
public TableDataInfo<BusConstructionUserAttendanceTotalVo> listAttendanceTotal(BusConstructionUserAttendanceQueryReq req,
public TableDataInfo<SubConstructionUserAttendanceTotalVo> listAttendanceTotal(SubConstructionUserAttendanceQueryReq req,
PageQuery pageQuery) {
return busConstructionUserService.queryPageAttendanceList(req, pageQuery);
return constructionUserService.queryPageAttendanceList(req, pageQuery);
}
/**
* 查询施工人员月份考勤列表
*/
@SaCheckPermission("project:constructionUser:list")
@SaCheckPermission("contractor:constructionUser:list")
@GetMapping("/list/attendance/month")
public R<List<BusConstructionUserAttendanceMonthVo>> listAttendanceMonth(BusConstructionUserAttendanceMonthReq req) {
return R.ok(busConstructionUserService.queryAttendanceMonthList(req));
public R<List<SubConstructionUserAttendanceMonthVo>> listAttendanceMonth(SubConstructionUserAttendanceMonthReq req) {
return R.ok(constructionUserService.queryAttendanceMonthList(req));
}
/**
* 导出施工人员列表
*/
@SaCheckPermission("project:constructionUser:export")
@SaCheckPermission("contractor:constructionUser:export")
@Log(title = "施工人员", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(BusConstructionUserQueryReq req, HttpServletResponse response) {
List<BusConstructionUserExportVo> list = busConstructionUserService.queryList(req);
public void export(SubConstructionUserQueryReq req, HttpServletResponse response) {
List<BusConstructionUserExportVo> list = constructionUserService.queryList(req);
ExcelUtil.exportExcel(list, "施工人员", BusConstructionUserExportVo.class, response);
}
@ -85,97 +85,97 @@ public class BusConstructionUserController extends BaseController {
*
* @param id 主键
*/
@SaCheckPermission("project:constructionUser:query")
@SaCheckPermission("contractor:constructionUser:query")
@GetMapping("/{id}")
public R<BusConstructionUserVo> getInfo(@NotNull(message = "主键不能为空")
public R<SubConstructionUserVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(busConstructionUserService.queryById(id));
return R.ok(constructionUserService.queryById(id));
}
/**
* 查询大屏施工人员信息
*/
@SaCheckPermission("project:constructionUser:query")
@SaCheckPermission("contractor:constructionUser:query")
@GetMapping("/gis")
public R<BusConstructionUserGisVo> getGisData(BusConstructionUserGisReq req) {
return R.ok(busConstructionUserService.getGisData(req));
public R<SubConstructionUserGisVo> getGisData(SubConstructionUserGisReq req) {
return R.ok(constructionUserService.getGisData(req));
}
/**
* 新增施工人员
*/
@SaCheckPermission("project:constructionUser:add")
@SaCheckPermission("contractor:constructionUser:add")
@Log(title = "施工人员", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Long> add(@Validated(AddGroup.class) @RequestBody BusConstructionUserCreateReq req) {
return R.ok(busConstructionUserService.insertByBo(req));
public R<Long> add(@Validated(AddGroup.class) @RequestBody SubConstructionUserCreateReq req) {
return R.ok(constructionUserService.insertByBo(req));
}
/**
* 修改施工人员
*/
@SaCheckPermission("project:constructionUser:edit")
@SaCheckPermission("contractor:constructionUser:edit")
@Log(title = "施工人员", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody BusConstructionUserUpdateReq req) {
return toAjax(busConstructionUserService.updateByBo(req));
public R<Void> edit(@Validated(EditGroup.class) @RequestBody SubConstructionUserUpdateReq req) {
return toAjax(constructionUserService.updateByBo(req));
}
/**
* 修改施工人员工资
*/
@SaCheckPermission("project:constructionUser:edit")
@SaCheckPermission("contractor:constructionUser:edit")
@Log(title = "施工人员", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping("/salary")
public R<Void> editSalary(@Validated(EditGroup.class) @RequestBody BusConstructionUserUpdateSalaryReq req) {
return toAjax(busConstructionUserService.updateSalary(req));
public R<Void> editSalary(@Validated(EditGroup.class) @RequestBody SubConstructionUserUpdateSalaryReq req) {
return toAjax(constructionUserService.updateSalary(req));
}
/**
* 修改施工人员打卡状态
*/
@SaCheckPermission("project:constructionUser:edit")
@SaCheckPermission("contractor:constructionUser:edit")
@Log(title = "施工人员", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping("/clock")
public R<Void> editClock(@Validated(EditGroup.class) @RequestBody BusConstructionUserUpdateClockReq req) {
return toAjax(busConstructionUserService.updateClock(req));
public R<Void> editClock(@Validated(EditGroup.class) @RequestBody SubConstructionUserUpdateClockReq req) {
return toAjax(constructionUserService.updateClock(req));
}
/**
* 批量修改施工人员状态
*/
@SaCheckPermission("project:constructionUser:edit")
@SaCheckPermission("contractor:constructionUser:edit")
@Log(title = "施工人员", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping("/batch/status")
public R<Void> batchUpdateStatus(@Validated(EditGroup.class) @RequestBody BusConstructionUserBatchUpdateStatusReq req) {
return toAjax(busConstructionUserService.batchUpdateStatus(req));
public R<Void> batchUpdateStatus(@Validated(EditGroup.class) @RequestBody SubConstructionUserBatchUpdateStatusReq req) {
return toAjax(constructionUserService.batchUpdateStatus(req));
}
/**
* 根据项目id批量修改施工人员打卡状态
*/
@SaCheckPermission("project:constructionUser:edit")
@SaCheckPermission("contractor:constructionUser:edit")
@Log(title = "施工人员", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping("/batch/clock")
public R<Void> batchUpdateClock(@Validated(EditGroup.class) @RequestBody BusConstructionUserBatchUpdateClockReq req) {
return toAjax(busConstructionUserService.batchUpdateClockByProjectId(req));
public R<Void> batchUpdateClock(@Validated(EditGroup.class) @RequestBody SubConstructionUserBatchUpdateClockReq req) {
return toAjax(constructionUserService.batchUpdateClockByProjectId(req));
}
/**
* 施工人员迁移
*/
@SaCheckPermission("project:constructionUser:edit")
@SaCheckPermission("contractor:constructionUser:edit")
@Log(title = "施工人员", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping("/change/project")
public R<Void> changeUserProject(@Validated(EditGroup.class) @RequestBody BusConstructionUserChangeProjectReq req) {
return toAjax(busConstructionUserService.changeUserProject(req));
public R<Void> changeUserProject(@Validated(EditGroup.class) @RequestBody SubConstructionUserChangeProjectReq req) {
return toAjax(constructionUserService.changeUserProject(req));
}
/**
@ -183,11 +183,11 @@ public class BusConstructionUserController extends BaseController {
*
* @param ids 主键串
*/
@SaCheckPermission("project:constructionUser:remove")
@SaCheckPermission("contractor:constructionUser:remove")
@Log(title = "施工人员", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(busConstructionUserService.deleteWithValidByIds(List.of(ids), true));
return toAjax(constructionUserService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -1,4 +1,4 @@
package org.dromara.project.controller;
package org.dromara.contractor.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import jakarta.servlet.http.HttpServletResponse;
@ -10,11 +10,11 @@ import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.web.core.BaseController;
import org.dromara.project.domain.dto.constructionuserfile.BusConstructionUserFileQueryReq;
import org.dromara.project.domain.dto.constructionuserfile.BusConstructionUserFileSaveReq;
import org.dromara.project.domain.dto.constructionuserfile.BusConstructionUserFileTemplateReq;
import org.dromara.project.domain.vo.constructionuserfile.BusConstructionUserFileVo;
import org.dromara.project.service.IBusConstructionUserFileService;
import org.dromara.contractor.domain.dto.constructionuserfile.SubConstructionUserFileQueryReq;
import org.dromara.contractor.domain.dto.constructionuserfile.SubConstructionUserFileSaveReq;
import org.dromara.contractor.domain.dto.constructionuserfile.SubConstructionUserFileTemplateReq;
import org.dromara.contractor.domain.vo.constructionuserfile.SubConstructionUserFileVo;
import org.dromara.contractor.service.ISubConstructionUserFileService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@ -31,50 +31,50 @@ import java.util.List;
@RequiredArgsConstructor
@RestController
@RequestMapping("/project/constructionUserFile")
public class BusConstructionUserFileController extends BaseController {
public class SubConstructionUserFileController extends BaseController {
private final IBusConstructionUserFileService busConstructionUserFileService;
private final ISubConstructionUserFileService constructionUserFileService;
/**
* 查询施工人员文件存储列表
*/
@SaCheckPermission("project:constructionUserFile:list")
@SaCheckPermission("contractor:constructionUserFile:list")
@GetMapping("/list")
public R<List<BusConstructionUserFileVo>> list(BusConstructionUserFileQueryReq req) {
return R.ok(busConstructionUserFileService.queryList(req));
public R<List<SubConstructionUserFileVo>> list(SubConstructionUserFileQueryReq req) {
return R.ok(constructionUserFileService.queryList(req));
}
/**
* 导出施工人员文件存储列表
*/
@SaCheckPermission("project:constructionUserFile:export")
@SaCheckPermission("contractor:constructionUserFile:export")
@Log(title = "施工人员文件存储", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(BusConstructionUserFileQueryReq req, HttpServletResponse response) {
List<BusConstructionUserFileVo> list = busConstructionUserFileService.queryList(req);
ExcelUtil.exportExcel(list, "施工人员文件存储", BusConstructionUserFileVo.class, response);
public void export(SubConstructionUserFileQueryReq req, HttpServletResponse response) {
List<SubConstructionUserFileVo> list = constructionUserFileService.queryList(req);
ExcelUtil.exportExcel(list, "施工人员文件存储", SubConstructionUserFileVo.class, response);
}
/**
* 下载施工人员文件存储模板
*/
@SaCheckPermission("project:constructionUserFile:export")
@SaCheckPermission("contractor:constructionUserFile:export")
@Log(title = "施工人员文件存储", businessType = BusinessType.EXPORT)
@RepeatSubmit()
@PostMapping("/exportFileTemplate")
public void exportFileTemplate(BusConstructionUserFileTemplateReq req, HttpServletResponse response) {
busConstructionUserFileService.downloadFileTemplate(req, response);
public void exportFileTemplate(SubConstructionUserFileTemplateReq req, HttpServletResponse response) {
constructionUserFileService.downloadFileTemplate(req, response);
}
/**
* 上传施工人员文件压缩包批量导入存储施工人员文件
*/
@SaCheckPermission("project:constructionUserFile:edit")
@SaCheckPermission("contractor:constructionUserFile:edit")
@Log(title = "施工人员文件存储", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("/upload/zip")
public R<Boolean> uploadFileZip(@RequestParam("file") MultipartFile file) {
Boolean result = busConstructionUserFileService.batchUploadFileByZip(file);
Boolean result = constructionUserFileService.batchUploadFileByZip(file);
return R.ok(result);
}
@ -83,21 +83,21 @@ public class BusConstructionUserFileController extends BaseController {
*
* @param id 主键
*/
@SaCheckPermission("project:constructionUserFile:query")
@SaCheckPermission("contractor:constructionUserFile:query")
@GetMapping("/{id}")
public R<BusConstructionUserFileVo> getInfo(@NotNull(message = "主键不能为空")
public R<SubConstructionUserFileVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(busConstructionUserFileService.queryById(id));
return R.ok(constructionUserFileService.queryById(id));
}
/**
* 保存施工人员文件存储详情信息
*/
@SaCheckPermission("project:constructionUserFile:edit")
@SaCheckPermission("contractor:constructionUserFile:edit")
@Log(title = "施工人员文件存储", businessType = BusinessType.INSERT)
@PostMapping("/save")
public R<Boolean> save(@RequestBody BusConstructionUserFileSaveReq req) {
return R.ok(busConstructionUserFileService.saveFileList(req));
public R<Boolean> save(@RequestBody SubConstructionUserFileSaveReq req) {
return R.ok(constructionUserFileService.saveFileList(req));
}
}

View File

@ -1,4 +1,4 @@
package org.dromara.project.controller;
package org.dromara.contractor.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import jakarta.servlet.http.HttpServletResponse;
@ -15,11 +15,11 @@ import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.project.domain.dto.contractor.BusContractorCreateReq;
import org.dromara.project.domain.dto.contractor.BusContractorQueryReq;
import org.dromara.project.domain.dto.contractor.BusContractorUpdateReq;
import org.dromara.project.domain.vo.contractor.BusContractorVo;
import org.dromara.project.service.IBusContractorService;
import org.dromara.contractor.domain.dto.contractor.SubContractorCreateReq;
import org.dromara.contractor.domain.dto.contractor.SubContractorQueryReq;
import org.dromara.contractor.domain.dto.contractor.SubContractorUpdateReq;
import org.dromara.contractor.domain.vo.contractor.SubContractorVo;
import org.dromara.contractor.service.ISubContractorService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -35,28 +35,28 @@ import java.util.List;
@RequiredArgsConstructor
@RestController
@RequestMapping("/project/contractor")
public class BusContractorController extends BaseController {
public class SubContractorController extends BaseController {
private final IBusContractorService busContractorService;
private final ISubContractorService contractorService;
/**
* 查询分包单位列表
*/
@SaCheckPermission("project:contractor:list")
@SaCheckPermission("contractor:contractor:list")
@GetMapping("/list")
public TableDataInfo<BusContractorVo> list(BusContractorQueryReq req, PageQuery pageQuery) {
return busContractorService.queryPageList(req, pageQuery);
public TableDataInfo<SubContractorVo> list(SubContractorQueryReq req, PageQuery pageQuery) {
return contractorService.queryPageList(req, pageQuery);
}
/**
* 导出分包单位列表
*/
@SaCheckPermission("project:contractor:export")
@SaCheckPermission("contractor:contractor:export")
@Log(title = "分包单位", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(BusContractorQueryReq req, HttpServletResponse response) {
List<BusContractorVo> list = busContractorService.queryList(req);
ExcelUtil.exportExcel(list, "分包单位", BusContractorVo.class, response);
public void export(SubContractorQueryReq req, HttpServletResponse response) {
List<SubContractorVo> list = contractorService.queryList(req);
ExcelUtil.exportExcel(list, "分包单位", SubContractorVo.class, response);
}
/**
@ -64,33 +64,33 @@ public class BusContractorController extends BaseController {
*
* @param id 主键
*/
@SaCheckPermission("project:contractor:query")
@SaCheckPermission("contractor:contractor:query")
@GetMapping("/{id}")
public R<BusContractorVo> getInfo(@NotNull(message = "主键不能为空")
public R<SubContractorVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(busContractorService.queryById(id));
return R.ok(contractorService.queryById(id));
}
/**
* 新增分包单位
*/
@SaCheckPermission("project:contractor:add")
@SaCheckPermission("contractor:contractor:add")
@Log(title = "分包单位", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Long> add(@Validated(AddGroup.class) @RequestBody BusContractorCreateReq req) {
return R.ok(busContractorService.insertByBo(req));
public R<Long> add(@Validated(AddGroup.class) @RequestBody SubContractorCreateReq req) {
return R.ok(contractorService.insertByBo(req));
}
/**
* 修改分包单位
*/
@SaCheckPermission("project:contractor:edit")
@SaCheckPermission("contractor:contractor:edit")
@Log(title = "分包单位", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody BusContractorUpdateReq req) {
return toAjax(busContractorService.updateByBo(req));
public R<Void> edit(@Validated(EditGroup.class) @RequestBody SubContractorUpdateReq req) {
return toAjax(contractorService.updateByBo(req));
}
/**
@ -98,11 +98,11 @@ public class BusContractorController extends BaseController {
*
* @param ids 主键串
*/
@SaCheckPermission("project:contractor:remove")
@SaCheckPermission("contractor:contractor:remove")
@Log(title = "分包单位", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(busContractorService.deleteWithValidByIds(List.of(ids), true));
return toAjax(contractorService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,108 @@
package org.dromara.contractor.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.contractor.domain.dto.contractormaterial.SubContractorMaterialCreateReq;
import org.dromara.contractor.domain.dto.contractormaterial.SubContractorMaterialQueryReq;
import org.dromara.contractor.domain.dto.contractormaterial.SubContractorMaterialUpdateReq;
import org.dromara.contractor.domain.vo.contractormaterial.SubContractorMaterialVo;
import org.dromara.contractor.service.ISubContractorMaterialService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 分包方物料
*
* @author lcj
* @date 2025-06-27
*/
@Validated
@RestController
@RequestMapping("/contractor/contractorMaterial")
public class SubContractorMaterialController extends BaseController {
@Resource
private ISubContractorMaterialService contractorMaterialService;
/**
* 查询分包方物料列表
*/
@SaCheckPermission("contractor:contractorMaterial:list")
@GetMapping("/list")
public TableDataInfo<SubContractorMaterialVo> list(SubContractorMaterialQueryReq req, PageQuery pageQuery) {
return contractorMaterialService.queryPageList(req, pageQuery);
}
/**
* 导出分包方物料列表
*/
@SaCheckPermission("contractor:contractorMaterial:export")
@Log(title = "分包方物料", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(SubContractorMaterialQueryReq req, HttpServletResponse response) {
List<SubContractorMaterialVo> list = contractorMaterialService.queryList(req);
ExcelUtil.exportExcel(list, "分包方物料", SubContractorMaterialVo.class, response);
}
/**
* 获取分包方物料详细信息
*
* @param id 主键
*/
@SaCheckPermission("contractor:contractorMaterial:query")
@GetMapping("/{id}")
public R<SubContractorMaterialVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(contractorMaterialService.queryById(id));
}
/**
* 新增分包方物料
*/
@SaCheckPermission("contractor:contractorMaterial:add")
@Log(title = "分包方物料", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Long> add(@Validated(AddGroup.class) @RequestBody SubContractorMaterialCreateReq req) {
return R.ok(contractorMaterialService.insertByBo(req));
}
/**
* 修改分包方物料
*/
@SaCheckPermission("contractor:contractorMaterial:edit")
@Log(title = "分包方物料", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody SubContractorMaterialUpdateReq req) {
return toAjax(contractorMaterialService.updateByBo(req));
}
/**
* 删除分包方物料
*
* @param ids 主键串
*/
@SaCheckPermission("contractor:contractorMaterial:remove")
@Log(title = "分包方物料", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(contractorMaterialService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,108 @@
package org.dromara.contractor.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.contractor.domain.dto.contractormaterialrecord.SubContractorMaterialRecordCreateReq;
import org.dromara.contractor.domain.dto.contractormaterialrecord.SubContractorMaterialRecordQueryReq;
import org.dromara.contractor.domain.dto.contractormaterialrecord.SubContractorMaterialRecordUpdateReq;
import org.dromara.contractor.domain.vo.contractormaterialrecord.SubContractorMaterialRecordVo;
import org.dromara.contractor.service.ISubContractorMaterialRecordService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 分包方物料记录
*
* @author lcj
* @date 2025-06-27
*/
@Validated
@RestController
@RequestMapping("/contractor/contractorMaterialRecord")
public class SubContractorMaterialRecordController extends BaseController {
@Resource
private ISubContractorMaterialRecordService subContractorMaterialRecordService;
/**
* 查询分包方物料记录列表
*/
@SaCheckPermission("contractor:contractorMaterialRecord:list")
@GetMapping("/list")
public TableDataInfo<SubContractorMaterialRecordVo> list(SubContractorMaterialRecordQueryReq req, PageQuery pageQuery) {
return subContractorMaterialRecordService.queryPageList(req, pageQuery);
}
/**
* 导出分包方物料记录列表
*/
@SaCheckPermission("contractor:contractorMaterialRecord:export")
@Log(title = "分包方物料记录", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(SubContractorMaterialRecordQueryReq req, HttpServletResponse response) {
List<SubContractorMaterialRecordVo> list = subContractorMaterialRecordService.queryList(req);
ExcelUtil.exportExcel(list, "分包方物料记录", SubContractorMaterialRecordVo.class, response);
}
/**
* 获取分包方物料记录详细信息
*
* @param id 主键
*/
@SaCheckPermission("contractor:contractorMaterialRecord:query")
@GetMapping("/{id}")
public R<SubContractorMaterialRecordVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(subContractorMaterialRecordService.queryById(id));
}
/**
* 新增分包方物料记录
*/
@SaCheckPermission("contractor:contractorMaterialRecord:add")
@Log(title = "分包方物料记录", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Long> add(@Validated(AddGroup.class) @RequestBody SubContractorMaterialRecordCreateReq req) {
return R.ok(subContractorMaterialRecordService.insertByBo(req));
}
/**
* 修改分包方物料记录
*/
@SaCheckPermission("contractor:contractorMaterialRecord:edit")
@Log(title = "分包方物料记录", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody SubContractorMaterialRecordUpdateReq req) {
return toAjax(subContractorMaterialRecordService.updateByBo(req));
}
/**
* 删除分包方物料记录
*
* @param ids 主键串
*/
@SaCheckPermission("contractor:contractorMaterialRecord:remove")
@Log(title = "分包方物料记录", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(subContractorMaterialRecordService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -1,4 +1,4 @@
package org.dromara.project.controller;
package org.dromara.contractor.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import jakarta.annotation.Resource;
@ -15,11 +15,11 @@ import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.project.domain.dto.contractortool.BusContractorToolCreateReq;
import org.dromara.project.domain.dto.contractortool.BusContractorToolQueryReq;
import org.dromara.project.domain.dto.contractortool.BusContractorToolUpdateReq;
import org.dromara.project.domain.vo.contractortool.BusContractorToolVo;
import org.dromara.project.service.IBusContractorToolService;
import org.dromara.contractor.domain.dto.contractortool.SubContractorToolCreateReq;
import org.dromara.contractor.domain.dto.contractortool.SubContractorToolQueryReq;
import org.dromara.contractor.domain.dto.contractortool.SubContractorToolUpdateReq;
import org.dromara.contractor.domain.vo.contractortool.SubContractorToolVo;
import org.dromara.contractor.service.ISubContractorToolService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -34,29 +34,29 @@ import java.util.List;
@Validated
@RestController
@RequestMapping("/project/contractorTool")
public class BusContractorToolController extends BaseController {
public class SubContractorToolController extends BaseController {
@Resource
private IBusContractorToolService busContractorToolService;
private ISubContractorToolService busContractorToolService;
/**
* 查询分包方工器具列表
*/
@SaCheckPermission("project:contractorTool:list")
@SaCheckPermission("contractor:contractorTool:list")
@GetMapping("/list")
public TableDataInfo<BusContractorToolVo> list(BusContractorToolQueryReq req, PageQuery pageQuery) {
public TableDataInfo<SubContractorToolVo> list(SubContractorToolQueryReq req, PageQuery pageQuery) {
return busContractorToolService.queryPageList(req, pageQuery);
}
/**
* 导出分包方工器具列表
*/
@SaCheckPermission("project:contractorTool:export")
@SaCheckPermission("contractor:contractorTool:export")
@Log(title = "分包方工器具", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(BusContractorToolQueryReq req, HttpServletResponse response) {
List<BusContractorToolVo> list = busContractorToolService.queryList(req);
ExcelUtil.exportExcel(list, "分包方工器具", BusContractorToolVo.class, response);
public void export(SubContractorToolQueryReq req, HttpServletResponse response) {
List<SubContractorToolVo> list = busContractorToolService.queryList(req);
ExcelUtil.exportExcel(list, "分包方工器具", SubContractorToolVo.class, response);
}
/**
@ -64,9 +64,9 @@ public class BusContractorToolController extends BaseController {
*
* @param id 主键
*/
@SaCheckPermission("project:contractorTool:query")
@SaCheckPermission("contractor:contractorTool:query")
@GetMapping("/{id}")
public R<BusContractorToolVo> getInfo(@NotNull(message = "主键不能为空")
public R<SubContractorToolVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(busContractorToolService.queryById(id));
}
@ -74,22 +74,22 @@ public class BusContractorToolController extends BaseController {
/**
* 新增分包方工器具
*/
@SaCheckPermission("project:contractorTool:add")
@SaCheckPermission("contractor:contractorTool:add")
@Log(title = "分包方工器具", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Long> add(@Validated(AddGroup.class) @RequestBody BusContractorToolCreateReq req) {
public R<Long> add(@Validated(AddGroup.class) @RequestBody SubContractorToolCreateReq req) {
return R.ok(busContractorToolService.insertByBo(req));
}
/**
* 修改分包方工器具
*/
@SaCheckPermission("project:contractorTool:edit")
@SaCheckPermission("contractor:contractorTool:edit")
@Log(title = "分包方工器具", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody BusContractorToolUpdateReq req) {
public R<Void> edit(@Validated(EditGroup.class) @RequestBody SubContractorToolUpdateReq req) {
return toAjax(busContractorToolService.updateByBo(req));
}
@ -98,7 +98,7 @@ public class BusContractorToolController extends BaseController {
*
* @param ids 主键串
*/
@SaCheckPermission("project:contractorTool:remove")
@SaCheckPermission("contractor:contractorTool:remove")
@Log(title = "分包方工器具", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")

View File

@ -1,4 +1,4 @@
package org.dromara.project.controller;
package org.dromara.contractor.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import jakarta.annotation.Resource;
@ -13,11 +13,11 @@ import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.web.core.BaseController;
import org.dromara.project.domain.dto.subcontract.BusSubcontractCreateReq;
import org.dromara.project.domain.dto.subcontract.BusSubcontractQueryReq;
import org.dromara.project.domain.dto.subcontract.BusSubcontractUpdateReq;
import org.dromara.project.domain.vo.subcontract.BusSubcontractVo;
import org.dromara.project.service.IBusSubcontractService;
import org.dromara.contractor.domain.dto.subcontract.SubSubcontractCreateReq;
import org.dromara.contractor.domain.dto.subcontract.SubSubcontractQueryReq;
import org.dromara.contractor.domain.dto.subcontract.SubSubcontractUpdateReq;
import org.dromara.contractor.domain.vo.subcontract.SubSubcontractVo;
import org.dromara.contractor.service.ISubSubcontractService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -32,17 +32,17 @@ import java.util.List;
@Validated
@RestController
@RequestMapping("/project/subcontract")
public class BusSubcontractController extends BaseController {
public class SubSubcontractController extends BaseController {
@Resource
private IBusSubcontractService subcontractService;
private ISubSubcontractService subcontractService;
/**
* 查询分包合同列表
*/
@SaCheckPermission("project:subcontract:list")
@SaCheckPermission("contractor:subcontract:list")
@GetMapping("/list")
public TableDataInfo<BusSubcontractVo> list(BusSubcontractQueryReq req, PageQuery pageQuery) {
public TableDataInfo<SubSubcontractVo> list(SubSubcontractQueryReq req, PageQuery pageQuery) {
return subcontractService.queryPageList(req, pageQuery);
}
@ -51,9 +51,9 @@ public class BusSubcontractController extends BaseController {
*
* @param id 主键
*/
@SaCheckPermission("project:subcontract:query")
@SaCheckPermission("contractor:subcontract:query")
@GetMapping("/{id}")
public R<BusSubcontractVo> getInfo(@NotNull(message = "主键不能为空")
public R<SubSubcontractVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(subcontractService.queryById(id));
}
@ -61,22 +61,22 @@ public class BusSubcontractController extends BaseController {
/**
* 新增分包合同
*/
@SaCheckPermission("project:subcontract:add")
@SaCheckPermission("contractor:subcontract:add")
@Log(title = "分包合同", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Long> add(@Validated(AddGroup.class) @RequestBody BusSubcontractCreateReq req) {
public R<Long> add(@Validated(AddGroup.class) @RequestBody SubSubcontractCreateReq req) {
return R.ok(subcontractService.insertByBo(req));
}
/**
* 修改分包合同
*/
@SaCheckPermission("project:subcontract:edit")
@SaCheckPermission("contractor:subcontract:edit")
@Log(title = "分包合同", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody BusSubcontractUpdateReq req) {
public R<Void> edit(@Validated(EditGroup.class) @RequestBody SubSubcontractUpdateReq req) {
return toAjax(subcontractService.updateByBo(req));
}
@ -85,7 +85,7 @@ public class BusSubcontractController extends BaseController {
*
* @param ids 主键串
*/
@SaCheckPermission("project:subcontract:remove")
@SaCheckPermission("contractor:subcontract:remove")
@Log(title = "分包合同", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")

View File

@ -1,4 +1,4 @@
package org.dromara.project.domain;
package org.dromara.contractor.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
@ -11,15 +11,15 @@ import java.io.Serial;
import java.util.Date;
/**
* 施工人员对象 bus_construction_user
* 施工人员对象 sub_construction_user
*
* @author lcj
* @date 2025-03-07
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("bus_construction_user")
public class BusConstructionUser extends BaseEntity {
@TableName("sub_construction_user")
public class SubConstructionUser extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;

View File

@ -1,4 +1,4 @@
package org.dromara.project.domain;
package org.dromara.contractor.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
@ -9,14 +9,14 @@ import java.io.Serializable;
import java.util.Date;
/**
* 施工人员文件存储对象 bus_construction_user_file
* 施工人员文件存储对象 sub_construction_user_file
*
* @author lcj
* @date 2025-04-01
*/
@Data
@TableName("bus_construction_user_file")
public class BusConstructionUserFile implements Serializable {
@TableName("sub_construction_user_file")
public class SubConstructionUserFile implements Serializable {
@Serial
private static final long serialVersionUID = 1L;

View File

@ -1,4 +1,4 @@
package org.dromara.project.domain;
package org.dromara.contractor.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
@ -11,15 +11,15 @@ import java.io.Serial;
import java.util.Date;
/**
* 分包单位对象 bus_contractor
* 分包单位对象 sub_contractor
*
* @author lcj
* @date 2025-03-07
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("bus_contractor")
public class BusContractor extends BaseEntity {
@TableName("sub_contractor")
public class SubContractor extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;

View File

@ -0,0 +1,90 @@
package org.dromara.contractor.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import java.io.Serial;
import java.math.BigDecimal;
import java.util.Date;
/**
* 分包方物料对象 sub_contractor_material
*
* @author lcj
* @date 2025-06-27
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sub_contractor_material")
public class SubContractorMaterial extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
@TableId(value = "id")
private Long id;
/**
* 项目id
*/
private Long projectId;
/**
* 分包方id
*/
private Long contractorId;
/**
* 物料名称
*/
private String materialName;
/**
* 物料类型
*/
private String materialType;
/**
* 物料型号
*/
private String materialModel;
/**
* 物料数量
*/
private BigDecimal materialNumber;
/**
* 物料单位
*/
private String materialUnit;
/**
* 文件
*/
private String file;
/**
* 备注
*/
private String remark;
/**
* 删除时间
*/
private Date deletedAt;
/**
* 是否删除0正常 1删除
*/
@TableLogic
private Long isDelete;
}

View File

@ -0,0 +1,83 @@
package org.dromara.contractor.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import java.io.Serial;
import java.math.BigDecimal;
import java.util.Date;
/**
* 分包方物料记录对象 sub_contractor_material_record
*
* @author lcj
* @date 2025-06-27
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sub_contractor_material_record")
public class SubContractorMaterialRecord extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
@TableId(value = "id")
private Long id;
/**
* 项目id
*/
private Long projectId;
/**
* 分包方id
*/
private Long contractorId;
/**
* 物料id
*/
private Long contractorMaterialId;
/**
* 记录类型(1到货计划 2使用情况)
*/
private String recordType;
/**
* 记录时间
*/
private Date recordTime;
/**
* 数量
*/
private BigDecimal recordNumber;
/**
* 剩余数量(到货 使用)
*/
private BigDecimal remainingNumber;
/**
* 使用位置或构件部位(使用情况)
*/
private String usedPosition;
/**
* 相关附件
*/
private String file;
/**
* 备注
*/
private String remark;
}

View File

@ -1,4 +1,4 @@
package org.dromara.project.domain;
package org.dromara.contractor.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
@ -8,18 +8,19 @@ import lombok.EqualsAndHashCode;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import java.io.Serial;
import java.math.BigDecimal;
import java.util.Date;
/**
* 分包方工器具对象 bus_contractor_tool
* 分包方工器具对象 sub_contractor_tool
*
* @author lcj
* @date 2025-06-26
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("bus_contractor_tool")
public class BusContractorTool extends BaseEntity {
@TableName("sub_contractor_tool")
public class SubContractorTool extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
@ -58,7 +59,7 @@ public class BusContractorTool extends BaseEntity {
/**
* 工具数量
*/
private String toolNumber;
private BigDecimal toolNumber;
/**
* 文件

View File

@ -2,11 +2,14 @@ package org.dromara.contractor.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.json.handler.BigDecimalToIntegerSerializer;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import java.io.Serial;
import java.math.BigDecimal;
import java.util.Date;
/**
@ -50,9 +53,16 @@ public class SubContractorToolRecord extends BaseEntity {
private String recordType;
/**
* 进场工器具数量
* 记录工器具数量
*/
private String toolNumber;
@JsonSerialize(using = BigDecimalToIntegerSerializer.class)
private BigDecimal recordNumber;
/**
* 剩余数量
*/
@JsonSerialize(using = BigDecimalToIntegerSerializer.class)
private BigDecimal remainingNumber;
/**
* 检测编号
@ -80,8 +90,8 @@ public class SubContractorToolRecord extends BaseEntity {
private String remark;
/**
* 进场时间
* 记录时间
*/
private Date entryTime;
private Date recordTime;
}

View File

@ -1,4 +1,4 @@
package org.dromara.project.domain;
package org.dromara.contractor.domain;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
@ -10,14 +10,14 @@ import java.math.BigDecimal;
import java.util.Date;
/**
* 分包合同对象 bus_subcontract
* 分包合同对象 sub_subcontract
*
* @author lcj
* @date 2025-06-25
*/
@Data
@TableName("bus_subcontract")
public class BusSubcontract implements Serializable {
@TableName("sub_subcontract")
public class SubSubcontract implements Serializable {
@Serial
private static final long serialVersionUID = 1L;

View File

@ -1,4 +1,4 @@
package org.dromara.project.domain.dto.constructionuser;
package org.dromara.contractor.domain.dto.constructionuser;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@ -11,7 +11,7 @@ import java.io.Serializable;
* @date 2025/4/7 15:04
*/
@Data
public class BusConstructionUserAttendanceMonthReq implements Serializable {
public class SubConstructionUserAttendanceMonthReq implements Serializable {
@Serial
private static final long serialVersionUID = -1496942176392426636L;

View File

@ -1,4 +1,4 @@
package org.dromara.project.domain.dto.constructionuser;
package org.dromara.contractor.domain.dto.constructionuser;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@ -11,7 +11,7 @@ import java.io.Serializable;
* @date 2025/4/7 10:52
*/
@Data
public class BusConstructionUserAttendanceQueryReq implements Serializable {
public class SubConstructionUserAttendanceQueryReq implements Serializable {
@Serial
private static final long serialVersionUID = -6634291825924626633L;

View File

@ -1,4 +1,4 @@
package org.dromara.project.domain.dto.constructionuser;
package org.dromara.contractor.domain.dto.constructionuser;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@ -13,7 +13,7 @@ import java.io.Serializable;
* @date 2025/4/2 9:14
*/
@Data
public class BusConstructionUserBatchUpdateClockReq implements Serializable {
public class SubConstructionUserBatchUpdateClockReq implements Serializable {
@Serial
private static final long serialVersionUID = -5803749609177642435L;

View File

@ -1,4 +1,4 @@
package org.dromara.project.domain.dto.constructionuser;
package org.dromara.contractor.domain.dto.constructionuser;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@ -14,7 +14,7 @@ import java.util.List;
* @date 2025/4/1 17:11
*/
@Data
public class BusConstructionUserBatchUpdateStatusReq implements Serializable {
public class SubConstructionUserBatchUpdateStatusReq implements Serializable {
@Serial
private static final long serialVersionUID = -3756685899069233313L;

View File

@ -1,4 +1,4 @@
package org.dromara.project.domain.dto.constructionuser;
package org.dromara.contractor.domain.dto.constructionuser;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@ -13,7 +13,7 @@ import java.io.Serializable;
* @date 2025/3/31 14:50
*/
@Data
public class BusConstructionUserChangeProjectReq implements Serializable {
public class SubConstructionUserChangeProjectReq implements Serializable {
@Serial
private static final long serialVersionUID = -2638471692809830501L;

View File

@ -1,4 +1,4 @@
package org.dromara.project.domain.dto.constructionuser;
package org.dromara.contractor.domain.dto.constructionuser;
import lombok.Data;
@ -10,7 +10,7 @@ import java.io.Serializable;
* @date 2025/3/5 14:05
*/
@Data
public class BusConstructionUserCreateReq implements Serializable {
public class SubConstructionUserCreateReq implements Serializable {
@Serial
private static final long serialVersionUID = -7603153089205421154L;

View File

@ -1,4 +1,4 @@
package org.dromara.project.domain.dto.constructionuser;
package org.dromara.contractor.domain.dto.constructionuser;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@ -11,7 +11,7 @@ import java.io.Serializable;
* @date 2025/4/28 9:40
*/
@Data
public class BusConstructionUserGisReq implements Serializable {
public class SubConstructionUserGisReq implements Serializable {
@Serial
private static final long serialVersionUID = 2487357135566518535L;

View File

@ -1,4 +1,4 @@
package org.dromara.project.domain.dto.constructionuser;
package org.dromara.contractor.domain.dto.constructionuser;
import lombok.Data;
@ -10,7 +10,7 @@ import java.io.Serializable;
* @date 2025/3/5 14:31
*/
@Data
public class BusConstructionUserQueryReq implements Serializable {
public class SubConstructionUserQueryReq implements Serializable {
@Serial
private static final long serialVersionUID = 3252651952758479341L;

View File

@ -1,4 +1,4 @@
package org.dromara.project.domain.dto.constructionuser;
package org.dromara.contractor.domain.dto.constructionuser;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@ -13,7 +13,7 @@ import java.io.Serializable;
* @date 2025/4/2 9:14
*/
@Data
public class BusConstructionUserUpdateClockReq implements Serializable {
public class SubConstructionUserUpdateClockReq implements Serializable {
@Serial
private static final long serialVersionUID = -5803749609177642435L;

View File

@ -1,4 +1,4 @@
package org.dromara.project.domain.dto.constructionuser;
package org.dromara.contractor.domain.dto.constructionuser;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@ -11,7 +11,7 @@ import java.io.Serializable;
* @date 2025/3/5 15:04
*/
@Data
public class BusConstructionUserUpdateReq implements Serializable {
public class SubConstructionUserUpdateReq implements Serializable {
@Serial
private static final long serialVersionUID = -8022860866890925958L;

View File

@ -1,4 +1,4 @@
package org.dromara.project.domain.dto.constructionuser;
package org.dromara.contractor.domain.dto.constructionuser;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@ -11,7 +11,7 @@ import java.io.Serializable;
* @date 2025/4/2 11:35
*/
@Data
public class BusConstructionUserUpdateSalaryReq implements Serializable {
public class SubConstructionUserUpdateSalaryReq implements Serializable {
@Serial
private static final long serialVersionUID = -1300674086812422523L;

View File

@ -1,4 +1,4 @@
package org.dromara.project.domain.dto.constructionuserfile;
package org.dromara.contractor.domain.dto.constructionuserfile;
import lombok.Data;
@ -10,7 +10,7 @@ import java.io.Serializable;
* @date 2025/4/1 10:06
*/
@Data
public class BusConstructionUserFileQueryReq implements Serializable {
public class SubConstructionUserFileQueryReq implements Serializable {
@Serial
private static final long serialVersionUID = 552027602186820020L;

View File

@ -1,4 +1,4 @@
package org.dromara.project.domain.dto.constructionuserfile;
package org.dromara.contractor.domain.dto.constructionuserfile;
import lombok.AllArgsConstructor;
import lombok.Data;
@ -11,7 +11,7 @@ import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class BusConstructionUserFileReq {
public class SubConstructionUserFileReq {
/**
* 文件类型

View File

@ -1,4 +1,4 @@
package org.dromara.project.domain.dto.constructionuserfile;
package org.dromara.contractor.domain.dto.constructionuserfile;
import lombok.Data;
@ -11,7 +11,7 @@ import java.util.List;
* @date 2025/4/1 10:01
*/
@Data
public class BusConstructionUserFileSaveReq implements Serializable {
public class SubConstructionUserFileSaveReq implements Serializable {
@Serial
private static final long serialVersionUID = 4319620202781413796L;
@ -24,6 +24,6 @@ public class BusConstructionUserFileSaveReq implements Serializable {
/**
* 文件列表
*/
private List<BusConstructionUserFileReq> fileList;
private List<SubConstructionUserFileReq> fileList;
}

View File

@ -1,4 +1,4 @@
package org.dromara.project.domain.dto.constructionuserfile;
package org.dromara.contractor.domain.dto.constructionuserfile;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
@ -12,7 +12,7 @@ import java.util.List;
* @date 2025/4/9 9:25
*/
@Data
public class BusConstructionUserFileTemplateReq implements Serializable {
public class SubConstructionUserFileTemplateReq implements Serializable {
@Serial
private static final long serialVersionUID = -6895109153171403950L;

View File

@ -1,4 +1,4 @@
package org.dromara.project.domain.dto.contractor;
package org.dromara.contractor.domain.dto.contractor;
import lombok.Data;
@ -11,7 +11,7 @@ import java.util.Map;
* @date 2025/3/5 14:05
*/
@Data
public class BusContractorCreateReq implements Serializable {
public class SubContractorCreateReq implements Serializable {
@Serial
private static final long serialVersionUID = -7603153089205421154L;

View File

@ -1,4 +1,4 @@
package org.dromara.project.domain.dto.contractor;
package org.dromara.contractor.domain.dto.contractor;
import lombok.Data;
@ -10,7 +10,7 @@ import java.io.Serializable;
* @date 2025/3/5 14:31
*/
@Data
public class BusContractorQueryReq implements Serializable {
public class SubContractorQueryReq implements Serializable {
@Serial
private static final long serialVersionUID = 3252651952758479341L;

View File

@ -1,4 +1,4 @@
package org.dromara.project.domain.dto.contractor;
package org.dromara.contractor.domain.dto.contractor;
import lombok.Data;
@ -11,7 +11,7 @@ import java.util.Map;
* @date 2025/3/5 15:04
*/
@Data
public class BusContractorUpdateReq implements Serializable {
public class SubContractorUpdateReq implements Serializable {
@Serial
private static final long serialVersionUID = -8022860866890925958L;

View File

@ -0,0 +1,58 @@
package org.dromara.contractor.domain.dto.contractormaterial;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* @author lcj
* @date 2025/6/27 14:18
*/
@Data
public class SubContractorMaterialCreateReq implements Serializable {
@Serial
private static final long serialVersionUID = -5984785792671407395L;
/**
* 项目id
*/
private Long projectId;
/**
* 分包方id
*/
private Long contractorId;
/**
* 物料名称
*/
private String materialName;
/**
* 物料类型
*/
private String materialType;
/**
* 物料型号
*/
private String materialModel;
/**
* 物料单位
*/
private String materialUnit;
/**
* 文件
*/
private String file;
/**
* 备注
*/
private String remark;
}

View File

@ -0,0 +1,43 @@
package org.dromara.contractor.domain.dto.contractormaterial;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* @author lcj
* @date 2025/6/27 14:20
*/
@Data
public class SubContractorMaterialQueryReq implements Serializable {
@Serial
private static final long serialVersionUID = 640474123189874263L;
/**
* 项目id
*/
private Long projectId;
/**
* 分包方id
*/
private Long contractorId;
/**
* 物料名称
*/
private String materialName;
/**
* 物料类型
*/
private String materialType;
/**
* 物料型号
*/
private String materialModel;
}

View File

@ -0,0 +1,63 @@
package org.dromara.contractor.domain.dto.contractormaterial;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* @author lcj
* @date 2025/6/27 14:20
*/
@Data
public class SubContractorMaterialUpdateReq implements Serializable {
@Serial
private static final long serialVersionUID = -4488270790673814590L;
/**
* 主键id
*/
private Long id;
/**
* 项目id
*/
private Long projectId;
/**
* 分包方id
*/
private Long contractorId;
/**
* 物料名称
*/
private String materialName;
/**
* 物料类型
*/
private String materialType;
/**
* 物料型号
*/
private String materialModel;
/**
* 物料单位
*/
private String materialUnit;
/**
* 文件
*/
private String file;
/**
* 备注
*/
private String remark;
}

View File

@ -0,0 +1,57 @@
package org.dromara.contractor.domain.dto.contractormaterialrecord;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* @author lcj
* @date 2025/6/27 14:35
*/
@Data
public class SubContractorMaterialRecordCreateReq implements Serializable {
@Serial
private static final long serialVersionUID = -2325294573057427849L;
/**
* 物料id
*/
private Long contractorMaterialId;
/**
* 记录类型(1到货计划 2使用情况)
*/
private String recordType;
/**
* 记录时间
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
private Date recordTime;
/**
* 数量
*/
private BigDecimal recordNumber;
/**
* 使用位置或构件部位(使用情况)
*/
private String usedPosition;
/**
* 相关附件
*/
private String file;
/**
* 备注
*/
private String remark;
}

View File

@ -0,0 +1,43 @@
package org.dromara.contractor.domain.dto.contractormaterialrecord;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* @author lcj
* @date 2025/6/27 14:36
*/
@Data
public class SubContractorMaterialRecordQueryReq implements Serializable {
@Serial
private static final long serialVersionUID = -5817912360176038347L;
/**
* 项目id
*/
private Long projectId;
/**
* 分包方id
*/
private Long contractorId;
/**
* 物料id
*/
private Long contractorMaterialId;
/**
* 记录类型(1到货计划 2使用情况)
*/
private String recordType;
/**
* 使用位置或构件部位(使用情况)
*/
private String usedPosition;
}

View File

@ -0,0 +1,62 @@
package org.dromara.contractor.domain.dto.contractormaterialrecord;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* @author lcj
* @date 2025/6/27 14:36
*/
@Data
public class SubContractorMaterialRecordUpdateReq implements Serializable {
@Serial
private static final long serialVersionUID = -6087029523445301396L;
/**
* 主键id
*/
private Long id;
/**
* 物料id
*/
private Long contractorMaterialId;
/**
* 记录类型(1到货计划 2使用情况)
*/
private String recordType;
/**
* 记录时间
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
private Date recordTime;
/**
* 数量
*/
private BigDecimal recordNumber;
/**
* 使用位置或构件部位(使用情况)
*/
private String usedPosition;
/**
* 相关附件
*/
private String file;
/**
* 备注
*/
private String remark;
}

View File

@ -1,16 +1,17 @@
package org.dromara.project.domain.dto.contractortool;
package org.dromara.contractor.domain.dto.contractortool;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @author lcj
* @date 2025/6/26 15:26
*/
@Data
public class BusContractorToolCreateReq implements Serializable {
public class SubContractorToolCreateReq implements Serializable {
@Serial
private static final long serialVersionUID = -148571725751082526L;
@ -43,7 +44,7 @@ public class BusContractorToolCreateReq implements Serializable {
/**
* 工具数量
*/
private String toolNumber;
private BigDecimal toolNumber;
/**
* 文件

View File

@ -1,4 +1,4 @@
package org.dromara.project.domain.dto.contractortool;
package org.dromara.contractor.domain.dto.contractortool;
import lombok.Data;
@ -10,7 +10,7 @@ import java.io.Serializable;
* @date 2025/6/26 15:26
*/
@Data
public class BusContractorToolQueryReq implements Serializable {
public class SubContractorToolQueryReq implements Serializable {
@Serial
private static final long serialVersionUID = -654101391027815665L;

View File

@ -1,16 +1,17 @@
package org.dromara.project.domain.dto.contractortool;
package org.dromara.contractor.domain.dto.contractortool;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* @author lcj
* @date 2025/6/26 15:26
*/
@Data
public class BusContractorToolUpdateReq implements Serializable {
public class SubContractorToolUpdateReq implements Serializable {
@Serial
private static final long serialVersionUID = 6147452720586538283L;
@ -48,7 +49,7 @@ public class BusContractorToolUpdateReq implements Serializable {
/**
* 工具数量
*/
private String toolNumber;
private BigDecimal toolNumber;
/**
* 文件

View File

@ -1,9 +1,11 @@
package org.dromara.contractor.domain.dto.contractortoolentry;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
@ -27,9 +29,9 @@ public class SubContractorToolRecordCreateReq implements Serializable {
private String recordType;
/**
* 进场工器具数量
* 记录工器具数量
*/
private String toolNumber;
private BigDecimal recordNumber;
/**
* 检测编号
@ -44,6 +46,7 @@ public class SubContractorToolRecordCreateReq implements Serializable {
/**
* 检测时间
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
private Date checkTime;
/**
@ -57,7 +60,8 @@ public class SubContractorToolRecordCreateReq implements Serializable {
private String remark;
/**
* 进场时间
* 记录时间
*/
private Date entryTime;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
private Date recordTime;
}

View File

@ -40,4 +40,9 @@ public class SubContractorToolRecordQueryReq implements Serializable {
*/
private String checkDept;
/**
* 记录类型
*/
private String recordType;
}

View File

@ -1,9 +1,11 @@
package org.dromara.contractor.domain.dto.contractortoolentry;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
@ -22,9 +24,9 @@ public class SubContractorToolRecordUpdateReq implements Serializable {
private Long id;
/**
* 进场工器具数量
* 记录工器具数量
*/
private String toolNumber;
private BigDecimal recordNumber;
/**
* 检测编号
@ -39,6 +41,7 @@ public class SubContractorToolRecordUpdateReq implements Serializable {
/**
* 检测时间
*/
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
private Date checkTime;
/**
@ -52,8 +55,9 @@ public class SubContractorToolRecordUpdateReq implements Serializable {
private String remark;
/**
* 进场时间
* 记录时间
*/
private Date entryTime;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd")
private Date recordTime;
}

View File

@ -1,4 +1,4 @@
package org.dromara.project.domain.dto.subcontract;
package org.dromara.contractor.domain.dto.subcontract;
import lombok.Data;
@ -12,7 +12,7 @@ import java.util.Date;
* @date 2025/6/25 16:36
*/
@Data
public class BusSubcontractCreateReq implements Serializable {
public class SubSubcontractCreateReq implements Serializable {
@Serial
private static final long serialVersionUID = -3386090526440868496L;

View File

@ -1,4 +1,4 @@
package org.dromara.project.domain.dto.subcontract;
package org.dromara.contractor.domain.dto.subcontract;
import lombok.Data;
@ -10,7 +10,7 @@ import java.io.Serializable;
* @date 2025/6/25 16:37
*/
@Data
public class BusSubcontractQueryReq implements Serializable {
public class SubSubcontractQueryReq implements Serializable {
@Serial
private static final long serialVersionUID = 3731492397283570840L;

View File

@ -1,4 +1,4 @@
package org.dromara.project.domain.dto.subcontract;
package org.dromara.contractor.domain.dto.subcontract;
import lombok.Data;
@ -12,7 +12,7 @@ import java.util.Date;
* @date 2025/6/25 16:37
*/
@Data
public class BusSubcontractUpdateReq implements Serializable {
public class SubSubcontractUpdateReq implements Serializable {
@Serial
private static final long serialVersionUID = -5617446079713109912L;

View File

@ -1,4 +1,4 @@
package org.dromara.project.domain.enums;
package org.dromara.contractor.domain.enums;
import lombok.Getter;
@ -7,7 +7,7 @@ import lombok.Getter;
* @date 2025/4/3 17:47
*/
@Getter
public enum BusConstructionUserFileStatusEnum {
public enum SubConstructionUserFileStatusEnum {
NOUPLOAD("未上传", "1"),
PARTUPLOAD("部分上传", "2"),
@ -17,7 +17,7 @@ public enum BusConstructionUserFileStatusEnum {
private final String value;
BusConstructionUserFileStatusEnum(String text, String value) {
SubConstructionUserFileStatusEnum(String text, String value) {
this.text = text;
this.value = value;
}

View File

@ -0,0 +1,23 @@
package org.dromara.contractor.domain.enums;
import lombok.Getter;
/**
* @author lcj
* @date 2025/6/27 10:30
*/
@Getter
public enum SubContractorRecordEnum {
PUT("进场/入库", "1"),
OUT("出场/出库", "2");
private final String text;
private final String value;
SubContractorRecordEnum(String text, String value) {
this.text = text;
this.value = value;
}
}

View File

@ -1,4 +1,4 @@
package org.dromara.project.domain.exportvo;
package org.dromara.contractor.domain.exportvo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
@ -6,7 +6,7 @@ import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import org.dromara.project.domain.BusConstructionUser;
import org.dromara.contractor.domain.SubConstructionUser;
import java.io.Serial;
import java.io.Serializable;
@ -18,7 +18,7 @@ import java.util.Date;
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = BusConstructionUser.class)
@AutoMapper(target = SubConstructionUser.class)
public class BusConstructionUserExportVo implements Serializable {
@Serial

View File

@ -1,4 +1,4 @@
package org.dromara.project.domain.vo.constructionuser;
package org.dromara.contractor.domain.vo.constructionuser;
import lombok.AllArgsConstructor;
import lombok.Data;
@ -16,7 +16,7 @@ import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BusConstructionUserAttendanceByDay {
public class SubConstructionUserAttendanceByDay {
/**
* 上班打卡时间
@ -47,11 +47,11 @@ public class BusConstructionUserAttendanceByDay {
*/
private Date downClockTime;
public static BusConstructionUserAttendanceByDay build(List<BusAttendance> attendanceList) {
public static SubConstructionUserAttendanceByDay build(List<BusAttendance> attendanceList) {
if (attendanceList == null) {
return null;
}
BusConstructionUserAttendanceByDay constructionUserAttendanceByDay = new BusConstructionUserAttendanceByDay();
SubConstructionUserAttendanceByDay constructionUserAttendanceByDay = new SubConstructionUserAttendanceByDay();
for (BusAttendance attendance : attendanceList) {
if (attendance.getCommuter().equals(BusAttendanceCommuterEnum.CLOCKIN.getValue())) {
constructionUserAttendanceByDay.setUpClockTime(attendance.getClockTime());

View File

@ -1,4 +1,4 @@
package org.dromara.project.domain.vo.constructionuser;
package org.dromara.contractor.domain.vo.constructionuser;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
@ -12,7 +12,7 @@ import java.util.Date;
* @date 2025/4/7 15:06
*/
@Data
public class BusConstructionUserAttendanceMonthVo implements Serializable {
public class SubConstructionUserAttendanceMonthVo implements Serializable {
@Serial
private static final long serialVersionUID = -413447291128760025L;
@ -38,6 +38,6 @@ public class BusConstructionUserAttendanceMonthVo implements Serializable {
/**
* 当天打卡记录
*/
private BusConstructionUserAttendanceByDay clockList;
private SubConstructionUserAttendanceByDay clockList;
}

View File

@ -1,4 +1,4 @@
package org.dromara.project.domain.vo.constructionuser;
package org.dromara.contractor.domain.vo.constructionuser;
import lombok.Data;
@ -11,7 +11,7 @@ import java.io.Serializable;
* @date 2025/4/7 10:16
*/
@Data
public class BusConstructionUserAttendanceTotalVo implements Serializable {
public class SubConstructionUserAttendanceTotalVo implements Serializable {
@Serial
private static final long serialVersionUID = 1335094839733429171L;

View File

@ -1,4 +1,4 @@
package org.dromara.project.domain.vo.constructionuser;
package org.dromara.contractor.domain.vo.constructionuser;
import lombok.Data;
@ -10,7 +10,7 @@ import java.io.Serializable;
* @date 2025/4/28 9:33
*/
@Data
public class BusConstructionUserGisVo implements Serializable {
public class SubConstructionUserGisVo implements Serializable {
@Serial
private static final long serialVersionUID = -3496633845665259321L;

View File

@ -1,4 +1,4 @@
package org.dromara.project.domain.vo.constructionuser;
package org.dromara.contractor.domain.vo.constructionuser;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
@ -6,8 +6,8 @@ import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import org.dromara.project.domain.BusConstructionUser;
import org.dromara.project.domain.vo.contractor.BusContractorVo;
import org.dromara.contractor.domain.SubConstructionUser;
import org.dromara.contractor.domain.vo.contractor.SubContractorVo;
import java.io.Serial;
import java.io.Serializable;
@ -22,8 +22,8 @@ import java.util.Date;
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = BusConstructionUser.class)
public class BusConstructionUserVo implements Serializable {
@AutoMapper(target = SubConstructionUser.class)
public class SubConstructionUserVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@ -67,7 +67,7 @@ public class BusConstructionUserVo implements Serializable {
/**
* 分包公司
*/
private BusContractorVo contractorVo;
private SubContractorVo contractorVo;
/**
* 班组id

View File

@ -1,4 +1,4 @@
package org.dromara.project.domain.vo.constructionuserfile;
package org.dromara.contractor.domain.vo.constructionuserfile;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
@ -6,7 +6,7 @@ import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import org.dromara.project.domain.BusConstructionUserFile;
import org.dromara.contractor.domain.SubConstructionUserFile;
import java.io.Serial;
import java.io.Serializable;
@ -20,8 +20,8 @@ import java.io.Serializable;
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = BusConstructionUserFile.class)
public class BusConstructionUserFileVo implements Serializable {
@AutoMapper(target = SubConstructionUserFile.class)
public class SubConstructionUserFileVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;

View File

@ -1,10 +1,10 @@
package org.dromara.project.domain.vo.contractor;
package org.dromara.contractor.domain.vo.contractor;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.project.domain.BusContractor;
import org.dromara.contractor.domain.SubContractor;
import java.io.Serial;
import java.io.Serializable;
@ -13,15 +13,15 @@ import java.util.Map;
/**
* 分包单位视图对象 bus_contractor
* 分包单位视图对象 sub_contractor
*
* @author lcj
* @date 2025-03-07
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = BusContractor.class)
public class BusContractorVo implements Serializable {
@AutoMapper(target = SubContractor.class)
public class SubContractorVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;

View File

@ -0,0 +1,97 @@
package org.dromara.contractor.domain.vo.contractormaterial;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.TableId;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import org.dromara.contractor.domain.SubContractorMaterial;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* 分包方物料视图对象 sub_contractor_material
*
* @author lcj
* @date 2025-06-27
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = SubContractorMaterial.class)
public class SubContractorMaterialVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
@ExcelProperty(value = "主键id")
private Long id;
/**
* 项目id
*/
@ExcelProperty(value = "项目id")
private Long projectId;
/**
* 分包方id
*/
@ExcelProperty(value = "分包方id")
private Long contractorId;
/**
* 分包方名称
*/
private String contractorName;
/**
* 物料名称
*/
@ExcelProperty(value = "物料名称")
private String materialName;
/**
* 物料类型
*/
@ExcelProperty(value = "物料类型", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "contractor_material_type")
private String materialType;
/**
* 物料型号
*/
@ExcelProperty(value = "物料型号")
private String materialModel;
/**
* 物料数量
*/
@ExcelProperty(value = "物料数量")
private BigDecimal materialNumber;
/**
* 物料单位
*/
@ExcelProperty(value = "物料单位")
private String materialUnit;
/**
* 文件
*/
@ExcelProperty(value = "文件")
private String file;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
}

View File

@ -0,0 +1,109 @@
package org.dromara.contractor.domain.vo.contractormaterialrecord;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import org.dromara.contractor.domain.SubContractorMaterialRecord;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* 分包方物料记录视图对象 sub_contractor_material_record
*
* @author lcj
* @date 2025-06-27
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = SubContractorMaterialRecord.class)
public class SubContractorMaterialRecordVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
@ExcelProperty(value = "主键id")
private Long id;
/**
* 项目id
*/
@ExcelProperty(value = "项目id")
private Long projectId;
/**
* 分包方id
*/
@ExcelProperty(value = "分包方id")
private Long contractorId;
/**
* 分包方名称
*/
private String contractorName;
/**
* 物料id
*/
@ExcelProperty(value = "物料id")
private Long contractorMaterialId;
/**
* 物料名称
*/
private String contractorMaterialName;
/**
* 记录类型(1到货计划 2使用情况)
*/
@ExcelProperty(value = "记录类型(1到货计划 2使用情况)", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "contractor_material_record_type")
private String recordType;
/**
* 记录时间
*/
@ExcelProperty(value = "记录时间")
private Date recordTime;
/**
* 数量
*/
@ExcelProperty(value = "数量")
private BigDecimal recordNumber;
/**
* 剩余数量(到货 使用)
*/
@ExcelProperty(value = "剩余数量(到货 使用)")
private BigDecimal remainingNumber;
/**
* 使用位置或构件部位(使用情况)
*/
@ExcelProperty(value = "使用位置或构件部位(使用情况)")
private String usedPosition;
/**
* 相关附件
*/
@ExcelProperty(value = "相关附件")
private String file;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
}

View File

@ -1,4 +1,4 @@
package org.dromara.project.domain.vo.contractortool;
package org.dromara.contractor.domain.vo.contractortool;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
@ -6,23 +6,24 @@ import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import org.dromara.project.domain.BusContractorTool;
import org.dromara.contractor.domain.SubContractorTool;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* 分包方工器具视图对象 bus_contractor_tool
* 分包方工器具视图对象 sub_contractor_tool
*
* @author lcj
* @date 2025-06-26
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = BusContractorTool.class)
public class BusContractorToolVo implements Serializable {
@AutoMapper(target = SubContractorTool.class)
public class SubContractorToolVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@ -73,7 +74,7 @@ public class BusContractorToolVo implements Serializable {
* 工具数量
*/
@ExcelProperty(value = "工具数量")
private String toolNumber;
private BigDecimal toolNumber;
/**
* 备注

View File

@ -2,12 +2,14 @@ package org.dromara.contractor.domain.vo.contractortoolentry;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.contractor.domain.SubContractorToolRecord;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
@ -66,10 +68,16 @@ public class SubContractorToolRecordVo implements Serializable {
private String recordType;
/**
* 进场工器具数量
* 记录工器具数量
*/
@ExcelProperty(value = "进场工器具数量")
private String toolNumber;
@ExcelProperty(value = "记录工器具数量")
private BigDecimal recordNumber;
/**
* 剩余数量
*/
@ExcelProperty(value = "剩余数量")
private BigDecimal remainingNumber;
/**
* 检测编号
@ -87,6 +95,7 @@ public class SubContractorToolRecordVo implements Serializable {
* 检测时间
*/
@ExcelProperty(value = "检测时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date checkTime;
/**
@ -102,9 +111,10 @@ public class SubContractorToolRecordVo implements Serializable {
private String remark;
/**
* 进场时间
* 记录时间
*/
@ExcelProperty(value = "进场时间")
private Date entryTime;
@ExcelProperty(value = "记录时间")
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date recordTime;
}

View File

@ -1,8 +1,8 @@
package org.dromara.project.domain.vo.subcontract;
package org.dromara.contractor.domain.vo.subcontract;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.project.domain.BusSubcontract;
import org.dromara.contractor.domain.SubSubcontract;
import java.io.Serial;
import java.io.Serializable;
@ -11,14 +11,14 @@ import java.util.Date;
/**
* 分包合同视图对象 bus_subcontract
* 分包合同视图对象 sub_subcontract
*
* @author lcj
* @date 2025-06-25
*/
@Data
@AutoMapper(target = BusSubcontract.class)
public class BusSubcontractVo implements Serializable {
@AutoMapper(target = SubSubcontract.class)
public class SubSubcontractVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;

View File

@ -0,0 +1,15 @@
package org.dromara.contractor.mapper;
import org.dromara.contractor.domain.SubConstructionUserFile;
import org.dromara.contractor.domain.vo.constructionuserfile.SubConstructionUserFileVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 施工人员文件存储Mapper接口
*
* @author lcj
* @date 2025-04-01
*/
public interface SubConstructionUserFileMapper extends BaseMapperPlus<SubConstructionUserFile, SubConstructionUserFileVo> {
}

View File

@ -0,0 +1,15 @@
package org.dromara.contractor.mapper;
import org.dromara.contractor.domain.SubConstructionUser;
import org.dromara.contractor.domain.vo.constructionuser.SubConstructionUserVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 施工人员Mapper接口
*
* @author lcj
* @date 2025-03-07
*/
public interface SubConstructionUserMapper extends BaseMapperPlus<SubConstructionUser, SubConstructionUserVo> {
}

View File

@ -0,0 +1,15 @@
package org.dromara.contractor.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.contractor.domain.SubContractor;
import org.dromara.contractor.domain.vo.contractor.SubContractorVo;
/**
* 分包单位Mapper接口
*
* @author lcj
* @date 2025-03-07
*/
public interface SubContractorMapper extends BaseMapperPlus<SubContractor, SubContractorVo> {
}

View File

@ -0,0 +1,15 @@
package org.dromara.contractor.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.contractor.domain.SubContractorMaterial;
import org.dromara.contractor.domain.vo.contractormaterial.SubContractorMaterialVo;
/**
* 分包方物料Mapper接口
*
* @author lcj
* @date 2025-06-27
*/
public interface SubContractorMaterialMapper extends BaseMapperPlus<SubContractorMaterial, SubContractorMaterialVo> {
}

View File

@ -0,0 +1,15 @@
package org.dromara.contractor.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.contractor.domain.SubContractorMaterialRecord;
import org.dromara.contractor.domain.vo.contractormaterialrecord.SubContractorMaterialRecordVo;
/**
* 分包方物料记录Mapper接口
*
* @author lcj
* @date 2025-06-27
*/
public interface SubContractorMaterialRecordMapper extends BaseMapperPlus<SubContractorMaterialRecord, SubContractorMaterialRecordVo> {
}

View File

@ -0,0 +1,15 @@
package org.dromara.contractor.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.contractor.domain.SubContractorTool;
import org.dromara.contractor.domain.vo.contractortool.SubContractorToolVo;
/**
* 分包方工器具Mapper接口
*
* @author lcj
* @date 2025-06-26
*/
public interface SubContractorToolMapper extends BaseMapperPlus<SubContractorTool, SubContractorToolVo> {
}

View File

@ -0,0 +1,15 @@
package org.dromara.contractor.mapper;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.contractor.domain.SubSubcontract;
import org.dromara.contractor.domain.vo.subcontract.SubSubcontractVo;
/**
* 分包合同Mapper接口
*
* @author lcj
* @date 2025-06-25
*/
public interface SubSubcontractMapper extends BaseMapperPlus<SubSubcontract, SubSubcontractVo> {
}

View File

@ -1,14 +1,14 @@
package org.dromara.project.service;
package org.dromara.contractor.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import jakarta.servlet.http.HttpServletResponse;
import org.dromara.project.domain.BusConstructionUser;
import org.dromara.project.domain.BusConstructionUserFile;
import org.dromara.project.domain.dto.constructionuserfile.BusConstructionUserFileQueryReq;
import org.dromara.project.domain.dto.constructionuserfile.BusConstructionUserFileSaveReq;
import org.dromara.project.domain.dto.constructionuserfile.BusConstructionUserFileTemplateReq;
import org.dromara.project.domain.vo.constructionuserfile.BusConstructionUserFileVo;
import org.dromara.contractor.domain.SubConstructionUser;
import org.dromara.contractor.domain.SubConstructionUserFile;
import org.dromara.contractor.domain.dto.constructionuserfile.SubConstructionUserFileQueryReq;
import org.dromara.contractor.domain.dto.constructionuserfile.SubConstructionUserFileSaveReq;
import org.dromara.contractor.domain.dto.constructionuserfile.SubConstructionUserFileTemplateReq;
import org.dromara.contractor.domain.vo.constructionuserfile.SubConstructionUserFileVo;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
@ -19,7 +19,7 @@ import java.util.List;
* @author lcj
* @date 2025-04-01
*/
public interface IBusConstructionUserFileService extends IService<BusConstructionUserFile> {
public interface ISubConstructionUserFileService extends IService<SubConstructionUserFile> {
/**
* 查询施工人员文件存储
@ -27,7 +27,7 @@ public interface IBusConstructionUserFileService extends IService<BusConstructio
* @param id 主键
* @return 施工人员文件存储
*/
BusConstructionUserFileVo queryById(Long id);
SubConstructionUserFileVo queryById(Long id);
/**
* 查询符合条件的施工人员文件存储列表
@ -35,7 +35,7 @@ public interface IBusConstructionUserFileService extends IService<BusConstructio
* @param req 查询条件
* @return 施工人员文件存储列表
*/
List<BusConstructionUserFileVo> queryList(BusConstructionUserFileQueryReq req);
List<SubConstructionUserFileVo> queryList(SubConstructionUserFileQueryReq req);
/**
* 导出施工人员文件模版zip
@ -43,7 +43,7 @@ public interface IBusConstructionUserFileService extends IService<BusConstructio
* @param req 查询条件
* @param response 响应对象
*/
void downloadFileTemplate(BusConstructionUserFileTemplateReq req, HttpServletResponse response);
void downloadFileTemplate(SubConstructionUserFileTemplateReq req, HttpServletResponse response);
/**
* 通过zip文件批量上传施工人员文件
@ -59,7 +59,7 @@ public interface IBusConstructionUserFileService extends IService<BusConstructio
* @param req 保存参数
* @return 是否保存成功
*/
Boolean saveFileList(BusConstructionUserFileSaveReq req);
Boolean saveFileList(SubConstructionUserFileSaveReq req);
/**
* 获取施工人员文件存储查询条件封装
@ -67,7 +67,7 @@ public interface IBusConstructionUserFileService extends IService<BusConstructio
* @param req 查询条件
* @return 查询条件封装
*/
LambdaQueryWrapper<BusConstructionUserFile> buildQueryWrapper(BusConstructionUserFileQueryReq req);
LambdaQueryWrapper<SubConstructionUserFile> buildQueryWrapper(SubConstructionUserFileQueryReq req);
/**
* 获取施工人员查询条件封装
@ -75,6 +75,6 @@ public interface IBusConstructionUserFileService extends IService<BusConstructio
* @param req 查询条件
* @return 查询条件封装
*/
LambdaQueryWrapper<BusConstructionUser> buildTemplateQueryWrapper(BusConstructionUserFileTemplateReq req);
LambdaQueryWrapper<SubConstructionUser> buildTemplateQueryWrapper(SubConstructionUserFileTemplateReq req);
}

View File

@ -1,17 +1,17 @@
package org.dromara.project.service;
package org.dromara.contractor.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.project.domain.BusConstructionUser;
import org.dromara.project.domain.exportvo.BusConstructionUserExportVo;
import org.dromara.project.domain.dto.constructionuser.*;
import org.dromara.project.domain.vo.constructionuser.BusConstructionUserAttendanceMonthVo;
import org.dromara.project.domain.vo.constructionuser.BusConstructionUserAttendanceTotalVo;
import org.dromara.project.domain.vo.constructionuser.BusConstructionUserGisVo;
import org.dromara.project.domain.vo.constructionuser.BusConstructionUserVo;
import org.dromara.contractor.domain.SubConstructionUser;
import org.dromara.contractor.domain.dto.constructionuser.*;
import org.dromara.contractor.domain.vo.constructionuser.SubConstructionUserVo;
import org.dromara.contractor.domain.exportvo.BusConstructionUserExportVo;
import org.dromara.contractor.domain.vo.constructionuser.SubConstructionUserAttendanceMonthVo;
import org.dromara.contractor.domain.vo.constructionuser.SubConstructionUserAttendanceTotalVo;
import org.dromara.contractor.domain.vo.constructionuser.SubConstructionUserGisVo;
import java.util.Collection;
import java.util.List;
@ -22,7 +22,7 @@ import java.util.List;
* @author lcj
* @date 2025-03-07
*/
public interface IBusConstructionUserService extends IService<BusConstructionUser> {
public interface ISubConstructionUserService extends IService<SubConstructionUser> {
/**
* 查询施工人员
@ -30,7 +30,7 @@ public interface IBusConstructionUserService extends IService<BusConstructionUse
* @param id 主键
* @return 施工人员
*/
BusConstructionUserVo queryById(Long id);
SubConstructionUserVo queryById(Long id);
/**
* 分页查询施工人员列表
@ -39,7 +39,7 @@ public interface IBusConstructionUserService extends IService<BusConstructionUse
* @param pageQuery 分页参数
* @return 施工人员分页列表
*/
TableDataInfo<BusConstructionUserVo> queryPageList(BusConstructionUserQueryReq req, PageQuery pageQuery);
TableDataInfo<SubConstructionUserVo> queryPageList(SubConstructionUserQueryReq req, PageQuery pageQuery);
/**
* 分页查询施工人员考勤列表
@ -48,7 +48,7 @@ public interface IBusConstructionUserService extends IService<BusConstructionUse
* @param pageQuery 分页参数
* @return 施工人员考勤分页列表
*/
TableDataInfo<BusConstructionUserAttendanceTotalVo> queryPageAttendanceList(BusConstructionUserAttendanceQueryReq req, PageQuery pageQuery);
TableDataInfo<SubConstructionUserAttendanceTotalVo> queryPageAttendanceList(SubConstructionUserAttendanceQueryReq req, PageQuery pageQuery);
/**
* 查询施工人员月考勤列表
@ -56,7 +56,7 @@ public interface IBusConstructionUserService extends IService<BusConstructionUse
* @param req 查询条件
* @return 施工人员考勤月列表
*/
List<BusConstructionUserAttendanceMonthVo> queryAttendanceMonthList(BusConstructionUserAttendanceMonthReq req);
List<SubConstructionUserAttendanceMonthVo> queryAttendanceMonthList(SubConstructionUserAttendanceMonthReq req);
/**
* 查询符合条件的施工人员列表
@ -64,7 +64,7 @@ public interface IBusConstructionUserService extends IService<BusConstructionUse
* @param req 查询条件
* @return 施工人员列表
*/
List<BusConstructionUserExportVo> queryList(BusConstructionUserQueryReq req);
List<BusConstructionUserExportVo> queryList(SubConstructionUserQueryReq req);
/**
* 获取施工人员大屏数据
@ -72,7 +72,7 @@ public interface IBusConstructionUserService extends IService<BusConstructionUse
* @param req 查询条件
* @return 施工人员大屏数据
*/
BusConstructionUserGisVo getGisData(BusConstructionUserGisReq req);
SubConstructionUserGisVo getGisData(SubConstructionUserGisReq req);
/**
* 新增施工人员
@ -80,7 +80,7 @@ public interface IBusConstructionUserService extends IService<BusConstructionUse
* @param req 施工人员
* @return 是否新增成功
*/
Long insertByBo(BusConstructionUserCreateReq req);
Long insertByBo(SubConstructionUserCreateReq req);
/**
* 修改施工人员
@ -88,7 +88,7 @@ public interface IBusConstructionUserService extends IService<BusConstructionUse
* @param req 施工人员
* @return 是否修改成功
*/
Boolean updateByBo(BusConstructionUserUpdateReq req);
Boolean updateByBo(SubConstructionUserUpdateReq req);
/**
* 修改施工人员工资
@ -96,7 +96,7 @@ public interface IBusConstructionUserService extends IService<BusConstructionUse
* @param req 修改施工人员工资对象
* @return 是否修改成功
*/
Boolean updateSalary(BusConstructionUserUpdateSalaryReq req);
Boolean updateSalary(SubConstructionUserUpdateSalaryReq req);
/**
* 修改施工人员打卡状态
@ -104,7 +104,7 @@ public interface IBusConstructionUserService extends IService<BusConstructionUse
* @param req 修改施工人员打卡状态对象
* @return 是否修改成功
*/
Boolean updateClock(BusConstructionUserUpdateClockReq req);
Boolean updateClock(SubConstructionUserUpdateClockReq req);
/**
* 修改施工人员项目(人员迁移)
@ -112,7 +112,7 @@ public interface IBusConstructionUserService extends IService<BusConstructionUse
* @param req 修改施工人员项目对象
* @return 是否修改成功
*/
Boolean changeUserProject(BusConstructionUserChangeProjectReq req);
Boolean changeUserProject(SubConstructionUserChangeProjectReq req);
/**
* 批量修改施工人员状态
@ -120,7 +120,7 @@ public interface IBusConstructionUserService extends IService<BusConstructionUse
* @param req 批量修改施工人员状态对象
* @return 是否修改成功
*/
Boolean batchUpdateStatus(BusConstructionUserBatchUpdateStatusReq req);
Boolean batchUpdateStatus(SubConstructionUserBatchUpdateStatusReq req);
/**
* 根据项目id批量修改施工人员打卡状态
@ -128,7 +128,7 @@ public interface IBusConstructionUserService extends IService<BusConstructionUse
* @param req 批量修改施工人员打卡状态对象
* @return 是否修改成功
*/
Boolean batchUpdateClockByProjectId(BusConstructionUserBatchUpdateClockReq req);
Boolean batchUpdateClockByProjectId(SubConstructionUserBatchUpdateClockReq req);
/**
* 校验并批量删除施工人员信息
@ -145,7 +145,7 @@ public interface IBusConstructionUserService extends IService<BusConstructionUse
* @param constructionUser 施工人员对象
* @return 施工人员视图对象
*/
BusConstructionUserVo getVo(BusConstructionUser constructionUser);
SubConstructionUserVo getVo(SubConstructionUser constructionUser);
/**
* 获取施工人员查询条件封装
@ -153,7 +153,7 @@ public interface IBusConstructionUserService extends IService<BusConstructionUse
* @param req 查询条件
* @return 查询条件封装
*/
LambdaQueryWrapper<BusConstructionUser> buildQueryWrapper(BusConstructionUserQueryReq req);
LambdaQueryWrapper<SubConstructionUser> buildQueryWrapper(SubConstructionUserQueryReq req);
/**
* 获取施工人员分页对象视图
@ -161,7 +161,7 @@ public interface IBusConstructionUserService extends IService<BusConstructionUse
* @param constructionUserPage 施工人员分页对象
* @return 施工人员分页对象视图
*/
Page<BusConstructionUserVo> getVoPage(Page<BusConstructionUser> constructionUserPage);
Page<SubConstructionUserVo> getVoPage(Page<SubConstructionUser> constructionUserPage);
/**
* 获取施工人员考勤分页对象视图
@ -169,7 +169,7 @@ public interface IBusConstructionUserService extends IService<BusConstructionUse
* @param req 施工人员考勤分页查询条件
* @return 施工人员考勤分页对象视图
*/
Page<BusConstructionUserAttendanceTotalVo> getAttendanceTotalVoPage(BusConstructionUserAttendanceQueryReq req,
Page<SubConstructionUserAttendanceTotalVo> getAttendanceTotalVoPage(SubConstructionUserAttendanceQueryReq req,
PageQuery pageQuery);
}

View File

@ -0,0 +1,98 @@
package org.dromara.contractor.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.contractor.domain.SubContractorMaterialRecord;
import org.dromara.contractor.domain.dto.contractormaterialrecord.SubContractorMaterialRecordCreateReq;
import org.dromara.contractor.domain.dto.contractormaterialrecord.SubContractorMaterialRecordQueryReq;
import org.dromara.contractor.domain.dto.contractormaterialrecord.SubContractorMaterialRecordUpdateReq;
import org.dromara.contractor.domain.vo.contractormaterialrecord.SubContractorMaterialRecordVo;
import java.util.Collection;
import java.util.List;
/**
* 分包方物料记录Service接口
*
* @author lcj
* @date 2025-06-27
*/
public interface ISubContractorMaterialRecordService extends IService<SubContractorMaterialRecord> {
/**
* 查询分包方物料记录
*
* @param id 主键
* @return 分包方物料记录
*/
SubContractorMaterialRecordVo queryById(Long id);
/**
* 分页查询分包方物料记录列表
*
* @param req 查询条件
* @param pageQuery 分页参数
* @return 分包方物料记录分页列表
*/
TableDataInfo<SubContractorMaterialRecordVo> queryPageList(SubContractorMaterialRecordQueryReq req, PageQuery pageQuery);
/**
* 查询符合条件的分包方物料记录列表
*
* @param req 查询条件
* @return 分包方物料记录列表
*/
List<SubContractorMaterialRecordVo> queryList(SubContractorMaterialRecordQueryReq req);
/**
* 新增分包方物料记录
*
* @param req 分包方物料记录
* @return 新增分包方物料记录id
*/
Long insertByBo(SubContractorMaterialRecordCreateReq req);
/**
* 修改分包方物料记录
*
* @param req 分包方物料记录
* @return 是否修改成功
*/
Boolean updateByBo(SubContractorMaterialRecordUpdateReq req);
/**
* 校验并批量删除分包方物料记录信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 获取分包方物料记录视图对象
*
* @param contractorMaterialRecord 分包方物料记录对象
* @return 分包方物料记录视图对象
*/
SubContractorMaterialRecordVo getVo(SubContractorMaterialRecord contractorMaterialRecord);
/**
* 获取分包方物料记录查询条件封装
*
* @param req 分包方物料记录查询条件
* @return 分包方物料记录查询条件封装
*/
LambdaQueryWrapper<SubContractorMaterialRecord> buildQueryWrapper(SubContractorMaterialRecordQueryReq req);
/**
* 获取分包方物料记录分页对象视图
*
* @param contractorMaterialRecordPage 分包方物料记录分页对象
* @return 分包方物料记录分页对象视图
*/
Page<SubContractorMaterialRecordVo> getVoPage(Page<SubContractorMaterialRecord> contractorMaterialRecordPage);
}

View File

@ -0,0 +1,98 @@
package org.dromara.contractor.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.contractor.domain.SubContractorMaterial;
import org.dromara.contractor.domain.dto.contractormaterial.SubContractorMaterialCreateReq;
import org.dromara.contractor.domain.dto.contractormaterial.SubContractorMaterialQueryReq;
import org.dromara.contractor.domain.dto.contractormaterial.SubContractorMaterialUpdateReq;
import org.dromara.contractor.domain.vo.contractormaterial.SubContractorMaterialVo;
import java.util.Collection;
import java.util.List;
/**
* 分包方物料Service接口
*
* @author lcj
* @date 2025-06-27
*/
public interface ISubContractorMaterialService extends IService<SubContractorMaterial> {
/**
* 查询分包方物料
*
* @param id 主键
* @return 分包方物料
*/
SubContractorMaterialVo queryById(Long id);
/**
* 分页查询分包方物料列表
*
* @param req 查询条件
* @param pageQuery 分页参数
* @return 分包方物料分页列表
*/
TableDataInfo<SubContractorMaterialVo> queryPageList(SubContractorMaterialQueryReq req, PageQuery pageQuery);
/**
* 查询符合条件的分包方物料列表
*
* @param req 查询条件
* @return 分包方物料列表
*/
List<SubContractorMaterialVo> queryList(SubContractorMaterialQueryReq req);
/**
* 新增分包方物料
*
* @param req 分包方物料
* @return 新增分包物料主键id
*/
Long insertByBo(SubContractorMaterialCreateReq req);
/**
* 修改分包方物料
*
* @param req 分包方物料
* @return 是否修改成功
*/
Boolean updateByBo(SubContractorMaterialUpdateReq req);
/**
* 校验并批量删除分包方物料信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 获取分包方物料视图对象
*
* @param contractorMaterial 分包方物料对象
* @return 分包方物料视图对象
*/
SubContractorMaterialVo getVo(SubContractorMaterial contractorMaterial);
/**
* 获取分包方物料查询条件封装
*
* @param req 分包方物料查询条件
* @return 分包方物料查询条件封装
*/
LambdaQueryWrapper<SubContractorMaterial> buildQueryWrapper(SubContractorMaterialQueryReq req);
/**
* 获取分包方物料分页对象视图
*
* @param contractorMaterialPage 分包方物料分页对象
* @return 分包方物料分页对象视图
*/
Page<SubContractorMaterialVo> getVoPage(Page<SubContractorMaterial> contractorMaterialPage);
}

View File

@ -1,15 +1,15 @@
package org.dromara.project.service;
package org.dromara.contractor.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.project.domain.BusContractor;
import org.dromara.project.domain.dto.contractor.BusContractorCreateReq;
import org.dromara.project.domain.dto.contractor.BusContractorQueryReq;
import org.dromara.project.domain.dto.contractor.BusContractorUpdateReq;
import org.dromara.project.domain.vo.contractor.BusContractorVo;
import org.dromara.contractor.domain.SubContractor;
import org.dromara.contractor.domain.dto.contractor.SubContractorCreateReq;
import org.dromara.contractor.domain.dto.contractor.SubContractorQueryReq;
import org.dromara.contractor.domain.dto.contractor.SubContractorUpdateReq;
import org.dromara.contractor.domain.vo.contractor.SubContractorVo;
import java.util.Collection;
import java.util.List;
@ -20,7 +20,7 @@ import java.util.List;
* @author lcj
* @date 2025-03-07
*/
public interface IBusContractorService extends IService<BusContractor> {
public interface ISubContractorService extends IService<SubContractor> {
/**
* 查询分包单位
@ -28,7 +28,7 @@ public interface IBusContractorService extends IService<BusContractor> {
* @param id 主键
* @return 分包单位
*/
BusContractorVo queryById(Long id);
SubContractorVo queryById(Long id);
/**
* 分页查询分包单位列表
@ -37,7 +37,7 @@ public interface IBusContractorService extends IService<BusContractor> {
* @param pageQuery 分页参数
* @return 分包单位分页列表
*/
TableDataInfo<BusContractorVo> queryPageList(BusContractorQueryReq req, PageQuery pageQuery);
TableDataInfo<SubContractorVo> queryPageList(SubContractorQueryReq req, PageQuery pageQuery);
/**
* 查询符合条件的分包单位列表
@ -45,7 +45,7 @@ public interface IBusContractorService extends IService<BusContractor> {
* @param req 查询条件
* @return 分包单位列表
*/
List<BusContractorVo> queryList(BusContractorQueryReq req);
List<SubContractorVo> queryList(SubContractorQueryReq req);
/**
* 新增分包单位
@ -53,7 +53,7 @@ public interface IBusContractorService extends IService<BusContractor> {
* @param req 分包单位
* @return 新增id
*/
Long insertByBo(BusContractorCreateReq req);
Long insertByBo(SubContractorCreateReq req);
/**
* 修改分包单位
@ -61,7 +61,7 @@ public interface IBusContractorService extends IService<BusContractor> {
* @param req 分包单位
* @return 是否修改成功
*/
Boolean updateByBo(BusContractorUpdateReq req);
Boolean updateByBo(SubContractorUpdateReq req);
/**
* 校验并批量删除分包单位信息
@ -78,7 +78,7 @@ public interface IBusContractorService extends IService<BusContractor> {
* @param contractor 分包公司对象
* @return 分包公司视图对象
*/
BusContractorVo getVo(BusContractor contractor);
SubContractorVo getVo(SubContractor contractor);
/**
* 获取分包公司查询条件封装
@ -86,7 +86,7 @@ public interface IBusContractorService extends IService<BusContractor> {
* @param req 分包公司查询条件
* @return 分包公司查询条件封装
*/
LambdaQueryWrapper<BusContractor> buildQueryWrapper(BusContractorQueryReq req);
LambdaQueryWrapper<SubContractor> buildQueryWrapper(SubContractorQueryReq req);
/**
* 获取分包公司分页对象视图
@ -94,6 +94,6 @@ public interface IBusContractorService extends IService<BusContractor> {
* @param contractorPage 分包公司分页对象
* @return 分包公司分页对象视图
*/
Page<BusContractorVo> getVoPage(Page<BusContractor> contractorPage);
Page<SubContractorVo> getVoPage(Page<SubContractor> contractorPage);
}

View File

@ -75,10 +75,10 @@ public interface ISubContractorToolRecordService extends IService<SubContractorT
/**
* 获取分包方工器具记录视图对象
*
* @param contractorToolEntry 分包方工器具记录对象
* @param subContractorToolRecord 分包方工器具记录对象
* @return 分包方工器具记录视图对象
*/
SubContractorToolRecordVo getVo(SubContractorToolRecord contractorToolEntry);
SubContractorToolRecordVo getVo(SubContractorToolRecord subContractorToolRecord);
/**
* 获取分包方工器具记录查询条件封装
@ -91,8 +91,8 @@ public interface ISubContractorToolRecordService extends IService<SubContractorT
/**
* 获取分包方工器具记录分页对象视图
*
* @param contractorToolEntryPage 分包方工器具记录分页对象
* @param contractorToolRecordPage 分包方工器具记录分页对象
* @return 分包方工器具记录分页对象视图
*/
Page<SubContractorToolRecordVo> getVoPage(Page<SubContractorToolRecord> contractorToolEntryPage);
Page<SubContractorToolRecordVo> getVoPage(Page<SubContractorToolRecord> contractorToolRecordPage);
}

View File

@ -1,15 +1,15 @@
package org.dromara.project.service;
package org.dromara.contractor.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.project.domain.BusContractorTool;
import org.dromara.project.domain.dto.contractortool.BusContractorToolCreateReq;
import org.dromara.project.domain.dto.contractortool.BusContractorToolQueryReq;
import org.dromara.project.domain.dto.contractortool.BusContractorToolUpdateReq;
import org.dromara.project.domain.vo.contractortool.BusContractorToolVo;
import org.dromara.contractor.domain.SubContractorTool;
import org.dromara.contractor.domain.dto.contractortool.SubContractorToolCreateReq;
import org.dromara.contractor.domain.dto.contractortool.SubContractorToolQueryReq;
import org.dromara.contractor.domain.dto.contractortool.SubContractorToolUpdateReq;
import org.dromara.contractor.domain.vo.contractortool.SubContractorToolVo;
import java.util.Collection;
import java.util.List;
@ -20,7 +20,7 @@ import java.util.List;
* @author lcj
* @date 2025-06-26
*/
public interface IBusContractorToolService extends IService<BusContractorTool> {
public interface ISubContractorToolService extends IService<SubContractorTool> {
/**
* 查询分包方工器具
@ -28,7 +28,7 @@ public interface IBusContractorToolService extends IService<BusContractorTool> {
* @param id 主键
* @return 分包方工器具
*/
BusContractorToolVo queryById(Long id);
SubContractorToolVo queryById(Long id);
/**
* 分页查询分包方工器具列表
@ -37,7 +37,7 @@ public interface IBusContractorToolService extends IService<BusContractorTool> {
* @param pageQuery 分页参数
* @return 分包方工器具分页列表
*/
TableDataInfo<BusContractorToolVo> queryPageList(BusContractorToolQueryReq req, PageQuery pageQuery);
TableDataInfo<SubContractorToolVo> queryPageList(SubContractorToolQueryReq req, PageQuery pageQuery);
/**
* 查询符合条件的分包方工器具列表
@ -45,7 +45,7 @@ public interface IBusContractorToolService extends IService<BusContractorTool> {
* @param req 查询条件
* @return 分包方工器具列表
*/
List<BusContractorToolVo> queryList(BusContractorToolQueryReq req);
List<SubContractorToolVo> queryList(SubContractorToolQueryReq req);
/**
* 新增分包方工器具
@ -53,7 +53,7 @@ public interface IBusContractorToolService extends IService<BusContractorTool> {
* @param req 分包方工器具
* @return 新增分包工器具主键id
*/
Long insertByBo(BusContractorToolCreateReq req);
Long insertByBo(SubContractorToolCreateReq req);
/**
* 修改分包方工器具
@ -61,7 +61,7 @@ public interface IBusContractorToolService extends IService<BusContractorTool> {
* @param req 分包方工器具
* @return 是否修改成功
*/
Boolean updateByBo(BusContractorToolUpdateReq req);
Boolean updateByBo(SubContractorToolUpdateReq req);
/**
* 校验并批量删除分包方工器具信息
@ -78,7 +78,7 @@ public interface IBusContractorToolService extends IService<BusContractorTool> {
* @param contractorTool 分包方工器具对象
* @return 分包方工器具视图对象
*/
BusContractorToolVo getVo(BusContractorTool contractorTool);
SubContractorToolVo getVo(SubContractorTool contractorTool);
/**
* 获取分包方工器具查询条件封装
@ -86,7 +86,7 @@ public interface IBusContractorToolService extends IService<BusContractorTool> {
* @param req 分包方工器具查询条件
* @return 分包方工器具查询条件封装
*/
LambdaQueryWrapper<BusContractorTool> buildQueryWrapper(BusContractorToolQueryReq req);
LambdaQueryWrapper<SubContractorTool> buildQueryWrapper(SubContractorToolQueryReq req);
/**
* 获取分包方工器具分页对象视图
@ -94,5 +94,5 @@ public interface IBusContractorToolService extends IService<BusContractorTool> {
* @param contractorPage 分包方工器具分页对象
* @return 分包方工器具分页对象视图
*/
Page<BusContractorToolVo> getVoPage(Page<BusContractorTool> contractorPage);
Page<SubContractorToolVo> getVoPage(Page<SubContractorTool> contractorPage);
}

View File

@ -1,15 +1,15 @@
package org.dromara.project.service;
package org.dromara.contractor.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.project.domain.BusSubcontract;
import org.dromara.project.domain.dto.subcontract.BusSubcontractCreateReq;
import org.dromara.project.domain.dto.subcontract.BusSubcontractQueryReq;
import org.dromara.project.domain.dto.subcontract.BusSubcontractUpdateReq;
import org.dromara.project.domain.vo.subcontract.BusSubcontractVo;
import org.dromara.contractor.domain.SubSubcontract;
import org.dromara.contractor.domain.dto.subcontract.SubSubcontractCreateReq;
import org.dromara.contractor.domain.dto.subcontract.SubSubcontractQueryReq;
import org.dromara.contractor.domain.dto.subcontract.SubSubcontractUpdateReq;
import org.dromara.contractor.domain.vo.subcontract.SubSubcontractVo;
import java.util.Collection;
import java.util.List;
@ -20,7 +20,7 @@ import java.util.List;
* @author lcj
* @date 2025-06-25
*/
public interface IBusSubcontractService extends IService<BusSubcontract> {
public interface ISubSubcontractService extends IService<SubSubcontract> {
/**
* 查询分包合同
@ -28,7 +28,7 @@ public interface IBusSubcontractService extends IService<BusSubcontract> {
* @param id 主键
* @return 分包合同
*/
BusSubcontractVo queryById(Long id);
SubSubcontractVo queryById(Long id);
/**
* 分页查询分包合同列表
@ -37,7 +37,7 @@ public interface IBusSubcontractService extends IService<BusSubcontract> {
* @param pageQuery 分页参数
* @return 分包合同分页列表
*/
TableDataInfo<BusSubcontractVo> queryPageList(BusSubcontractQueryReq req, PageQuery pageQuery);
TableDataInfo<SubSubcontractVo> queryPageList(SubSubcontractQueryReq req, PageQuery pageQuery);
/**
* 查询符合条件的分包合同列表
@ -45,7 +45,7 @@ public interface IBusSubcontractService extends IService<BusSubcontract> {
* @param req 查询条件
* @return 分包合同列表
*/
List<BusSubcontractVo> queryList(BusSubcontractQueryReq req);
List<SubSubcontractVo> queryList(SubSubcontractQueryReq req);
/**
* 新增分包合同
@ -53,7 +53,7 @@ public interface IBusSubcontractService extends IService<BusSubcontract> {
* @param req 分包合同
* @return 新增主键id
*/
Long insertByBo(BusSubcontractCreateReq req);
Long insertByBo(SubSubcontractCreateReq req);
/**
* 修改分包合同
@ -61,7 +61,7 @@ public interface IBusSubcontractService extends IService<BusSubcontract> {
* @param req 分包合同
* @return 是否修改成功
*/
Boolean updateByBo(BusSubcontractUpdateReq req);
Boolean updateByBo(SubSubcontractUpdateReq req);
/**
* 校验并批量删除分包合同信息
@ -78,7 +78,7 @@ public interface IBusSubcontractService extends IService<BusSubcontract> {
* @param subcontract 分包合同
* @return 分包合同视图
*/
BusSubcontractVo getVo(BusSubcontract subcontract);
SubSubcontractVo getVo(SubSubcontract subcontract);
/**
* 获取用户和项目关联对象查询条件封装
@ -86,7 +86,7 @@ public interface IBusSubcontractService extends IService<BusSubcontract> {
* @param req 查询条件
* @return 查询条件封装
*/
LambdaQueryWrapper<BusSubcontract> buildQueryWrapper(BusSubcontractQueryReq req);
LambdaQueryWrapper<SubSubcontract> buildQueryWrapper(SubSubcontractQueryReq req);
/**
* 获取分包合同分页视图
@ -94,6 +94,6 @@ public interface IBusSubcontractService extends IService<BusSubcontract> {
* @param subcontractPage 分包合同分页
* @return 分包合同分页视图
*/
Page<BusSubcontractVo> getVoPage(Page<BusSubcontract> subcontractPage);
Page<SubSubcontractVo> getVoPage(Page<SubSubcontract> subcontractPage);
}

View File

@ -1,4 +1,4 @@
package org.dromara.project.service.impl;
package org.dromara.contractor.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.io.FileUtil;
@ -18,20 +18,20 @@ import org.dromara.common.core.utils.ObjectUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.core.utils.file.FileUtils;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.project.constant.BusConstructionUserConstant;
import org.dromara.contractor.domain.SubConstructionUserFile;
import org.dromara.contractor.constant.SubConstructionUserConstant;
import org.dromara.project.domain.BusConstructionBlacklist;
import org.dromara.project.domain.BusConstructionUser;
import org.dromara.project.domain.BusConstructionUserFile;
import org.dromara.contractor.domain.SubConstructionUser;
import org.dromara.project.domain.BusProject;
import org.dromara.project.domain.dto.constructionuserfile.BusConstructionUserFileQueryReq;
import org.dromara.project.domain.dto.constructionuserfile.BusConstructionUserFileReq;
import org.dromara.project.domain.dto.constructionuserfile.BusConstructionUserFileSaveReq;
import org.dromara.project.domain.dto.constructionuserfile.BusConstructionUserFileTemplateReq;
import org.dromara.project.domain.vo.constructionuserfile.BusConstructionUserFileVo;
import org.dromara.project.mapper.BusConstructionUserFileMapper;
import org.dromara.contractor.domain.dto.constructionuserfile.SubConstructionUserFileQueryReq;
import org.dromara.contractor.domain.dto.constructionuserfile.SubConstructionUserFileReq;
import org.dromara.contractor.domain.dto.constructionuserfile.SubConstructionUserFileSaveReq;
import org.dromara.contractor.domain.dto.constructionuserfile.SubConstructionUserFileTemplateReq;
import org.dromara.contractor.domain.vo.constructionuserfile.SubConstructionUserFileVo;
import org.dromara.contractor.mapper.SubConstructionUserFileMapper;
import org.dromara.project.service.IBusConstructionBlacklistService;
import org.dromara.project.service.IBusConstructionUserFileService;
import org.dromara.project.service.IBusConstructionUserService;
import org.dromara.contractor.service.ISubConstructionUserFileService;
import org.dromara.contractor.service.ISubConstructionUserService;
import org.dromara.project.service.IBusProjectService;
import org.dromara.system.domain.vo.SysDictDataVo;
import org.dromara.system.domain.vo.SysOssVo;
@ -62,14 +62,14 @@ import java.util.zip.ZipOutputStream;
*/
@Slf4j
@Service
public class BusConstructionUserFileServiceImpl extends ServiceImpl<BusConstructionUserFileMapper, BusConstructionUserFile>
implements IBusConstructionUserFileService {
public class SubConstructionUserFileServiceImpl extends ServiceImpl<SubConstructionUserFileMapper, SubConstructionUserFile>
implements ISubConstructionUserFileService {
@Resource
private IBusProjectService projectService;
@Resource
private IBusConstructionUserService constructionUserService;
private ISubConstructionUserService constructionUserService;
@Resource
private ISysDictTypeService dictTypeService;
@ -87,7 +87,7 @@ public class BusConstructionUserFileServiceImpl extends ServiceImpl<BusConstruct
* @return 施工人员文件存储
*/
@Override
public BusConstructionUserFileVo queryById(Long id) {
public SubConstructionUserFileVo queryById(Long id) {
return baseMapper.selectVoById(id);
}
@ -98,8 +98,8 @@ public class BusConstructionUserFileServiceImpl extends ServiceImpl<BusConstruct
* @return 施工人员文件存储列表
*/
@Override
public List<BusConstructionUserFileVo> queryList(BusConstructionUserFileQueryReq req) {
LambdaQueryWrapper<BusConstructionUserFile> lqw = buildQueryWrapper(req);
public List<SubConstructionUserFileVo> queryList(SubConstructionUserFileQueryReq req) {
LambdaQueryWrapper<SubConstructionUserFile> lqw = buildQueryWrapper(req);
return baseMapper.selectVoList(lqw);
}
@ -110,7 +110,7 @@ public class BusConstructionUserFileServiceImpl extends ServiceImpl<BusConstruct
* @param response 响应对象
*/
@Override
public void downloadFileTemplate(BusConstructionUserFileTemplateReq req, HttpServletResponse response) {
public void downloadFileTemplate(SubConstructionUserFileTemplateReq req, HttpServletResponse response) {
// 1. 校验项目是否存在
Long projectId = req.getProjectId();
BusProject project = projectService.getById(projectId);
@ -118,7 +118,7 @@ public class BusConstructionUserFileServiceImpl extends ServiceImpl<BusConstruct
throw new ServiceException("项目不存在", HttpStatus.BAD_REQUEST);
}
// 2. 查询施工人员列表
List<BusConstructionUser> constructionUserList = constructionUserService.list(this.buildTemplateQueryWrapper(req));
List<SubConstructionUser> constructionUserList = constructionUserService.list(this.buildTemplateQueryWrapper(req));
// 3. 根目录名称
String randomString = project.getId() + "_" + RandomUtil.randomString(8);
String rootFolder = project.getShortName() + "_" + randomString + "/";
@ -131,13 +131,13 @@ public class BusConstructionUserFileServiceImpl extends ServiceImpl<BusConstruct
zipOut.putNextEntry(new ZipEntry(rootFolder));
zipOut.closeEntry();
// 7. 对每个人创建其文件夹再在其中创建子文件夹三级安全教育体检报告...及文件
for (BusConstructionUser constructionUser : constructionUserList) {
for (SubConstructionUser constructionUser : constructionUserList) {
String personFolder = rootFolder + constructionUser.getUserName() + "-" + constructionUser.getId() + "/";
// 7.1. 写入个人文件夹条目
zipOut.putNextEntry(new ZipEntry(personFolder));
zipOut.closeEntry();
// 7.2. 在个人文件夹下写几个子文件夹
List<SysDictDataVo> dictDataList = dictTypeService.selectDictDataByType(BusConstructionUserConstant.USER_FILE_TYPE);
List<SysDictDataVo> dictDataList = dictTypeService.selectDictDataByType(SubConstructionUserConstant.USER_FILE_TYPE);
for (SysDictDataVo dataVo : dictDataList) {
String subFolderPath = personFolder + dataVo.getDictValue() + "_" + dataVo.getDictLabel() + "/";
zipOut.putNextEntry(new ZipEntry(subFolderPath));
@ -183,7 +183,7 @@ public class BusConstructionUserFileServiceImpl extends ServiceImpl<BusConstruct
String basePath = "unzip_path";
String destDirPath = basePath + "/" + DateUtils.getDate() + "/" + projectId + "/" + randomStr;
// 构建需要修改的对象
List<BusConstructionUserFile> constructionUserFileList = new ArrayList<>();
List<SubConstructionUserFile> constructionUserFileList = new ArrayList<>();
try {
// 2. 创建临时文件
tempZipFile = File.createTempFile(tempZipFilePath, null);
@ -230,7 +230,7 @@ public class BusConstructionUserFileServiceImpl extends ServiceImpl<BusConstruct
.collect(Collectors.joining(","));
}
// 8. 创建 BusConstructionUserFile 对象
BusConstructionUserFile constructionUserFile = new BusConstructionUserFile();
SubConstructionUserFile constructionUserFile = new SubConstructionUserFile();
constructionUserFile.setUserId(userId);
constructionUserFile.setFileType(fileType);
constructionUserFile.setPath(fileIdStr);
@ -264,16 +264,16 @@ public class BusConstructionUserFileServiceImpl extends ServiceImpl<BusConstruct
return true;
}
// 9. 判断是否已经存在
List<Long> userIdList = constructionUserFileList.stream().map(BusConstructionUserFile::getUserId).toList();
List<BusConstructionUserFile> oldConstructionUserFileList = this.lambdaQuery()
.in(BusConstructionUserFile::getUserId, userIdList).list();
List<Long> userIdList = constructionUserFileList.stream().map(SubConstructionUserFile::getUserId).toList();
List<SubConstructionUserFile> oldConstructionUserFileList = this.lambdaQuery()
.in(SubConstructionUserFile::getUserId, userIdList).list();
// 10. 如果存在则删除数据库对应记录和文件
if (CollUtil.isNotEmpty(oldConstructionUserFileList)) {
// 待删除id
List<Long> deleteIds = oldConstructionUserFileList.stream().map(BusConstructionUserFile::getId).toList();
List<Long> deleteIds = oldConstructionUserFileList.stream().map(SubConstructionUserFile::getId).toList();
// 待删除对象存储id
List<Long> deleteOssIds = new ArrayList<>();
for (BusConstructionUserFile constructionUserFile : oldConstructionUserFileList) {
for (SubConstructionUserFile constructionUserFile : oldConstructionUserFileList) {
String path = constructionUserFile.getPath();
if (StrUtil.isNotBlank(path)) {
String[] ossIds = path.split(",");
@ -307,16 +307,16 @@ public class BusConstructionUserFileServiceImpl extends ServiceImpl<BusConstruct
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean saveFileList(BusConstructionUserFileSaveReq req) {
public Boolean saveFileList(SubConstructionUserFileSaveReq req) {
// 1. 参数校验
// 判断参数是否为空
Long userId = req.getUserId();
List<BusConstructionUserFileReq> fileList = req.getFileList();
List<SubConstructionUserFileReq> fileList = req.getFileList();
if (userId == null || CollUtil.isEmpty(fileList)) {
throw new ServiceException("施工人员文件存储参数错误", HttpStatus.BAD_REQUEST);
}
// 校验修改用户是否存在
BusConstructionUser constructionUser = constructionUserService.getById(userId);
SubConstructionUser constructionUser = constructionUserService.getById(userId);
if (constructionUser == null) {
throw new ServiceException("施工人员不存在", HttpStatus.NOT_FOUND);
}
@ -325,22 +325,22 @@ public class BusConstructionUserFileServiceImpl extends ServiceImpl<BusConstruct
Long loginUser = LoginHelper.getUserId();
projectService.validAuth(projectId, loginUser);
// 2. 查询当前用户的所有文件记录一次性查询避免多次访问数据库
LambdaQueryWrapper<BusConstructionUserFile> lqw = Wrappers.lambdaQuery(BusConstructionUserFile.class)
.eq(BusConstructionUserFile::getUserId, userId);
List<BusConstructionUserFile> constructionUserFileList = this.list(lqw);
LambdaQueryWrapper<SubConstructionUserFile> lqw = Wrappers.lambdaQuery(SubConstructionUserFile.class)
.eq(SubConstructionUserFile::getUserId, userId);
List<SubConstructionUserFile> constructionUserFileList = this.list(lqw);
// 3. 构建 Map<fileType, BusConstructionUserFile> 方便查找
Map<String, BusConstructionUserFile> existingFileMap = constructionUserFileList.stream()
.collect(Collectors.toMap(BusConstructionUserFile::getFileType, Function.identity()));
Map<String, SubConstructionUserFile> existingFileMap = constructionUserFileList.stream()
.collect(Collectors.toMap(SubConstructionUserFile::getFileType, Function.identity()));
// 4. 处理新增或更新的数据
List<BusConstructionUserFile> saveOrUpdateList = new ArrayList<>();
List<SubConstructionUserFile> saveOrUpdateList = new ArrayList<>();
// 处理删除的数据
List<Long> deleteList = new ArrayList<>();
for (BusConstructionUserFileReq fileReq : fileList) {
for (SubConstructionUserFileReq fileReq : fileList) {
String fileType = fileReq.getFileType();
String fileId = fileReq.getFileId();
if (existingFileMap.containsKey(fileType)) {
// 如果存在则更新
BusConstructionUserFile existingFile = existingFileMap.get(fileType);
SubConstructionUserFile existingFile = existingFileMap.get(fileType);
// 如果文件id相同则不更新
if (StringUtils.equals(existingFile.getPath(), fileId)) {
continue;
@ -355,7 +355,7 @@ public class BusConstructionUserFileServiceImpl extends ServiceImpl<BusConstruct
} else {
// 如果不存在且存在文件id则更新
if (StringUtils.isNotBlank(fileId)) {
BusConstructionUserFile newFile = new BusConstructionUserFile();
SubConstructionUserFile newFile = new SubConstructionUserFile();
newFile.setUserId(userId);
newFile.setFileType(fileType);
newFile.setPath(fileId);
@ -387,8 +387,8 @@ public class BusConstructionUserFileServiceImpl extends ServiceImpl<BusConstruct
* @return 查询条件封装
*/
@Override
public LambdaQueryWrapper<BusConstructionUserFile> buildQueryWrapper(BusConstructionUserFileQueryReq req) {
LambdaQueryWrapper<BusConstructionUserFile> lqw = new LambdaQueryWrapper<>();
public LambdaQueryWrapper<SubConstructionUserFile> buildQueryWrapper(SubConstructionUserFileQueryReq req) {
LambdaQueryWrapper<SubConstructionUserFile> lqw = new LambdaQueryWrapper<>();
if (req == null) {
return lqw;
}
@ -397,11 +397,11 @@ public class BusConstructionUserFileServiceImpl extends ServiceImpl<BusConstruct
String fileType = req.getFileType();
String remark = req.getRemark();
// 模糊查询
lqw.like(StringUtils.isNotBlank(remark), BusConstructionUserFile::getRemark, remark);
lqw.like(StringUtils.isNotBlank(remark), SubConstructionUserFile::getRemark, remark);
// 精确查询
lqw.eq(ObjectUtils.isNotEmpty(id), BusConstructionUserFile::getId, id);
lqw.eq(ObjectUtils.isNotEmpty(userId), BusConstructionUserFile::getUserId, userId);
lqw.eq(StringUtils.isNotBlank(fileType), BusConstructionUserFile::getFileType, fileType);
lqw.eq(ObjectUtils.isNotEmpty(id), SubConstructionUserFile::getId, id);
lqw.eq(ObjectUtils.isNotEmpty(userId), SubConstructionUserFile::getUserId, userId);
lqw.eq(StringUtils.isNotBlank(fileType), SubConstructionUserFile::getFileType, fileType);
return lqw;
}
@ -412,8 +412,8 @@ public class BusConstructionUserFileServiceImpl extends ServiceImpl<BusConstruct
* @return 查询条件封装
*/
@Override
public LambdaQueryWrapper<BusConstructionUser> buildTemplateQueryWrapper(BusConstructionUserFileTemplateReq req) {
LambdaQueryWrapper<BusConstructionUser> lqw = new LambdaQueryWrapper<>();
public LambdaQueryWrapper<SubConstructionUser> buildTemplateQueryWrapper(SubConstructionUserFileTemplateReq req) {
LambdaQueryWrapper<SubConstructionUser> lqw = new LambdaQueryWrapper<>();
if (req == null) {
return lqw;
}
@ -425,22 +425,22 @@ public class BusConstructionUserFileServiceImpl extends ServiceImpl<BusConstruct
String clock = req.getClock();
List<Long> userIdList = req.getUserIdList();
// 模糊查询
lqw.like(StringUtils.isNotBlank(userName), BusConstructionUser::getUserName, userName);
lqw.like(StringUtils.isNotBlank(userName), SubConstructionUser::getUserName, userName);
// 精确查询
lqw.eq(ObjectUtils.isNotEmpty(projectId), BusConstructionUser::getProjectId, projectId);
lqw.eq(ObjectUtils.isNotEmpty(contractorId), BusConstructionUser::getContractorId, contractorId);
lqw.eq(ObjectUtils.isNotEmpty(teamId), BusConstructionUser::getTeamId, teamId);
lqw.eq(StringUtils.isNotBlank(typeOfWork), BusConstructionUser::getTypeOfWork, typeOfWork);
lqw.eq(StringUtils.isNotBlank(clock), BusConstructionUser::getClock, clock);
lqw.eq(ObjectUtils.isNotEmpty(projectId), SubConstructionUser::getProjectId, projectId);
lqw.eq(ObjectUtils.isNotEmpty(contractorId), SubConstructionUser::getContractorId, contractorId);
lqw.eq(ObjectUtils.isNotEmpty(teamId), SubConstructionUser::getTeamId, teamId);
lqw.eq(StringUtils.isNotBlank(typeOfWork), SubConstructionUser::getTypeOfWork, typeOfWork);
lqw.eq(StringUtils.isNotBlank(clock), SubConstructionUser::getClock, clock);
if (CollUtil.isNotEmpty(userIdList)) {
lqw.in(BusConstructionUser::getId, userIdList);
lqw.in(SubConstructionUser::getId, userIdList);
}
// 根据项目id获取黑名单施工人员
List<Long> blacklistUserIdList = constructionBlacklistService.lambdaQuery()
.eq(BusConstructionBlacklist::getProjectId, projectId)
.list().stream().map(BusConstructionBlacklist::getUserId).toList();
if (CollUtil.isNotEmpty(blacklistUserIdList)) {
lqw.notIn(BusConstructionUser::getId, blacklistUserIdList);
lqw.notIn(SubConstructionUser::getId, blacklistUserIdList);
}
return lqw;
}

View File

@ -1,4 +1,4 @@
package org.dromara.project.service.impl;
package org.dromara.contractor.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.IdcardUtil;
@ -18,22 +18,28 @@ import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.project.constant.BusConstructionUserConstant;
import org.dromara.common.utils.IdCardEncryptorUtil;
import org.dromara.contractor.domain.SubConstructionUser;
import org.dromara.contractor.domain.SubConstructionUserFile;
import org.dromara.contractor.domain.SubContractor;
import org.dromara.contractor.domain.dto.constructionuser.*;
import org.dromara.contractor.domain.vo.constructionuser.*;
import org.dromara.contractor.domain.vo.contractor.SubContractorVo;
import org.dromara.contractor.service.ISubConstructionUserFileService;
import org.dromara.contractor.service.ISubConstructionUserService;
import org.dromara.contractor.service.ISubContractorService;
import org.dromara.contractor.constant.SubConstructionUserConstant;
import org.dromara.project.domain.*;
import org.dromara.project.domain.dto.constructionuser.*;
import org.dromara.project.domain.enums.BusAttendanceClockStatusEnum;
import org.dromara.project.domain.enums.BusAttendanceCommuterEnum;
import org.dromara.project.domain.enums.BusConstructionUserAttendanceStatusEnum;
import org.dromara.project.domain.enums.BusConstructionUserFileStatusEnum;
import org.dromara.project.domain.exportvo.BusConstructionUserExportVo;
import org.dromara.project.domain.vo.constructionuser.*;
import org.dromara.project.domain.vo.contractor.BusContractorVo;
import org.dromara.project.mapper.BusConstructionUserMapper;
import org.dromara.contractor.domain.enums.SubConstructionUserFileStatusEnum;
import org.dromara.contractor.domain.exportvo.BusConstructionUserExportVo;
import org.dromara.contractor.mapper.SubConstructionUserMapper;
import org.dromara.project.service.*;
import org.dromara.system.domain.vo.SysOssVo;
import org.dromara.system.service.ISysDictTypeService;
import org.dromara.system.service.ISysOssService;
import org.dromara.common.utils.IdCardEncryptorUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
@ -50,15 +56,15 @@ import java.util.stream.Collectors;
* @date 2025-03-07
*/
@Service
public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionUserMapper, BusConstructionUser>
implements IBusConstructionUserService {
public class SubConstructionUserServiceImpl extends ServiceImpl<SubConstructionUserMapper, SubConstructionUser>
implements ISubConstructionUserService {
@Resource
private IBusProjectService projectService;
@Lazy
@Resource
private IBusContractorService contractorService;
private ISubContractorService contractorService;
@Lazy
@Resource
@ -77,7 +83,7 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
@Lazy
@Resource
private IBusConstructionUserFileService constructionUserFileService;
private ISubConstructionUserFileService constructionUserFileService;
@Resource
private ISysDictTypeService dictTypeService;
@ -96,8 +102,8 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
* @return 施工人员
*/
@Override
public BusConstructionUserVo queryById(Long id) {
BusConstructionUser constructionUser = this.getById(id);
public SubConstructionUserVo queryById(Long id) {
SubConstructionUser constructionUser = this.getById(id);
if (constructionUser == null) {
throw new ServiceException("施工人员信息不存在", HttpStatus.NOT_FOUND);
}
@ -112,9 +118,9 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
* @return 施工人员分页列表
*/
@Override
public TableDataInfo<BusConstructionUserVo> queryPageList(BusConstructionUserQueryReq req, PageQuery pageQuery) {
public TableDataInfo<SubConstructionUserVo> queryPageList(SubConstructionUserQueryReq req, PageQuery pageQuery) {
// 查询数据库
Page<BusConstructionUser> result = this.page(pageQuery.build(), this.buildQueryWrapper(req));
Page<SubConstructionUser> result = this.page(pageQuery.build(), this.buildQueryWrapper(req));
return TableDataInfo.build(getVoPage(result));
}
@ -126,7 +132,7 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
* @return 施工人员考勤分页列表
*/
@Override
public TableDataInfo<BusConstructionUserAttendanceTotalVo> queryPageAttendanceList(BusConstructionUserAttendanceQueryReq req,
public TableDataInfo<SubConstructionUserAttendanceTotalVo> queryPageAttendanceList(SubConstructionUserAttendanceQueryReq req,
PageQuery pageQuery) {
return TableDataInfo.build(getAttendanceTotalVoPage(req, pageQuery));
}
@ -138,7 +144,7 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
* @return 施工人员考勤月列表
*/
@Override
public List<BusConstructionUserAttendanceMonthVo> queryAttendanceMonthList(BusConstructionUserAttendanceMonthReq req) {
public List<SubConstructionUserAttendanceMonthVo> queryAttendanceMonthList(SubConstructionUserAttendanceMonthReq req) {
Long id = req.getUserId();
String clockMonth = req.getClockMonth();
if (this.getById(id) == null) {
@ -170,13 +176,13 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
Map<Long, List<SysOssVo>> ossIdUrlMap = ossService.listByIds(picIds)
.stream().collect(Collectors.groupingBy(SysOssVo::getOssId));
// 遍历每天计算考勤状态
List<BusConstructionUserAttendanceMonthVo> respList = new ArrayList<>();
List<SubConstructionUserAttendanceMonthVo> respList = new ArrayList<>();
dateListMap.forEach((date, attendanceList) -> {
BusConstructionUserAttendanceMonthVo resp = new BusConstructionUserAttendanceMonthVo();
SubConstructionUserAttendanceMonthVo resp = new SubConstructionUserAttendanceMonthVo();
resp.setId(id);
resp.setClockDate(date);
// 获取考勤记录
BusConstructionUserAttendanceByDay day = BusConstructionUserAttendanceByDay.build(attendanceList);
SubConstructionUserAttendanceByDay day = SubConstructionUserAttendanceByDay.build(attendanceList);
// 填充打卡图片url
if (day != null) {
if (day.getUpClockPicId() != null) {
@ -217,7 +223,7 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
respList.add(resp);
});
// 按打卡日期正序排列
respList.sort(Comparator.comparing(BusConstructionUserAttendanceMonthVo::getClockDate));
respList.sort(Comparator.comparing(SubConstructionUserAttendanceMonthVo::getClockDate));
return respList;
}
@ -228,11 +234,11 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
* @return 施工人员列表
*/
@Override
public List<BusConstructionUserExportVo> queryList(BusConstructionUserQueryReq req) {
LambdaQueryWrapper<BusConstructionUser> lqw = this.buildQueryWrapper(req);
List<BusConstructionUserVo> constructionUserVoList = this.list(lqw).stream().map(this::getVo).toList();
public List<BusConstructionUserExportVo> queryList(SubConstructionUserQueryReq req) {
LambdaQueryWrapper<SubConstructionUser> lqw = this.buildQueryWrapper(req);
List<SubConstructionUserVo> constructionUserVoList = this.list(lqw).stream().map(this::getVo).toList();
// 关联项目信息
Set<Long> projectIdList = constructionUserVoList.stream().map(BusConstructionUserVo::getProjectId)
Set<Long> projectIdList = constructionUserVoList.stream().map(SubConstructionUserVo::getProjectId)
.collect(Collectors.toSet());
Map<Long, List<BusProject>> projectIdProjectMap = projectService.listByIds(projectIdList).stream()
.collect(Collectors.groupingBy(BusProject::getId));
@ -263,7 +269,7 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
* @return 施工人员大屏数据
*/
@Override
public BusConstructionUserGisVo getGisData(BusConstructionUserGisReq req) {
public SubConstructionUserGisVo getGisData(SubConstructionUserGisReq req) {
// 参数校验
Long projectId = req.getProjectId();
BusProject project = projectService.getById(projectId);
@ -271,10 +277,10 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
throw new ServiceException("项目信息不存在", HttpStatus.NOT_FOUND);
}
// 获取大屏数据
BusConstructionUserGisVo resp = new BusConstructionUserGisVo();
SubConstructionUserGisVo resp = new SubConstructionUserGisVo();
// 获取施工人员总数
Long count = this.lambdaQuery()
.eq(BusConstructionUser::getProjectId, projectId).count();
.eq(SubConstructionUser::getProjectId, projectId).count();
resp.setPeopleCount(count);
// 获取考勤数据
List<Long> attendancePeopleList = attendanceService.listAttendancePeopleByProjectId(projectId);
@ -291,9 +297,9 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
* @return 是否新增成功
*/
@Override
public Long insertByBo(BusConstructionUserCreateReq req) {
public Long insertByBo(SubConstructionUserCreateReq req) {
// 将实体类和 DTO 进行转换
BusConstructionUser constructionUser = new BusConstructionUser();
SubConstructionUser constructionUser = new SubConstructionUser();
BeanUtils.copyProperties(req, constructionUser);
// 数据校验
validEntityBeforeSave(constructionUser, true);
@ -317,14 +323,14 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(BusConstructionUserUpdateReq req) {
public Boolean updateByBo(SubConstructionUserUpdateReq req) {
// 将实体类和 DTO 进行转换
BusConstructionUser constructionUser = new BusConstructionUser();
SubConstructionUser constructionUser = new SubConstructionUser();
BeanUtils.copyProperties(req, constructionUser);
// 数据校验
validEntityBeforeSave(constructionUser, false);
// 判断是否存在
BusConstructionUser oldConstructionUser = this.getById(constructionUser.getId());
SubConstructionUser oldConstructionUser = this.getById(constructionUser.getId());
if (oldConstructionUser == null) {
throw new ServiceException("修改施工人员失败,数据不存在", HttpStatus.NOT_FOUND);
}
@ -347,18 +353,18 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
* @return 是否修改成功
*/
@Override
public Boolean updateSalary(BusConstructionUserUpdateSalaryReq req) {
public Boolean updateSalary(SubConstructionUserUpdateSalaryReq req) {
Long id = req.getId();
Long salary = req.getSalary();
// 判断对应施工人员是否存在
BusConstructionUser oldConstructionUser = this.getById(id);
SubConstructionUser oldConstructionUser = this.getById(id);
if (oldConstructionUser == null) {
throw new ServiceException("施工人员信息不存在", HttpStatus.NOT_FOUND);
}
// 判断当前操作用户是否有权限
Long userId = LoginHelper.getUserId();
projectService.validAuth(oldConstructionUser.getProjectId(), userId);
BusConstructionUser constructionUser = new BusConstructionUser();
SubConstructionUser constructionUser = new SubConstructionUser();
constructionUser.setId(id);
// 修改薪水
constructionUser.setSalary(Objects.requireNonNullElse(salary, 0L));
@ -373,11 +379,11 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
* @return 是否修改成功
*/
@Override
public Boolean updateClock(BusConstructionUserUpdateClockReq req) {
public Boolean updateClock(SubConstructionUserUpdateClockReq req) {
Long id = req.getId();
String clock = req.getClock();
// 判断对应施工人员是否存在
BusConstructionUser oldConstructionUser = this.getById(id);
SubConstructionUser oldConstructionUser = this.getById(id);
if (oldConstructionUser == null) {
throw new ServiceException("施工人员信息不存在", HttpStatus.NOT_FOUND);
}
@ -387,7 +393,7 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
if (clock.equals(oldConstructionUser.getClock())) {
return true;
}
BusConstructionUser constructionUser = new BusConstructionUser();
SubConstructionUser constructionUser = new SubConstructionUser();
constructionUser.setId(id);
constructionUser.setClock(clock);
return this.updateById(constructionUser);
@ -400,10 +406,10 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
* @return 是否修改成功
*/
@Override
public Boolean changeUserProject(BusConstructionUserChangeProjectReq req) {
public Boolean changeUserProject(SubConstructionUserChangeProjectReq req) {
Long id = req.getId();
// 判断对应施工人员是否存在
BusConstructionUser constructionUser = this.getById(id);
SubConstructionUser constructionUser = this.getById(id);
if (constructionUser == null) {
throw new ServiceException("施工人员信息不存在", HttpStatus.NOT_FOUND);
}
@ -422,14 +428,14 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
if (req.getContractorId().equals(constructionUser.getContractorId())) {
throw new ServiceException("已在当前分包公司下,请勿重复修改", HttpStatus.BAD_REQUEST);
}
BusConstructionUser validUser = new BusConstructionUser();
SubConstructionUser validUser = new SubConstructionUser();
BeanUtils.copyProperties(req, validUser);
this.validEntityBeforeSave(validUser, false);
// 操作数据库更新数据
LambdaUpdateWrapper<BusConstructionUser> lambdaUpdate = Wrappers.lambdaUpdate(BusConstructionUser.class)
.eq(BusConstructionUser::getId, id)
.set(BusConstructionUser::getProjectId, req.getProjectId())
.set(BusConstructionUser::getContractorId, req.getContractorId());
LambdaUpdateWrapper<SubConstructionUser> lambdaUpdate = Wrappers.lambdaUpdate(SubConstructionUser.class)
.eq(SubConstructionUser::getId, id)
.set(SubConstructionUser::getProjectId, req.getProjectId())
.set(SubConstructionUser::getContractorId, req.getContractorId());
return this.update(lambdaUpdate);
}
@ -441,14 +447,14 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean batchUpdateStatus(BusConstructionUserBatchUpdateStatusReq req) {
public Boolean batchUpdateStatus(SubConstructionUserBatchUpdateStatusReq req) {
List<Long> idList = req.getIdList();
String status = req.getStatus();
// 查询对应数据是否存在
if (CollUtil.isEmpty(idList)) {
throw new ServiceException("施工人员 id 不能为空", HttpStatus.BAD_REQUEST);
}
List<BusConstructionUser> constructionUserList = this.listByIds(idList);
List<SubConstructionUser> constructionUserList = this.listByIds(idList);
// 判断对应数据是否都存在
if (constructionUserList.size() != idList.size()) {
throw new ServiceException("修改施工人员状态失败,数据缺失", HttpStatus.BAD_REQUEST);
@ -456,14 +462,14 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
// 判断当前操作用户是否有权限
Long userId = LoginHelper.getUserId();
List<Long> projectIdList = constructionUserList.stream()
.map(BusConstructionUser::getProjectId)
.map(SubConstructionUser::getProjectId)
.distinct().toList();
projectService.validAuth(projectIdList, userId);
// 批量修改
List<BusConstructionUser> list = constructionUserList.stream()
List<SubConstructionUser> list = constructionUserList.stream()
.filter(user -> !status.equals(user.getStatus()))
.map(user -> {
BusConstructionUser constructionUser = new BusConstructionUser();
SubConstructionUser constructionUser = new SubConstructionUser();
constructionUser.setId(user.getId());
constructionUser.setStatus(status);
return constructionUser;
@ -485,7 +491,7 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
* @return 是否修改成功
*/
@Override
public Boolean batchUpdateClockByProjectId(BusConstructionUserBatchUpdateClockReq req) {
public Boolean batchUpdateClockByProjectId(SubConstructionUserBatchUpdateClockReq req) {
Long projectId = req.getProjectId();
String clock = req.getClock();
// 校验打卡状态是否为空
@ -503,9 +509,9 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
Long userId = LoginHelper.getUserId();
projectService.validAuth(projectId, userId);
// 操作数据库批量修改
LambdaUpdateWrapper<BusConstructionUser> lambdaUpdate = Wrappers.lambdaUpdate(BusConstructionUser.class)
.eq(BusConstructionUser::getProjectId, projectId)
.set(BusConstructionUser::getClock, clock);
LambdaUpdateWrapper<SubConstructionUser> lambdaUpdate = Wrappers.lambdaUpdate(SubConstructionUser.class)
.eq(SubConstructionUser::getProjectId, projectId)
.set(SubConstructionUser::getClock, clock);
boolean update = this.update(lambdaUpdate);
if (!update) {
throw new ServiceException("修改施工人员打卡状态失败,数据库异常", HttpStatus.ERROR);
@ -516,7 +522,7 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(BusConstructionUser entity, Boolean create) {
private void validEntityBeforeSave(SubConstructionUser entity, Boolean create) {
// TODO 做一些数据校验,如唯一约束
// 校验项目id和对应项目是否存在
Long projectId = entity.getProjectId();
@ -547,7 +553,7 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
throw new ServiceException("对应项目不存在", HttpStatus.NOT_FOUND);
}
if (contractorId != null) {
BusContractor contractor = contractorService.getById(contractorId);
SubContractor contractor = contractorService.getById(contractorId);
if (contractor == null) {
throw new ServiceException("分包单位信息不存在", HttpStatus.NOT_FOUND);
}
@ -585,11 +591,11 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
@Transactional(rollbackFor = Exception.class)
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
Long userId = LoginHelper.getUserId();
List<BusConstructionUser> constructionUserList = this.listByIds(ids);
List<SubConstructionUser> constructionUserList = this.listByIds(ids);
if (isValid) {
// 做一些业务上的校验,判断是否需要校验
// 获取项目id列表
List<Long> projectIdList = constructionUserList.stream().map(BusConstructionUser::getProjectId).toList();
List<Long> projectIdList = constructionUserList.stream().map(SubConstructionUser::getProjectId).toList();
// 判断是否有权限操作对应项目下的内容
projectService.validAuth(projectIdList, userId);
// 判断待删除的人员是否存在于班组
@ -604,8 +610,8 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
throw new ServiceException("删除施工人员信息失败,数据缺失", HttpStatus.BAD_REQUEST);
}
// 批量删除施工人员下的文件信息
LambdaQueryWrapper<BusConstructionUserFile> constructionUserFileLqw = Wrappers.lambdaQuery(BusConstructionUserFile.class)
.in(BusConstructionUserFile::getUserId, ids);
LambdaQueryWrapper<SubConstructionUserFile> constructionUserFileLqw = Wrappers.lambdaQuery(SubConstructionUserFile.class)
.in(SubConstructionUserFile::getUserId, ids);
boolean removeFile = constructionUserFileService.remove(constructionUserFileLqw);
if (!removeFile) {
throw new ServiceException("删除施工人员信息失败,施工人员文件信息删除失败", HttpStatus.ERROR);
@ -621,9 +627,9 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
* @return 施工人员视图对象
*/
@Override
public BusConstructionUserVo getVo(BusConstructionUser constructionUser) {
public SubConstructionUserVo getVo(SubConstructionUser constructionUser) {
// 对象转封装类
BusConstructionUserVo constructionUserVo = new BusConstructionUserVo();
SubConstructionUserVo constructionUserVo = new SubConstructionUserVo();
if (constructionUser == null) {
return constructionUserVo;
}
@ -666,8 +672,8 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
* @return 查询条件封装
*/
@Override
public LambdaQueryWrapper<BusConstructionUser> buildQueryWrapper(BusConstructionUserQueryReq req) {
LambdaQueryWrapper<BusConstructionUser> lqw = Wrappers.lambdaQuery();
public LambdaQueryWrapper<SubConstructionUser> buildQueryWrapper(SubConstructionUserQueryReq req) {
LambdaQueryWrapper<SubConstructionUser> lqw = Wrappers.lambdaQuery();
if (req == null) {
return lqw;
}
@ -695,40 +701,40 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
Long salary = req.getSalary();
String remark = req.getRemark();
// 模糊查询
lqw.like(StringUtils.isNotBlank(userName), BusConstructionUser::getUserName, userName);
lqw.like(StringUtils.isNotBlank(remark), BusConstructionUser::getRemark, remark);
lqw.like(StringUtils.isNotBlank(phone), BusConstructionUser::getPhone, phone);
lqw.like(StringUtils.isNotBlank(nation), BusConstructionUser::getNation, nation);
lqw.like(StringUtils.isNotBlank(sfzNumber), BusConstructionUser::getSfzNumber, sfzNumber);
lqw.like(StringUtils.isNotBlank(nativePlace), BusConstructionUser::getNativePlace, nativePlace);
lqw.like(StringUtils.isNotBlank(yhkNumber), BusConstructionUser::getYhkNumber, yhkNumber);
lqw.like(StringUtils.isNotBlank(yhkOpeningBank), BusConstructionUser::getYhkOpeningBank, yhkOpeningBank);
lqw.like(StringUtils.isNotBlank(yhkCardholder), BusConstructionUser::getYhkCardholder, yhkCardholder);
lqw.like(StringUtils.isNotBlank(teamName), BusConstructionUser::getTeamName, teamName);
lqw.like(StringUtils.isNotBlank(userName), SubConstructionUser::getUserName, userName);
lqw.like(StringUtils.isNotBlank(remark), SubConstructionUser::getRemark, remark);
lqw.like(StringUtils.isNotBlank(phone), SubConstructionUser::getPhone, phone);
lqw.like(StringUtils.isNotBlank(nation), SubConstructionUser::getNation, nation);
lqw.like(StringUtils.isNotBlank(sfzNumber), SubConstructionUser::getSfzNumber, sfzNumber);
lqw.like(StringUtils.isNotBlank(nativePlace), SubConstructionUser::getNativePlace, nativePlace);
lqw.like(StringUtils.isNotBlank(yhkNumber), SubConstructionUser::getYhkNumber, yhkNumber);
lqw.like(StringUtils.isNotBlank(yhkOpeningBank), SubConstructionUser::getYhkOpeningBank, yhkOpeningBank);
lqw.like(StringUtils.isNotBlank(yhkCardholder), SubConstructionUser::getYhkCardholder, yhkCardholder);
lqw.like(StringUtils.isNotBlank(teamName), SubConstructionUser::getTeamName, teamName);
// 精确查询
lqw.eq(StringUtils.isNotBlank(status), BusConstructionUser::getStatus, status);
lqw.eq(ObjectUtils.isNotEmpty(id), BusConstructionUser::getId, id);
lqw.eq(ObjectUtils.isNotEmpty(projectId), BusConstructionUser::getProjectId, projectId);
lqw.eq(ObjectUtils.isNotEmpty(contractorId), BusConstructionUser::getContractorId, contractorId);
lqw.eq(ObjectUtils.isNotEmpty(teamId), BusConstructionUser::getTeamId, teamId);
lqw.eq(StringUtils.isNotBlank(isPinch), BusConstructionUser::getIsPinch, isPinch);
lqw.eq(StringUtils.isNotBlank(sex), BusConstructionUser::getSex, sex);
lqw.eq(ObjectUtils.isNotEmpty(typeOfWork), BusConstructionUser::getTypeOfWork, typeOfWork);
lqw.eq(ObjectUtils.isNotEmpty(clock), BusConstructionUser::getClock, clock);
lqw.eq(ObjectUtils.isNotEmpty(salary), BusConstructionUser::getSalary, salary);
lqw.eq(StringUtils.isNotBlank(wageMeasureUnit), BusConstructionUser::getWageMeasureUnit, wageMeasureUnit);
lqw.eq(StringUtils.isNotBlank(status), SubConstructionUser::getStatus, status);
lqw.eq(ObjectUtils.isNotEmpty(id), SubConstructionUser::getId, id);
lqw.eq(ObjectUtils.isNotEmpty(projectId), SubConstructionUser::getProjectId, projectId);
lqw.eq(ObjectUtils.isNotEmpty(contractorId), SubConstructionUser::getContractorId, contractorId);
lqw.eq(ObjectUtils.isNotEmpty(teamId), SubConstructionUser::getTeamId, teamId);
lqw.eq(StringUtils.isNotBlank(isPinch), SubConstructionUser::getIsPinch, isPinch);
lqw.eq(StringUtils.isNotBlank(sex), SubConstructionUser::getSex, sex);
lqw.eq(ObjectUtils.isNotEmpty(typeOfWork), SubConstructionUser::getTypeOfWork, typeOfWork);
lqw.eq(ObjectUtils.isNotEmpty(clock), SubConstructionUser::getClock, clock);
lqw.eq(ObjectUtils.isNotEmpty(salary), SubConstructionUser::getSalary, salary);
lqw.eq(StringUtils.isNotBlank(wageMeasureUnit), SubConstructionUser::getWageMeasureUnit, wageMeasureUnit);
// 精准查询不等于
if (ObjectUtils.isNotEmpty(notTeamId)) {
lqw.and(wrapper -> wrapper
.ne(BusConstructionUser::getTeamId, notTeamId)
.or().isNull(BusConstructionUser::getTeamId));
.ne(SubConstructionUser::getTeamId, notTeamId)
.or().isNull(SubConstructionUser::getTeamId));
}
// 查询当前项目下的黑名单人员
if (projectId != null) {
List<Long> blackUserIdList = constructionBlacklistService.queryIdListByProjectId(projectId);
// 查询结果移除黑名单人员
if (CollUtil.isNotEmpty(blackUserIdList)) {
lqw.notIn(BusConstructionUser::getId, blackUserIdList);
lqw.notIn(SubConstructionUser::getId, blackUserIdList);
}
}
return lqw;
@ -741,9 +747,9 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
* @return 施工人员分页对象视图
*/
@Override
public Page<BusConstructionUserVo> getVoPage(Page<BusConstructionUser> constructionUserPage) {
List<BusConstructionUser> constructionUserList = constructionUserPage.getRecords();
Page<BusConstructionUserVo> constructionUserVoPage = new Page<>(
public Page<SubConstructionUserVo> getVoPage(Page<SubConstructionUser> constructionUserPage) {
List<SubConstructionUser> constructionUserList = constructionUserPage.getRecords();
Page<SubConstructionUserVo> constructionUserVoPage = new Page<>(
constructionUserPage.getCurrent(),
constructionUserPage.getSize(),
constructionUserPage.getTotal());
@ -751,39 +757,39 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
return constructionUserVoPage;
}
// 关联查询分包公司信息
Set<Long> contractorIdSet = constructionUserList.stream().map(BusConstructionUser::getContractorId)
Set<Long> contractorIdSet = constructionUserList.stream().map(SubConstructionUser::getContractorId)
.collect(Collectors.toSet());
Map<Long, List<BusContractor>> contractorIdContractorMap = contractorService.listByIds(contractorIdSet).stream()
.collect(Collectors.groupingBy(BusContractor::getId));
Map<Long, List<SubContractor>> contractorIdContractorMap = contractorService.listByIds(contractorIdSet).stream()
.collect(Collectors.groupingBy(SubContractor::getId));
// 关联查询工资标准
LambdaQueryWrapper<BusWorkWage> workWageLqw = Wrappers.lambdaQuery(BusWorkWage.class)
.in(BusWorkWage::getProjectId, constructionUserList.stream().map(BusConstructionUser::getProjectId).toList())
.in(BusWorkWage::getWorkType, constructionUserList.stream().map(BusConstructionUser::getTypeOfWork).toList())
.in(BusWorkWage::getWageMeasureUnit, constructionUserList.stream().map(BusConstructionUser::getWageMeasureUnit).toList());
.in(BusWorkWage::getProjectId, constructionUserList.stream().map(SubConstructionUser::getProjectId).toList())
.in(BusWorkWage::getWorkType, constructionUserList.stream().map(SubConstructionUser::getTypeOfWork).toList())
.in(BusWorkWage::getWageMeasureUnit, constructionUserList.stream().map(SubConstructionUser::getWageMeasureUnit).toList());
Map<String, Long> workWageMap = workWageService.list(workWageLqw).stream().collect(Collectors.toMap(
workWage -> workWage.getWorkType() + "_" + workWage.getWageMeasureUnit(),
BusWorkWage::getWage,
(wage1, wage2) -> wage1
));
int fileTypeSize = dictTypeService.selectDictDataByType(BusConstructionUserConstant.USER_FILE_TYPE).size();
int fileTypeSize = dictTypeService.selectDictDataByType(SubConstructionUserConstant.USER_FILE_TYPE).size();
// 获取用户上传文件数量信息
List<Long> userIdList = constructionUserList.stream().map(BusConstructionUser::getId).toList();
List<BusConstructionUserFile> fileList = constructionUserFileService.lambdaQuery()
.select(BusConstructionUserFile::getId, BusConstructionUserFile::getUserId)
.in(BusConstructionUserFile::getUserId, userIdList)
List<Long> userIdList = constructionUserList.stream().map(SubConstructionUser::getId).toList();
List<SubConstructionUserFile> fileList = constructionUserFileService.lambdaQuery()
.select(SubConstructionUserFile::getId, SubConstructionUserFile::getUserId)
.in(SubConstructionUserFile::getUserId, userIdList)
.list();
Map<Long, Long> fileCountMap = fileList.stream()
.collect(Collectors.groupingBy(
BusConstructionUserFile::getUserId,
SubConstructionUserFile::getUserId,
Collectors.counting()
));
// 填充信息
List<BusConstructionUserVo> constructionUserVoList = constructionUserList.stream().map(constructionUser -> {
BusConstructionUserVo constructionUserVo = new BusConstructionUserVo();
List<SubConstructionUserVo> constructionUserVoList = constructionUserList.stream().map(constructionUser -> {
SubConstructionUserVo constructionUserVo = new SubConstructionUserVo();
BeanUtils.copyProperties(constructionUser, constructionUserVo);
// 关联分包公司信息
Long contractorId = constructionUser.getContractorId();
BusContractorVo contractor = null;
SubContractorVo contractor = null;
if (contractorIdContractorMap.containsKey(contractorId)) {
contractor = contractorService.getVo(contractorIdContractorMap.get(contractorId).getFirst());
}
@ -798,11 +804,11 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
// 关联施工人员文件上传状态
long count = fileCountMap.getOrDefault(constructionUser.getId(), 0L);
if (count <= 0) {
constructionUserVo.setFileUploadStatus(BusConstructionUserFileStatusEnum.NOUPLOAD.getValue());
constructionUserVo.setFileUploadStatus(SubConstructionUserFileStatusEnum.NOUPLOAD.getValue());
} else if (count < fileTypeSize) {
constructionUserVo.setFileUploadStatus(BusConstructionUserFileStatusEnum.PARTUPLOAD.getValue());
constructionUserVo.setFileUploadStatus(SubConstructionUserFileStatusEnum.PARTUPLOAD.getValue());
} else if (count == fileTypeSize) {
constructionUserVo.setFileUploadStatus(BusConstructionUserFileStatusEnum.UPLOAD.getValue());
constructionUserVo.setFileUploadStatus(SubConstructionUserFileStatusEnum.UPLOAD.getValue());
}
// 解密身份证号码
String decrypt = idCardEncryptorUtil.decrypt(constructionUserVo.getSfzNumber());
@ -821,9 +827,9 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
* @return 施工人员考勤分页对象视图
*/
@Override
public Page<BusConstructionUserAttendanceTotalVo> getAttendanceTotalVoPage(BusConstructionUserAttendanceQueryReq req,
public Page<SubConstructionUserAttendanceTotalVo> getAttendanceTotalVoPage(SubConstructionUserAttendanceQueryReq req,
PageQuery pageQuery) {
LambdaQueryWrapper<BusConstructionUser> lqw = Wrappers.lambdaQuery();
LambdaQueryWrapper<SubConstructionUser> lqw = Wrappers.lambdaQuery();
// 从对象中取值
String userName = req.getUserName();
Long projectId = req.getProjectId();
@ -852,25 +858,25 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
List<Long> userIdList = attendanceService.list(attendanceLqw)
.stream().map(BusAttendance::getUserId).toList();
if (CollUtil.isNotEmpty(userIdList)) {
lqw.in(BusConstructionUser::getId, userIdList);
lqw.in(SubConstructionUser::getId, userIdList);
}
}
// 模糊查询
lqw.like(StringUtils.isNotBlank(userName), BusConstructionUser::getUserName, userName);
lqw.like(StringUtils.isNotBlank(userName), SubConstructionUser::getUserName, userName);
// 精确查询
lqw.eq(ObjectUtils.isNotEmpty(projectId), BusConstructionUser::getProjectId, projectId);
lqw.eq(ObjectUtils.isNotEmpty(teamId), BusConstructionUser::getTeamId, teamId);
lqw.eq(StringUtils.isNotBlank(typeOfWork), BusConstructionUser::getTypeOfWork, typeOfWork);
lqw.eq(ObjectUtils.isNotEmpty(projectId), SubConstructionUser::getProjectId, projectId);
lqw.eq(ObjectUtils.isNotEmpty(teamId), SubConstructionUser::getTeamId, teamId);
lqw.eq(StringUtils.isNotBlank(typeOfWork), SubConstructionUser::getTypeOfWork, typeOfWork);
// 查询当前项目下的黑名单人员
List<Long> blackUserIdList = constructionBlacklistService.queryIdListByProjectId(projectId);
// 查询结果移除黑名单人员
if (CollUtil.isNotEmpty(blackUserIdList)) {
lqw.notIn(BusConstructionUser::getId, blackUserIdList);
lqw.notIn(SubConstructionUser::getId, blackUserIdList);
}
// 分页查询获取数据
Page<BusConstructionUser> constructionUserPage = this.page(pageQuery.build(), lqw);
List<BusConstructionUser> constructionUserList = constructionUserPage.getRecords();
Page<BusConstructionUserAttendanceTotalVo> constructionUserAttendanceTotalPage = new Page<>(
Page<SubConstructionUser> constructionUserPage = this.page(pageQuery.build(), lqw);
List<SubConstructionUser> constructionUserList = constructionUserPage.getRecords();
Page<SubConstructionUserAttendanceTotalVo> constructionUserAttendanceTotalPage = new Page<>(
constructionUserPage.getCurrent(),
constructionUserPage.getSize(),
constructionUserPage.getTotal());
@ -878,14 +884,14 @@ public class BusConstructionUserServiceImpl extends ServiceImpl<BusConstructionU
return constructionUserAttendanceTotalPage;
}
// 获取施工人员id列表
List<Long> userIdList = constructionUserList.stream().map(BusConstructionUser::getId).toList();
List<Long> userIdList = constructionUserList.stream().map(SubConstructionUser::getId).toList();
// 关联查询施工人员考勤列表
attendanceLqw.in(BusAttendance::getUserId, userIdList);
Map<Long, List<BusAttendance>> userIdBusAttendanceListMap = attendanceService.list(attendanceLqw)
.stream().collect(Collectors.groupingBy(BusAttendance::getUserId));
// 填充信息
List<BusConstructionUserAttendanceTotalVo> userAttendanceTotalList = constructionUserList.stream().map(constructionUser -> {
BusConstructionUserAttendanceTotalVo constructionUserAttendanceTotalResp = new BusConstructionUserAttendanceTotalVo();
List<SubConstructionUserAttendanceTotalVo> userAttendanceTotalList = constructionUserList.stream().map(constructionUser -> {
SubConstructionUserAttendanceTotalVo constructionUserAttendanceTotalResp = new SubConstructionUserAttendanceTotalVo();
Long id = constructionUser.getId();
BeanUtils.copyProperties(constructionUser, constructionUserAttendanceTotalResp);
// 关联施工人员考勤信息

View File

@ -0,0 +1,302 @@
package org.dromara.contractor.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jakarta.annotation.Resource;
import org.dromara.common.core.constant.HttpStatus;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.ObjectUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.contractor.domain.SubContractor;
import org.dromara.contractor.domain.SubContractorMaterial;
import org.dromara.contractor.domain.SubContractorMaterialRecord;
import org.dromara.contractor.domain.dto.contractormaterialrecord.SubContractorMaterialRecordCreateReq;
import org.dromara.contractor.domain.dto.contractormaterialrecord.SubContractorMaterialRecordQueryReq;
import org.dromara.contractor.domain.dto.contractormaterialrecord.SubContractorMaterialRecordUpdateReq;
import org.dromara.contractor.domain.enums.SubContractorRecordEnum;
import org.dromara.contractor.domain.vo.contractormaterialrecord.SubContractorMaterialRecordVo;
import org.dromara.contractor.mapper.SubContractorMaterialRecordMapper;
import org.dromara.contractor.service.ISubContractorMaterialRecordService;
import org.dromara.contractor.service.ISubContractorMaterialService;
import org.dromara.contractor.service.ISubContractorService;
import org.dromara.project.service.IBusProjectService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/**
* 分包方物料记录Service业务层处理
*
* @author lcj
* @date 2025-06-27
*/
@Service
public class SubContractorMaterialRecordServiceImpl extends ServiceImpl<SubContractorMaterialRecordMapper, SubContractorMaterialRecord>
implements ISubContractorMaterialRecordService {
@Resource
private IBusProjectService projectService;
@Resource
private ISubContractorService contractorService;
@Resource
private ISubContractorMaterialService contractorMaterialService;
/**
* 查询分包方物料记录
*
* @param id 主键
* @return 分包方物料记录
*/
@Override
public SubContractorMaterialRecordVo queryById(Long id) {
SubContractorMaterialRecord entity = this.getById(id);
if (entity == null) {
throw new ServiceException("分包方物料记录信息不存在", HttpStatus.NOT_FOUND);
}
return this.getVo(entity);
}
/**
* 分页查询分包方物料记录列表
*
* @param req 查询条件
* @param pageQuery 分页参数
* @return 分包方物料记录分页列表
*/
@Override
public TableDataInfo<SubContractorMaterialRecordVo> queryPageList(SubContractorMaterialRecordQueryReq req, PageQuery pageQuery) {
Page<SubContractorMaterialRecord> result = this.page(pageQuery.build(), this.buildQueryWrapper(req));
return TableDataInfo.build(this.getVoPage(result));
}
/**
* 查询符合条件的分包方物料记录列表
*
* @param req 查询条件
* @return 分包方物料记录列表
*/
@Override
public List<SubContractorMaterialRecordVo> queryList(SubContractorMaterialRecordQueryReq req) {
LambdaQueryWrapper<SubContractorMaterialRecord> lqw = buildQueryWrapper(req);
return this.list(lqw).stream().map(this::getVo).toList();
}
/**
* 新增分包方物料记录
*
* @param req 分包方物料记录
* @return 新增分包方物料记录主键id
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Long insertByBo(SubContractorMaterialRecordCreateReq req) {
SubContractorMaterialRecord entry = new SubContractorMaterialRecord();
BeanUtils.copyProperties(req, entry);
Long contractorMaterialId = req.getContractorMaterialId();
if (contractorMaterialId == null) {
throw new ServiceException("物料id不能为空", HttpStatus.BAD_REQUEST);
}
SubContractorMaterial contractorMaterial = contractorMaterialService.getById(contractorMaterialId);
if (contractorMaterial == null) {
throw new ServiceException("分包方物料不存在", HttpStatus.NOT_FOUND);
}
// 填充默认值
entry.setProjectId(contractorMaterial.getProjectId());
entry.setContractorId(contractorMaterial.getContractorId());
String recordType = req.getRecordType();
BigDecimal recordNumber = req.getRecordNumber();
// 同步更新工具数量
BigDecimal number = this.computeRemainingMaterialNumber(contractorMaterial, recordType, recordNumber);
entry.setRemainingNumber(number);
boolean save = this.save(entry);
if (!save) {
throw new ServiceException("保存分包方物料记录失败", HttpStatus.ERROR);
}
return entry.getId();
}
/**
* 修改分包方物料记录
*
* @param req 分包方物料记录
* @return 是否修改成功
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean updateByBo(SubContractorMaterialRecordUpdateReq req) {
SubContractorMaterialRecord entry = new SubContractorMaterialRecord();
BeanUtils.copyProperties(req, entry);
SubContractorMaterialRecord contractorMaterialEntry = this.getById(entry.getId());
if (contractorMaterialEntry == null) {
throw new ServiceException("修改分包方物料记录失败,数据不存在", HttpStatus.NOT_FOUND);
}
SubContractorMaterial contractorMaterial = contractorMaterialService.getById(contractorMaterialEntry.getContractorMaterialId());
if (contractorMaterial == null) {
throw new ServiceException("分包方物料不存在", HttpStatus.NOT_FOUND);
}
String recordType = contractorMaterialEntry.getRecordType();
BigDecimal recordNumber = req.getRecordNumber();
// 同步更新工具数量
BigDecimal number = this.computeRemainingMaterialNumber(contractorMaterial, recordType, recordNumber);
entry.setRemainingNumber(number);
boolean result = this.updateById(entry);
if (!result) {
throw new ServiceException("修改分包方物料记录失败", HttpStatus.ERROR);
}
return true;
}
/**
* 校验并批量删除分包方物料记录信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
Long userId = LoginHelper.getUserId();
List<SubContractorMaterialRecord> list = this.listByIds(ids);
if (isValid) {
List<Long> projectIdList = list.stream().map(SubContractorMaterialRecord::getProjectId).toList();
projectService.validAuth(projectIdList, userId);
}
return this.removeBatchByIds(ids);
}
/**
* 获取分包方物料记录视图对象
*
* @param contractorMaterialRecord 分包方物料记录对象
* @return 分包方物料记录视图对象
*/
@Override
public SubContractorMaterialRecordVo getVo(SubContractorMaterialRecord contractorMaterialRecord) {
SubContractorMaterialRecordVo vo = new SubContractorMaterialRecordVo();
if (contractorMaterialRecord == null) {
throw new ServiceException("数据不存在");
}
BeanUtils.copyProperties(contractorMaterialRecord, vo);
SubContractorMaterial contractorMaterial = contractorMaterialService.getById(vo.getContractorMaterialId());
if (contractorMaterial != null) {
vo.setContractorMaterialName(contractorMaterial.getMaterialName());
}
SubContractor contractor = contractorService.getById(vo.getContractorId());
if (contractor != null) {
vo.setContractorName(contractor.getName());
}
return vo;
}
/**
* 获取分包方物料记录查询条件封装
*
* @param req 分包方物料记录查询条件
* @return 分包方物料记录查询条件封装
*/
@Override
public LambdaQueryWrapper<SubContractorMaterialRecord> buildQueryWrapper(SubContractorMaterialRecordQueryReq req) {
LambdaQueryWrapper<SubContractorMaterialRecord> lqw = new LambdaQueryWrapper<>();
if (req == null) {
return lqw;
}
Long projectId = req.getProjectId();
Long contractorId = req.getContractorId();
Long contractorMaterialId = req.getContractorMaterialId();
String recordType = req.getRecordType();
String usedPosition = req.getUsedPosition();
lqw.eq(ObjectUtils.isNotEmpty(projectId), SubContractorMaterialRecord::getProjectId, projectId);
lqw.eq(ObjectUtils.isNotEmpty(contractorId), SubContractorMaterialRecord::getContractorId, contractorId);
lqw.eq(ObjectUtils.isNotEmpty(contractorMaterialId), SubContractorMaterialRecord::getContractorMaterialId, contractorMaterialId);
lqw.eq(StringUtils.isNotBlank(recordType), SubContractorMaterialRecord::getRecordType, recordType);
lqw.like(StringUtils.isNotBlank(usedPosition), SubContractorMaterialRecord::getUsedPosition, usedPosition);
return lqw;
}
/**
* 获取分包方物料记录分页对象视图
*
* @param contractorMaterialRecordPage 分包方物料记录分页对象
* @return 分包方物料记录分页对象视图
*/
@Override
public Page<SubContractorMaterialRecordVo> getVoPage(Page<SubContractorMaterialRecord> contractorMaterialRecordPage) {
List<SubContractorMaterialRecord> contractorMaterialEntryList = contractorMaterialRecordPage.getRecords();
Page<SubContractorMaterialRecordVo> contractorMaterialEntryVoPage = new Page<>(
contractorMaterialRecordPage.getCurrent(),
contractorMaterialRecordPage.getSize(),
contractorMaterialRecordPage.getTotal());
if (CollUtil.isEmpty(contractorMaterialEntryList)) {
return contractorMaterialEntryVoPage;
}
Set<Long> contractorIdList = contractorMaterialEntryList.stream().map(SubContractorMaterialRecord::getContractorId).collect(Collectors.toSet());
Map<Long, SubContractor> contractorMap = contractorService.listByIds(contractorIdList)
.stream().collect(Collectors.toMap(SubContractor::getId, v -> v));
Set<Long> contractorMaterialIdList = contractorMaterialEntryList.stream().map(SubContractorMaterialRecord::getContractorMaterialId).collect(Collectors.toSet());
Map<Long, SubContractorMaterial> contractorMaterialMap = contractorMaterialService.listByIds(contractorMaterialIdList)
.stream().collect(Collectors.toMap(SubContractorMaterial::getId, v -> v));
List<SubContractorMaterialRecordVo> contractorMaterialEntryVoList = contractorMaterialEntryList.stream().map(entity -> {
SubContractorMaterialRecordVo vo = new SubContractorMaterialRecordVo();
BeanUtils.copyProperties(entity, vo);
if (contractorMaterialMap.containsKey(entity.getContractorMaterialId())) {
vo.setContractorMaterialName(contractorMaterialMap.get(entity.getContractorMaterialId()).getMaterialName());
}
if (contractorMap.containsKey(entity.getContractorId())) {
vo.setContractorName(contractorMap.get(entity.getContractorId()).getName());
}
return vo;
}).toList();
contractorMaterialEntryVoPage.setRecords(contractorMaterialEntryVoList);
return contractorMaterialEntryVoPage;
}
/**
* 计算剩余库存并更新库存对象返回剩余数量
*
* @param contractorMaterial 当前库存工具
* @param recordType 操作类型(入库/出库)
* @param recordNumber 本次操作数量
* @return 剩余数量
*/
private BigDecimal computeRemainingMaterialNumber(SubContractorMaterial contractorMaterial, String recordType, BigDecimal recordNumber) {
if (recordNumber == null) {
throw new ServiceException("物料数量不能为空", HttpStatus.ERROR);
}
BigDecimal materialNumber = contractorMaterial.getMaterialNumber();
SubContractorMaterial newContractorMaterial = new SubContractorMaterial();
newContractorMaterial.setId(contractorMaterial.getId());
BigDecimal result;
if (SubContractorRecordEnum.PUT.getValue().equals(recordType)) {
result = materialNumber.add(recordNumber);
} else if (SubContractorRecordEnum.OUT.getValue().equals(recordType)) {
result = materialNumber.subtract(recordNumber);
if (result.compareTo(BigDecimal.ZERO) < 0) {
throw new ServiceException("出库数量不能大于库存数量", HttpStatus.ERROR);
}
} else {
throw new ServiceException("分包方物料记录类型错误", HttpStatus.BAD_REQUEST);
}
newContractorMaterial.setMaterialNumber(result);
boolean update = contractorMaterialService.updateById(newContractorMaterial);
if (!update) {
throw new ServiceException("更新分包方物料信息异常", HttpStatus.ERROR);
}
return result;
}
}

View File

@ -0,0 +1,246 @@
package org.dromara.contractor.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jakarta.annotation.Resource;
import org.dromara.common.core.constant.HttpStatus;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.ObjectUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.contractor.domain.SubContractor;
import org.dromara.contractor.domain.SubContractorMaterial;
import org.dromara.contractor.domain.dto.contractormaterial.SubContractorMaterialCreateReq;
import org.dromara.contractor.domain.dto.contractormaterial.SubContractorMaterialQueryReq;
import org.dromara.contractor.domain.dto.contractormaterial.SubContractorMaterialUpdateReq;
import org.dromara.contractor.domain.vo.contractormaterial.SubContractorMaterialVo;
import org.dromara.contractor.mapper.SubContractorMaterialMapper;
import org.dromara.contractor.service.ISubContractorMaterialService;
import org.dromara.contractor.service.ISubContractorService;
import org.dromara.project.service.IBusProjectService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
/**
* 分包方物料Service业务层处理
*
* @author lcj
* @date 2025-06-27
*/
@Service
public class SubContractorMaterialServiceImpl extends ServiceImpl<SubContractorMaterialMapper, SubContractorMaterial>
implements ISubContractorMaterialService {
@Resource
private IBusProjectService projectService;
@Resource
private ISubContractorService contractorService;
/**
* 查询分包方物料
*
* @param id 主键
* @return 分包方物料
*/
@Override
public SubContractorMaterialVo queryById(Long id) {
SubContractorMaterial contractorMaterial = this.getById(id);
if (contractorMaterial == null) {
throw new ServiceException("分包方物料信息不存在", HttpStatus.NOT_FOUND);
}
return this.getVo(contractorMaterial);
}
/**
* 分页查询分包方物料列表
*
* @param req 查询条件
* @param pageQuery 分页参数
* @return 分包方物料分页列表
*/
@Override
public TableDataInfo<SubContractorMaterialVo> queryPageList(SubContractorMaterialQueryReq req, PageQuery pageQuery) {
Page<SubContractorMaterial> result = this.page(pageQuery.build(), this.buildQueryWrapper(req));
return TableDataInfo.build(this.getVoPage(result));
}
/**
* 查询符合条件的分包方物料列表
*
* @param req 查询条件
* @return 分包方物料列表
*/
@Override
public List<SubContractorMaterialVo> queryList(SubContractorMaterialQueryReq req) {
LambdaQueryWrapper<SubContractorMaterial> lqw = this.buildQueryWrapper(req);
return this.list(lqw).stream().map(this::getVo).toList();
}
/**
* 新增分包方物料
*
* @param req 分包方物料
* @return 新增分包物料主键id
*/
@Override
public Long insertByBo(SubContractorMaterialCreateReq req) {
SubContractorMaterial contractorMaterial = new SubContractorMaterial();
BeanUtils.copyProperties(req, contractorMaterial);
validEntityBeforeSave(contractorMaterial, true);
boolean result = this.save(contractorMaterial);
if (!result) {
throw new ServiceException("分包方物料新增失败", HttpStatus.ERROR);
}
return contractorMaterial.getId();
}
/**
* 修改分包方物料
*
* @param req 分包方物料
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(SubContractorMaterialUpdateReq req) {
Long id = req.getId();
SubContractorMaterial oldContractorMaterial = this.getById(id);
if (oldContractorMaterial == null) {
throw new ServiceException("修改分包方物料失败,数据不存在", HttpStatus.NOT_FOUND);
}
SubContractorMaterial contractorMaterial = new SubContractorMaterial();
BeanUtils.copyProperties(req, contractorMaterial);
validEntityBeforeSave(contractorMaterial, false);
boolean result = this.updateById(contractorMaterial);
if (!result) {
throw new ServiceException("修改分包方物料失败", HttpStatus.ERROR);
}
return true;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(SubContractorMaterial entity, Boolean create) {
Long projectId = entity.getProjectId();
Long contractorId = entity.getContractorId();
if (create) {
if (projectId == null) {
throw new ServiceException("项目 id 不能为空", HttpStatus.BAD_REQUEST);
}
if (contractorId == null) {
throw new ServiceException("合同方 id 不能为空", HttpStatus.BAD_REQUEST);
}
}
if (projectId != null && projectService.getById(projectId) == null) {
throw new ServiceException("对应项目不存在", HttpStatus.NOT_FOUND);
}
if (contractorId != null && contractorService.getById(contractorId) == null) {
throw new ServiceException("对应分包方不存在", HttpStatus.NOT_FOUND);
}
}
/**
* 校验并批量删除分包方物料信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
Long userId = LoginHelper.getUserId();
List<SubContractorMaterial> contractorMaterialList = this.listByIds(ids);
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
List<Long> projectIdList = contractorMaterialList.stream().map(SubContractorMaterial::getProjectId).distinct().toList();
projectService.validAuth(projectIdList, userId);
}
return this.removeBatchByIds(ids);
}
/**
* 获取分包方物料视图对象
*
* @param contractorMaterial 分包方物料对象
* @return 分包方物料视图对象
*/
@Override
public SubContractorMaterialVo getVo(SubContractorMaterial contractorMaterial) {
SubContractorMaterialVo contractorMaterialVo = new SubContractorMaterialVo();
if (contractorMaterial == null) {
return contractorMaterialVo;
}
BeanUtils.copyProperties(contractorMaterial, contractorMaterialVo);
Long contractorId = contractorMaterial.getContractorId();
SubContractor contractor = contractorService.getById(contractorId);
contractorMaterialVo.setContractorName(contractor.getName());
return contractorMaterialVo;
}
/**
* 获取分包方物料查询条件封装
*
* @param req 分包方物料查询条件
* @return 分包方物料查询条件封装
*/
@Override
public LambdaQueryWrapper<SubContractorMaterial> buildQueryWrapper(SubContractorMaterialQueryReq req) {
LambdaQueryWrapper<SubContractorMaterial> lqw = new LambdaQueryWrapper<>();
Long projectId = req.getProjectId();
Long contractorId = req.getContractorId();
String materialName = req.getMaterialName();
String materialType = req.getMaterialType();
String materialModel = req.getMaterialModel();
lqw.eq(ObjectUtils.isNotEmpty(projectId), SubContractorMaterial::getProjectId, projectId);
lqw.eq(ObjectUtils.isNotEmpty(contractorId), SubContractorMaterial::getContractorId, contractorId);
lqw.eq(StringUtils.isNotBlank(materialType), SubContractorMaterial::getMaterialModel, materialType);
lqw.like(StringUtils.isNotBlank(materialName), SubContractorMaterial::getMaterialName, materialName);
lqw.like(StringUtils.isNotBlank(materialModel), SubContractorMaterial::getMaterialModel, materialModel);
return lqw;
}
/**
* 获取分包方物料分页对象视图
*
* @param contractorPage 分包方物料分页对象
* @return 分包方物料分页对象视图
*/
@Override
public Page<SubContractorMaterialVo> getVoPage(Page<SubContractorMaterial> contractorPage) {
List<SubContractorMaterial> contractorMaterialList = contractorPage.getRecords();
Page<SubContractorMaterialVo> contractorMaterialVoPage = new Page<>(
contractorPage.getCurrent(),
contractorPage.getSize(),
contractorPage.getTotal());
if (CollUtil.isEmpty(contractorMaterialList)) {
return contractorMaterialVoPage;
}
Set<Long> contractorIdList = contractorMaterialList.stream().map(SubContractorMaterial::getContractorId).collect(Collectors.toSet());
Map<Long, SubContractor> contractorMap = contractorService.listByIds(contractorIdList)
.stream().collect(Collectors.toMap(SubContractor::getId, v -> v));
List<SubContractorMaterialVo> contractorMaterialVoList = contractorMaterialList.stream().map(contractorMaterial -> {
SubContractorMaterialVo contractorMaterialVo = new SubContractorMaterialVo();
BeanUtils.copyProperties(contractorMaterial, contractorMaterialVo);
Long contractorId = contractorMaterial.getContractorId();
if (contractorMap.containsKey(contractorId)) {
contractorMaterialVo.setContractorName(contractorMap.get(contractorId).getName());
}
return contractorMaterialVo;
}).toList();
contractorMaterialVoPage.setRecords(contractorMaterialVoList);
return contractorMaterialVoPage;
}
}

View File

@ -1,4 +1,4 @@
package org.dromara.project.service.impl;
package org.dromara.contractor.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.PhoneUtil;
@ -16,16 +16,16 @@ import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.project.domain.BusConstructionUser;
import org.dromara.project.domain.BusContractor;
import org.dromara.contractor.domain.SubConstructionUser;
import org.dromara.contractor.domain.SubContractor;
import org.dromara.contractor.domain.dto.contractor.SubContractorCreateReq;
import org.dromara.contractor.domain.dto.contractor.SubContractorQueryReq;
import org.dromara.contractor.domain.dto.contractor.SubContractorUpdateReq;
import org.dromara.contractor.domain.vo.contractor.SubContractorVo;
import org.dromara.contractor.mapper.SubContractorMapper;
import org.dromara.contractor.service.ISubContractorService;
import org.dromara.project.domain.BusProject;
import org.dromara.project.domain.dto.contractor.BusContractorCreateReq;
import org.dromara.project.domain.dto.contractor.BusContractorQueryReq;
import org.dromara.project.domain.dto.contractor.BusContractorUpdateReq;
import org.dromara.project.domain.vo.contractor.BusContractorVo;
import org.dromara.project.mapper.BusContractorMapper;
import org.dromara.project.service.IBusConstructionUserService;
import org.dromara.project.service.IBusContractorService;
import org.dromara.contractor.service.ISubConstructionUserService;
import org.dromara.project.service.IBusProjectService;
import org.dromara.system.domain.bo.SysDeptBo;
import org.dromara.system.service.ISysDeptService;
@ -46,11 +46,11 @@ import java.util.Map;
* @date 2025-03-07
*/
@Service
public class BusContractorServiceImpl extends ServiceImpl<BusContractorMapper, BusContractor>
implements IBusContractorService {
public class SubContractorServiceImpl extends ServiceImpl<SubContractorMapper, SubContractor>
implements ISubContractorService {
@Resource
private IBusConstructionUserService constructionUserService;
private ISubConstructionUserService constructionUserService;
@Resource
private IBusProjectService projectService;
@ -68,8 +68,8 @@ public class BusContractorServiceImpl extends ServiceImpl<BusContractorMapper, B
* @return 分包单位
*/
@Override
public BusContractorVo queryById(Long id) {
BusContractor contractor = this.getById(id);
public SubContractorVo queryById(Long id) {
SubContractor contractor = this.getById(id);
if (contractor == null) {
throw new ServiceException("分包单位信息不存在", HttpStatus.NOT_FOUND);
}
@ -84,9 +84,9 @@ public class BusContractorServiceImpl extends ServiceImpl<BusContractorMapper, B
* @return 分包单位分页列表
*/
@Override
public TableDataInfo<BusContractorVo> queryPageList(BusContractorQueryReq req, PageQuery pageQuery) {
public TableDataInfo<SubContractorVo> queryPageList(SubContractorQueryReq req, PageQuery pageQuery) {
// 查询数据库
Page<BusContractor> result = this.page(pageQuery.build(), this.buildQueryWrapper(req));
Page<SubContractor> result = this.page(pageQuery.build(), this.buildQueryWrapper(req));
return TableDataInfo.build(this.getVoPage(result));
}
@ -97,9 +97,9 @@ public class BusContractorServiceImpl extends ServiceImpl<BusContractorMapper, B
* @return 分包单位列表
*/
@Override
public List<BusContractorVo> queryList(BusContractorQueryReq req) {
LambdaQueryWrapper<BusContractor> lqw = this.buildQueryWrapper(req);
List<BusContractor> list = this.list(lqw);
public List<SubContractorVo> queryList(SubContractorQueryReq req) {
LambdaQueryWrapper<SubContractor> lqw = this.buildQueryWrapper(req);
List<SubContractor> list = this.list(lqw);
return list.stream().map(this::getVo).toList();
}
@ -111,9 +111,9 @@ public class BusContractorServiceImpl extends ServiceImpl<BusContractorMapper, B
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Long insertByBo(BusContractorCreateReq req) {
public Long insertByBo(SubContractorCreateReq req) {
// 将实体类和 DTO 进行转换
BusContractor contractor = new BusContractor();
SubContractor contractor = new SubContractor();
BeanUtils.copyProperties(req, contractor);
// 数据转换
Map<String, Long> fileMap = req.getFileMap();
@ -122,7 +122,7 @@ public class BusContractorServiceImpl extends ServiceImpl<BusContractorMapper, B
// 数据校验
validEntityBeforeSave(contractor, true);
String name = req.getName();
Long count = this.lambdaQuery().eq(BusContractor::getName, name).count();
Long count = this.lambdaQuery().eq(SubContractor::getName, name).count();
if (count > 0) {
throw new ServiceException("分包单位名称重复", HttpStatus.BAD_REQUEST);
}
@ -166,9 +166,9 @@ public class BusContractorServiceImpl extends ServiceImpl<BusContractorMapper, B
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(BusContractorUpdateReq req) {
public Boolean updateByBo(SubContractorUpdateReq req) {
// 将实体类和 DTO 进行转换
BusContractor contractor = new BusContractor();
SubContractor contractor = new SubContractor();
BeanUtils.copyProperties(req, contractor);
// 数据转换
Map<String, Long> fileMap = req.getFileMap();
@ -177,13 +177,13 @@ public class BusContractorServiceImpl extends ServiceImpl<BusContractorMapper, B
// 数据校验
validEntityBeforeSave(contractor, false);
// 判断是否存在
BusContractor oldContractor = this.getById(contractor.getId());
SubContractor oldContractor = this.getById(contractor.getId());
if (oldContractor == null) {
throw new ServiceException("修改施工人员失败,数据不存在", HttpStatus.NOT_FOUND);
}
// 判断名称是否重复
if (!oldContractor.getName().equals(req.getName())) {
Long count = this.lambdaQuery().eq(BusContractor::getName, req.getName()).count();
Long count = this.lambdaQuery().eq(SubContractor::getName, req.getName()).count();
if (count > 0) {
throw new ServiceException("分包单位名称重复", HttpStatus.BAD_REQUEST);
}
@ -195,7 +195,7 @@ public class BusContractorServiceImpl extends ServiceImpl<BusContractorMapper, B
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(BusContractor entity, Boolean create) {
private void validEntityBeforeSave(SubContractor entity, Boolean create) {
// 做一些数据校验,如唯一约束
String name = entity.getName();
String principal = entity.getPrincipal();
@ -231,14 +231,14 @@ public class BusContractorServiceImpl extends ServiceImpl<BusContractorMapper, B
@Transactional(rollbackFor = Exception.class)
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
Long userId = LoginHelper.getUserId();
List<BusContractor> contractorList = this.listByIds(ids);
List<SubContractor> contractorList = this.listByIds(ids);
// 做一些业务上的校验,判断是否需要校验
if (isValid) {
// 仅当前项目下的用户可以删除
List<Long> projectIdList = contractorList.stream().map(BusContractor::getProjectId).toList();
List<Long> projectIdList = contractorList.stream().map(SubContractor::getProjectId).toList();
projectService.validAuth(projectIdList, userId);
// 判断当前分包公司下是否还包含施工人员
QueryWrapper<BusConstructionUser> queryWrapper = new QueryWrapper<>();
QueryWrapper<SubConstructionUser> queryWrapper = new QueryWrapper<>();
queryWrapper.in("contractor_id", ids);
if (constructionUserService.count(queryWrapper) > 0) {
throw new ServiceException("删除分包单位失败,删除分包单位下存在施工人员", HttpStatus.BAD_REQUEST);
@ -258,9 +258,9 @@ public class BusContractorServiceImpl extends ServiceImpl<BusContractorMapper, B
* @return 分包公司视图对象
*/
@Override
public BusContractorVo getVo(BusContractor contractor) {
public SubContractorVo getVo(SubContractor contractor) {
// 对象转封装类
BusContractorVo contractorVo = new BusContractorVo();
SubContractorVo contractorVo = new SubContractorVo();
if (contractor == null) {
return contractorVo;
}
@ -284,8 +284,8 @@ public class BusContractorServiceImpl extends ServiceImpl<BusContractorMapper, B
* @return 分包公司查询条件封装
*/
@Override
public LambdaQueryWrapper<BusContractor> buildQueryWrapper(BusContractorQueryReq req) {
LambdaQueryWrapper<BusContractor> lqw = new LambdaQueryWrapper<>();
public LambdaQueryWrapper<SubContractor> buildQueryWrapper(SubContractorQueryReq req) {
LambdaQueryWrapper<SubContractor> lqw = new LambdaQueryWrapper<>();
if (req == null) {
return lqw;
}
@ -300,16 +300,16 @@ public class BusContractorServiceImpl extends ServiceImpl<BusContractorMapper, B
String contractorType = req.getContractorType();
String remark = req.getRemark();
// 模糊查询
lqw.like(StringUtils.isNotBlank(name), BusContractor::getName, name);
lqw.like(StringUtils.isNotBlank(principal), BusContractor::getPrincipal, principal);
lqw.like(StringUtils.isNotBlank(principalPhone), BusContractor::getPrincipalPhone, principalPhone);
lqw.like(StringUtils.isNotBlank(custodian), BusContractor::getCustodian, custodian);
lqw.like(StringUtils.isNotBlank(custodianPhone), BusContractor::getCustodianPhone, custodianPhone);
lqw.like(StringUtils.isNotBlank(remark), BusContractor::getRemark, remark);
lqw.like(StringUtils.isNotBlank(name), SubContractor::getName, name);
lqw.like(StringUtils.isNotBlank(principal), SubContractor::getPrincipal, principal);
lqw.like(StringUtils.isNotBlank(principalPhone), SubContractor::getPrincipalPhone, principalPhone);
lqw.like(StringUtils.isNotBlank(custodian), SubContractor::getCustodian, custodian);
lqw.like(StringUtils.isNotBlank(custodianPhone), SubContractor::getCustodianPhone, custodianPhone);
lqw.like(StringUtils.isNotBlank(remark), SubContractor::getRemark, remark);
// 精确查询
lqw.eq(ObjectUtils.isNotEmpty(id), BusContractor::getId, id);
lqw.eq(ObjectUtils.isNotEmpty(projectId), BusContractor::getProjectId, projectId);
lqw.eq(StringUtils.isNotBlank(contractorType), BusContractor::getContractorType, contractorType);
lqw.eq(ObjectUtils.isNotEmpty(id), SubContractor::getId, id);
lqw.eq(ObjectUtils.isNotEmpty(projectId), SubContractor::getProjectId, projectId);
lqw.eq(StringUtils.isNotBlank(contractorType), SubContractor::getContractorType, contractorType);
return lqw;
}
@ -320,16 +320,16 @@ public class BusContractorServiceImpl extends ServiceImpl<BusContractorMapper, B
* @return 分包公司分页对象视图
*/
@Override
public Page<BusContractorVo> getVoPage(Page<BusContractor> contractorPage) {
List<BusContractor> contractorList = contractorPage.getRecords();
Page<BusContractorVo> contractorVoPage = new Page<>(
public Page<SubContractorVo> getVoPage(Page<SubContractor> contractorPage) {
List<SubContractor> contractorList = contractorPage.getRecords();
Page<SubContractorVo> contractorVoPage = new Page<>(
contractorPage.getCurrent(),
contractorPage.getSize(),
contractorPage.getTotal());
if (CollUtil.isEmpty(contractorList)) {
return contractorVoPage;
}
List<BusContractorVo> contractorVoList = contractorList.stream().map(this::getVo).toList();
List<SubContractorVo> contractorVoList = contractorList.stream().map(this::getVo).toList();
contractorVoPage.setRecords(contractorVoList);
return contractorVoPage;
}

View File

@ -12,22 +12,24 @@ import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.contractor.domain.SubContractor;
import org.dromara.contractor.domain.SubContractorTool;
import org.dromara.contractor.domain.SubContractorToolRecord;
import org.dromara.contractor.domain.dto.contractortoolentry.SubContractorToolRecordCreateReq;
import org.dromara.contractor.domain.dto.contractortoolentry.SubContractorToolRecordQueryReq;
import org.dromara.contractor.domain.dto.contractortoolentry.SubContractorToolRecordUpdateReq;
import org.dromara.contractor.domain.enums.SubContractorRecordEnum;
import org.dromara.contractor.domain.vo.contractortoolentry.SubContractorToolRecordVo;
import org.dromara.contractor.mapper.SubContractorToolRecordMapper;
import org.dromara.contractor.service.ISubContractorService;
import org.dromara.contractor.service.ISubContractorToolRecordService;
import org.dromara.project.domain.BusContractor;
import org.dromara.project.domain.BusContractorTool;
import org.dromara.project.service.IBusContractorService;
import org.dromara.project.service.IBusContractorToolService;
import org.dromara.contractor.service.ISubContractorToolService;
import org.dromara.project.service.IBusProjectService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@ -48,10 +50,10 @@ public class SubContractorToolRecordServiceImpl extends ServiceImpl<SubContracto
private IBusProjectService projectService;
@Resource
private IBusContractorService contractorService;
private ISubContractorService contractorService;
@Resource
private IBusContractorToolService contractorToolService;
private ISubContractorToolService contractorToolService;
/**
* 查询分包方工器具记录
@ -100,6 +102,7 @@ public class SubContractorToolRecordServiceImpl extends ServiceImpl<SubContracto
* @return 新增分包方工器具记录主键id
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Long insertByBo(SubContractorToolRecordCreateReq req) {
SubContractorToolRecord entry = new SubContractorToolRecord();
BeanUtils.copyProperties(req, entry);
@ -107,16 +110,21 @@ public class SubContractorToolRecordServiceImpl extends ServiceImpl<SubContracto
if (contractorToolId == null) {
throw new ServiceException("工器具id不能为空", HttpStatus.BAD_REQUEST);
}
BusContractorTool contractorTool = contractorToolService.getById(contractorToolId);
SubContractorTool contractorTool = contractorToolService.getById(contractorToolId);
if (contractorTool == null) {
throw new ServiceException("分包方工器具不存在", HttpStatus.NOT_FOUND);
}
// 填充默认值
entry.setProjectId(contractorTool.getProjectId());
entry.setContractorId(contractorTool.getContractorId());
String recordType = req.getRecordType();
BigDecimal recordNumber = req.getRecordNumber();
// 同步更新工具数量
BigDecimal number = this.computeRemainingToolNumber(contractorTool, recordType, recordNumber);
entry.setRemainingNumber(number);
boolean save = this.save(entry);
if (!save) {
throw new ServiceException("分包方工器具记录失败", HttpStatus.ERROR);
throw new ServiceException("保存分包方工器具记录失败", HttpStatus.ERROR);
}
return entry.getId();
}
@ -128,6 +136,7 @@ public class SubContractorToolRecordServiceImpl extends ServiceImpl<SubContracto
* @return 是否修改成功
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean updateByBo(SubContractorToolRecordUpdateReq req) {
SubContractorToolRecord entry = new SubContractorToolRecord();
BeanUtils.copyProperties(req, entry);
@ -135,6 +144,15 @@ public class SubContractorToolRecordServiceImpl extends ServiceImpl<SubContracto
if (contractorToolEntry == null) {
throw new ServiceException("修改分包方工器具记录失败,数据不存在", HttpStatus.NOT_FOUND);
}
SubContractorTool contractorTool = contractorToolService.getById(contractorToolEntry.getContractorToolId());
if (contractorTool == null) {
throw new ServiceException("分包方工器具不存在", HttpStatus.NOT_FOUND);
}
String recordType = contractorToolEntry.getRecordType();
BigDecimal recordNumber = req.getRecordNumber();
// 同步更新工具数量
BigDecimal number = this.computeRemainingToolNumber(contractorTool, recordType, recordNumber);
entry.setRemainingNumber(number);
boolean result = this.updateById(entry);
if (!result) {
throw new ServiceException("修改分包方工器具记录失败", HttpStatus.ERROR);
@ -165,21 +183,21 @@ public class SubContractorToolRecordServiceImpl extends ServiceImpl<SubContracto
/**
* 获取分包方工器具记录视图对象
*
* @param contractorToolEntry 分包方工器具记录对象
* @param subContractorToolRecord 分包方工器具记录对象
* @return 分包方工器具记录视图对象
*/
@Override
public SubContractorToolRecordVo getVo(SubContractorToolRecord contractorToolEntry) {
public SubContractorToolRecordVo getVo(SubContractorToolRecord subContractorToolRecord) {
SubContractorToolRecordVo vo = new SubContractorToolRecordVo();
if (contractorToolEntry == null) {
if (subContractorToolRecord == null) {
throw new ServiceException("数据不存在");
}
BeanUtils.copyProperties(contractorToolEntry, vo);
BusContractorTool contractorTool = contractorToolService.getById(vo.getContractorToolId());
BeanUtils.copyProperties(subContractorToolRecord, vo);
SubContractorTool contractorTool = contractorToolService.getById(vo.getContractorToolId());
if (contractorTool != null) {
vo.setContractorToolName(contractorTool.getToolName());
}
BusContractor contractor = contractorService.getById(vo.getContractorId());
SubContractor contractor = contractorService.getById(vo.getContractorId());
if (contractor != null) {
vo.setContractorName(contractor.getName());
}
@ -203,9 +221,11 @@ public class SubContractorToolRecordServiceImpl extends ServiceImpl<SubContracto
Long contractorToolId = req.getContractorToolId();
String checkNum = req.getCheckNum();
String checkDept = req.getCheckDept();
String recordType = req.getRecordType();
lqw.eq(ObjectUtils.isNotEmpty(projectId), SubContractorToolRecord::getProjectId, projectId);
lqw.eq(ObjectUtils.isNotEmpty(contractorId), SubContractorToolRecord::getContractorId, contractorId);
lqw.eq(ObjectUtils.isNotEmpty(contractorToolId), SubContractorToolRecord::getContractorToolId, contractorToolId);
lqw.eq(StringUtils.isNotBlank(recordType), SubContractorToolRecord::getRecordType, recordType);
lqw.like(StringUtils.isNotBlank(checkNum), SubContractorToolRecord::getCheckNum, checkNum);
lqw.like(StringUtils.isNotBlank(checkDept), SubContractorToolRecord::getCheckDept, checkDept);
return lqw;
@ -214,25 +234,25 @@ public class SubContractorToolRecordServiceImpl extends ServiceImpl<SubContracto
/**
* 获取分包方工器具记录分页对象视图
*
* @param contractorToolEntryPage 分包方工器具记录分页对象
* @param contractorToolRecordPage 分包方工器具记录分页对象
* @return 分包方工器具记录分页对象视图
*/
@Override
public Page<SubContractorToolRecordVo> getVoPage(Page<SubContractorToolRecord> contractorToolEntryPage) {
List<SubContractorToolRecord> contractorToolEntryList = contractorToolEntryPage.getRecords();
public Page<SubContractorToolRecordVo> getVoPage(Page<SubContractorToolRecord> contractorToolRecordPage) {
List<SubContractorToolRecord> contractorToolEntryList = contractorToolRecordPage.getRecords();
Page<SubContractorToolRecordVo> contractorToolEntryVoPage = new Page<>(
contractorToolEntryPage.getCurrent(),
contractorToolEntryPage.getSize(),
contractorToolEntryPage.getTotal());
contractorToolRecordPage.getCurrent(),
contractorToolRecordPage.getSize(),
contractorToolRecordPage.getTotal());
if (CollUtil.isEmpty(contractorToolEntryList)) {
return contractorToolEntryVoPage;
}
Set<Long> contractorIdList = contractorToolEntryList.stream().map(SubContractorToolRecord::getContractorId).collect(Collectors.toSet());
Map<Long, BusContractor> contractorMap = contractorService.listByIds(contractorIdList)
.stream().collect(Collectors.toMap(BusContractor::getId, v -> v));
Map<Long, SubContractor> contractorMap = contractorService.listByIds(contractorIdList)
.stream().collect(Collectors.toMap(SubContractor::getId, v -> v));
Set<Long> contractorToolIdList = contractorToolEntryList.stream().map(SubContractorToolRecord::getContractorToolId).collect(Collectors.toSet());
Map<Long, BusContractorTool> contractorToolMap = contractorToolService.listByIds(contractorToolIdList)
.stream().collect(Collectors.toMap(BusContractorTool::getId, v -> v));
Map<Long, SubContractorTool> contractorToolMap = contractorToolService.listByIds(contractorToolIdList)
.stream().collect(Collectors.toMap(SubContractorTool::getId, v -> v));
List<SubContractorToolRecordVo> contractorToolEntryVoList = contractorToolEntryList.stream().map(entity -> {
SubContractorToolRecordVo vo = new SubContractorToolRecordVo();
BeanUtils.copyProperties(entity, vo);
@ -247,4 +267,39 @@ public class SubContractorToolRecordServiceImpl extends ServiceImpl<SubContracto
contractorToolEntryVoPage.setRecords(contractorToolEntryVoList);
return contractorToolEntryVoPage;
}
/**
* 计算剩余库存并更新库存对象返回剩余数量
*
* @param contractorTool 当前库存工具
* @param recordType 操作类型(入库/出库)
* @param recordNumber 本次操作数量
* @return 剩余数量
*/
private BigDecimal computeRemainingToolNumber(SubContractorTool contractorTool, String recordType, BigDecimal recordNumber) {
if (recordNumber == null) {
throw new ServiceException("工器具数量不能为空", HttpStatus.ERROR);
}
BigDecimal toolNumber = contractorTool.getToolNumber();
SubContractorTool newContractorTool = new SubContractorTool();
newContractorTool.setId(contractorTool.getId());
BigDecimal result;
if (SubContractorRecordEnum.PUT.getValue().equals(recordType)) {
result = toolNumber.add(recordNumber);
} else if (SubContractorRecordEnum.OUT.getValue().equals(recordType)) {
result = toolNumber.subtract(recordNumber);
if (result.compareTo(BigDecimal.ZERO) < 0) {
throw new ServiceException("出库数量不能大于库存数量", HttpStatus.ERROR);
}
} else {
throw new ServiceException("分包方工器具记录类型错误", HttpStatus.BAD_REQUEST);
}
newContractorTool.setToolNumber(result);
boolean update = contractorToolService.updateById(newContractorTool);
if (!update) {
throw new ServiceException("更新分包方工器具信息异常", HttpStatus.ERROR);
}
return result;
}
}

View File

@ -1,4 +1,4 @@
package org.dromara.project.service.impl;
package org.dromara.contractor.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -12,15 +12,15 @@ import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.project.domain.BusContractor;
import org.dromara.project.domain.BusContractorTool;
import org.dromara.project.domain.dto.contractortool.BusContractorToolCreateReq;
import org.dromara.project.domain.dto.contractortool.BusContractorToolQueryReq;
import org.dromara.project.domain.dto.contractortool.BusContractorToolUpdateReq;
import org.dromara.project.domain.vo.contractortool.BusContractorToolVo;
import org.dromara.project.mapper.BusContractorToolMapper;
import org.dromara.project.service.IBusContractorService;
import org.dromara.project.service.IBusContractorToolService;
import org.dromara.contractor.domain.SubContractor;
import org.dromara.contractor.domain.SubContractorTool;
import org.dromara.contractor.domain.dto.contractortool.SubContractorToolCreateReq;
import org.dromara.contractor.domain.dto.contractortool.SubContractorToolQueryReq;
import org.dromara.contractor.domain.dto.contractortool.SubContractorToolUpdateReq;
import org.dromara.contractor.domain.vo.contractortool.SubContractorToolVo;
import org.dromara.contractor.mapper.SubContractorToolMapper;
import org.dromara.contractor.service.ISubContractorService;
import org.dromara.contractor.service.ISubContractorToolService;
import org.dromara.project.service.IBusProjectService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
@ -39,14 +39,14 @@ import java.util.stream.Collectors;
* @date 2025-06-26
*/
@Service
public class BusContractorToolServiceImpl extends ServiceImpl<BusContractorToolMapper, BusContractorTool>
implements IBusContractorToolService {
public class SubContractorToolServiceImpl extends ServiceImpl<SubContractorToolMapper, SubContractorTool>
implements ISubContractorToolService {
@Resource
private IBusProjectService projectService;
@Resource
private IBusContractorService contractorService;
private ISubContractorService contractorService;
/**
* 查询分包方工器具
@ -55,8 +55,8 @@ public class BusContractorToolServiceImpl extends ServiceImpl<BusContractorToolM
* @return 分包方工器具
*/
@Override
public BusContractorToolVo queryById(Long id) {
BusContractorTool contractorTool = this.getById(id);
public SubContractorToolVo queryById(Long id) {
SubContractorTool contractorTool = this.getById(id);
if (contractorTool == null) {
throw new ServiceException("分包方工器具信息不存在", HttpStatus.NOT_FOUND);
}
@ -71,8 +71,8 @@ public class BusContractorToolServiceImpl extends ServiceImpl<BusContractorToolM
* @return 分包方工器具分页列表
*/
@Override
public TableDataInfo<BusContractorToolVo> queryPageList(BusContractorToolQueryReq req, PageQuery pageQuery) {
Page<BusContractorTool> result = this.page(pageQuery.build(), this.buildQueryWrapper(req));
public TableDataInfo<SubContractorToolVo> queryPageList(SubContractorToolQueryReq req, PageQuery pageQuery) {
Page<SubContractorTool> result = this.page(pageQuery.build(), this.buildQueryWrapper(req));
return TableDataInfo.build(this.getVoPage(result));
}
@ -83,8 +83,8 @@ public class BusContractorToolServiceImpl extends ServiceImpl<BusContractorToolM
* @return 分包方工器具列表
*/
@Override
public List<BusContractorToolVo> queryList(BusContractorToolQueryReq req) {
LambdaQueryWrapper<BusContractorTool> lqw = this.buildQueryWrapper(req);
public List<SubContractorToolVo> queryList(SubContractorToolQueryReq req) {
LambdaQueryWrapper<SubContractorTool> lqw = this.buildQueryWrapper(req);
return this.list(lqw).stream().map(this::getVo).toList();
}
@ -95,8 +95,8 @@ public class BusContractorToolServiceImpl extends ServiceImpl<BusContractorToolM
* @return 新增分包工器具主键id
*/
@Override
public Long insertByBo(BusContractorToolCreateReq req) {
BusContractorTool contractorTool = new BusContractorTool();
public Long insertByBo(SubContractorToolCreateReq req) {
SubContractorTool contractorTool = new SubContractorTool();
BeanUtils.copyProperties(req, contractorTool);
validEntityBeforeSave(contractorTool, true);
boolean result = this.save(contractorTool);
@ -113,13 +113,13 @@ public class BusContractorToolServiceImpl extends ServiceImpl<BusContractorToolM
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(BusContractorToolUpdateReq req) {
public Boolean updateByBo(SubContractorToolUpdateReq req) {
Long id = req.getId();
BusContractorTool oldContractorTool = this.getById(id);
SubContractorTool oldContractorTool = this.getById(id);
if (oldContractorTool == null) {
throw new ServiceException("修改分包方工器具失败,数据不存在", HttpStatus.NOT_FOUND);
}
BusContractorTool contractorTool = new BusContractorTool();
SubContractorTool contractorTool = new SubContractorTool();
BeanUtils.copyProperties(req, contractorTool);
validEntityBeforeSave(contractorTool, false);
boolean result = this.updateById(contractorTool);
@ -132,7 +132,7 @@ public class BusContractorToolServiceImpl extends ServiceImpl<BusContractorToolM
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(BusContractorTool entity, Boolean create) {
private void validEntityBeforeSave(SubContractorTool entity, Boolean create) {
Long projectId = entity.getProjectId();
Long contractorId = entity.getContractorId();
if (create) {
@ -162,10 +162,10 @@ public class BusContractorToolServiceImpl extends ServiceImpl<BusContractorToolM
@Transactional(rollbackFor = Exception.class)
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
Long userId = LoginHelper.getUserId();
List<BusContractorTool> contractorToolList = this.listByIds(ids);
List<SubContractorTool> contractorToolList = this.listByIds(ids);
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
List<Long> projectIdList = contractorToolList.stream().map(BusContractorTool::getProjectId).distinct().toList();
List<Long> projectIdList = contractorToolList.stream().map(SubContractorTool::getProjectId).distinct().toList();
projectService.validAuth(projectIdList, userId);
}
return this.removeBatchByIds(ids);
@ -178,14 +178,14 @@ public class BusContractorToolServiceImpl extends ServiceImpl<BusContractorToolM
* @return 分包方工器具视图对象
*/
@Override
public BusContractorToolVo getVo(BusContractorTool contractorTool) {
BusContractorToolVo contractorToolVo = new BusContractorToolVo();
public SubContractorToolVo getVo(SubContractorTool contractorTool) {
SubContractorToolVo contractorToolVo = new SubContractorToolVo();
if (contractorTool == null) {
return contractorToolVo;
}
BeanUtils.copyProperties(contractorTool, contractorToolVo);
Long contractorId = contractorTool.getContractorId();
BusContractor contractor = contractorService.getById(contractorId);
SubContractor contractor = contractorService.getById(contractorId);
contractorToolVo.setContractorName(contractor.getName());
return contractorToolVo;
}
@ -197,18 +197,18 @@ public class BusContractorToolServiceImpl extends ServiceImpl<BusContractorToolM
* @return 分包方工器具查询条件封装
*/
@Override
public LambdaQueryWrapper<BusContractorTool> buildQueryWrapper(BusContractorToolQueryReq req) {
LambdaQueryWrapper<BusContractorTool> lqw = new LambdaQueryWrapper<>();
public LambdaQueryWrapper<SubContractorTool> buildQueryWrapper(SubContractorToolQueryReq req) {
LambdaQueryWrapper<SubContractorTool> lqw = new LambdaQueryWrapper<>();
Long projectId = req.getProjectId();
Long contractorId = req.getContractorId();
String toolName = req.getToolName();
String toolType = req.getToolType();
String toolModel = req.getToolModel();
lqw.eq(ObjectUtils.isNotEmpty(projectId), BusContractorTool::getProjectId, projectId);
lqw.eq(ObjectUtils.isNotEmpty(contractorId), BusContractorTool::getContractorId, contractorId);
lqw.eq(StringUtils.isNotBlank(toolType), BusContractorTool::getToolType, toolType);
lqw.like(StringUtils.isNotBlank(toolName), BusContractorTool::getToolName, toolName);
lqw.like(StringUtils.isNotBlank(toolModel), BusContractorTool::getToolModel, toolModel);
lqw.eq(ObjectUtils.isNotEmpty(projectId), SubContractorTool::getProjectId, projectId);
lqw.eq(ObjectUtils.isNotEmpty(contractorId), SubContractorTool::getContractorId, contractorId);
lqw.eq(StringUtils.isNotBlank(toolType), SubContractorTool::getToolType, toolType);
lqw.like(StringUtils.isNotBlank(toolName), SubContractorTool::getToolName, toolName);
lqw.like(StringUtils.isNotBlank(toolModel), SubContractorTool::getToolModel, toolModel);
return lqw;
}
@ -219,20 +219,20 @@ public class BusContractorToolServiceImpl extends ServiceImpl<BusContractorToolM
* @return 分包方工器具分页对象视图
*/
@Override
public Page<BusContractorToolVo> getVoPage(Page<BusContractorTool> contractorPage) {
List<BusContractorTool> contractorToolList = contractorPage.getRecords();
Page<BusContractorToolVo> contractorToolVoPage = new Page<>(
public Page<SubContractorToolVo> getVoPage(Page<SubContractorTool> contractorPage) {
List<SubContractorTool> contractorToolList = contractorPage.getRecords();
Page<SubContractorToolVo> contractorToolVoPage = new Page<>(
contractorPage.getCurrent(),
contractorPage.getSize(),
contractorPage.getTotal());
if (CollUtil.isEmpty(contractorToolList)) {
return contractorToolVoPage;
}
Set<Long> contractorIdList = contractorToolList.stream().map(BusContractorTool::getContractorId).collect(Collectors.toSet());
Map<Long, BusContractor> contractorMap = contractorService.listByIds(contractorIdList)
.stream().collect(Collectors.toMap(BusContractor::getId, v -> v));
List<BusContractorToolVo> contractorToolVoList = contractorToolList.stream().map(contractorTool -> {
BusContractorToolVo contractorToolVo = new BusContractorToolVo();
Set<Long> contractorIdList = contractorToolList.stream().map(SubContractorTool::getContractorId).collect(Collectors.toSet());
Map<Long, SubContractor> contractorMap = contractorService.listByIds(contractorIdList)
.stream().collect(Collectors.toMap(SubContractor::getId, v -> v));
List<SubContractorToolVo> contractorToolVoList = contractorToolList.stream().map(contractorTool -> {
SubContractorToolVo contractorToolVo = new SubContractorToolVo();
BeanUtils.copyProperties(contractorTool, contractorToolVo);
Long contractorId = contractorTool.getContractorId();
if (contractorMap.containsKey(contractorId)) {

View File

@ -1,4 +1,4 @@
package org.dromara.project.service.impl;
package org.dromara.contractor.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -13,17 +13,17 @@ import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.project.domain.BusContractor;
import org.dromara.contractor.domain.SubContractor;
import org.dromara.contractor.domain.SubSubcontract;
import org.dromara.contractor.domain.dto.subcontract.SubSubcontractCreateReq;
import org.dromara.contractor.domain.dto.subcontract.SubSubcontractQueryReq;
import org.dromara.contractor.domain.dto.subcontract.SubSubcontractUpdateReq;
import org.dromara.contractor.domain.vo.subcontract.SubSubcontractVo;
import org.dromara.contractor.mapper.SubSubcontractMapper;
import org.dromara.contractor.service.ISubContractorService;
import org.dromara.contractor.service.ISubSubcontractService;
import org.dromara.project.domain.BusProject;
import org.dromara.project.domain.BusSubcontract;
import org.dromara.project.domain.dto.subcontract.BusSubcontractCreateReq;
import org.dromara.project.domain.dto.subcontract.BusSubcontractQueryReq;
import org.dromara.project.domain.dto.subcontract.BusSubcontractUpdateReq;
import org.dromara.project.domain.vo.subcontract.BusSubcontractVo;
import org.dromara.project.mapper.BusSubcontractMapper;
import org.dromara.project.service.IBusContractorService;
import org.dromara.project.service.IBusProjectService;
import org.dromara.project.service.IBusSubcontractService;
import org.dromara.system.service.ISysOssService;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
@ -43,14 +43,14 @@ import java.util.stream.Collectors;
*/
@Slf4j
@Service
public class BusSubcontractServiceImpl extends ServiceImpl<BusSubcontractMapper, BusSubcontract>
implements IBusSubcontractService {
public class SubSubcontractServiceImpl extends ServiceImpl<SubSubcontractMapper, SubSubcontract>
implements ISubSubcontractService {
@Resource
private IBusProjectService projectService;
@Resource
private IBusContractorService contractorService;
private ISubContractorService contractorService;
@Resource
private ISysOssService ossService;
@ -62,8 +62,8 @@ public class BusSubcontractServiceImpl extends ServiceImpl<BusSubcontractMapper,
* @return 分包合同
*/
@Override
public BusSubcontractVo queryById(Long id) {
BusSubcontract subcontract = this.getById(id);
public SubSubcontractVo queryById(Long id) {
SubSubcontract subcontract = this.getById(id);
if (subcontract == null) {
throw new ServiceException("分包合同信息不存在", HttpStatus.NOT_FOUND);
}
@ -78,9 +78,9 @@ public class BusSubcontractServiceImpl extends ServiceImpl<BusSubcontractMapper,
* @return 分包合同分页列表
*/
@Override
public TableDataInfo<BusSubcontractVo> queryPageList(BusSubcontractQueryReq req, PageQuery pageQuery) {
LambdaQueryWrapper<BusSubcontract> lqw = buildQueryWrapper(req);
Page<BusSubcontract> result = this.page(pageQuery.build(), lqw);
public TableDataInfo<SubSubcontractVo> queryPageList(SubSubcontractQueryReq req, PageQuery pageQuery) {
LambdaQueryWrapper<SubSubcontract> lqw = buildQueryWrapper(req);
Page<SubSubcontract> result = this.page(pageQuery.build(), lqw);
return TableDataInfo.build(this.getVoPage(result));
}
@ -91,8 +91,8 @@ public class BusSubcontractServiceImpl extends ServiceImpl<BusSubcontractMapper,
* @return 分包合同列表
*/
@Override
public List<BusSubcontractVo> queryList(BusSubcontractQueryReq req) {
LambdaQueryWrapper<BusSubcontract> lqw = buildQueryWrapper(req);
public List<SubSubcontractVo> queryList(SubSubcontractQueryReq req) {
LambdaQueryWrapper<SubSubcontract> lqw = buildQueryWrapper(req);
return this.list(lqw).stream().map(this::getVo).toList();
}
@ -103,14 +103,14 @@ public class BusSubcontractServiceImpl extends ServiceImpl<BusSubcontractMapper,
* @return 新增主键id
*/
@Override
public Long insertByBo(BusSubcontractCreateReq req) {
BusSubcontract subcontract = new BusSubcontract();
public Long insertByBo(SubSubcontractCreateReq req) {
SubSubcontract subcontract = new SubSubcontract();
BeanUtils.copyProperties(req, subcontract);
validEntityBeforeSave(subcontract);
Long count = this.lambdaQuery()
.eq(BusSubcontract::getProjectId, req.getProjectId())
.eq(BusSubcontract::getContractorId, req.getContractorId())
.eq(BusSubcontract::getContractFileId, req.getContractFileId())
.eq(SubSubcontract::getProjectId, req.getProjectId())
.eq(SubSubcontract::getContractorId, req.getContractorId())
.eq(SubSubcontract::getContractFileId, req.getContractFileId())
.count();
if (count > 0) {
throw new ServiceException("已关联该项目合同", HttpStatus.BAD_REQUEST);
@ -129,19 +129,19 @@ public class BusSubcontractServiceImpl extends ServiceImpl<BusSubcontractMapper,
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(BusSubcontractUpdateReq req) {
BusSubcontract subcontract = new BusSubcontract();
public Boolean updateByBo(SubSubcontractUpdateReq req) {
SubSubcontract subcontract = new SubSubcontract();
BeanUtils.copyProperties(req, subcontract);
validEntityBeforeSave(subcontract);
Long id = req.getId();
BusSubcontract oldSubcontract = this.getById(id);
SubSubcontract oldSubcontract = this.getById(id);
if (oldSubcontract == null) {
throw new ServiceException("修改分包合同失败,数据不存在", HttpStatus.NOT_FOUND);
}
Long count = this.lambdaQuery()
.eq(BusSubcontract::getProjectId, req.getProjectId())
.eq(BusSubcontract::getContractorId, req.getContractorId())
.eq(BusSubcontract::getContractFileId, req.getContractFileId())
.eq(SubSubcontract::getProjectId, req.getProjectId())
.eq(SubSubcontract::getContractorId, req.getContractorId())
.eq(SubSubcontract::getContractFileId, req.getContractFileId())
.count();
if (count > 0) {
throw new ServiceException("已关联该项目合同", HttpStatus.BAD_REQUEST);
@ -156,7 +156,7 @@ public class BusSubcontractServiceImpl extends ServiceImpl<BusSubcontractMapper,
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(BusSubcontract entity) {
private void validEntityBeforeSave(SubSubcontract entity) {
Long projectId = entity.getProjectId();
Long contractorId = entity.getContractorId();
if (projectId == null) {
@ -169,7 +169,7 @@ public class BusSubcontractServiceImpl extends ServiceImpl<BusSubcontractMapper,
if (project == null) {
throw new ServiceException("对应项目不存在", HttpStatus.NOT_FOUND);
}
BusContractor contractor = contractorService.getById(contractorId);
SubContractor contractor = contractorService.getById(contractorId);
if (contractor == null) {
throw new ServiceException("对应合同方不存在", HttpStatus.NOT_FOUND);
}
@ -189,13 +189,13 @@ public class BusSubcontractServiceImpl extends ServiceImpl<BusSubcontractMapper,
@Transactional(rollbackFor = Exception.class)
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
Long userId = LoginHelper.getUserId();
List<BusSubcontract> list = this.listByIds(ids);
List<SubSubcontract> list = this.listByIds(ids);
if (isValid) {
List<Long> projectIdList = list.stream().map(BusSubcontract::getProjectId).toList();
List<Long> projectIdList = list.stream().map(SubSubcontract::getProjectId).toList();
projectService.validAuth(projectIdList, userId);
}
// 关联删除文件
Set<Long> fileIdList = list.stream().map(BusSubcontract::getContractFileId).collect(Collectors.toSet());
Set<Long> fileIdList = list.stream().map(SubSubcontract::getContractFileId).collect(Collectors.toSet());
Boolean result = ossService.deleteWithValidByIds(fileIdList, false);
if (!result) {
log.error("删除文件:{}失败", fileIdList);
@ -210,9 +210,9 @@ public class BusSubcontractServiceImpl extends ServiceImpl<BusSubcontractMapper,
* @return 分包合同视图
*/
@Override
public BusSubcontractVo getVo(BusSubcontract subcontract) {
public SubSubcontractVo getVo(SubSubcontract subcontract) {
// 封装对象
BusSubcontractVo subcontractVo = new BusSubcontractVo();
SubSubcontractVo subcontractVo = new SubSubcontractVo();
if (subcontract == null) {
return subcontractVo;
}
@ -227,18 +227,18 @@ public class BusSubcontractServiceImpl extends ServiceImpl<BusSubcontractMapper,
* @return 查询条件封装
*/
@Override
public LambdaQueryWrapper<BusSubcontract> buildQueryWrapper(BusSubcontractQueryReq req) {
LambdaQueryWrapper<BusSubcontract> lqw = new LambdaQueryWrapper<>();
public LambdaQueryWrapper<SubSubcontract> buildQueryWrapper(SubSubcontractQueryReq req) {
LambdaQueryWrapper<SubSubcontract> lqw = new LambdaQueryWrapper<>();
Long projectId = req.getProjectId();
Long contractorId = req.getContractorId();
String contractNumber = req.getContractNumber();
String contractName = req.getContractName();
String contractType = req.getContractType();
lqw.like(StringUtils.isNotBlank(contractNumber), BusSubcontract::getContractNumber, contractNumber);
lqw.like(StringUtils.isNotBlank(contractName), BusSubcontract::getContractName, contractName);
lqw.eq(ObjectUtils.isNotEmpty(projectId), BusSubcontract::getProjectId, projectId);
lqw.eq(ObjectUtils.isNotEmpty(contractorId), BusSubcontract::getContractorId, contractorId);
lqw.eq(StringUtils.isNotBlank(contractType), BusSubcontract::getContractType, contractType);
lqw.like(StringUtils.isNotBlank(contractNumber), SubSubcontract::getContractNumber, contractNumber);
lqw.like(StringUtils.isNotBlank(contractName), SubSubcontract::getContractName, contractName);
lqw.eq(ObjectUtils.isNotEmpty(projectId), SubSubcontract::getProjectId, projectId);
lqw.eq(ObjectUtils.isNotEmpty(contractorId), SubSubcontract::getContractorId, contractorId);
lqw.eq(StringUtils.isNotBlank(contractType), SubSubcontract::getContractType, contractType);
return lqw;
}
@ -249,9 +249,9 @@ public class BusSubcontractServiceImpl extends ServiceImpl<BusSubcontractMapper,
* @return 分包合同分页视图
*/
@Override
public Page<BusSubcontractVo> getVoPage(Page<BusSubcontract> subcontractPage) {
List<BusSubcontract> subcontractList = subcontractPage.getRecords();
Page<BusSubcontractVo> subcontractVoPage = new Page<>(
public Page<SubSubcontractVo> getVoPage(Page<SubSubcontract> subcontractPage) {
List<SubSubcontract> subcontractList = subcontractPage.getRecords();
Page<SubSubcontractVo> subcontractVoPage = new Page<>(
subcontractPage.getCurrent(),
subcontractPage.getSize(),
subcontractPage.getTotal()
@ -260,15 +260,15 @@ public class BusSubcontractServiceImpl extends ServiceImpl<BusSubcontractMapper,
return subcontractVoPage;
}
// 获取分包商信息
Set<Long> contractorIdList = subcontractList.stream().map(BusSubcontract::getContractorId).collect(Collectors.toSet());
Map<Long, BusContractor> contractorMap = contractorService.listByIds(contractorIdList)
.stream().collect(Collectors.toMap(BusContractor::getId, v -> v));
List<BusSubcontractVo> subcontractVoList = subcontractList.stream().map(entity -> {
BusSubcontractVo subcontractVo = new BusSubcontractVo();
Set<Long> contractorIdList = subcontractList.stream().map(SubSubcontract::getContractorId).collect(Collectors.toSet());
Map<Long, SubContractor> contractorMap = contractorService.listByIds(contractorIdList)
.stream().collect(Collectors.toMap(SubContractor::getId, v -> v));
List<SubSubcontractVo> subcontractVoList = subcontractList.stream().map(entity -> {
SubSubcontractVo subcontractVo = new SubSubcontractVo();
BeanUtils.copyProperties(entity, subcontractVo);
Long contractorId = entity.getContractorId();
if (contractorMap.containsKey(contractorId)) {
BusContractor contractor = contractorMap.get(contractorId);
SubContractor contractor = contractorMap.get(contractorId);
subcontractVo.setContractorName(contractor.getName());
}
return subcontractVo;

View File

@ -0,0 +1,53 @@
package org.dromara.manager.changxiemanager;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URI;
import java.net.URL;
import java.util.Scanner;
/**
* @author lcj
* @date 2025/6/27 17:02
*/
@RestController
@RequestMapping("/changxie")
public class ChangxieController {
@PostMapping("/callback")
public void singleFileUploads(HttpServletRequest request, HttpServletResponse response) throws IOException {
PrintWriter writer = response.getWriter();
Scanner scanner = new Scanner(request.getInputStream(), "GBK").useDelimiter("\\A");
String body = scanner.hasNext() ? scanner.next() : "";
JSONObject jsonObj = JSONUtil.parseObj(body);
if ((long) jsonObj.get("status") == 2 || (long) jsonObj.get("status") == 6) {
String downloadUri = (String) jsonObj.get("url");
URI uri = URI.create(downloadUri);
URL url = uri.toURL();
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
InputStream stream = connection.getInputStream();
File savedFile = new File("file/resource/changxie");
try (FileOutputStream out = new FileOutputStream(savedFile)) {
int read;
final byte[] bytes = new byte[1024];
while ((read = stream.read(bytes)) != -1) {
out.write(bytes, 0, read);
}
out.flush();
}
connection.disconnect();
} else if ((long) jsonObj.get("status") == 3 || (long) jsonObj.get("status") == 7) {
writer.write("{\"error\":-1}");
}
writer.write("{\"error\":0}");
}
}

View File

@ -1,15 +0,0 @@
package org.dromara.project.mapper;
import org.dromara.project.domain.BusConstructionUserFile;
import org.dromara.project.domain.vo.constructionuserfile.BusConstructionUserFileVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 施工人员文件存储Mapper接口
*
* @author lcj
* @date 2025-04-01
*/
public interface BusConstructionUserFileMapper extends BaseMapperPlus<BusConstructionUserFile, BusConstructionUserFileVo> {
}

View File

@ -1,15 +0,0 @@
package org.dromara.project.mapper;
import org.dromara.project.domain.BusConstructionUser;
import org.dromara.project.domain.vo.constructionuser.BusConstructionUserVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 施工人员Mapper接口
*
* @author lcj
* @date 2025-03-07
*/
public interface BusConstructionUserMapper extends BaseMapperPlus<BusConstructionUser, BusConstructionUserVo> {
}

View File

@ -1,15 +0,0 @@
package org.dromara.project.mapper;
import org.dromara.project.domain.BusContractor;
import org.dromara.project.domain.vo.contractor.BusContractorVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 分包单位Mapper接口
*
* @author lcj
* @date 2025-03-07
*/
public interface BusContractorMapper extends BaseMapperPlus<BusContractor, BusContractorVo> {
}

View File

@ -1,15 +0,0 @@
package org.dromara.project.mapper;
import org.dromara.project.domain.BusContractorTool;
import org.dromara.project.domain.vo.contractortool.BusContractorToolVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 分包方工器具Mapper接口
*
* @author lcj
* @date 2025-06-26
*/
public interface BusContractorToolMapper extends BaseMapperPlus<BusContractorTool, BusContractorToolVo> {
}

View File

@ -1,15 +0,0 @@
package org.dromara.project.mapper;
import org.dromara.project.domain.BusSubcontract;
import org.dromara.project.domain.vo.subcontract.BusSubcontractVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 分包合同Mapper接口
*
* @author lcj
* @date 2025-06-25
*/
public interface BusSubcontractMapper extends BaseMapperPlus<BusSubcontract, BusSubcontractVo> {
}

View File

@ -15,8 +15,9 @@ import org.dromara.common.core.utils.ObjectUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.contractor.domain.SubConstructionUser;
import org.dromara.contractor.service.ISubConstructionUserService;
import org.dromara.project.domain.BusAttendance;
import org.dromara.project.domain.BusConstructionUser;
import org.dromara.project.domain.BusProjectTeamMember;
import org.dromara.project.domain.enums.BusAttendanceClockStatusEnum;
import org.dromara.project.domain.enums.BusAttendanceCommuterEnum;
@ -56,7 +57,7 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B
private IBusProjectTeamMemberService projectTeamMemberService;
@Resource
private IBusConstructionUserService constructionUserService;
private ISubConstructionUserService constructionUserService;
@Resource
private IBusConstructionBlacklistService constructionBlacklistService;
@ -135,11 +136,11 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B
List<Long> blackList = constructionBlacklistService.queryIdListByProjectId(projectId);
// 构建查询用户相关信息查询条件
List<Long> userIdList = constructionUserService.lambdaQuery()
.eq(BusConstructionUser::getProjectId, projectId)
.eq(req.getTeamId() != null, BusConstructionUser::getTeamId, req.getTeamId())
.eq(req.getTypeOfWork() != null, BusConstructionUser::getTypeOfWork, req.getTypeOfWork())
.notIn(CollUtil.isNotEmpty(blackList), BusConstructionUser::getId, blackList)
.list().stream().map(BusConstructionUser::getId).toList();
.eq(SubConstructionUser::getProjectId, projectId)
.eq(req.getTeamId() != null, SubConstructionUser::getTeamId, req.getTeamId())
.eq(req.getTypeOfWork() != null, SubConstructionUser::getTypeOfWork, req.getTypeOfWork())
.notIn(CollUtil.isNotEmpty(blackList), SubConstructionUser::getId, blackList)
.list().stream().map(SubConstructionUser::getId).toList();
lqw.in(CollUtil.isNotEmpty(userIdList), BusAttendance::getUserId, userIdList);
Map<Date, List<BusAttendance>> dateListMap = this.list(lqw)
.stream().collect(Collectors.groupingBy(BusAttendance::getClockDate));

View File

@ -15,14 +15,14 @@ import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.project.domain.BusConstructionBlacklist;
import org.dromara.project.domain.BusConstructionUser;
import org.dromara.contractor.domain.SubConstructionUser;
import org.dromara.project.domain.BusProjectTeamMember;
import org.dromara.project.domain.dto.constructionblacklist.BusConstructionBlacklistCreateReq;
import org.dromara.project.domain.dto.constructionblacklist.BusConstructionBlacklistQueryReq;
import org.dromara.project.domain.vo.constructionblacklist.BusConstructionBlacklistVo;
import org.dromara.project.mapper.BusConstructionBlacklistMapper;
import org.dromara.project.service.IBusConstructionBlacklistService;
import org.dromara.project.service.IBusConstructionUserService;
import org.dromara.contractor.service.ISubConstructionUserService;
import org.dromara.project.service.IBusProjectService;
import org.dromara.project.service.IBusProjectTeamMemberService;
import org.dromara.common.utils.IdCardEncryptorUtil;
@ -48,7 +48,7 @@ public class BusConstructionBlacklistServiceImpl extends ServiceImpl<BusConstruc
private IBusProjectService projectService;
@Resource
private IBusConstructionUserService constructionUserService;
private ISubConstructionUserService constructionUserService;
@Lazy
@Resource
@ -151,7 +151,7 @@ public class BusConstructionBlacklistServiceImpl extends ServiceImpl<BusConstruc
if (userId == null) {
throw new ServiceException("用户 id 不能为空", HttpStatus.BAD_REQUEST);
}
BusConstructionUser constructionUser = constructionUserService.getById(userId);
SubConstructionUser constructionUser = constructionUserService.getById(userId);
if (constructionUser == null) {
throw new ServiceException("对应用户不存在", HttpStatus.NOT_FOUND);
}

View File

@ -27,13 +27,14 @@ import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.contractor.domain.SubContractor;
import org.dromara.contractor.service.ISubContractorService;
import org.dromara.facility.domain.FacMatrix;
import org.dromara.facility.domain.vo.matrix.FacMatrixBySubProjectVo;
import org.dromara.facility.service.IFacMatrixService;
import org.dromara.manager.weathermanager.WeatherConstant;
import org.dromara.manager.weathermanager.WeatherManager;
import org.dromara.project.constant.BusProjectConstant;
import org.dromara.project.domain.BusContractor;
import org.dromara.project.domain.BusProject;
import org.dromara.project.domain.BusProjectFile;
import org.dromara.project.domain.BusUserProjectRelevancy;
@ -43,7 +44,6 @@ import org.dromara.project.domain.dto.project.BusProjectQueryReq;
import org.dromara.project.domain.dto.project.BusProjectUpdateReq;
import org.dromara.project.domain.vo.project.*;
import org.dromara.project.mapper.BusProjectMapper;
import org.dromara.project.service.IBusContractorService;
import org.dromara.project.service.IBusProjectFileService;
import org.dromara.project.service.IBusProjectService;
import org.dromara.project.service.IBusUserProjectRelevancyService;
@ -83,7 +83,7 @@ public class BusProjectServiceImpl extends ServiceImpl<BusProjectMapper, BusProj
@Lazy
@Resource
private IBusContractorService contractorService;
private ISubContractorService contractorService;
@Lazy
@Resource
@ -270,10 +270,10 @@ public class BusProjectServiceImpl extends ServiceImpl<BusProjectMapper, BusProj
List<Long> projectIdList = userProjectRelevancyService.listObjs(userProjectRelevancyLqw, obj -> (Long) obj);
List<BusProject> projectList = this.listByIds(projectIdList);
// 获取项目列表下的分包公司列表
LambdaQueryWrapper<BusContractor> lqw = new LambdaQueryWrapper<>();
lqw.in(BusContractor::getProjectId, projectIdList);
Map<Long, List<BusContractor>> projectIdContractorList = contractorService.list(lqw).stream()
.collect(Collectors.groupingBy(BusContractor::getProjectId));
LambdaQueryWrapper<SubContractor> lqw = new LambdaQueryWrapper<>();
lqw.in(SubContractor::getProjectId, projectIdList);
Map<Long, List<SubContractor>> projectIdContractorList = contractorService.list(lqw).stream()
.collect(Collectors.groupingBy(SubContractor::getProjectId));
// 获取封装
return projectList.stream().map(project -> {
BusProjectContractorListVo projectContractorListResp = new BusProjectContractorListVo();
@ -281,7 +281,7 @@ public class BusProjectServiceImpl extends ServiceImpl<BusProjectMapper, BusProj
projectContractorListResp.setId(project.getId());
projectContractorListResp.setProjectName(project.getProjectName());
// 获取分包公司列表
List<BusContractor> contractorList = projectIdContractorList.get(project.getId());
List<SubContractor> contractorList = projectIdContractorList.get(project.getId());
if (CollUtil.isEmpty(contractorList)) {
throw new ServiceException("项目:" + project.getProjectName() + "下无分包单位,请创建后再进行操作", HttpStatus.BAD_REQUEST);
}

View File

@ -15,7 +15,8 @@ import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.project.domain.BusConstructionUser;
import org.dromara.contractor.domain.SubConstructionUser;
import org.dromara.contractor.service.ISubConstructionUserService;
import org.dromara.project.domain.BusConstructionUserExit;
import org.dromara.project.domain.BusProjectTeam;
import org.dromara.project.domain.BusProjectTeamMember;
@ -48,7 +49,7 @@ public class BusProjectTeamMemberServiceImpl extends ServiceImpl<BusProjectTeamM
implements IBusProjectTeamMemberService {
@Resource
private IBusConstructionUserService constructionUserService;
private ISubConstructionUserService constructionUserService;
@Resource
private IBusProjectTeamService projectTeamService;
@ -139,12 +140,12 @@ public class BusProjectTeamMemberServiceImpl extends ServiceImpl<BusProjectTeamM
throw new ServiceException("新增项目班组下的成员失败,数据库异常", HttpStatus.ERROR);
}
// 同步修改用户表的team_id字段并添加入场时间
LambdaUpdateWrapper<BusConstructionUser> constructionUserLuw = Wrappers.lambdaUpdate(BusConstructionUser.class)
.eq(BusConstructionUser::getId, projectTeamMember.getMemberId())
.set(BusConstructionUser::getTeamId, projectTeamMember.getTeamId())
.set(BusConstructionUser::getTeamName, projectTeam.getTeamName())
.set(BusConstructionUser::getEntryDate, new Date())
.set(BusConstructionUser::getLeaveDate, null);
LambdaUpdateWrapper<SubConstructionUser> constructionUserLuw = Wrappers.lambdaUpdate(SubConstructionUser.class)
.eq(SubConstructionUser::getId, projectTeamMember.getMemberId())
.set(SubConstructionUser::getTeamId, projectTeamMember.getTeamId())
.set(SubConstructionUser::getTeamName, projectTeam.getTeamName())
.set(SubConstructionUser::getEntryDate, new Date())
.set(SubConstructionUser::getLeaveDate, null);
constructionUserService.update(constructionUserLuw);
return projectTeamMember.getId();
}
@ -176,10 +177,10 @@ public class BusProjectTeamMemberServiceImpl extends ServiceImpl<BusProjectTeamM
}
// 如果修改了班组信息,同步修改用户表的字段
if (!oldProjectTeamMember.getTeamId().equals(teamId)) {
LambdaUpdateWrapper<BusConstructionUser> constructionUserLuw = Wrappers.lambdaUpdate(BusConstructionUser.class)
.eq(BusConstructionUser::getId, projectTeamMember.getMemberId())
.set(BusConstructionUser::getTeamId, projectTeamMember.getTeamId())
.set(BusConstructionUser::getTeamName, projectTeam.getTeamName());
LambdaUpdateWrapper<SubConstructionUser> constructionUserLuw = Wrappers.lambdaUpdate(SubConstructionUser.class)
.eq(SubConstructionUser::getId, projectTeamMember.getMemberId())
.set(SubConstructionUser::getTeamId, projectTeamMember.getTeamId())
.set(SubConstructionUser::getTeamName, projectTeam.getTeamName());
constructionUserService.update(constructionUserLuw);
}
// 操作数据库
@ -240,7 +241,7 @@ public class BusProjectTeamMemberServiceImpl extends ServiceImpl<BusProjectTeamM
throw new ServiceException("删除项目班组下的成员失败,数据库异常", HttpStatus.ERROR);
}
// 将文件信息保存到数据库
BusConstructionUser constructionUser = constructionUserService.getById(projectTeamMember.getMemberId());
SubConstructionUser constructionUser = constructionUserService.getById(projectTeamMember.getMemberId());
BusConstructionUserExit constructionUserExit = new BusConstructionUserExit();
constructionUserExit.setProjectId(constructionUser.getProjectId());
constructionUserExit.setUserId(constructionUser.getId());
@ -252,10 +253,10 @@ public class BusProjectTeamMemberServiceImpl extends ServiceImpl<BusProjectTeamM
constructionUserExit.setRemark(req.getRemark());
constructionUserExitService.save(constructionUserExit);
// 同步修改用户表的team_id字段
LambdaUpdateWrapper<BusConstructionUser> constructionUserLuw = Wrappers.lambdaUpdate(BusConstructionUser.class)
.eq(BusConstructionUser::getId, projectTeamMember.getMemberId())
.set(BusConstructionUser::getTeamId, null)
.set(BusConstructionUser::getLeaveDate, new Date());
LambdaUpdateWrapper<SubConstructionUser> constructionUserLuw = Wrappers.lambdaUpdate(SubConstructionUser.class)
.eq(SubConstructionUser::getId, projectTeamMember.getMemberId())
.set(SubConstructionUser::getTeamId, null)
.set(SubConstructionUser::getLeaveDate, new Date());
constructionUserService.update(constructionUserLuw);
return true;
}
@ -276,7 +277,7 @@ public class BusProjectTeamMemberServiceImpl extends ServiceImpl<BusProjectTeamM
BeanUtils.copyProperties(projectTeamMember, projectTeamMemberVo);
// 关联获取施工人员信息
Long memberId = projectTeamMember.getMemberId();
BusConstructionUser constructionUser = constructionUserService.getById(memberId);
SubConstructionUser constructionUser = constructionUserService.getById(memberId);
projectTeamMemberVo.setMemberName(constructionUser.getUserName());
return projectTeamMemberVo;
}
@ -303,7 +304,7 @@ public class BusProjectTeamMemberServiceImpl extends ServiceImpl<BusProjectTeamM
String remark = req.getRemark();
// 联表查询
if (StringUtils.isNotBlank(memberName)) {
QueryWrapper<BusConstructionUser> constructionUserQueryWrapper = new QueryWrapper<>();
QueryWrapper<SubConstructionUser> constructionUserQueryWrapper = new QueryWrapper<>();
constructionUserQueryWrapper.select("id");
constructionUserQueryWrapper.like("user_name", memberName);
List<Long> constructionUserIdList = constructionUserService.listObjs(constructionUserQueryWrapper, obj -> (Long) obj);
@ -339,8 +340,8 @@ public class BusProjectTeamMemberServiceImpl extends ServiceImpl<BusProjectTeamM
// 关联查询施工人员信息
Set<Long> teamMemberIdSet = projectTeamMemberList.stream().map(BusProjectTeamMember::getMemberId)
.collect(Collectors.toSet());
Map<Long, List<BusConstructionUser>> contractorIdContractorList = constructionUserService.listByIds(teamMemberIdSet).stream()
.collect(Collectors.groupingBy(BusConstructionUser::getId));
Map<Long, List<SubConstructionUser>> contractorIdContractorList = constructionUserService.listByIds(teamMemberIdSet).stream()
.collect(Collectors.groupingBy(SubConstructionUser::getId));
// 填充信息
List<BusProjectTeamMemberVo> projectTeamMemberVoList = projectTeamMemberList.stream().map(projectTeamMember -> {
BusProjectTeamMemberVo projectTeamMemberVo = new BusProjectTeamMemberVo();

Some files were not shown because too many files have changed in this diff Show More