Merge remote-tracking branch 'origin/dev' into dev

This commit is contained in:
2025-10-18 14:13:49 +08:00
153 changed files with 12747 additions and 174 deletions

View File

@ -175,7 +175,7 @@ sms:
# 配置源类型用于标定配置来源(interface,yaml)
config-type: yaml
# 用于标定yml中的配置是否开启短信拦截接口配置不受此限制
restricted: true
restricted: false
# 短信拦截限制单手机号每分钟最大发送,只对开启了拦截的配置有效
minute-max: 1
# 短信拦截限制单手机号每日最大发送量,只对开启了拦截的配置有效

View File

@ -326,7 +326,7 @@ ys7:
app-key: 3acf9f1a43dc4209841e0893003db0a2
app-secret: 09e29c70ae1161fbc3ce2030fc09ba2e
job:
capture-enabled: true # 控制是否启用萤石抓拍任务
capture-enabled: false # 控制是否启用萤石抓拍任务
device-sync-enabled: true # 控制是否同步萤石设备
# 斯巴达算法
sparta:

View File

@ -186,14 +186,6 @@ public class ProjectBigScreenController extends BaseController {
@GetMapping("/news/{projectId}")
public R<List<BusProjectNewsVo>> getProjectNews(@NotNull(message = "主键不能为空")
@PathVariable Long projectId) {
// List<BusCorporateEvents> busCorporateEvents = projectBigScreenMapper.getBusCorporateEvents();
// return R.ok(busCorporateEvents.stream().map(event -> {
// BusProjectNewsVo vo = new BusProjectNewsVo();
// vo.setId(event.getId());
// vo.setTitle(event.getHeadline());
// vo.setContent(event.getContent());
// return vo;
// }).toList());
return R.ok(projectBigScreenService.getProjectNews(projectId));
}
@ -204,23 +196,6 @@ public class ProjectBigScreenController extends BaseController {
@GetMapping("/safetyInspection/{projectId}")
public R<List<ProjectSafetyInspectionVo>> getProjectSafetyInspection(@NotNull(message = "主键不能为空")
@PathVariable Long projectId) {
/* BusProject project = projectService.getById(projectId);
projectId = project.getGoId();
String pic;
if (projectId == 60) {
pic = "http://xny.yj-3d.com:7464";
} else {
pic = "http://xny.yj-3d.com:7363";
}
List<BusTour> busTours = projectBigScreenMapper.selectTourByProjectId(projectId);
return R.ok(busTours.stream().map(tour -> {
ProjectSafetyInspectionVo vo = new ProjectSafetyInspectionVo();
vo.setId(tour.getId());
vo.setViolationType(tour.getTourType());
vo.setPicture(pic + tour.getPicture());
vo.setCreateTime(tour.getCreatedAt());
return vo;
}).toList());*/
return R.ok(projectBigScreenService.getProjectSafetyInspection(projectId));
}
@ -231,51 +206,6 @@ public class ProjectBigScreenController extends BaseController {
@GetMapping("/people/{projectId}")
public R<ProjectPeopleVo> getProjectPeople(@NotNull(message = "主键不能为空")
@PathVariable Long projectId) {
// BusProject project = projectService.getById(projectId);
// projectId = project.getGoId();
// Integer projectUserCount = projectBigScreenMapper.getProjectUserCount(projectId);
// ProjectPeopleVo vo = new ProjectPeopleVo();
// vo.setPeopleCount(BigDecimal.valueOf(projectUserCount));
// Integer attendanceCount = projectBigScreenMapper.getAttendanceCount(projectId, DateUtils.getDate());
// vo.setAttendanceCount(BigDecimal.valueOf(attendanceCount));
// vo.setAttendanceRate(BigDecimalUtil.toPercentage(BigDecimal.valueOf(attendanceCount), BigDecimal.valueOf(projectUserCount)));
// List<BusConstructionUser> projectUserList = projectBigScreenMapper.getProjectUserList(projectId);
// List<BusProjectTeamByGo> teamList = projectBigScreenMapper.getTeamList(projectId);
//
// List<ProjectTeamAttendanceVo> teamAttendanceList = new ArrayList<>();
// String punchRange = project.getPunchRange();
// String punchTime = "";
// if (punchRange != null) {
// String start = punchRange.split(",")[0];
// punchTime = LocalDate.now() + " " + start;
// }
// if (projectUserList != null && teamList != null) {
// projectUserList = projectUserList.stream().filter(user -> user.getTeamId() != null).toList();
// Map<Long, List<BusConstructionUser>> userMap = projectUserList.stream()
// .collect(Collectors.groupingBy(BusConstructionUser::getTeamId));
// for (BusProjectTeamByGo team : teamList) {
// ProjectTeamAttendanceVo vo1 = new ProjectTeamAttendanceVo();
// vo1.setId(team.getId());
// vo1.setTeamName(team.getName());
// vo1.setAttendanceTime(punchTime);
// vo1.setAttendanceNumber(BigDecimal.ZERO);
// List<BusConstructionUser> userList = userMap.get(team.getId());
// if (CollUtil.isNotEmpty(userList)) {
// List<String> list = userList.stream().map(BusConstructionUser::getOpenid).distinct().toList();
// Integer aCount = projectBigScreenMapper.getAttendanceCountByOpenIds(list, LocalDate.now());
// vo1.setAttendanceNumber(BigDecimal.valueOf(aCount));
// }
// vo1.setAllNumber(BigDecimal.valueOf(userMap.getOrDefault(team.getId(), List.of()).size()));
// if (vo1.getAttendanceNumber() != null && vo1.getAllNumber() != null && vo1.getAllNumber().compareTo(BigDecimal.ZERO) != 0) {
// vo1.setAttendanceRate(BigDecimalUtil.toPercentage(vo1.getAttendanceNumber(), vo1.getAllNumber()));
// } else {
// vo1.setAttendanceRate(BigDecimal.ZERO);
// }
// teamAttendanceList.add(vo1);
// }
// }
// vo.setTeamAttendanceList(teamAttendanceList);
// return R.ok(vo);
return R.ok(projectBigScreenService.getProjectPeople(projectId));
}
@ -296,18 +226,7 @@ public class ProjectBigScreenController extends BaseController {
@GetMapping("/generalize/{projectId}")
public R<String> getProjectGeneralize(@NotNull(message = "主键不能为空")
@PathVariable Long projectId) {
// BusProject project = projectService.getById(projectId);
// if (project != null) {
// Long goId = project.getGoId();
// if (goId != null) {
// List<SysProjectIntroduce> sysProjectIntroduces = projectBigScreenMapper.selectByProjectId(goId);
// if (CollUtil.isNotEmpty(sysProjectIntroduces)) {
// return R.ok(sysProjectIntroduces.getFirst().getRichText());
// }
// }
// }
return R.ok(projectBigScreenService.getProjectGeneralize(projectId));
// return R.ok();
}
/**
@ -347,11 +266,11 @@ public class ProjectBigScreenController extends BaseController {
if (count > 0) {
throw new ServiceException("已存在同名萤石摄像头", HttpStatus.CONFLICT);
}
// todo 更新云端名称
/* Boolean result = ys7Manager.updateDeviceName(one.getDeviceSerial(), deviceName);
// 更新云端名称
Boolean result = ys7Manager.updateDeviceName(one.getDeviceSerial(), deviceName);
if (!result) {
throw new ServiceException("更新云端萤石摄像头名称异常", HttpStatus.ERROR);
}*/
}
}
return toAjax(othYs7DeviceService.updateById(ys7Device));
}
@ -437,7 +356,7 @@ public class ProjectBigScreenController extends BaseController {
*/
// @SaCheckPermission("project:big:screen")
@GetMapping("/setWrjHc")
public void setWrjHc(){
public void setWrjHc() {
projectBigScreenService.setWrjHc();
}
@ -446,7 +365,7 @@ public class ProjectBigScreenController extends BaseController {
*/
// @SaCheckPermission("project:big:screen")
@GetMapping("/getInfoData")
public R<Map<String, Map<String, Object>>> getInfoData(TanchuangInfoReq req){
public R<Map<String, Map<String, Object>>> getInfoData(TanchuangInfoReq req) {
return R.ok(projectBigScreenService.getInfoData(req));
}

View File

@ -19,9 +19,7 @@ import org.dromara.system.service.ISysRoleService;
import org.dromara.system.service.ISysUserService;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.*;
@Slf4j
@Component
@ -59,6 +57,7 @@ public class DesignFileJob {
.eq(DesSmsRecord::getAgain, "1")
.le(DesSmsRecord::getCreateTime, threeDaysAgo) // Date类型直接比较
);
HashSet<String> phoneNumbers = new HashSet<>();
for (DesSmsRecord record : records) {
DesVolumeFile desVolumeFile = designFileService.getById(record.getVolumeFileId());
DesVolumeCatalog desVolumeCatalog = volumeCatalogService.getById(desVolumeFile.getVolumeCatalogId());
@ -85,10 +84,13 @@ public class DesignFileJob {
List<Long> list1 = list.stream().map(DesVolumeFileViewer::getUserId).toList();
//找出没有查看的人 发送短信
List<SysUser> list2 = sysUsers.stream().filter(vo -> !list1.contains(vo.getUserId())).toList();
asyncUtil.sendSms(list2.stream().map(SysUser::getPhonenumber).toList(), "config5");
phoneNumbers.addAll(list2.stream().map(SysUser::getPhonenumber).toList());
}
if(CollectionUtil.isEmpty(phoneNumbers)){
return;
}
asyncUtil.sendSms(new ArrayList<>(phoneNumbers), "config5");
List<Long> list1 = records.stream().map(DesSmsRecord::getId).toList();
desSmsRecordService.lambdaUpdate().in(DesSmsRecord::getId, list1)

View File

@ -51,32 +51,40 @@ public class InspectionJob {
SmsBlend smsBlend = SmsFactory.getSmsBlend("config4");
List<String> phones = new ArrayList<>();
List<Long> userIds = new ArrayList<>();
// 每500条记录作为一批进行处理
int batchSize = 500;
for (int i = 0; i < list.size(); i += batchSize) {
int endIndex = Math.min(i + batchSize, list.size());
List<QltQualityInspection> batch = list.subList(i, endIndex);
List<Long> userIds = new ArrayList<>();
for (QltQualityInspection qualityInspection : batch) {
Long correctorId = qualityInspection.getCorrectorId();
String phonenumber = userService.queryById(correctorId).getPhonenumber();
if (phonenumber == null) {
continue;
}
if(phones.contains(phonenumber)){
continue;
}
phones.add(phonenumber);
SmsResponse smsResponse = smsBlend.sendMessage(phonenumber, new LinkedHashMap<String, String>());
if (!smsResponse.isSuccess()) {
log.error("验证码短信发送异常 => {}", smsResponse);
}
if(!userIds.contains(correctorId)){
userIds.add(correctorId);
}
if(userIds.isEmpty()){
continue;
}
log.info("质量工单短信提醒批次发送完成,当前批次数量: {}", batch.size());
}
if(!userIds.isEmpty()){
SseMessageDto sseMessageDto = new SseMessageDto();
sseMessageDto.setMessage("您负责整改的质量工单已逾期,请尽快前往处理!");
sseMessageDto.setUserIds(userIds);
SseMessageUtils.publishMessage(sseMessageDto);
log.info("质量工单短信提醒批次发送完成,当前批次数量: {}", batch.size());
}
log.info("执行定时任务:质量工单短信提醒完成,总处理数量: {}", list.size());
@ -93,34 +101,38 @@ public class InspectionJob {
SmsBlend smsBlend = SmsFactory.getSmsBlend("config6");
List<String> phones = new ArrayList<>();
List<Long> userIds = new ArrayList<>();
// 每500条记录作为一批进行处理
int batchSize = 500;
for (int i = 0; i < list.size(); i += batchSize) {
int endIndex = Math.min(i + batchSize, list.size());
List<HseSafetyInspection> batch = list.subList(i, endIndex);
List<Long> userIds = new ArrayList<>();
for (HseSafetyInspection safetyInspection : batch) {
Long correctorId = safetyInspection.getCorrectorId();
String phonenumber = userService.queryById(correctorId).getPhonenumber();
if (phonenumber == null) {
continue;
}
if(phones.contains(phonenumber)){
continue;
}
phones.add(phonenumber);
SmsResponse smsResponse = smsBlend.sendMessage(phonenumber, new LinkedHashMap<String, String>());
if (!smsResponse.isSuccess()) {
log.error("验证码短信发送异常 => {}", smsResponse);
}
userIds.add(correctorId);
}
log.info("安全工单短信提醒批次发送完成,当前批次数量: {}", batch.size());
}
if(!userIds.isEmpty()){
SseMessageDto sseMessageDto = new SseMessageDto();
sseMessageDto.setMessage("您负责整改的安全工单已逾期,请尽快前往处理!");
sseMessageDto.setUserIds(userIds);
SseMessageUtils.publishMessage(sseMessageDto);
log.info("安全工单短信提醒批次发送完成,当前批次数量: {}", batch.size());
}
log.info("执行定时任务:安全工单短信提醒完成,总处理数量: {}", list.size());
}
}

View File

@ -94,4 +94,14 @@ public class MatMaterialsInventory extends BaseEntity {
*/
private String remark;
/**
* 操作人id
*/
private Long operatorId;
/**
* 分包单位id
*/
private Long recipientId;
}

View File

@ -50,6 +50,11 @@ public class OutConstructionValue extends BaseEntity {
*/
private Long progressCategoryId;
/**
* 分项工程名称
*/
private String progressCategoryName;
/**
* 计划详情id
*/

View File

@ -25,4 +25,19 @@ public class OutConstructionAllValueVo implements Serializable {
* 对甲产值
*/
private BigDecimal ownerValue;
/**
* 人工填报数量
*/
private BigDecimal artificialNum;
/**
* 无人机识别数量
*/
private BigDecimal uavNum;
/**
* 确认数量
*/
private BigDecimal confirmNum;
}

View File

@ -171,4 +171,19 @@ public class OutConstructionValueVo implements Serializable {
* 工作类型
*/
private String workType;
/**
* 计量方式0无 1数量 2百分比
*/
private String unitType;
/**
* 单位
*/
private String unit;
/**
* 完成数量
*/
private Integer completeNum;
}

View File

@ -110,7 +110,6 @@ public class OutConstructionValueServiceImpl extends ServiceImpl<OutConstruction
private LambdaQueryWrapper<OutConstructionValue> buildQueryWrapper(OutConstructionValueBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<OutConstructionValue> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(OutConstructionValue::getId);
Long projectId = bo.getProjectId();
List<Long> ids = new ArrayList<>();
if (projectId != null) {
@ -150,6 +149,9 @@ public class OutConstructionValueServiceImpl extends ServiceImpl<OutConstruction
lqw.in(OutConstructionValue::getProgressCategoryId, categoryIds);
}
}
lqw.orderByAsc(OutConstructionValue::getProgressCategoryName);
lqw.orderByDesc(OutConstructionValue::getProgressCategoryId);
lqw.orderByDesc(OutConstructionValue::getReportDate);
return lqw;
}
@ -275,6 +277,27 @@ public class OutConstructionValueServiceImpl extends ServiceImpl<OutConstruction
.reduce(BigDecimal.ZERO, BigDecimal::add)
.setScale(4, RoundingMode.HALF_UP);
vo.setOwnerValue(ownerValue);
// 统计确认数量
BigDecimal confirmNum = list.stream()
.map(OutConstructionValueVo::getConfirmNum)
.filter(Objects::nonNull)
.map(BigDecimal::valueOf) // 转换成 BigDecimal
.reduce(BigDecimal.ZERO, BigDecimal::add);
vo.setConfirmNum(confirmNum);
// 统计人工填报数量
BigDecimal artificialNum = list.stream()
.map(OutConstructionValueVo::getArtificialNum)
.filter(Objects::nonNull)
.map(BigDecimal::valueOf) // 转换成 BigDecimal
.reduce(BigDecimal.ZERO, BigDecimal::add);
vo.setArtificialNum(artificialNum);
// 统计无人机识别数量
BigDecimal uavNum = list.stream()
.map(OutConstructionValueVo::getUavNum)
.filter(Objects::nonNull)
.map(BigDecimal::valueOf) // 转换成 BigDecimal
.reduce(BigDecimal.ZERO, BigDecimal::add);
vo.setUavNum(uavNum);
return vo;
}
@ -335,6 +358,8 @@ public class OutConstructionValueServiceImpl extends ServiceImpl<OutConstruction
PgsProgressCategoryVo pgsProgressCategoryVo = pgsProgressCategoryService.queryById(vo.getProgressCategoryId());
vo.setProgressCategoryName(pgsProgressCategoryVo.getName());
vo.setWorkType(pgsProgressCategoryVo.getWorkType());
vo.setUnitType(pgsProgressCategoryVo.getUnitType());
vo.setUnit(pgsProgressCategoryVo.getUnit());
PgsProgressCategoryVo pgsProgressCategoryVo1 = pgsProgressCategoryService.queryById(pgsProgressCategoryVo.getParentId());
vo.setCategoryId(pgsProgressCategoryVo1.getId());
vo.setCategoryName(pgsProgressCategoryVo1.getName());
@ -346,10 +371,14 @@ public class OutConstructionValueServiceImpl extends ServiceImpl<OutConstruction
if (vo.getMatrixId() != null && vo.getMatrixId() != 0) {
FacMatrix facMatrix = facMatrixService.getById(vo.getMatrixId());
vo.setMatrixName(facMatrix.getMatrixName());
vo.setCategoryName(facMatrix.getMatrixName() + "/" + pgsProgressCategoryVo1.getName());
}
BusProjectVo busProjectVo1 = busProjectService.queryById(pgsProgressCategoryVo.getProjectId());
vo.setSubProjectId(busProjectVo1.getId());
vo.setSubProjectName(busProjectVo1.getProjectName());
// 统计完成数量
vo.setCompleteNum(vo.getArtificialNum() + vo.getUavNum());
}
}

View File

@ -971,6 +971,7 @@ public class PgsProgressPlanDetailServiceImpl extends ServiceImpl<PgsProgressPla
value.setRangeId(rangeId);
value.setMatrixId(category.getMatrixId());
value.setProgressCategoryId(progressCategoryId);
value.setProgressCategoryName(category.getName());
value.setDetailId(planDetail.getId());
BigDecimal finishedNumber = planDetail.getFinishedNumber();
BigDecimal aiFill = planDetail.getAiFill();
@ -1049,6 +1050,7 @@ public class PgsProgressPlanDetailServiceImpl extends ServiceImpl<PgsProgressPla
value.setRangeId(range.getId());
value.setMatrixId(category.getMatrixId());
value.setProgressCategoryId(progressCategoryId);
value.setProgressCategoryName(category.getName());
value.setDetailId(planDetail.getId());
BigDecimal finishedNumber = planDetail.getFinishedNumber();
BigDecimal aiFill = planDetail.getAiFill();

View File

@ -0,0 +1,118 @@
package org.dromara.project.controller;
import cn.dev33.satoken.annotation.SaIgnore;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.R;
import org.dromara.common.web.core.BaseController;
import org.dromara.project.domain.BusAttendanceMachine;
import org.dromara.project.domain.dto.attendance.*;
import org.dromara.project.service.IBusAttendanceMachineService;
import org.dromara.project.service.IBusAttendanceService;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Base64;
/**
* 考勤
*
* @author Lion Li
* @date 2025-08-05
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping()
@Slf4j
public class BusAttendanceDeviceController extends BaseController {
private final IBusAttendanceService busAttendanceService;
private final IBusAttendanceMachineService busAttendanceMachineService;
@PostMapping("/api/v1/record/face")
@SaIgnore
public R<Boolean> punchCardByFace(@RequestBody DeviceDto dto) {
//打印接收数据
log.info("接收数据:{}", dto);
if (dto.getLogs().isEmpty()) {
return R.fail("没有数据");
}
Log first = dto.getLogs().getFirst();
Long userId = Long.valueOf(first.getUser_id());
BusAttendanceMachine one = busAttendanceMachineService.lambdaQuery()
.eq(BusAttendanceMachine::getSn, dto.getSn())
.last("limit 1")
.one();
if (one == null || one.getProjectId() == null) {
return R.fail("考勤机不存在或未关联项目");
}
String recogTime = first.getRecog_time();
LocalDateTime localDateTime = LocalDateTime.parse(recogTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
BusAttendancePunchCardByFaceReq req = new BusAttendancePunchCardByFaceReq();
DeviceLocation location = first.getLocation();
req.setLat(location.getLatitude());
req.setLng(location.getLongitude());
req.setProjectId(one.getProjectId());
req.setUserId(userId);
req.setPunchTime(localDateTime);
//打印req
log.info("请求参数:{}", req);
//base64转MultipartFile
try {
// 假设first.getImage()返回base64字符串且你有一个文件名
MultipartFile file = convert(first.getPhoto(), "face.jpg");
log.info("开始打卡");
return R.ok(busAttendanceService.punchCardByFace(file, req));
} catch (IOException e) {
return R.fail("文件转换失败");
}
}
public static MultipartFile convert(String base64String, String fileName) throws IOException {
// 先进行URL解码如果是URL编码过的数据
try {
base64String = java.net.URLDecoder.decode(base64String, "UTF-8");
} catch (Exception e) {
// 如果不是URL编码的数据直接跳过
}
// 去除base64前缀如data:image/png;base64,
if (base64String.contains(",")) {
base64String = base64String.split(",")[1];
}
// 解码base64字符串
byte[] decodedBytes = Base64.getDecoder().decode(base64String);
// 创建MultipartFile对象
return new MockMultipartFile(fileName, fileName, "image/jpeg", decodedBytes);
}
}

View File

@ -5,6 +5,7 @@ import org.springframework.web.multipart.MultipartFile;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* @author lilemy
@ -41,4 +42,9 @@ public class BusAttendancePunchCardByFaceReq implements Serializable {
*/
private Long userId;
/**
* 打卡时间
*/
private LocalDateTime punchTime;
}

View File

@ -0,0 +1,14 @@
package org.dromara.project.domain.dto.attendance;
import lombok.Data;
import org.apache.poi.ss.formula.functions.Count;
import java.util.List;
@Data
public class DeviceDto {
private String sn;
private int Count;
private List<Log> logs;
}

View File

@ -0,0 +1,9 @@
package org.dromara.project.domain.dto.attendance;
import lombok.Data;
@Data
public class DeviceLocation {
private String longitude;
private String latitude;
}

View File

@ -0,0 +1,12 @@
package org.dromara.project.domain.dto.attendance;
import lombok.Data;
@Data
public class Log {
private String user_id;
private String recog_type;
private String recog_time;
private String photo;
private DeviceLocation location;
}

View File

@ -1,5 +1,6 @@
package org.dromara.project.domain.dto.projectteammember;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.io.Serial;
@ -45,4 +46,9 @@ public class BusProjectTeamMemberCreateReq implements Serializable {
*/
private String remark;
/**
* 分包公司id
*/
private Long contractorId;
}

View File

@ -326,7 +326,11 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B
}
synchronized (userId.toString().intern()) {
// 记录当前打卡时间
LocalDateTime now = LocalDateTime.now();
if(req.getPunchTime() != null){
now = req.getPunchTime();
}
//打卡范围
if (!checkInRange(req)) {
@ -617,6 +621,9 @@ public class BusAttendanceServiceImpl extends ServiceImpl<BusAttendanceMapper, B
public Boolean checkInRange(BusAttendancePunchCardByFaceReq req) {
// 获取当前用户
Long userId = LoginHelper.getUserId();
if (req.getUserId() != null) {
userId = req.getUserId();
}
Long projectId = req.getProjectId();
SysUserVo sysUserVo = userService.queryById(userId);

View File

@ -176,11 +176,13 @@ public class BusProjectTeamMemberServiceImpl extends ServiceImpl<BusProjectTeamM
LambdaUpdateWrapper<SubConstructionUser> constructionUserLuw = Wrappers.lambdaUpdate(SubConstructionUser.class)
.eq(SubConstructionUser::getId, constructionUser.getId())
.set(SubConstructionUser::getProjectId, req.getProjectId())
.set(req.getContractorId()!=null,SubConstructionUser::getContractorId, req.getContractorId())
.set(SubConstructionUser::getTeamId, projectTeamMember.getTeamId())
.set(SubConstructionUser::getTeamName, projectTeam.getTeamName())
.set(SubConstructionUser::getEntryDate, new Date())
.set(SubConstructionUser::getLeaveDate, null)
.set(SubConstructionUser::getExitStatus, "0")
.set(SubConstructionUser::getUserRole, "0")
.set(StrUtil.isNotBlank(req.getTypeOfWork()),SubConstructionUser::getTypeOfWork,req.getTypeOfWork())
.set(constructionUser.getFirstDate() == null, SubConstructionUser::getFirstDate, LocalDate.now());
constructionUserService.update(constructionUserLuw);
@ -212,6 +214,10 @@ public class BusProjectTeamMemberServiceImpl extends ServiceImpl<BusProjectTeamM
roleService.cleanOnlineUser(Collections.singletonList(constructionUser.getSysUserId()));
if(req.getContractorId()!=null){
userService.updateFb(constructionUser.getSysUserId(),req.getContractorId(),false);
}
return projectTeamMember.getId();
}

View File

@ -3,6 +3,8 @@ package org.dromara.quality.domain.vo.qualityinspection;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import java.util.Date;
@ -23,6 +25,12 @@ public class QltQualityInspectionGis {
/**
* 巡检类型
*/
private String inspectionType;
/**
* 巡检类型名称
*/
@Translation(type = TransConstant.DICT_TYPE_TO_LABEL, mapper = "inspectionType", other = "quality_inspection_check_type")
private String inspectionTypeLabel;
/**

View File

@ -27,7 +27,12 @@ public class QltQualityInspectionListGisVo implements Serializable {
private Long count;
/**
* 巡检情况
* 整改列表
*/
private List<QltQualityInspectionGis> correctList;
/**
* 整改总数
*/
private Long correctSituation;

View File

@ -36,10 +36,8 @@ import org.dromara.quality.domain.vo.qualityinspection.QltQualityInspectionListG
import org.dromara.quality.domain.vo.qualityinspection.QltQualityInspectionVo;
import org.dromara.quality.mapper.QltQualityInspectionMapper;
import org.dromara.quality.service.IQltQualityInspectionService;
import org.dromara.system.domain.vo.SysDictDataVo;
import org.dromara.system.domain.vo.SysOssVo;
import org.dromara.system.service.ISysDictDataService;
import org.dromara.system.service.ISysDictTypeService;
import org.dromara.system.service.ISysOssService;
import org.dromara.system.service.ISysUserService;
import org.dromara.websocket.ChatServerHandler;
@ -83,9 +81,6 @@ public class QltQualityInspectionServiceImpl extends ServiceImpl<QltQualityInspe
@Resource
private ISysDictDataService dictDataService;
@Resource
private ISysDictTypeService dictTypeService;
@Resource
private ChatServerHandler chatServerHandler;
@ -148,39 +143,33 @@ public class QltQualityInspectionServiceImpl extends ServiceImpl<QltQualityInspe
if (CollUtil.isEmpty(qualityInspectionList)) {
return gisVo;
}
// 获取字典值
List<SysDictDataVo> dictDataVoList = dictTypeService.selectDictDataByType(QltQualityConstant.QUALITY_INSPECTION_CHECK_TYPE);
Map<String, String> dictDataMap = dictDataVoList.stream().collect(Collectors.toMap(SysDictDataVo::getDictValue, SysDictDataVo::getDictLabel));
// 获取最新的检查工单
List<QltQualityInspection> topList = qualityInspectionList.stream()
.sorted(Comparator.comparing(QltQualityInspection::getCreateTime).reversed())
.limit(Optional.ofNullable(req.getPageSize()).orElse(20))
.toList();
// 转换为 GIS 对象,并设置标签
List<QltQualityInspectionGis> gisList = topList.stream().map(qualityInspection -> {
// 获取巡检情况
List<QltQualityInspectionGis> list = qualityInspectionList.stream()
.filter(q -> "2".equals(q.getIsReply()))
.toList().stream().map(q -> {
QltQualityInspectionGis gis = new QltQualityInspectionGis();
BeanUtils.copyProperties(qualityInspection, gis);
String label = dictDataMap.get(qualityInspection.getInspectionType());
if (label != null) {
gis.setInspectionTypeLabel(label);
}
BeanUtils.copyProperties(q, gis);
return gis;
}).toList();
gisVo.setList(list.stream()
.sorted(Comparator.comparing(QltQualityInspectionGis::getCreateTime).reversed())
.limit(Optional.ofNullable(req.getPageSize()).orElse(20))
.toList());
gisVo.setCount((long) list.size());
// 获取整改情况
long passCount = 0L;
for (QltQualityInspection qualityInspection : qualityInspectionList) {
if ("1".equals(qualityInspection.getIsReply())) {
if (!qualityInspection.getInspectionStatus().equals(QltQualityInspectionStatusEnum.INFORM.getValue())) {
passCount++;
}
}
}
gisVo.setList(gisList);
gisVo.setCount((long) qualityInspectionList.stream()
.filter(q -> "2".equals(q.getIsReply()))
.toList()
.size());
gisVo.setCorrectSituation(passCount);
List<QltQualityInspectionGis> correctList = qualityInspectionList.stream()
.filter(q -> "1".equals(q.getIsReply()))
.filter(q -> !q.getInspectionStatus().equals(QltQualityInspectionStatusEnum.INFORM.getValue()))
.toList().stream().map(q -> {
QltQualityInspectionGis gis = new QltQualityInspectionGis();
BeanUtils.copyProperties(q, gis);
return gis;
}).toList();
gisVo.setCorrectSituation((long) correctList.size());
gisVo.setCorrectList(correctList.stream()
.sorted(Comparator.comparing(QltQualityInspectionGis::getCreateTime).reversed())
.limit(Optional.ofNullable(req.getPageSize()).orElse(20))
.toList());
// gisVo.setCorrectSituation(String.format("%.2f", passCount * 100.0 / qualityInspectionList.size()));
return gisVo;
}

View File

@ -3,7 +3,6 @@ package org.dromara.safety.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.excel.utils.ExcelUtil;
@ -74,7 +73,7 @@ public class HseRecognizeRecordController extends BaseController {
@SaCheckPermission("safety:recognizeRecord:remove")
@Log(title = "识别记录", businessType = BusinessType.DELETE)
@DeleteMapping("/{id}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
public R<Void> remove(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return toAjax(recognizeRecordService.deleteById(id));
}

View File

@ -0,0 +1,43 @@
package org.dromara.safety.domain.vo.safetyinspection;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* @author lilemy
* @date 2025-10-17 09:26
*/
@Data
public class HseSafetyInspectionGis implements Serializable {
@Serial
private static final long serialVersionUID = 3098473090533804934L;
/**
* 主键ID
*/
private Long id;
/**
* 检查类型
*/
private String checkType;
/**
* 违章类型
*/
private String violationType;
/**
* 巡检结果
*/
private String inspectionResult;
/**
* 工单状态1通知 2整改 3复查
*/
private String status;
}

View File

@ -27,11 +27,21 @@ public class HseSafetyInspectionListGisVo implements Serializable {
*/
private Long teamMeetingCount;
/**
* 安全巡检列表
*/
private List<HseSafetyInspectionGis> safetyInspectionList;
/**
* 安全巡检总数
*/
private Long safetyInspectionCount;
/**
* 整改情况列表
*/
private List<HseSafetyInspectionGis> correctSituationList;
/**
* 整改情况总数
*/

View File

@ -35,6 +35,7 @@ import org.dromara.safety.domain.HseSafetyInspection;
import org.dromara.safety.domain.HseTeamMeeting;
import org.dromara.safety.domain.dto.safetyinspection.*;
import org.dromara.safety.domain.enums.HseSafetyInspectionStatusEnum;
import org.dromara.safety.domain.vo.safetyinspection.HseSafetyInspectionGis;
import org.dromara.safety.domain.vo.safetyinspection.HseSafetyInspectionListGisVo;
import org.dromara.safety.domain.vo.safetyinspection.HseSafetyInspectionVo;
import org.dromara.safety.domain.vo.teammeeting.HseTeamMeetingGis;
@ -229,11 +230,36 @@ public class HseSafetyInspectionServiceImpl extends ServiceImpl<HseSafetyInspect
}
}
}
List<HseSafetyInspection> passList = safetyInspectionList.stream()
.filter(q -> "1".equals(q.getIsReply()))
.filter(q -> !q.getStatus().equals(HseSafetyInspectionStatusEnum.INFORM.getValue()))
.toList();
List<HseSafetyInspectionGis> pass = passList.stream().map(p -> {
HseSafetyInspectionGis gis = new HseSafetyInspectionGis();
gis.setId(p.getId());
gis.setCheckType(p.getCheckType());
gis.setViolationType(p.getViolationType());
gis.setInspectionResult(p.getInspectionResult());
gis.setStatus(p.getStatus());
return gis;
}).toList();
gisVo.setTeamMeetingCount((long) teamMeetings.size());
gisVo.setSafetyInspectionCount((long) safetyInspectionList.stream()
List<HseSafetyInspectionGis> inspections = safetyInspectionList.stream()
.filter(q -> "2".equals(q.getIsReply()))
.toList().size());
.toList()
.stream().map(p -> {
HseSafetyInspectionGis gis = new HseSafetyInspectionGis();
gis.setId(p.getId());
gis.setCheckType(p.getCheckType());
gis.setViolationType(p.getViolationType());
gis.setInspectionResult(p.getInspectionResult());
gis.setStatus(p.getStatus());
return gis;
}).toList();
gisVo.setSafetyInspectionCount((long) inspections.size());
gisVo.setSafetyInspectionList(inspections);
gisVo.setCorrectSituationCount(passCount);
gisVo.setCorrectSituationList(pass);
gisVo.setCorrectSituation(String.format("%.2f", passCount * 100.0 / safetyInspectionList.size()));
return gisVo;
}

View File

@ -404,7 +404,7 @@ public class SysUserController extends BaseController {
@PutMapping("/fb/{userId}/{contractorId}")
public R<Boolean> updateFb(@PathVariable("userId") Long userId,
@PathVariable("contractorId") Long contractorId) {
return R.ok(userService.updateFb(userId, contractorId));
return R.ok(userService.updateFb(userId, contractorId,true));
}

View File

@ -275,11 +275,13 @@ public interface ISysUserService {
List<SysUserVo> selectUserListByAppUserType(String appUserType,Long projectId,Long contractorId);
Boolean updateFb(Long userId,Long contractorId);
Boolean updateFb(Long userId,Long contractorId,Boolean isSub);
List<SysUser> selectUserByRoleIdAndProjectId(Long roleId,Long projectId);
List<SysUser> selectUserByRoleIdsAndProjectId(List<Long> roleIds,Long projectId);
String queryNameById(Long id);
}

View File

@ -1223,10 +1223,11 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
}
@Override
public Boolean updateFb(Long userId,Long contractorId) {
public Boolean updateFb(Long userId,Long contractorId,Boolean isSub) {
SysUser sysUser = baseMapper.selectById(userId);
sysUser.setContractorId(contractorId);
if(isSub){
SubConstructionUser constructionUser = constructionUserService.lambdaQuery()
.eq(SubConstructionUser::getSysUserId, userId)
.one();
@ -1234,6 +1235,8 @@ public class SysUserServiceImpl implements ISysUserService, UserService {
constructionUser.setContractorId(contractorId);
constructionUserService.updateById(constructionUser);
}
}
return baseMapper.updateById(sysUser)>0;
}

View File

@ -0,0 +1,142 @@
package org.dromara.xzd.comprehensive.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.io.Serial;
/**
* 合同管理-合同变更清单对象 xzd_htgl_htbgqd
*
* @author Lion Li
* @date 2025-10-17
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("xzd_htgl_htbgqd")
public class XzdHtglHtbgqd extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 立项1、承包合同信息2、承包合同变更3分包合同信息4、分包合同变更5、采购合同信息6、采购合同变更7、综合服务信息8、综合服务变更
*/
private Long type;
/**
* 附件(路径/关联ID
*/
private String attachment;
/**
* 编码
*/
private String code;
/**
* 合同名称(带*,必填)
*/
private String contractName;
/**
* 报销单号
*/
private String bidNo;
/**
* 计算单位(带*,必填)
*/
private String calculateUnit;
/**
* 原数值
*/
private BigDecimal originalValue;
/**
* 变更后数值
*/
private BigDecimal afterChangeValue;
/**
* 原含税单价
*/
private BigDecimal originalTaxInclUnitPrice;
/**
* 变更后含税单价
*/
private BigDecimal afterChangeTaxInclUnitPrice;
/**
* 原含税金额
*/
private BigDecimal originalTaxInclAmount;
/**
* 变更后含税金额
*/
private BigDecimal afterChangeTaxInclAmount;
/**
* 原税率
*/
private BigDecimal originalTaxRate;
/**
* 变更后税率
*/
private BigDecimal afterChangeTaxRate;
/**
* 原WBS
*/
private String originalWbs;
/**
* 变更后WBS
*/
private String afterChangeWbs;
/**
* 原CBS
*/
private String originalCbs;
/**
* 变更后CBS
*/
private String afterChangeCbs;
/**
* 成本预算金额
*/
private BigDecimal costBudgetAmount;
/**
* 成本预算来源
*/
private String costBudgetSource;
/**
* 备注
*/
private String remark;
/**
* 已结价税合计
*/
private Long settledPriceTotal;
}

View File

@ -0,0 +1,144 @@
package org.dromara.xzd.comprehensive.domain.bo;
import org.dromara.xzd.comprehensive.domain.XzdHtglHtbgqd;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.math.BigDecimal;
/**
* 合同管理-合同变更清单业务对象 xzd_htgl_htbgqd
*
* @author Lion Li
* @date 2025-10-17
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = XzdHtglHtbgqd.class, reverseConvertGenerate = false)
public class XzdHtglHtbgqdBo extends BaseEntity {
/**
* 主键ID
*/
@NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
private Long id;
/**
* 立项1、承包合同信息2、承包合同变更3分包合同信息4、分包合同变更5、采购合同信息6、采购合同变更7、综合服务信息8、综合服务变更
*/
@NotNull(message = "立项1、承包合同信息2、承包合同变更3分包合同信息4、分包合同变更5、采购合同信息6、采购合同变更7、综合服务信息8、综合服务变更不能为空", groups = { AddGroup.class, EditGroup.class })
private Long type;
/**
* 附件(路径/关联ID
*/
private String attachment;
/**
* 编码
*/
private String code;
/**
* 合同名称(带*,必填)
*/
@NotBlank(message = "合同名称(带*,必填)不能为空", groups = { AddGroup.class, EditGroup.class })
private String contractName;
/**
* 报销单号
*/
private String bidNo;
/**
* 计算单位(带*,必填)
*/
@NotBlank(message = "计算单位(带*,必填)不能为空", groups = { AddGroup.class, EditGroup.class })
private String calculateUnit;
/**
* 原数值
*/
private BigDecimal originalValue;
/**
* 变更后数值
*/
private BigDecimal afterChangeValue;
/**
* 原含税单价
*/
private BigDecimal originalTaxInclUnitPrice;
/**
* 变更后含税单价
*/
private BigDecimal afterChangeTaxInclUnitPrice;
/**
* 原含税金额
*/
private BigDecimal originalTaxInclAmount;
/**
* 变更后含税金额
*/
private BigDecimal afterChangeTaxInclAmount;
/**
* 原税率
*/
private BigDecimal originalTaxRate;
/**
* 变更后税率
*/
private BigDecimal afterChangeTaxRate;
/**
* 原WBS
*/
private String originalWbs;
/**
* 变更后WBS
*/
private String afterChangeWbs;
/**
* 原CBS
*/
private String originalCbs;
/**
* 变更后CBS
*/
private String afterChangeCbs;
/**
* 成本预算金额
*/
private BigDecimal costBudgetAmount;
/**
* 成本预算来源
*/
private String costBudgetSource;
/**
* 备注
*/
private String remark;
/**
* 已结价税合计
*/
private Long settledPriceTotal;
}

View File

@ -0,0 +1,175 @@
package org.dromara.xzd.comprehensive.domain.vo;
import java.math.BigDecimal;
import org.dromara.xzd.comprehensive.domain.XzdHtglHtbgqd;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 合同管理-合同变更清单视图对象 xzd_htgl_htbgqd
*
* @author Lion Li
* @date 2025-10-17
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = XzdHtglHtbgqd.class)
public class XzdHtglHtbgqdVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long id;
/**
* 立项1、承包合同信息2、承包合同变更3分包合同信息4、分包合同变更5、采购合同信息6、采购合同变更7、综合服务信息8、综合服务变更
*/
@ExcelProperty(value = "立项", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "1=、承包合同信息2、承包合同变更3分包合同信息4、分包合同变更5、采购合同信息6、采购合同变更7、综合服务信息8、综合服务变更")
private Long type;
/**
* 附件(路径/关联ID
*/
@ExcelProperty(value = "附件", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "路=径/关联ID")
private String attachment;
/**
* 编码
*/
@ExcelProperty(value = "编码")
private String code;
/**
* 合同名称(带*,必填)
*/
@ExcelProperty(value = "合同名称", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "带=*,必填")
private String contractName;
/**
* 报销单号
*/
@ExcelProperty(value = "报销单号")
private String bidNo;
/**
* 计算单位(带*,必填)
*/
@ExcelProperty(value = "计算单位", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "带=*,必填")
private String calculateUnit;
/**
* 原数值
*/
@ExcelProperty(value = "原数值")
private BigDecimal originalValue;
/**
* 变更后数值
*/
@ExcelProperty(value = "变更后数值")
private BigDecimal afterChangeValue;
/**
* 原含税单价
*/
@ExcelProperty(value = "原含税单价")
private BigDecimal originalTaxInclUnitPrice;
/**
* 变更后含税单价
*/
@ExcelProperty(value = "变更后含税单价")
private BigDecimal afterChangeTaxInclUnitPrice;
/**
* 原含税金额
*/
@ExcelProperty(value = "原含税金额")
private BigDecimal originalTaxInclAmount;
/**
* 变更后含税金额
*/
@ExcelProperty(value = "变更后含税金额")
private BigDecimal afterChangeTaxInclAmount;
/**
* 原税率
*/
@ExcelProperty(value = "原税率")
private BigDecimal originalTaxRate;
/**
* 变更后税率
*/
@ExcelProperty(value = "变更后税率")
private BigDecimal afterChangeTaxRate;
/**
* 原WBS
*/
@ExcelProperty(value = "原WBS")
private String originalWbs;
/**
* 变更后WBS
*/
@ExcelProperty(value = "变更后WBS")
private String afterChangeWbs;
/**
* 原CBS
*/
@ExcelProperty(value = "原CBS")
private String originalCbs;
/**
* 变更后CBS
*/
@ExcelProperty(value = "变更后CBS")
private String afterChangeCbs;
/**
* 成本预算金额
*/
@ExcelProperty(value = "成本预算金额")
private BigDecimal costBudgetAmount;
/**
* 成本预算来源
*/
@ExcelProperty(value = "成本预算来源")
private String costBudgetSource;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 已结价税合计
*/
@ExcelProperty(value = "已结价税合计")
private Long settledPriceTotal;
}

View File

@ -0,0 +1,15 @@
package org.dromara.xzd.comprehensive.mapper;
import org.dromara.xzd.comprehensive.domain.XzdHtglHtbgqd;
import org.dromara.xzd.comprehensive.domain.vo.XzdHtglHtbgqdVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 合同管理-合同变更清单Mapper接口
*
* @author Lion Li
* @date 2025-10-17
*/
public interface XzdHtglHtbgqdMapper extends BaseMapperPlus<XzdHtglHtbgqd, XzdHtglHtbgqdVo> {
}

View File

@ -0,0 +1,70 @@
package org.dromara.xzd.comprehensive.service;
import org.dromara.xzd.comprehensive.domain.vo.XzdHtglHtbgqdVo;
import org.dromara.xzd.comprehensive.domain.bo.XzdHtglHtbgqdBo;
import org.dromara.xzd.comprehensive.domain.XzdHtglHtbgqd;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Collection;
import java.util.List;
/**
* 合同管理-合同变更清单Service接口
*
* @author Lion Li
* @date 2025-10-17
*/
public interface IXzdHtglHtbgqdService extends IService<XzdHtglHtbgqd>{
/**
* 查询合同管理-合同变更清单
*
* @param id 主键
* @return 合同管理-合同变更清单
*/
XzdHtglHtbgqdVo queryById(Long id);
/**
* 分页查询合同管理-合同变更清单列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 合同管理-合同变更清单分页列表
*/
TableDataInfo<XzdHtglHtbgqdVo> queryPageList(XzdHtglHtbgqdBo bo, PageQuery pageQuery);
/**
* 查询符合条件的合同管理-合同变更清单列表
*
* @param bo 查询条件
* @return 合同管理-合同变更清单列表
*/
List<XzdHtglHtbgqdVo> queryList(XzdHtglHtbgqdBo bo);
/**
* 新增合同管理-合同变更清单
*
* @param bo 合同管理-合同变更清单
* @return 是否新增成功
*/
Boolean insertByBo(XzdHtglHtbgqdBo bo);
/**
* 修改合同管理-合同变更清单
*
* @param bo 合同管理-合同变更清单
* @return 是否修改成功
*/
Boolean updateByBo(XzdHtglHtbgqdBo bo);
/**
* 校验并批量删除合同管理-合同变更清单信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@ -0,0 +1,151 @@
package org.dromara.xzd.comprehensive.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.dromara.xzd.comprehensive.domain.bo.XzdHtglHtbgqdBo;
import org.dromara.xzd.comprehensive.domain.vo.XzdHtglHtbgqdVo;
import org.dromara.xzd.comprehensive.domain.XzdHtglHtbgqd;
import org.dromara.xzd.comprehensive.mapper.XzdHtglHtbgqdMapper;
import org.dromara.xzd.comprehensive.service.IXzdHtglHtbgqdService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 合同管理-合同变更清单Service业务层处理
*
* @author Lion Li
* @date 2025-10-17
*/
@RequiredArgsConstructor
@Service
public class XzdHtglHtbgqdServiceImpl extends ServiceImpl<XzdHtglHtbgqdMapper, XzdHtglHtbgqd> implements IXzdHtglHtbgqdService {
private final XzdHtglHtbgqdMapper baseMapper;
/**
* 查询合同管理-合同变更清单
*
* @param id 主键
* @return 合同管理-合同变更清单
*/
@Override
public XzdHtglHtbgqdVo queryById(Long id){
return baseMapper.selectVoById(id);
}
/**
* 分页查询合同管理-合同变更清单列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 合同管理-合同变更清单分页列表
*/
@Override
public TableDataInfo<XzdHtglHtbgqdVo> queryPageList(XzdHtglHtbgqdBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<XzdHtglHtbgqd> lqw = buildQueryWrapper(bo);
Page<XzdHtglHtbgqdVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的合同管理-合同变更清单列表
*
* @param bo 查询条件
* @return 合同管理-合同变更清单列表
*/
@Override
public List<XzdHtglHtbgqdVo> queryList(XzdHtglHtbgqdBo bo) {
LambdaQueryWrapper<XzdHtglHtbgqd> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<XzdHtglHtbgqd> buildQueryWrapper(XzdHtglHtbgqdBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<XzdHtglHtbgqd> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(XzdHtglHtbgqd::getId);
lqw.eq(bo.getType() != null, XzdHtglHtbgqd::getType, bo.getType());
lqw.eq(StringUtils.isNotBlank(bo.getAttachment()), XzdHtglHtbgqd::getAttachment, bo.getAttachment());
lqw.eq(StringUtils.isNotBlank(bo.getCode()), XzdHtglHtbgqd::getCode, bo.getCode());
lqw.like(StringUtils.isNotBlank(bo.getContractName()), XzdHtglHtbgqd::getContractName, bo.getContractName());
lqw.eq(StringUtils.isNotBlank(bo.getBidNo()), XzdHtglHtbgqd::getBidNo, bo.getBidNo());
lqw.eq(StringUtils.isNotBlank(bo.getCalculateUnit()), XzdHtglHtbgqd::getCalculateUnit, bo.getCalculateUnit());
lqw.eq(bo.getOriginalValue() != null, XzdHtglHtbgqd::getOriginalValue, bo.getOriginalValue());
lqw.eq(bo.getAfterChangeValue() != null, XzdHtglHtbgqd::getAfterChangeValue, bo.getAfterChangeValue());
lqw.eq(bo.getOriginalTaxInclUnitPrice() != null, XzdHtglHtbgqd::getOriginalTaxInclUnitPrice, bo.getOriginalTaxInclUnitPrice());
lqw.eq(bo.getAfterChangeTaxInclUnitPrice() != null, XzdHtglHtbgqd::getAfterChangeTaxInclUnitPrice, bo.getAfterChangeTaxInclUnitPrice());
lqw.eq(bo.getOriginalTaxInclAmount() != null, XzdHtglHtbgqd::getOriginalTaxInclAmount, bo.getOriginalTaxInclAmount());
lqw.eq(bo.getAfterChangeTaxInclAmount() != null, XzdHtglHtbgqd::getAfterChangeTaxInclAmount, bo.getAfterChangeTaxInclAmount());
lqw.eq(bo.getOriginalTaxRate() != null, XzdHtglHtbgqd::getOriginalTaxRate, bo.getOriginalTaxRate());
lqw.eq(bo.getAfterChangeTaxRate() != null, XzdHtglHtbgqd::getAfterChangeTaxRate, bo.getAfterChangeTaxRate());
lqw.eq(StringUtils.isNotBlank(bo.getOriginalWbs()), XzdHtglHtbgqd::getOriginalWbs, bo.getOriginalWbs());
lqw.eq(StringUtils.isNotBlank(bo.getAfterChangeWbs()), XzdHtglHtbgqd::getAfterChangeWbs, bo.getAfterChangeWbs());
lqw.eq(StringUtils.isNotBlank(bo.getOriginalCbs()), XzdHtglHtbgqd::getOriginalCbs, bo.getOriginalCbs());
lqw.eq(StringUtils.isNotBlank(bo.getAfterChangeCbs()), XzdHtglHtbgqd::getAfterChangeCbs, bo.getAfterChangeCbs());
lqw.eq(bo.getCostBudgetAmount() != null, XzdHtglHtbgqd::getCostBudgetAmount, bo.getCostBudgetAmount());
lqw.eq(StringUtils.isNotBlank(bo.getCostBudgetSource()), XzdHtglHtbgqd::getCostBudgetSource, bo.getCostBudgetSource());
lqw.eq(bo.getSettledPriceTotal() != null, XzdHtglHtbgqd::getSettledPriceTotal, bo.getSettledPriceTotal());
return lqw;
}
/**
* 新增合同管理-合同变更清单
*
* @param bo 合同管理-合同变更清单
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(XzdHtglHtbgqdBo bo) {
XzdHtglHtbgqd add = MapstructUtils.convert(bo, XzdHtglHtbgqd.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改合同管理-合同变更清单
*
* @param bo 合同管理-合同变更清单
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(XzdHtglHtbgqdBo bo) {
XzdHtglHtbgqd update = MapstructUtils.convert(bo, XzdHtglHtbgqd.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(XzdHtglHtbgqd entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除合同管理-合同变更清单信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
}

View File

@ -20,10 +20,8 @@ import java.time.LocalDateTime;
@EqualsAndHashCode(callSuper = true)
@TableName("xzd_subcontract")
public class XzdSubcontract extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/

View File

@ -0,0 +1,105 @@
package org.dromara.xzd.costProjectApproval.costBudget.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysJdcbfjVo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysJdcbfjBo;
import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysJdcbfjService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 立项及成本-成本预算-阶段成本分解
*
* @author Lion Li
* @date 2025-10-17
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/costBudget/cbysJdcbfj")
public class XzdCbysJdcbfjController extends BaseController {
private final IXzdCbysJdcbfjService xzdCbysJdcbfjService;
/**
* 查询立项及成本-成本预算-阶段成本分解列表
*/
@SaCheckPermission("costBudget:cbysJdcbfj:list")
@GetMapping("/list")
public TableDataInfo<XzdCbysJdcbfjVo> list(XzdCbysJdcbfjBo bo, PageQuery pageQuery) {
return xzdCbysJdcbfjService.queryPageList(bo, pageQuery);
}
/**
* 导出立项及成本-成本预算-阶段成本分解列表
*/
@SaCheckPermission("costBudget:cbysJdcbfj:export")
@Log(title = "立项及成本-成本预算-阶段成本分解", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(XzdCbysJdcbfjBo bo, HttpServletResponse response) {
List<XzdCbysJdcbfjVo> list = xzdCbysJdcbfjService.queryList(bo);
ExcelUtil.exportExcel(list, "立项及成本-成本预算-阶段成本分解", XzdCbysJdcbfjVo.class, response);
}
/**
* 获取立项及成本-成本预算-阶段成本分解详细信息
*
* @param id 主键
*/
@SaCheckPermission("costBudget:cbysJdcbfj:query")
@GetMapping("/{id}")
public R<XzdCbysJdcbfjVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(xzdCbysJdcbfjService.queryById(id));
}
/**
* 新增立项及成本-成本预算-阶段成本分解
*/
@SaCheckPermission("costBudget:cbysJdcbfj:add")
@Log(title = "立项及成本-成本预算-阶段成本分解", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody XzdCbysJdcbfjBo bo) {
return toAjax(xzdCbysJdcbfjService.insertByBo(bo));
}
/**
* 修改立项及成本-成本预算-阶段成本分解
*/
@SaCheckPermission("costBudget:cbysJdcbfj:edit")
@Log(title = "立项及成本-成本预算-阶段成本分解", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody XzdCbysJdcbfjBo bo) {
return toAjax(xzdCbysJdcbfjService.updateByBo(bo));
}
/**
* 删除立项及成本-成本预算-阶段成本分解
*
* @param ids 主键串
*/
@SaCheckPermission("costBudget:cbysJdcbfj:remove")
@Log(title = "立项及成本-成本预算-阶段成本分解", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(xzdCbysJdcbfjService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,105 @@
package org.dromara.xzd.costProjectApproval.costBudget.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysJdcbfjFubiaoVo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysJdcbfjFubiaoBo;
import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysJdcbfjFubiaoService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 立项及成本-成本预算-阶段成本分解附
*
* @author Lion Li
* @date 2025-10-17
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/costBudget/cbysJdcbfjFubiao")
public class XzdCbysJdcbfjFubiaoController extends BaseController {
private final IXzdCbysJdcbfjFubiaoService xzdCbysJdcbfjFubiaoService;
/**
* 查询立项及成本-成本预算-阶段成本分解附列表
*/
@SaCheckPermission("costBudget:cbysJdcbfjFubiao:list")
@GetMapping("/list")
public TableDataInfo<XzdCbysJdcbfjFubiaoVo> list(XzdCbysJdcbfjFubiaoBo bo, PageQuery pageQuery) {
return xzdCbysJdcbfjFubiaoService.queryPageList(bo, pageQuery);
}
/**
* 导出立项及成本-成本预算-阶段成本分解附列表
*/
@SaCheckPermission("costBudget:cbysJdcbfjFubiao:export")
@Log(title = "立项及成本-成本预算-阶段成本分解附", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(XzdCbysJdcbfjFubiaoBo bo, HttpServletResponse response) {
List<XzdCbysJdcbfjFubiaoVo> list = xzdCbysJdcbfjFubiaoService.queryList(bo);
ExcelUtil.exportExcel(list, "立项及成本-成本预算-阶段成本分解附", XzdCbysJdcbfjFubiaoVo.class, response);
}
/**
* 获取立项及成本-成本预算-阶段成本分解附详细信息
*
* @param id 主键
*/
@SaCheckPermission("costBudget:cbysJdcbfjFubiao:query")
@GetMapping("/{id}")
public R<XzdCbysJdcbfjFubiaoVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(xzdCbysJdcbfjFubiaoService.queryById(id));
}
/**
* 新增立项及成本-成本预算-阶段成本分解附
*/
@SaCheckPermission("costBudget:cbysJdcbfjFubiao:add")
@Log(title = "立项及成本-成本预算-阶段成本分解附", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody XzdCbysJdcbfjFubiaoBo bo) {
return toAjax(xzdCbysJdcbfjFubiaoService.insertByBo(bo));
}
/**
* 修改立项及成本-成本预算-阶段成本分解附
*/
@SaCheckPermission("costBudget:cbysJdcbfjFubiao:edit")
@Log(title = "立项及成本-成本预算-阶段成本分解附", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody XzdCbysJdcbfjFubiaoBo bo) {
return toAjax(xzdCbysJdcbfjFubiaoService.updateByBo(bo));
}
/**
* 删除立项及成本-成本预算-阶段成本分解附
*
* @param ids 主键串
*/
@SaCheckPermission("costBudget:cbysJdcbfjFubiao:remove")
@Log(title = "立项及成本-成本预算-阶段成本分解附", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(xzdCbysJdcbfjFubiaoService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,105 @@
package org.dromara.xzd.costProjectApproval.costBudget.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysSscbVo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysSscbBo;
import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysSscbService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 税收项明细
*
* @author Lion Li
* @date 2025-10-17
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/costBudget/cbysSscb")
public class XzdCbysSscbController extends BaseController {
private final IXzdCbysSscbService xzdCbysSscbService;
/**
* 查询税收项明细列表
*/
@SaCheckPermission("costBudget:cbysSscb:list")
@GetMapping("/list")
public TableDataInfo<XzdCbysSscbVo> list(XzdCbysSscbBo bo, PageQuery pageQuery) {
return xzdCbysSscbService.queryPageList(bo, pageQuery);
}
/**
* 导出税收项明细列表
*/
@SaCheckPermission("costBudget:cbysSscb:export")
@Log(title = "税收项明细", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(XzdCbysSscbBo bo, HttpServletResponse response) {
List<XzdCbysSscbVo> list = xzdCbysSscbService.queryList(bo);
ExcelUtil.exportExcel(list, "税收项明细", XzdCbysSscbVo.class, response);
}
/**
* 获取税收项明细详细信息
*
* @param id 主键
*/
@SaCheckPermission("costBudget:cbysSscb:query")
@GetMapping("/{id}")
public R<XzdCbysSscbVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(xzdCbysSscbService.queryById(id));
}
/**
* 新增税收项明细
*/
@SaCheckPermission("costBudget:cbysSscb:add")
@Log(title = "税收项明细", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody XzdCbysSscbBo bo) {
return toAjax(xzdCbysSscbService.insertByBo(bo));
}
/**
* 修改税收项明细
*/
@SaCheckPermission("costBudget:cbysSscb:edit")
@Log(title = "税收项明细", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody XzdCbysSscbBo bo) {
return toAjax(xzdCbysSscbService.updateByBo(bo));
}
/**
* 删除税收项明细
*
* @param ids 主键串
*/
@SaCheckPermission("costBudget:cbysSscb:remove")
@Log(title = "税收项明细", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(xzdCbysSscbService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,105 @@
package org.dromara.xzd.costProjectApproval.costBudget.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysWgcbtbVo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysWgcbtbBo;
import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysWgcbtbService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 立项及成本-成本预算-完工成本填报
*
* @author Lion Li
* @date 2025-10-17
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/costBudget/cbysWgcbtb")
public class XzdCbysWgcbtbController extends BaseController {
private final IXzdCbysWgcbtbService xzdCbysWgcbtbService;
/**
* 查询立项及成本-成本预算-完工成本填报列表
*/
@SaCheckPermission("costBudget:cbysWgcbtb:list")
@GetMapping("/list")
public TableDataInfo<XzdCbysWgcbtbVo> list(XzdCbysWgcbtbBo bo, PageQuery pageQuery) {
return xzdCbysWgcbtbService.queryPageList(bo, pageQuery);
}
/**
* 导出立项及成本-成本预算-完工成本填报列表
*/
@SaCheckPermission("costBudget:cbysWgcbtb:export")
@Log(title = "立项及成本-成本预算-完工成本填报", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(XzdCbysWgcbtbBo bo, HttpServletResponse response) {
List<XzdCbysWgcbtbVo> list = xzdCbysWgcbtbService.queryList(bo);
ExcelUtil.exportExcel(list, "立项及成本-成本预算-完工成本填报", XzdCbysWgcbtbVo.class, response);
}
/**
* 获取立项及成本-成本预算-完工成本填报详细信息
*
* @param id 主键
*/
@SaCheckPermission("costBudget:cbysWgcbtb:query")
@GetMapping("/{id}")
public R<XzdCbysWgcbtbVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(xzdCbysWgcbtbService.queryById(id));
}
/**
* 新增立项及成本-成本预算-完工成本填报
*/
@SaCheckPermission("costBudget:cbysWgcbtb:add")
@Log(title = "立项及成本-成本预算-完工成本填报", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody XzdCbysWgcbtbBo bo) {
return toAjax(xzdCbysWgcbtbService.insertByBo(bo));
}
/**
* 修改立项及成本-成本预算-完工成本填报
*/
@SaCheckPermission("costBudget:cbysWgcbtb:edit")
@Log(title = "立项及成本-成本预算-完工成本填报", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody XzdCbysWgcbtbBo bo) {
return toAjax(xzdCbysWgcbtbService.updateByBo(bo));
}
/**
* 删除立项及成本-成本预算-完工成本填报
*
* @param ids 主键串
*/
@SaCheckPermission("costBudget:cbysWgcbtb:remove")
@Log(title = "立项及成本-成本预算-完工成本填报", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(xzdCbysWgcbtbService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,105 @@
package org.dromara.xzd.costProjectApproval.costBudget.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysWgcbtbFubiaoVo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysWgcbtbFubiaoBo;
import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysWgcbtbFubiaoService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 立项及成本-成本预算-附
*
* @author Lion Li
* @date 2025-10-17
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/costBudget/cbysWgcbtbFubiao")
public class XzdCbysWgcbtbFubiaoController extends BaseController {
private final IXzdCbysWgcbtbFubiaoService xzdCbysWgcbtbFubiaoService;
/**
* 查询立项及成本-成本预算-附列表
*/
@SaCheckPermission("costBudget:cbysWgcbtbFubiao:list")
@GetMapping("/list")
public TableDataInfo<XzdCbysWgcbtbFubiaoVo> list(XzdCbysWgcbtbFubiaoBo bo, PageQuery pageQuery) {
return xzdCbysWgcbtbFubiaoService.queryPageList(bo, pageQuery);
}
/**
* 导出立项及成本-成本预算-附列表
*/
@SaCheckPermission("costBudget:cbysWgcbtbFubiao:export")
@Log(title = "立项及成本-成本预算-附", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(XzdCbysWgcbtbFubiaoBo bo, HttpServletResponse response) {
List<XzdCbysWgcbtbFubiaoVo> list = xzdCbysWgcbtbFubiaoService.queryList(bo);
ExcelUtil.exportExcel(list, "立项及成本-成本预算-附", XzdCbysWgcbtbFubiaoVo.class, response);
}
/**
* 获取立项及成本-成本预算-附详细信息
*
* @param id 主键
*/
@SaCheckPermission("costBudget:cbysWgcbtbFubiao:query")
@GetMapping("/{id}")
public R<XzdCbysWgcbtbFubiaoVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(xzdCbysWgcbtbFubiaoService.queryById(id));
}
/**
* 新增立项及成本-成本预算-附
*/
@SaCheckPermission("costBudget:cbysWgcbtbFubiao:add")
@Log(title = "立项及成本-成本预算-附", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody XzdCbysWgcbtbFubiaoBo bo) {
return toAjax(xzdCbysWgcbtbFubiaoService.insertByBo(bo));
}
/**
* 修改立项及成本-成本预算-附
*/
@SaCheckPermission("costBudget:cbysWgcbtbFubiao:edit")
@Log(title = "立项及成本-成本预算-附", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody XzdCbysWgcbtbFubiaoBo bo) {
return toAjax(xzdCbysWgcbtbFubiaoService.updateByBo(bo));
}
/**
* 删除立项及成本-成本预算-附
*
* @param ids 主键串
*/
@SaCheckPermission("costBudget:cbysWgcbtbFubiao:remove")
@Log(title = "立项及成本-成本预算-附", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(xzdCbysWgcbtbFubiaoService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,105 @@
package org.dromara.xzd.costProjectApproval.costBudget.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysZjhcbVo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysZjhcbBo;
import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysZjhcbService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 立项及成本-成本预算-总体计划成本
*
* @author Lion Li
* @date 2025-10-17
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/costBudget/cbysZjhcb")
public class XzdCbysZjhcbController extends BaseController {
private final IXzdCbysZjhcbService xzdCbysZjhcbService;
/**
* 查询立项及成本-成本预算-总体计划成本列表
*/
@SaCheckPermission("costBudget:cbysZjhcb:list")
@GetMapping("/list")
public TableDataInfo<XzdCbysZjhcbVo> list(XzdCbysZjhcbBo bo, PageQuery pageQuery) {
return xzdCbysZjhcbService.queryPageList(bo, pageQuery);
}
/**
* 导出立项及成本-成本预算-总体计划成本列表
*/
@SaCheckPermission("costBudget:cbysZjhcb:export")
@Log(title = "立项及成本-成本预算-总体计划成本", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(XzdCbysZjhcbBo bo, HttpServletResponse response) {
List<XzdCbysZjhcbVo> list = xzdCbysZjhcbService.queryList(bo);
ExcelUtil.exportExcel(list, "立项及成本-成本预算-总体计划成本", XzdCbysZjhcbVo.class, response);
}
/**
* 获取立项及成本-成本预算-总体计划成本详细信息
*
* @param id 主键
*/
@SaCheckPermission("costBudget:cbysZjhcb:query")
@GetMapping("/{id}")
public R<XzdCbysZjhcbVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(xzdCbysZjhcbService.queryById(id));
}
/**
* 新增立项及成本-成本预算-总体计划成本
*/
@SaCheckPermission("costBudget:cbysZjhcb:add")
@Log(title = "立项及成本-成本预算-总体计划成本", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody XzdCbysZjhcbBo bo) {
return toAjax(xzdCbysZjhcbService.insertByBo(bo));
}
/**
* 修改立项及成本-成本预算-总体计划成本
*/
@SaCheckPermission("costBudget:cbysZjhcb:edit")
@Log(title = "立项及成本-成本预算-总体计划成本", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody XzdCbysZjhcbBo bo) {
return toAjax(xzdCbysZjhcbService.updateByBo(bo));
}
/**
* 删除立项及成本-成本预算-总体计划成本
*
* @param ids 主键串
*/
@SaCheckPermission("costBudget:cbysZjhcb:remove")
@Log(title = "立项及成本-成本预算-总体计划成本", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(xzdCbysZjhcbService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,105 @@
package org.dromara.xzd.costProjectApproval.costBudget.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysZtjhcbBgjlVo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysZtjhcbBgjlBo;
import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysZtjhcbBgjlService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 立项及成本-成本预算-变更记录
*
* @author Lion Li
* @date 2025-10-17
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/costBudget/cbysZtjhcbBgjl")
public class XzdCbysZtjhcbBgjlController extends BaseController {
private final IXzdCbysZtjhcbBgjlService xzdCbysZtjhcbBgjlService;
/**
* 查询立项及成本-成本预算-变更记录列表
*/
@SaCheckPermission("costBudget:cbysZtjhcbBgjl:list")
@GetMapping("/list")
public TableDataInfo<XzdCbysZtjhcbBgjlVo> list(XzdCbysZtjhcbBgjlBo bo, PageQuery pageQuery) {
return xzdCbysZtjhcbBgjlService.queryPageList(bo, pageQuery);
}
/**
* 导出立项及成本-成本预算-变更记录列表
*/
@SaCheckPermission("costBudget:cbysZtjhcbBgjl:export")
@Log(title = "立项及成本-成本预算-变更记录", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(XzdCbysZtjhcbBgjlBo bo, HttpServletResponse response) {
List<XzdCbysZtjhcbBgjlVo> list = xzdCbysZtjhcbBgjlService.queryList(bo);
ExcelUtil.exportExcel(list, "立项及成本-成本预算-变更记录", XzdCbysZtjhcbBgjlVo.class, response);
}
/**
* 获取立项及成本-成本预算-变更记录详细信息
*
* @param id 主键
*/
@SaCheckPermission("costBudget:cbysZtjhcbBgjl:query")
@GetMapping("/{id}")
public R<XzdCbysZtjhcbBgjlVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(xzdCbysZtjhcbBgjlService.queryById(id));
}
/**
* 新增立项及成本-成本预算-变更记录
*/
@SaCheckPermission("costBudget:cbysZtjhcbBgjl:add")
@Log(title = "立项及成本-成本预算-变更记录", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody XzdCbysZtjhcbBgjlBo bo) {
return toAjax(xzdCbysZtjhcbBgjlService.insertByBo(bo));
}
/**
* 修改立项及成本-成本预算-变更记录
*/
@SaCheckPermission("costBudget:cbysZtjhcbBgjl:edit")
@Log(title = "立项及成本-成本预算-变更记录", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody XzdCbysZtjhcbBgjlBo bo) {
return toAjax(xzdCbysZtjhcbBgjlService.updateByBo(bo));
}
/**
* 删除立项及成本-成本预算-变更记录
*
* @param ids 主键串
*/
@SaCheckPermission("costBudget:cbysZtjhcbBgjl:remove")
@Log(title = "立项及成本-成本预算-变更记录", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(xzdCbysZtjhcbBgjlService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,108 @@
package org.dromara.xzd.costProjectApproval.costBudget.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.io.Serial;
import java.time.LocalDate;
/**
* 立项及成本-成本预算-阶段成本分解对象 xzd_cbys_jdcbfj
*
* @author Lion Li
* @date 2025-10-17
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("xzd_cbys_jdcbfj")
public class XzdCbysJdcbfj extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 单据编码(带*,必填)
*/
private String docCode;
/**
* 单据标题(带*,必填)
*/
private String docTitle;
/**
* 单据日期
*/
private LocalDate docDate;
/**
* 工程项目
*/
private Long projectId;
/**
* 预算分类
*/
private String budgetCategory;
/**
* 总体计划成本(带*,必填)
*/
private Long totalPlanCost;
/**
* 项目责任人
*/
private Long projectLeader;
/**
* 开工日期
*/
private LocalDate startDate;
/**
* 竣工日期
*/
private LocalDate completionDate;
/**
* 年度
*/
private Long year;
/**
* 币种
*/
private String currency;
/**
* 汇率
*/
private BigDecimal exchangeRate;
/**
* 备注
*/
private String remark;
/**
* 单据引用
*/
private String documentReference;
/**
* 文件ID
*/
private String fileId;
}

View File

@ -0,0 +1,122 @@
package org.dromara.xzd.costProjectApproval.costBudget.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.io.Serial;
/**
* 立项及成本-成本预算-阶段成本分解附对象 xzd_cbys_jdcbfj_fubiao
*
* @author Lion Li
* @date 2025-10-17
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("xzd_cbys_jdcbfj_fubiao")
public class XzdCbysJdcbfjFubiao extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 主表id
*/
private Long mainTableId;
/**
* 预算项编码
*/
private String budgetItemCode;
/**
* 预算项名称
*/
private String budgetItemName;
/**
* BOQ编码
*/
private String boq;
/**
* WBS编码
*/
private String wbs;
/**
* CBS编码
*/
private String cbs;
/**
* 单位
*/
private String unit;
/**
* 数量
*/
private BigDecimal quantity;
/**
* 单价
*/
private BigDecimal unitPrice;
/**
* 金额
*/
private BigDecimal amount;
/**
* 变更数量
*/
private BigDecimal changeQuantity;
/**
* 变更金额
*/
private BigDecimal changeAmount;
/**
* 变更后数量
*/
private BigDecimal afterChangeQuantity;
/**
* 变更后单价
*/
private BigDecimal afterChangeUnitPrice;
/**
* 变更后金额
*/
private BigDecimal afterChangeAmount;
/**
* 备注
*/
private String remark;
/**
* 单据引用
*/
private String documentReference;
/**
* 文件ID
*/
private String fileId;
}

View File

@ -0,0 +1,82 @@
package org.dromara.xzd.costProjectApproval.costBudget.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.io.Serial;
/**
* 税收项明细对象 xzd_cbys_sscb
*
* @author Lion Li
* @date 2025-10-17
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("xzd_cbys_sscb")
public class XzdCbysSscb extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 关联主单据的ID外键指向对应主表如预算/付款单据表等)
*/
private Long mainDocumentId;
/**
* 税收项(带*,必填)
*/
private String taxItem;
/**
* 计税金额
*/
private BigDecimal taxableAmount;
/**
* 税率
*/
private BigDecimal taxRate;
/**
* 应纳税额
*/
private BigDecimal taxPayable;
/**
* 可抵税额
*/
private BigDecimal taxDeductible;
/**
* 应缴税额
*/
private BigDecimal taxDue;
/**
* 备注
*/
private String remark;
/**
* 单据引用
*/
private String documentReference;
/**
* 文件ID
*/
private String fileId;
}

View File

@ -0,0 +1,112 @@
package org.dromara.xzd.costProjectApproval.costBudget.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
import java.time.LocalDate;
/**
* 立项及成本-成本预算-完工成本填报对象 xzd_cbys_wgcbtb
*
* @author Lion Li
* @date 2025-10-17
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("xzd_cbys_wgcbtb")
public class XzdCbysWgcbtb extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID自增
*/
@TableId(value = "id")
private Long id;
/**
* 单据编码(带*,必填)
*/
private String docCode;
/**
* 单据标题(带*,必填)
*/
private String docTitle;
/**
* 单据日期
*/
private LocalDate docDate;
/**
* 预算分类
*/
private String budgetCategory;
/**
* 工程项目
*/
private Long projectId;
/**
* 项目责任人
*/
private Long projectLeader;
/**
* 开工日期
*/
private LocalDate startDate;
/**
* 竣工日期
*/
private LocalDate completionDate;
/**
* 年度
*/
private Integer year;
/**
* 月份
*/
private Integer month;
/**
* 统计周期
*/
private String statCycle;
/**
* 来源单据类型
*/
private String sourceDocType;
/**
* 备注
*/
private String remark;
/**
* 启用按科目属性分页签编制模式0=未启用1=启用)
*/
private Long enableAccountAttrTab;
/**
* 单据引用
*/
private String documentReference;
/**
* 文件ID
*/
private String fileId;
}

View File

@ -0,0 +1,127 @@
package org.dromara.xzd.costProjectApproval.costBudget.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.io.Serial;
/**
* 立项及成本-成本预算-附对象 xzd_cbys_wgcbtb_fubiao
*
* @author Lion Li
* @date 2025-10-17
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("xzd_cbys_wgcbtb_fubiao")
public class XzdCbysWgcbtbFubiao extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 关联单据主表的ID外键指向单据基础信息表等主表
*/
private Long mainDocId;
/**
* 类型(1、成本明细2、)
*/
private Integer type;
/**
* 预算项编码
*/
private String budgetItemCode;
/**
* 预算项标题
*/
private String budgetItemTitle;
/**
* BOQ编码
*/
private String boq;
/**
* WBS编码
*/
private String wbs;
/**
* CBS编码
*/
private String cbs;
/**
* 单位
*/
private String unit;
/**
* 单价
*/
private BigDecimal unitPrice;
/**
* 计划数量
*/
private BigDecimal planQuantity;
/**
* 累计计划数量
*/
private BigDecimal cumulativePlanQuantity;
/**
* 计划金额
*/
private BigDecimal planAmount;
/**
* 累计计划金额
*/
private BigDecimal cumulativePlanAmount;
/**
* 完工数量
*/
private BigDecimal completedQuantity;
/**
* 累计完工数量
*/
private BigDecimal cumulativeCompletedQuantity;
/**
* 完工金额
*/
private BigDecimal completedAmount;
/**
* 累计完工金额
*/
private BigDecimal cumulativeCompletedAmount;
/**
* 单据引用
*/
private String documentReference;
/**
* 文件ID
*/
private String fileId;
}

View File

@ -0,0 +1,148 @@
package org.dromara.xzd.costProjectApproval.costBudget.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.io.Serial;
import java.time.LocalDate;
/**
* 立项及成本-成本预算-总体计划成本对象 xzd_cbys_zjhcb
*
* @author Lion Li
* @date 2025-10-17
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("xzd_cbys_zjhcb")
public class XzdCbysZjhcb extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 单据编码(带*,必填)
*/
private String docCode;
/**
* 单据标题(带*,必填)
*/
private String docTitle;
/**
* 单据日期
*/
private LocalDate docDate;
/**
* 工程项目(带*,必填)
*/
private Long projectId;
/**
* 预算分类(带*,必填)
*/
private String budgetCategory;
/**
* 总不含税金额
*/
private BigDecimal totalTaxExclAmount;
/**
* 总税额
*/
private BigDecimal totalTaxAmount;
/**
* 总含税金额
*/
private BigDecimal totalTaxInclAmount;
/**
* 项目责任人
*/
private Long projectLeader;
/**
* 执行项目经理
*/
private Long execProjectManager;
/**
* 承包合同金额(带*,必填)
*/
private BigDecimal contractAmount;
/**
* 税务成本
*/
private BigDecimal taxCost;
/**
* 利润率
*/
private BigDecimal profitRate;
/**
* 利润金额
*/
private BigDecimal profitAmount;
/**
* 备注
*/
private String remark;
/**
* 启用成本预控模式0=未启用1=启用)
*/
private Long enableCostPrecontrol;
/**
* 成本控制模式如WBS+CBS
*/
private String costControlMode;
/**
* 外币含税类型
*/
private String foreignCurrencyTaxType;
/**
* 禁止标识
*/
private String forbidFlag;
/**
* 启用按科目属性分页签编制模式0=未启用1=启用)
*/
private Long enableAccountAttrTab;
/**
* 启用物料组编制模式0=未启用1=启用)
*/
private Long enableMaterialGroup;
/**
* 单据引用
*/
private String documentReference;
/**
* 文件ID
*/
private String fileId;
}

View File

@ -0,0 +1,182 @@
package org.dromara.xzd.costProjectApproval.costBudget.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.io.Serial;
/**
* 立项及成本-成本预算-总体计划成本附对象 xzd_cbys_zjhcb_fubiao
*
* @author Lion Li
* @date 2025-10-17
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("xzd_cbys_zjhcb_fubiao")
public class XzdCbysZjhcbFubiao extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 关联主单据的ID外键指向对应主表如预算/付款单据表等)
*/
private Long mainDocumentId;
/**
* 预算项编码budgetCode
*/
private String budgetCode;
/**
* 预算项名称budgetName
*/
private String budgetName;
/**
* WBS编码wbs
*/
private String wbs;
/**
* CBS编码cbs
*/
private String cbs;
/**
* 单位unit
*/
private String unit;
/**
* 数量quantity
*/
private BigDecimal quantity;
/**
* 单价unitPrice
*/
private BigDecimal unitPrice;
/**
* 含税单价taxIncludedUnitPrice
*/
private BigDecimal taxIncludedUnitPrice;
/**
* 税率taxRate如13%表示为0.1300
*/
private BigDecimal taxRate;
/**
* 税额taxAmount
*/
private BigDecimal taxAmount;
/**
* 不含税金额taxExcludedAmount
*/
private BigDecimal taxExcludedAmount;
/**
* 含税金额taxIncludedAmount
*/
private BigDecimal taxIncludedAmount;
/**
* 变更数量changeQuantity
*/
private BigDecimal changeQuantity;
/**
* 变更单价changeUnitPrice
*/
private BigDecimal changeUnitPrice;
/**
* 变更后含税单价changeTaxIncludedUnitPrice
*/
private BigDecimal changeTaxIncludedUnitPrice;
/**
* 变更税率changeTaxRate
*/
private BigDecimal changeTaxRate;
/**
* 变更税额changeTaxAmount
*/
private BigDecimal changeTaxAmount;
/**
* 变更后数量afterChangeQuantity
*/
private BigDecimal afterChangeQuantity;
/**
* 变更后单价afterChangeUnitPrice
*/
private BigDecimal afterChangeUnitPrice;
/**
* 变更后含税单价afterChangeTaxIncludedUnitPrice
*/
private BigDecimal afterChangeTaxIncludedUnitPrice;
/**
* 变更后税率afterChangeTaxRate
*/
private BigDecimal afterChangeTaxRate;
/**
* 变更后税额afterChangeTaxAmount
*/
private BigDecimal afterChangeTaxAmount;
/**
* 变更后不含税金额afterChangeTaxExcludedAmount
*/
private BigDecimal afterChangeTaxExcludedAmount;
/**
* 变更后含税金额afterChangeTaxIncludedAmount
*/
private BigDecimal afterChangeTaxIncludedAmount;
/**
* 备注remarks
*/
private String remarks;
/**
* 合同模式contractMode
*/
private String contractMode;
/**
* 中标预算收入bidBudgetIncome
*/
private BigDecimal bidBudgetIncome;
/**
* 利润率profitRate如20%表示为20.00
*/
private BigDecimal profitRate;
/**
* 附件attachment存储附件路径或关联ID
*/
private String attachment;
}

View File

@ -0,0 +1,103 @@
package org.dromara.xzd.costProjectApproval.costBudget.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.io.Serial;
import java.time.LocalDate;
/**
* 立项及成本-成本预算-变更记录对象 xzd_cbys_ztjhcb_bgjl
*
* @author Lion Li
* @date 2025-10-17
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("xzd_cbys_ztjhcb_bgjl")
public class XzdCbysZtjhcbBgjl extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 行号
*/
private Long mainDocumentId;
/**
* 附件(关联附件表可按需调整为外键)
*/
private String attachment;
/**
* 单据编码
*/
private String docCode;
/**
* 单据标题
*/
private String docTitle;
/**
* 单据日期
*/
private LocalDate docDate;
/**
* 工程项目
*/
private String projectName;
/**
* 变更根源
*/
private String changeSource;
/**
* 变更不含税金额
*/
private BigDecimal changeTaxExclAmount;
/**
* 变更含税金额
*/
private BigDecimal changeTaxInclAmount;
/**
* 核准人
*/
private String approver;
/**
* 项目责任人
*/
private String projectLeader;
/**
* 备注
*/
private String remark;
/**
* 单据引用
*/
private String documentReference;
/**
* 文件ID
*/
private String fileId;
}

View File

@ -0,0 +1,118 @@
package org.dromara.xzd.costProjectApproval.costBudget.domain.bo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysJdcbfj;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysJdcbfjFubiao;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;
/**
* 立项及成本-成本预算-阶段成本分解业务对象 xzd_cbys_jdcbfj
*
* @author Lion Li
* @date 2025-10-17
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = XzdCbysJdcbfj.class, reverseConvertGenerate = false)
public class XzdCbysJdcbfjBo extends BaseEntity {
/**
* 主键ID
*/
@NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
private Long id;
/**
* 单据编码(带*,必填)
*/
@NotBlank(message = "单据编码(带*,必填)不能为空", groups = { AddGroup.class, EditGroup.class })
private String docCode;
/**
* 单据标题(带*,必填)
*/
@NotBlank(message = "单据标题(带*,必填)不能为空", groups = { AddGroup.class, EditGroup.class })
private String docTitle;
/**
* 单据日期
*/
private LocalDate docDate;
/**
* 工程项目
*/
private Long projectId;
/**
* 预算分类
*/
private String budgetCategory;
/**
* 总体计划成本(带*,必填)
*/
@NotNull(message = "总体计划成本(带*,必填)不能为空", groups = { AddGroup.class, EditGroup.class })
private Long totalPlanCost;
/**
* 项目责任人
*/
private Long projectLeader;
/**
* 开工日期
*/
private LocalDate startDate;
/**
* 竣工日期
*/
private LocalDate completionDate;
/**
* 年度
*/
private Long year;
/**
* 币种
*/
private String currency;
/**
* 汇率
*/
private BigDecimal exchangeRate;
/**
* 备注
*/
private String remark;
/**
* 单据引用
*/
private String documentReference;
/**
* 文件ID
*/
private String fileId;
/**
* 副表数据
*/
List<XzdCbysJdcbfjFubiao> xzdCbysJdcbfjFubiao;
}

View File

@ -0,0 +1,121 @@
package org.dromara.xzd.costProjectApproval.costBudget.domain.bo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysJdcbfjFubiao;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.math.BigDecimal;
/**
* 立项及成本-成本预算-阶段成本分解附业务对象 xzd_cbys_jdcbfj_fubiao
*
* @author Lion Li
* @date 2025-10-17
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = XzdCbysJdcbfjFubiao.class, reverseConvertGenerate = false)
public class XzdCbysJdcbfjFubiaoBo extends BaseEntity {
/**
* 主键ID
*/
@NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
private Long id;
/**
* 主表id
*/
private Long mainTableId;
/**
* 预算项编码
*/
private String budgetItemCode;
/**
* 预算项名称
*/
private String budgetItemName;
/**
* BOQ编码
*/
private String boq;
/**
* WBS编码
*/
private String wbs;
/**
* CBS编码
*/
private String cbs;
/**
* 单位
*/
private String unit;
/**
* 数量
*/
private BigDecimal quantity;
/**
* 单价
*/
private BigDecimal unitPrice;
/**
* 金额
*/
private BigDecimal amount;
/**
* 变更数量
*/
private BigDecimal changeQuantity;
/**
* 变更金额
*/
private BigDecimal changeAmount;
/**
* 变更后数量
*/
private BigDecimal afterChangeQuantity;
/**
* 变更后单价
*/
private BigDecimal afterChangeUnitPrice;
/**
* 变更后金额
*/
private BigDecimal afterChangeAmount;
/**
* 备注
*/
private String remark;
/**
* 单据引用
*/
private String documentReference;
/**
* 文件ID
*/
private String fileId;
}

View File

@ -0,0 +1,82 @@
package org.dromara.xzd.costProjectApproval.costBudget.domain.bo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysSscb;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.math.BigDecimal;
/**
* 税收项明细业务对象 xzd_cbys_sscb
*
* @author Lion Li
* @date 2025-10-17
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = XzdCbysSscb.class, reverseConvertGenerate = false)
public class XzdCbysSscbBo extends BaseEntity {
/**
* 主键ID
*/
@NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
private Long id;
/**
* 关联主单据的ID外键指向对应主表如预算/付款单据表等)
*/
private Long mainDocumentId;
/**
* 税收项(带*,必填)
*/
@NotBlank(message = "税收项(带*,必填)不能为空", groups = { AddGroup.class, EditGroup.class })
private String taxItem;
/**
* 计税金额
*/
private BigDecimal taxableAmount;
/**
* 税率
*/
private BigDecimal taxRate;
/**
* 应纳税额
*/
private BigDecimal taxPayable;
/**
* 可抵税额
*/
private BigDecimal taxDeductible;
/**
* 应缴税额
*/
private BigDecimal taxDue;
/**
* 备注
*/
private String remark;
/**
* 单据引用
*/
private String documentReference;
/**
* 文件ID
*/
private String fileId;
}

View File

@ -0,0 +1,115 @@
package org.dromara.xzd.costProjectApproval.costBudget.domain.bo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysWgcbtb;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysWgcbtbFubiao;
import java.time.LocalDate;
import java.util.List;
/**
* 立项及成本-成本预算-完工成本填报业务对象 xzd_cbys_wgcbtb
*
* @author Lion Li
* @date 2025-10-17
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = XzdCbysWgcbtb.class, reverseConvertGenerate = false)
public class XzdCbysWgcbtbBo extends BaseEntity {
/**
* 主键ID自增
*/
private Long id;
/**
* 单据编码(带*,必填)
*/
private String docCode;
/**
* 单据标题(带*,必填)
*/
@NotBlank(message = "单据标题(带*,必填)不能为空", groups = { AddGroup.class, EditGroup.class })
private String docTitle;
/**
* 单据日期
*/
private LocalDate docDate;
/**
* 预算分类
*/
private String budgetCategory;
/**
* 工程项目
*/
private Long projectId;
/**
* 项目责任人
*/
private Long projectLeader;
/**
* 开工日期
*/
private LocalDate startDate;
/**
* 竣工日期
*/
private LocalDate completionDate;
/**
* 年度
*/
private Integer year;
/**
* 月份
*/
private Integer month;
/**
* 统计周期
*/
private String statCycle;
/**
* 来源单据类型
*/
private String sourceDocType;
/**
* 备注
*/
private String remark;
/**
* 启用按科目属性分页签编制模式0=未启用1=启用)
*/
private Long enableAccountAttrTab;
/**
* 单据引用
*/
private String documentReference;
/**
* 文件ID
*/
private String fileId;
private List<XzdCbysWgcbtbFubiao> xzdCbysWgcbtbFubiao;
}

View File

@ -0,0 +1,126 @@
package org.dromara.xzd.costProjectApproval.costBudget.domain.bo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysWgcbtbFubiao;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.math.BigDecimal;
/**
* 立项及成本-成本预算-附业务对象 xzd_cbys_wgcbtb_fubiao
*
* @author Lion Li
* @date 2025-10-17
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = XzdCbysWgcbtbFubiao.class, reverseConvertGenerate = false)
public class XzdCbysWgcbtbFubiaoBo extends BaseEntity {
/**
* 主键ID
*/
@NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
private Long id;
/**
* 关联单据主表的ID外键指向单据基础信息表等主表
*/
private Long mainDocId;
/**
* 类型(1、成本明细2、)
*/
private Integer type;
/**
* 预算项编码
*/
private String budgetItemCode;
/**
* 预算项标题
*/
private String budgetItemTitle;
/**
* BOQ编码
*/
private String boq;
/**
* WBS编码
*/
private String wbs;
/**
* CBS编码
*/
private String cbs;
/**
* 单位
*/
private String unit;
/**
* 单价
*/
private BigDecimal unitPrice;
/**
* 计划数量
*/
private BigDecimal planQuantity;
/**
* 累计计划数量
*/
private BigDecimal cumulativePlanQuantity;
/**
* 计划金额
*/
private BigDecimal planAmount;
/**
* 累计计划金额
*/
private BigDecimal cumulativePlanAmount;
/**
* 完工数量
*/
private BigDecimal completedQuantity;
/**
* 累计完工数量
*/
private BigDecimal cumulativeCompletedQuantity;
/**
* 完工金额
*/
private BigDecimal completedAmount;
/**
* 累计完工金额
*/
private BigDecimal cumulativeCompletedAmount;
/**
* 单据引用
*/
private String documentReference;
/**
* 文件ID
*/
private String fileId;
}

View File

@ -0,0 +1,167 @@
package org.dromara.xzd.costProjectApproval.costBudget.domain.bo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.*;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.List;
/**
* 立项及成本-成本预算-总体计划成本业务对象 xzd_cbys_zjhcb
*
* @author Lion Li
* @date 2025-10-17
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = XzdCbysZjhcb.class, reverseConvertGenerate = false)
public class XzdCbysZjhcbBo extends BaseEntity {
/**
* 主键ID
*/
@NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
private Long id;
/**
* 单据编码(带*,必填)
*/
@NotBlank(message = "单据编码(带*,必填)不能为空", groups = { EditGroup.class })
private String docCode;
/**
* 单据标题(带*,必填)
*/
@NotBlank(message = "单据标题(带*,必填)不能为空", groups = { AddGroup.class, EditGroup.class })
private String docTitle;
/**
* 单据日期
*/
private LocalDate docDate;
/**
* 工程项目(带*,必填)
*/
@NotNull(message = "工程项目(带*,必填)不能为空", groups = { AddGroup.class, EditGroup.class })
private Long projectId;
/**
* 预算分类(带*,必填)
*/
@NotBlank(message = "预算分类(带*,必填)不能为空", groups = { AddGroup.class, EditGroup.class })
private String budgetCategory;
/**
* 总不含税金额
*/
private BigDecimal totalTaxExclAmount;
/**
* 总税额
*/
private BigDecimal totalTaxAmount;
/**
* 总含税金额
*/
private BigDecimal totalTaxInclAmount;
/**
* 项目责任人
*/
private Long projectLeader;
/**
* 执行项目经理
*/
private Long execProjectManager;
/**
* 承包合同金额(带*,必填)
*/
@NotNull(message = "承包合同金额(带*,必填)不能为空", groups = { AddGroup.class, EditGroup.class })
private BigDecimal contractAmount;
/**
* 税务成本
*/
private BigDecimal taxCost;
/**
* 利润率
*/
private BigDecimal profitRate;
/**
* 利润金额
*/
private BigDecimal profitAmount;
/**
* 备注
*/
private String remark;
/**
* 启用成本预控模式0=未启用1=启用)
*/
private Long enableCostPrecontrol;
/**
* 成本控制模式如WBS+CBS
*/
private String costControlMode;
/**
* 外币含税类型
*/
private String foreignCurrencyTaxType;
/**
* 禁止标识
*/
private String forbidFlag;
/**
* 启用按科目属性分页签编制模式0=未启用1=启用)
*/
private Long enableAccountAttrTab;
/**
* 启用物料组编制模式0=未启用1=启用)
*/
private Long enableMaterialGroup;
/**
* 单据引用
*/
private String documentReference;
/**
* 文件ID
*/
private String fileId;
/**
* 变更记录
*/
List<XzdCbysZtjhcbBgjl> xzdCbysZtjhcbBgjl;
/**
* 成本明细
*/
List<XzdCbysZjhcbFubiao> xzdCbysWgcbtbFubiao;
/**
* 税收成本
*/
List<XzdCbysSscb> xzdCbysSscb;
}

View File

@ -0,0 +1,183 @@
package org.dromara.xzd.costProjectApproval.costBudget.domain.bo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysZjhcbFubiao;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.math.BigDecimal;
/**
* 立项及成本-成本预算-总体计划成本附业务对象 xzd_cbys_zjhcb_fubiao
*
* @author Lion Li
* @date 2025-10-17
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = XzdCbysZjhcbFubiao.class, reverseConvertGenerate = false)
public class XzdCbysZjhcbFubiaoBo extends BaseEntity {
/**
* 主键ID
*/
@NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
private Long id;
/**
* 关联主单据的ID外键指向对应主表如预算/付款单据表等)
*/
private Long mainDocumentId;
/**
* 预算项编码budgetCode
*/
@NotBlank(message = "预算项编码budgetCode不能为空", groups = { AddGroup.class, EditGroup.class })
private String budgetCode;
/**
* 预算项名称budgetName
*/
@NotBlank(message = "预算项名称budgetName不能为空", groups = { AddGroup.class, EditGroup.class })
private String budgetName;
/**
* WBS编码wbs
*/
private String wbs;
/**
* CBS编码cbs
*/
private String cbs;
/**
* 单位unit
*/
private String unit;
/**
* 数量quantity
*/
private BigDecimal quantity;
/**
* 单价unitPrice
*/
private BigDecimal unitPrice;
/**
* 含税单价taxIncludedUnitPrice
*/
private BigDecimal taxIncludedUnitPrice;
/**
* 税率taxRate如13%表示为0.1300
*/
private BigDecimal taxRate;
/**
* 税额taxAmount
*/
private BigDecimal taxAmount;
/**
* 不含税金额taxExcludedAmount
*/
private BigDecimal taxExcludedAmount;
/**
* 含税金额taxIncludedAmount
*/
private BigDecimal taxIncludedAmount;
/**
* 变更数量changeQuantity
*/
private BigDecimal changeQuantity;
/**
* 变更单价changeUnitPrice
*/
private BigDecimal changeUnitPrice;
/**
* 变更后含税单价changeTaxIncludedUnitPrice
*/
private BigDecimal changeTaxIncludedUnitPrice;
/**
* 变更税率changeTaxRate
*/
private BigDecimal changeTaxRate;
/**
* 变更税额changeTaxAmount
*/
private BigDecimal changeTaxAmount;
/**
* 变更后数量afterChangeQuantity
*/
private BigDecimal afterChangeQuantity;
/**
* 变更后单价afterChangeUnitPrice
*/
private BigDecimal afterChangeUnitPrice;
/**
* 变更后含税单价afterChangeTaxIncludedUnitPrice
*/
private BigDecimal afterChangeTaxIncludedUnitPrice;
/**
* 变更后税率afterChangeTaxRate
*/
private BigDecimal afterChangeTaxRate;
/**
* 变更后税额afterChangeTaxAmount
*/
private BigDecimal afterChangeTaxAmount;
/**
* 变更后不含税金额afterChangeTaxExcludedAmount
*/
private BigDecimal afterChangeTaxExcludedAmount;
/**
* 变更后含税金额afterChangeTaxIncludedAmount
*/
private BigDecimal afterChangeTaxIncludedAmount;
/**
* 备注remarks
*/
private String remarks;
/**
* 合同模式contractMode
*/
private String contractMode;
/**
* 中标预算收入bidBudgetIncome
*/
private BigDecimal bidBudgetIncome;
/**
* 利润率profitRate如20%表示为20.00
*/
private BigDecimal profitRate;
/**
* 附件attachment存储附件路径或关联ID
*/
private String attachment;
}

View File

@ -0,0 +1,99 @@
package org.dromara.xzd.costProjectApproval.costBudget.domain.bo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysZtjhcbBgjl;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.math.BigDecimal;
import java.time.LocalDate;
/**
* 立项及成本-成本预算-变更记录业务对象 xzd_cbys_ztjhcb_bgjl
*
* @author Lion Li
* @date 2025-10-17
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = XzdCbysZtjhcbBgjl.class, reverseConvertGenerate = false)
public class XzdCbysZtjhcbBgjlBo extends BaseEntity {
/**
* 主键ID
*/
@NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
private Long id;
private Long mainDocumentId;
/**
* 附件(关联附件表可按需调整为外键)
*/
private String attachment;
/**
* 单据编码
*/
private String docCode;
/**
* 单据标题
*/
private String docTitle;
/**
* 单据日期
*/
private LocalDate docDate;
/**
* 工程项目
*/
private String projectName;
/**
* 变更根源
*/
private String changeSource;
/**
* 变更不含税金额
*/
private BigDecimal changeTaxExclAmount;
/**
* 变更含税金额
*/
private BigDecimal changeTaxInclAmount;
/**
* 核准人
*/
private String approver;
/**
* 项目责任人
*/
private String projectLeader;
/**
* 备注
*/
private String remark;
/**
* 单据引用
*/
private String documentReference;
/**
* 文件ID
*/
private String fileId;
}

View File

@ -0,0 +1,147 @@
package org.dromara.xzd.costProjectApproval.costBudget.domain.vo;
import java.math.BigDecimal;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysJdcbfjFubiao;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 立项及成本-成本预算-阶段成本分解附视图对象 xzd_cbys_jdcbfj_fubiao
*
* @author Lion Li
* @date 2025-10-17
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = XzdCbysJdcbfjFubiao.class)
public class XzdCbysJdcbfjFubiaoVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long id;
/**
* 主表id
*/
@ExcelProperty(value = "主表id")
private Long mainTableId;
/**
* 预算项编码
*/
@ExcelProperty(value = "预算项编码")
private String budgetItemCode;
/**
* 预算项名称
*/
@ExcelProperty(value = "预算项名称")
private String budgetItemName;
/**
* BOQ编码
*/
@ExcelProperty(value = "BOQ编码")
private String boq;
/**
* WBS编码
*/
@ExcelProperty(value = "WBS编码")
private String wbs;
/**
* CBS编码
*/
@ExcelProperty(value = "CBS编码")
private String cbs;
/**
* 单位
*/
@ExcelProperty(value = "单位")
private String unit;
/**
* 数量
*/
@ExcelProperty(value = "数量")
private BigDecimal quantity;
/**
* 单价
*/
@ExcelProperty(value = "单价")
private BigDecimal unitPrice;
/**
* 金额
*/
@ExcelProperty(value = "金额")
private BigDecimal amount;
/**
* 变更数量
*/
@ExcelProperty(value = "变更数量")
private BigDecimal changeQuantity;
/**
* 变更金额
*/
@ExcelProperty(value = "变更金额")
private BigDecimal changeAmount;
/**
* 变更后数量
*/
@ExcelProperty(value = "变更后数量")
private BigDecimal afterChangeQuantity;
/**
* 变更后单价
*/
@ExcelProperty(value = "变更后单价")
private BigDecimal afterChangeUnitPrice;
/**
* 变更后金额
*/
@ExcelProperty(value = "变更后金额")
private BigDecimal afterChangeAmount;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 单据引用
*/
@ExcelProperty(value = "单据引用")
private String documentReference;
/**
* 文件ID
*/
@ExcelProperty(value = "文件ID")
private String fileId;
}

View File

@ -0,0 +1,142 @@
package org.dromara.xzd.costProjectApproval.costBudget.domain.vo;
import java.math.BigDecimal;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysJdcbfj;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysJdcbfjFubiao;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDate;
import java.util.Date;
import java.util.List;
/**
* 立项及成本-成本预算-阶段成本分解视图对象 xzd_cbys_jdcbfj
*
* @author Lion Li
* @date 2025-10-17
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = XzdCbysJdcbfj.class)
public class XzdCbysJdcbfjVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long id;
/**
* 单据编码(带*,必填)
*/
@ExcelProperty(value = "单据编码", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "带=*,必填")
private String docCode;
/**
* 单据标题(带*,必填)
*/
@ExcelProperty(value = "单据标题", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "带=*,必填")
private String docTitle;
/**
* 单据日期
*/
@ExcelProperty(value = "单据日期")
private LocalDate docDate;
/**
* 工程项目
*/
@ExcelProperty(value = "工程项目")
private Long projectId;
private String projectName;
/**
* 预算分类
*/
@ExcelProperty(value = "预算分类")
private String budgetCategory;
/**
* 总体计划成本(带*,必填)
*/
@ExcelProperty(value = "总体计划成本", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "带=*,必填")
private Long totalPlanCost;
private String totalPlanCostName;
/**
* 项目责任人
*/
@ExcelProperty(value = "项目责任人")
private Long projectLeader;
private String projectLeaderName;
/**
* 开工日期
*/
@ExcelProperty(value = "开工日期")
private LocalDate startDate;
/**
* 竣工日期
*/
@ExcelProperty(value = "竣工日期")
private LocalDate completionDate;
/**
* 年度
*/
@ExcelProperty(value = "年度")
private Long year;
/**
* 币种
*/
@ExcelProperty(value = "币种")
private String currency;
/**
* 汇率
*/
@ExcelProperty(value = "汇率")
private BigDecimal exchangeRate;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 单据引用
*/
@ExcelProperty(value = "单据引用")
private String documentReference;
/**
* 文件ID
*/
@ExcelProperty(value = "文件ID")
private String fileId;
/**
* 副表数据
*/
List<XzdCbysJdcbfjFubiao> xzdCbysJdcbfjFubiao;
}

View File

@ -0,0 +1,101 @@
package org.dromara.xzd.costProjectApproval.costBudget.domain.vo;
import java.math.BigDecimal;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysSscb;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 税收项明细视图对象 xzd_cbys_sscb
*
* @author Lion Li
* @date 2025-10-17
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = XzdCbysSscb.class)
public class XzdCbysSscbVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long id;
/**
* 关联主单据的ID外键指向对应主表如预算/付款单据表等)
*/
@ExcelProperty(value = "关联主单据的ID", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "外=键,指向对应主表,如预算/付款单据表等")
private Long mainDocumentId;
/**
* 税收项(带*,必填)
*/
@ExcelProperty(value = "税收项", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "带=*,必填")
private String taxItem;
/**
* 计税金额
*/
@ExcelProperty(value = "计税金额")
private BigDecimal taxableAmount;
/**
* 税率
*/
@ExcelProperty(value = "税率")
private BigDecimal taxRate;
/**
* 应纳税额
*/
@ExcelProperty(value = "应纳税额")
private BigDecimal taxPayable;
/**
* 可抵税额
*/
@ExcelProperty(value = "可抵税额")
private BigDecimal taxDeductible;
/**
* 应缴税额
*/
@ExcelProperty(value = "应缴税额")
private BigDecimal taxDue;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 单据引用
*/
@ExcelProperty(value = "单据引用")
private String documentReference;
/**
* 文件ID
*/
@ExcelProperty(value = "文件ID")
private String fileId;
}

View File

@ -0,0 +1,153 @@
package org.dromara.xzd.costProjectApproval.costBudget.domain.vo;
import java.math.BigDecimal;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysWgcbtbFubiao;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 立项及成本-成本预算-附视图对象 xzd_cbys_wgcbtb_fubiao
*
* @author Lion Li
* @date 2025-10-17
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = XzdCbysWgcbtbFubiao.class)
public class XzdCbysWgcbtbFubiaoVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long id;
/**
* 关联单据主表的ID外键指向单据基础信息表等主表
*/
@ExcelProperty(value = "关联单据主表的ID", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "外=键,指向单据基础信息表等主表")
private Long mainDocId;
/**
* 类型(1、成本明细2、)
*/
private Integer type;
/**
* 预算项编码
*/
@ExcelProperty(value = "预算项编码")
private String budgetItemCode;
/**
* 预算项标题
*/
@ExcelProperty(value = "预算项标题")
private String budgetItemTitle;
/**
* BOQ编码
*/
@ExcelProperty(value = "BOQ编码")
private String boq;
/**
* WBS编码
*/
@ExcelProperty(value = "WBS编码")
private String wbs;
/**
* CBS编码
*/
@ExcelProperty(value = "CBS编码")
private String cbs;
/**
* 单位
*/
@ExcelProperty(value = "单位")
private String unit;
/**
* 单价
*/
@ExcelProperty(value = "单价")
private BigDecimal unitPrice;
/**
* 计划数量
*/
@ExcelProperty(value = "计划数量")
private BigDecimal planQuantity;
/**
* 累计计划数量
*/
@ExcelProperty(value = "累计计划数量")
private BigDecimal cumulativePlanQuantity;
/**
* 计划金额
*/
@ExcelProperty(value = "计划金额")
private BigDecimal planAmount;
/**
* 累计计划金额
*/
@ExcelProperty(value = "累计计划金额")
private BigDecimal cumulativePlanAmount;
/**
* 完工数量
*/
@ExcelProperty(value = "完工数量")
private BigDecimal completedQuantity;
/**
* 累计完工数量
*/
@ExcelProperty(value = "累计完工数量")
private BigDecimal cumulativeCompletedQuantity;
/**
* 完工金额
*/
@ExcelProperty(value = "完工金额")
private BigDecimal completedAmount;
/**
* 累计完工金额
*/
@ExcelProperty(value = "累计完工金额")
private BigDecimal cumulativeCompletedAmount;
/**
* 单据引用
*/
@ExcelProperty(value = "单据引用")
private String documentReference;
/**
* 文件ID
*/
@ExcelProperty(value = "文件ID")
private String fileId;
}

View File

@ -0,0 +1,157 @@
package org.dromara.xzd.costProjectApproval.costBudget.domain.vo;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysWgcbtb;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysWgcbtbFubiao;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDate;
import java.util.Date;
import java.util.List;
/**
* 立项及成本-成本预算-完工成本填报视图对象 xzd_cbys_wgcbtb
*
* @author Lion Li
* @date 2025-10-17
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = XzdCbysWgcbtb.class)
public class XzdCbysWgcbtbVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID自增
*/
@ExcelProperty(value = "主键ID自增")
private Long id;
/**
* 单据编码(带*,必填)
*/
@ExcelProperty(value = "单据编码", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "带=*,必填")
private String docCode;
/**
* 单据标题(带*,必填)
*/
@ExcelProperty(value = "单据标题", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "带=*,必填")
private String docTitle;
/**
* 单据日期
*/
@ExcelProperty(value = "单据日期")
private LocalDate docDate;
/**
* 预算分类
*/
@ExcelProperty(value = "预算分类")
private String budgetCategory;
/**
* 工程项目
*/
@ExcelProperty(value = "工程项目")
private Long projectId;
/**
* 工程项目名称
*/
@ExcelProperty(value = "工程项目名称")
private String projectName;
/**
* 项目责任人
*/
@ExcelProperty(value = "项目责任人")
private Long projectLeader;
/**
* 项目责任人名称
*/
@ExcelProperty(value = "项目责任人名称")
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "projectLeader")
private String projectLeaderName;
/**
* 开工日期
*/
@ExcelProperty(value = "开工日期")
private LocalDate startDate;
/**
* 竣工日期
*/
@ExcelProperty(value = "竣工日期")
private LocalDate completionDate;
/**
* 年度
*/
@ExcelProperty(value = "年度")
private Integer year;
/**
* 月份
*/
@ExcelProperty(value = "月份")
private Integer month;
/**
* 统计周期
*/
@ExcelProperty(value = "统计周期")
private String statCycle;
/**
* 来源单据类型
*/
@ExcelProperty(value = "来源单据类型")
private String sourceDocType;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 启用按科目属性分页签编制模式0=未启用1=启用)
*/
@ExcelProperty(value = "启用按科目属性分页签编制模式", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "0==未启用1=启用")
private Long enableAccountAttrTab;
/**
* 单据引用
*/
@ExcelProperty(value = "单据引用")
private String documentReference;
/**
* 文件ID
*/
@ExcelProperty(value = "文件ID")
private String fileId;
private List<XzdCbysWgcbtbFubiao> xzdCbysWgcbtbFubiao;
}

View File

@ -0,0 +1,247 @@
package org.dromara.xzd.costProjectApproval.costBudget.domain.vo;
import java.math.BigDecimal;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysZjhcbFubiao;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 立项及成本-成本预算-总体计划成本附视图对象 xzd_cbys_zjhcb_fubiao
*
* @author Lion Li
* @date 2025-10-17
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = XzdCbysZjhcbFubiao.class)
public class XzdCbysZjhcbFubiaoVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long id;
/**
* 关联主单据的ID外键指向对应主表如预算/付款单据表等)
*/
private Long mainDocumentId;
/**
* 预算项编码budgetCode
*/
@ExcelProperty(value = "预算项编码", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "b=udgetCode")
private String budgetCode;
/**
* 预算项名称budgetName
*/
@ExcelProperty(value = "预算项名称", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "b=udgetName")
private String budgetName;
/**
* WBS编码wbs
*/
@ExcelProperty(value = "WBS编码", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "w=bs")
private String wbs;
/**
* CBS编码cbs
*/
@ExcelProperty(value = "CBS编码", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "c=bs")
private String cbs;
/**
* 单位unit
*/
@ExcelProperty(value = "单位", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "u=nit")
private String unit;
/**
* 数量quantity
*/
@ExcelProperty(value = "数量", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "q=uantity")
private BigDecimal quantity;
/**
* 单价unitPrice
*/
@ExcelProperty(value = "单价", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "u=nitPrice")
private BigDecimal unitPrice;
/**
* 含税单价taxIncludedUnitPrice
*/
@ExcelProperty(value = "含税单价", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "t=axIncludedUnitPrice")
private BigDecimal taxIncludedUnitPrice;
/**
* 税率taxRate如13%表示为0.1300
*/
@ExcelProperty(value = "税率", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "t=axRate如13%表示为0.1300")
private BigDecimal taxRate;
/**
* 税额taxAmount
*/
@ExcelProperty(value = "税额", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "t=axAmount")
private BigDecimal taxAmount;
/**
* 不含税金额taxExcludedAmount
*/
@ExcelProperty(value = "不含税金额", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "t=axExcludedAmount")
private BigDecimal taxExcludedAmount;
/**
* 含税金额taxIncludedAmount
*/
@ExcelProperty(value = "含税金额", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "t=axIncludedAmount")
private BigDecimal taxIncludedAmount;
/**
* 变更数量changeQuantity
*/
@ExcelProperty(value = "变更数量", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "c=hangeQuantity")
private BigDecimal changeQuantity;
/**
* 变更单价changeUnitPrice
*/
@ExcelProperty(value = "变更单价", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "c=hangeUnitPrice")
private BigDecimal changeUnitPrice;
/**
* 变更后含税单价changeTaxIncludedUnitPrice
*/
@ExcelProperty(value = "变更后含税单价", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "c=hangeTaxIncludedUnitPrice")
private BigDecimal changeTaxIncludedUnitPrice;
/**
* 变更税率changeTaxRate
*/
@ExcelProperty(value = "变更税率", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "c=hangeTaxRate")
private BigDecimal changeTaxRate;
/**
* 变更税额changeTaxAmount
*/
@ExcelProperty(value = "变更税额", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "c=hangeTaxAmount")
private BigDecimal changeTaxAmount;
/**
* 变更后数量afterChangeQuantity
*/
@ExcelProperty(value = "变更后数量", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "a=fterChangeQuantity")
private BigDecimal afterChangeQuantity;
/**
* 变更后单价afterChangeUnitPrice
*/
@ExcelProperty(value = "变更后单价", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "a=fterChangeUnitPrice")
private BigDecimal afterChangeUnitPrice;
/**
* 变更后含税单价afterChangeTaxIncludedUnitPrice
*/
@ExcelProperty(value = "变更后含税单价", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "a=fterChangeTaxIncludedUnitPrice")
private BigDecimal afterChangeTaxIncludedUnitPrice;
/**
* 变更后税率afterChangeTaxRate
*/
@ExcelProperty(value = "变更后税率", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "a=fterChangeTaxRate")
private BigDecimal afterChangeTaxRate;
/**
* 变更后税额afterChangeTaxAmount
*/
@ExcelProperty(value = "变更后税额", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "a=fterChangeTaxAmount")
private BigDecimal afterChangeTaxAmount;
/**
* 变更后不含税金额afterChangeTaxExcludedAmount
*/
@ExcelProperty(value = "变更后不含税金额", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "a=fterChangeTaxExcludedAmount")
private BigDecimal afterChangeTaxExcludedAmount;
/**
* 变更后含税金额afterChangeTaxIncludedAmount
*/
@ExcelProperty(value = "变更后含税金额", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "a=fterChangeTaxIncludedAmount")
private BigDecimal afterChangeTaxIncludedAmount;
/**
* 备注remarks
*/
@ExcelProperty(value = "备注", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "r=emarks")
private String remarks;
/**
* 合同模式contractMode
*/
@ExcelProperty(value = "合同模式", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "c=ontractMode")
private String contractMode;
/**
* 中标预算收入bidBudgetIncome
*/
@ExcelProperty(value = "中标预算收入", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "b=idBudgetIncome")
private BigDecimal bidBudgetIncome;
/**
* 利润率profitRate如20%表示为20.00
*/
@ExcelProperty(value = "利润率", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "p=rofitRate如20%表示为20.00")
private BigDecimal profitRate;
/**
* 附件attachment存储附件路径或关联ID
*/
@ExcelProperty(value = "附件", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "a=ttachment存储附件路径或关联ID")
private String attachment;
}

View File

@ -0,0 +1,205 @@
package org.dromara.xzd.costProjectApproval.costBudget.domain.vo;
import java.math.BigDecimal;
import org.dromara.xzd.costProjectApproval.costBudget.domain.*;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDate;
import java.util.Date;
import java.util.List;
/**
* 立项及成本-成本预算-总体计划成本视图对象 xzd_cbys_zjhcb
*
* @author Lion Li
* @date 2025-10-17
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = XzdCbysZjhcb.class)
public class XzdCbysZjhcbVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long id;
/**
* 单据编码(带*,必填)
*/
@ExcelProperty(value = "单据编码", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "带=*,必填")
private String docCode;
/**
* 单据标题(带*,必填)
*/
@ExcelProperty(value = "单据标题", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "带=*,必填")
private String docTitle;
/**
* 单据日期
*/
@ExcelProperty(value = "单据日期")
private LocalDate docDate;
/**
* 工程项目(带*,必填)
*/
@ExcelProperty(value = "工程项目", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "带=*,必填")
private Long projectId;
private String projectName;
/**
* 预算分类(带*,必填)
*/
@ExcelProperty(value = "预算分类", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "带=*,必填")
private String budgetCategory;
/**
* 总不含税金额
*/
@ExcelProperty(value = "总不含税金额")
private BigDecimal totalTaxExclAmount;
/**
* 总税额
*/
@ExcelProperty(value = "总税额")
private BigDecimal totalTaxAmount;
/**
* 总含税金额
*/
@ExcelProperty(value = "总含税金额")
private BigDecimal totalTaxInclAmount;
/**
* 项目责任人
*/
@ExcelProperty(value = "项目责任人")
private Long projectLeader;
private String projectLeaderName;
/**
* 执行项目经理
*/
@ExcelProperty(value = "执行项目经理")
private Long execProjectManager;
private String execProjectManagerName;
/**
* 承包合同金额(带*,必填)
*/
@ExcelProperty(value = "承包合同金额", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "带=*,必填")
private BigDecimal contractAmount;
/**
* 税务成本
*/
@ExcelProperty(value = "税务成本")
private BigDecimal taxCost;
/**
* 利润率
*/
@ExcelProperty(value = "利润率")
private BigDecimal profitRate;
/**
* 利润金额
*/
@ExcelProperty(value = "利润金额")
private BigDecimal profitAmount;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 启用成本预控模式0=未启用1=启用)
*/
@ExcelProperty(value = "启用成本预控模式", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "0==未启用1=启用")
private Long enableCostPrecontrol;
/**
* 成本控制模式如WBS+CBS
*/
@ExcelProperty(value = "成本控制模式", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "如=WBS+CBS")
private String costControlMode;
/**
* 外币含税类型
*/
@ExcelProperty(value = "外币含税类型")
private String foreignCurrencyTaxType;
/**
* 禁止标识
*/
@ExcelProperty(value = "禁止标识")
private String forbidFlag;
/**
* 启用按科目属性分页签编制模式0=未启用1=启用)
*/
@ExcelProperty(value = "启用按科目属性分页签编制模式", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "0==未启用1=启用")
private Long enableAccountAttrTab;
/**
* 启用物料组编制模式0=未启用1=启用)
*/
@ExcelProperty(value = "启用物料组编制模式", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "0==未启用1=启用")
private Long enableMaterialGroup;
/**
* 单据引用
*/
@ExcelProperty(value = "单据引用")
private String documentReference;
/**
* 文件ID
*/
@ExcelProperty(value = "文件ID")
private String fileId;
/**
* 变更记录
*/
List<XzdCbysZtjhcbBgjl> xzdCbysZtjhcbBgjl;
/**
* 成本明细
*/
List<XzdCbysZjhcbFubiao> xzdCbysWgcbtbFubiao;
/**
* 税收成本
*/
List<XzdCbysSscb> xzdCbysSscb;
}

View File

@ -0,0 +1,121 @@
package org.dromara.xzd.costProjectApproval.costBudget.domain.vo;
import java.math.BigDecimal;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysZtjhcbBgjl;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDate;
import java.util.Date;
/**
* 立项及成本-成本预算-变更记录视图对象 xzd_cbys_ztjhcb_bgjl
*
* @author Lion Li
* @date 2025-10-17
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = XzdCbysZtjhcbBgjl.class)
public class XzdCbysZtjhcbBgjlVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long id;
private Long mainDocumentId;
/**
* 附件(关联附件表可按需调整为外键)
*/
@ExcelProperty(value = "附件", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "关=联附件表可按需调整为外键")
private String attachment;
/**
* 单据编码
*/
@ExcelProperty(value = "单据编码")
private String docCode;
/**
* 单据标题
*/
@ExcelProperty(value = "单据标题")
private String docTitle;
/**
* 单据日期
*/
@ExcelProperty(value = "单据日期")
private LocalDate docDate;
/**
* 工程项目
*/
@ExcelProperty(value = "工程项目")
private String projectName;
/**
* 变更根源
*/
@ExcelProperty(value = "变更根源")
private String changeSource;
/**
* 变更不含税金额
*/
@ExcelProperty(value = "变更不含税金额")
private BigDecimal changeTaxExclAmount;
/**
* 变更含税金额
*/
@ExcelProperty(value = "变更含税金额")
private BigDecimal changeTaxInclAmount;
/**
* 核准人
*/
@ExcelProperty(value = "核准人")
private String approver;
/**
* 项目责任人
*/
@ExcelProperty(value = "项目责任人")
private String projectLeader;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 单据引用
*/
@ExcelProperty(value = "单据引用")
private String documentReference;
/**
* 文件ID
*/
@ExcelProperty(value = "文件ID")
private String fileId;
}

View File

@ -0,0 +1,15 @@
package org.dromara.xzd.costProjectApproval.costBudget.mapper;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysJdcbfjFubiao;
import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysJdcbfjFubiaoVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 立项及成本-成本预算-阶段成本分解附Mapper接口
*
* @author Lion Li
* @date 2025-10-17
*/
public interface XzdCbysJdcbfjFubiaoMapper extends BaseMapperPlus<XzdCbysJdcbfjFubiao, XzdCbysJdcbfjFubiaoVo> {
}

View File

@ -0,0 +1,15 @@
package org.dromara.xzd.costProjectApproval.costBudget.mapper;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysJdcbfj;
import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysJdcbfjVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 立项及成本-成本预算-阶段成本分解Mapper接口
*
* @author Lion Li
* @date 2025-10-17
*/
public interface XzdCbysJdcbfjMapper extends BaseMapperPlus<XzdCbysJdcbfj, XzdCbysJdcbfjVo> {
}

View File

@ -0,0 +1,15 @@
package org.dromara.xzd.costProjectApproval.costBudget.mapper;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysSscb;
import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysSscbVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 税收项明细Mapper接口
*
* @author Lion Li
* @date 2025-10-17
*/
public interface XzdCbysSscbMapper extends BaseMapperPlus<XzdCbysSscb, XzdCbysSscbVo> {
}

View File

@ -0,0 +1,15 @@
package org.dromara.xzd.costProjectApproval.costBudget.mapper;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysWgcbtbFubiao;
import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysWgcbtbFubiaoVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 立项及成本-成本预算-附Mapper接口
*
* @author Lion Li
* @date 2025-10-17
*/
public interface XzdCbysWgcbtbFubiaoMapper extends BaseMapperPlus<XzdCbysWgcbtbFubiao, XzdCbysWgcbtbFubiaoVo> {
}

View File

@ -0,0 +1,15 @@
package org.dromara.xzd.costProjectApproval.costBudget.mapper;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysWgcbtb;
import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysWgcbtbVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 立项及成本-成本预算-完工成本填报Mapper接口
*
* @author Lion Li
* @date 2025-10-17
*/
public interface XzdCbysWgcbtbMapper extends BaseMapperPlus<XzdCbysWgcbtb, XzdCbysWgcbtbVo> {
}

View File

@ -0,0 +1,15 @@
package org.dromara.xzd.costProjectApproval.costBudget.mapper;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysZjhcbFubiao;
import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysZjhcbFubiaoVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 立项及成本-成本预算-总体计划成本附Mapper接口
*
* @author Lion Li
* @date 2025-10-17
*/
public interface XzdCbysZjhcbFubiaoMapper extends BaseMapperPlus<XzdCbysZjhcbFubiao, XzdCbysZjhcbFubiaoVo> {
}

View File

@ -0,0 +1,15 @@
package org.dromara.xzd.costProjectApproval.costBudget.mapper;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysZjhcb;
import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysZjhcbVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 立项及成本-成本预算-总体计划成本Mapper接口
*
* @author Lion Li
* @date 2025-10-17
*/
public interface XzdCbysZjhcbMapper extends BaseMapperPlus<XzdCbysZjhcb, XzdCbysZjhcbVo> {
}

View File

@ -0,0 +1,15 @@
package org.dromara.xzd.costProjectApproval.costBudget.mapper;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysZtjhcbBgjl;
import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysZtjhcbBgjlVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 立项及成本-成本预算-变更记录Mapper接口
*
* @author Lion Li
* @date 2025-10-17
*/
public interface XzdCbysZtjhcbBgjlMapper extends BaseMapperPlus<XzdCbysZtjhcbBgjl, XzdCbysZtjhcbBgjlVo> {
}

View File

@ -0,0 +1,70 @@
package org.dromara.xzd.costProjectApproval.costBudget.service;
import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysJdcbfjFubiaoVo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysJdcbfjFubiaoBo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysJdcbfjFubiao;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Collection;
import java.util.List;
/**
* 立项及成本-成本预算-阶段成本分解附Service接口
*
* @author Lion Li
* @date 2025-10-17
*/
public interface IXzdCbysJdcbfjFubiaoService extends IService<XzdCbysJdcbfjFubiao>{
/**
* 查询立项及成本-成本预算-阶段成本分解附
*
* @param id 主键
* @return 立项及成本-成本预算-阶段成本分解附
*/
XzdCbysJdcbfjFubiaoVo queryById(Long id);
/**
* 分页查询立项及成本-成本预算-阶段成本分解附列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 立项及成本-成本预算-阶段成本分解附分页列表
*/
TableDataInfo<XzdCbysJdcbfjFubiaoVo> queryPageList(XzdCbysJdcbfjFubiaoBo bo, PageQuery pageQuery);
/**
* 查询符合条件的立项及成本-成本预算-阶段成本分解附列表
*
* @param bo 查询条件
* @return 立项及成本-成本预算-阶段成本分解附列表
*/
List<XzdCbysJdcbfjFubiaoVo> queryList(XzdCbysJdcbfjFubiaoBo bo);
/**
* 新增立项及成本-成本预算-阶段成本分解附
*
* @param bo 立项及成本-成本预算-阶段成本分解附
* @return 是否新增成功
*/
Boolean insertByBo(XzdCbysJdcbfjFubiaoBo bo);
/**
* 修改立项及成本-成本预算-阶段成本分解附
*
* @param bo 立项及成本-成本预算-阶段成本分解附
* @return 是否修改成功
*/
Boolean updateByBo(XzdCbysJdcbfjFubiaoBo bo);
/**
* 校验并批量删除立项及成本-成本预算-阶段成本分解附信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@ -0,0 +1,70 @@
package org.dromara.xzd.costProjectApproval.costBudget.service;
import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysJdcbfjVo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysJdcbfjBo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysJdcbfj;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Collection;
import java.util.List;
/**
* 立项及成本-成本预算-阶段成本分解Service接口
*
* @author Lion Li
* @date 2025-10-17
*/
public interface IXzdCbysJdcbfjService extends IService<XzdCbysJdcbfj>{
/**
* 查询立项及成本-成本预算-阶段成本分解
*
* @param id 主键
* @return 立项及成本-成本预算-阶段成本分解
*/
XzdCbysJdcbfjVo queryById(Long id);
/**
* 分页查询立项及成本-成本预算-阶段成本分解列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 立项及成本-成本预算-阶段成本分解分页列表
*/
TableDataInfo<XzdCbysJdcbfjVo> queryPageList(XzdCbysJdcbfjBo bo, PageQuery pageQuery);
/**
* 查询符合条件的立项及成本-成本预算-阶段成本分解列表
*
* @param bo 查询条件
* @return 立项及成本-成本预算-阶段成本分解列表
*/
List<XzdCbysJdcbfjVo> queryList(XzdCbysJdcbfjBo bo);
/**
* 新增立项及成本-成本预算-阶段成本分解
*
* @param bo 立项及成本-成本预算-阶段成本分解
* @return 是否新增成功
*/
Boolean insertByBo(XzdCbysJdcbfjBo bo);
/**
* 修改立项及成本-成本预算-阶段成本分解
*
* @param bo 立项及成本-成本预算-阶段成本分解
* @return 是否修改成功
*/
Boolean updateByBo(XzdCbysJdcbfjBo bo);
/**
* 校验并批量删除立项及成本-成本预算-阶段成本分解信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@ -0,0 +1,70 @@
package org.dromara.xzd.costProjectApproval.costBudget.service;
import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysSscbVo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysSscbBo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysSscb;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Collection;
import java.util.List;
/**
* 税收项明细Service接口
*
* @author Lion Li
* @date 2025-10-17
*/
public interface IXzdCbysSscbService extends IService<XzdCbysSscb>{
/**
* 查询税收项明细
*
* @param id 主键
* @return 税收项明细
*/
XzdCbysSscbVo queryById(Long id);
/**
* 分页查询税收项明细列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 税收项明细分页列表
*/
TableDataInfo<XzdCbysSscbVo> queryPageList(XzdCbysSscbBo bo, PageQuery pageQuery);
/**
* 查询符合条件的税收项明细列表
*
* @param bo 查询条件
* @return 税收项明细列表
*/
List<XzdCbysSscbVo> queryList(XzdCbysSscbBo bo);
/**
* 新增税收项明细
*
* @param bo 税收项明细
* @return 是否新增成功
*/
Boolean insertByBo(XzdCbysSscbBo bo);
/**
* 修改税收项明细
*
* @param bo 税收项明细
* @return 是否修改成功
*/
Boolean updateByBo(XzdCbysSscbBo bo);
/**
* 校验并批量删除税收项明细信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@ -0,0 +1,70 @@
package org.dromara.xzd.costProjectApproval.costBudget.service;
import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysWgcbtbFubiaoVo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysWgcbtbFubiaoBo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysWgcbtbFubiao;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Collection;
import java.util.List;
/**
* 立项及成本-成本预算-附Service接口
*
* @author Lion Li
* @date 2025-10-17
*/
public interface IXzdCbysWgcbtbFubiaoService extends IService<XzdCbysWgcbtbFubiao>{
/**
* 查询立项及成本-成本预算-附
*
* @param id 主键
* @return 立项及成本-成本预算-附
*/
XzdCbysWgcbtbFubiaoVo queryById(Long id);
/**
* 分页查询立项及成本-成本预算-附列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 立项及成本-成本预算-附分页列表
*/
TableDataInfo<XzdCbysWgcbtbFubiaoVo> queryPageList(XzdCbysWgcbtbFubiaoBo bo, PageQuery pageQuery);
/**
* 查询符合条件的立项及成本-成本预算-附列表
*
* @param bo 查询条件
* @return 立项及成本-成本预算-附列表
*/
List<XzdCbysWgcbtbFubiaoVo> queryList(XzdCbysWgcbtbFubiaoBo bo);
/**
* 新增立项及成本-成本预算-附
*
* @param bo 立项及成本-成本预算-附
* @return 是否新增成功
*/
Boolean insertByBo(XzdCbysWgcbtbFubiaoBo bo);
/**
* 修改立项及成本-成本预算-附
*
* @param bo 立项及成本-成本预算-附
* @return 是否修改成功
*/
Boolean updateByBo(XzdCbysWgcbtbFubiaoBo bo);
/**
* 校验并批量删除立项及成本-成本预算-附信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@ -0,0 +1,70 @@
package org.dromara.xzd.costProjectApproval.costBudget.service;
import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysWgcbtbVo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysWgcbtbBo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysWgcbtb;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Collection;
import java.util.List;
/**
* 立项及成本-成本预算-完工成本填报Service接口
*
* @author Lion Li
* @date 2025-10-17
*/
public interface IXzdCbysWgcbtbService extends IService<XzdCbysWgcbtb>{
/**
* 查询立项及成本-成本预算-完工成本填报
*
* @param id 主键
* @return 立项及成本-成本预算-完工成本填报
*/
XzdCbysWgcbtbVo queryById(Long id);
/**
* 分页查询立项及成本-成本预算-完工成本填报列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 立项及成本-成本预算-完工成本填报分页列表
*/
TableDataInfo<XzdCbysWgcbtbVo> queryPageList(XzdCbysWgcbtbBo bo, PageQuery pageQuery);
/**
* 查询符合条件的立项及成本-成本预算-完工成本填报列表
*
* @param bo 查询条件
* @return 立项及成本-成本预算-完工成本填报列表
*/
List<XzdCbysWgcbtbVo> queryList(XzdCbysWgcbtbBo bo);
/**
* 新增立项及成本-成本预算-完工成本填报
*
* @param bo 立项及成本-成本预算-完工成本填报
* @return 是否新增成功
*/
Boolean insertByBo(XzdCbysWgcbtbBo bo);
/**
* 修改立项及成本-成本预算-完工成本填报
*
* @param bo 立项及成本-成本预算-完工成本填报
* @return 是否修改成功
*/
Boolean updateByBo(XzdCbysWgcbtbBo bo);
/**
* 校验并批量删除立项及成本-成本预算-完工成本填报信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@ -0,0 +1,70 @@
package org.dromara.xzd.costProjectApproval.costBudget.service;
import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysZjhcbFubiaoVo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysZjhcbFubiaoBo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysZjhcbFubiao;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Collection;
import java.util.List;
/**
* 立项及成本-成本预算-总体计划成本附Service接口
*
* @author Lion Li
* @date 2025-10-17
*/
public interface IXzdCbysZjhcbFubiaoService extends IService<XzdCbysZjhcbFubiao>{
/**
* 查询立项及成本-成本预算-总体计划成本附
*
* @param id 主键
* @return 立项及成本-成本预算-总体计划成本附
*/
XzdCbysZjhcbFubiaoVo queryById(Long id);
/**
* 分页查询立项及成本-成本预算-总体计划成本附列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 立项及成本-成本预算-总体计划成本附分页列表
*/
TableDataInfo<XzdCbysZjhcbFubiaoVo> queryPageList(XzdCbysZjhcbFubiaoBo bo, PageQuery pageQuery);
/**
* 查询符合条件的立项及成本-成本预算-总体计划成本附列表
*
* @param bo 查询条件
* @return 立项及成本-成本预算-总体计划成本附列表
*/
List<XzdCbysZjhcbFubiaoVo> queryList(XzdCbysZjhcbFubiaoBo bo);
/**
* 新增立项及成本-成本预算-总体计划成本附
*
* @param bo 立项及成本-成本预算-总体计划成本附
* @return 是否新增成功
*/
Boolean insertByBo(XzdCbysZjhcbFubiaoBo bo);
/**
* 修改立项及成本-成本预算-总体计划成本附
*
* @param bo 立项及成本-成本预算-总体计划成本附
* @return 是否修改成功
*/
Boolean updateByBo(XzdCbysZjhcbFubiaoBo bo);
/**
* 校验并批量删除立项及成本-成本预算-总体计划成本附信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@ -0,0 +1,72 @@
package org.dromara.xzd.costProjectApproval.costBudget.service;
import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysZjhcbVo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysZjhcbBo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysZjhcb;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Collection;
import java.util.List;
/**
* 立项及成本-成本预算-总体计划成本Service接口
*
* @author Lion Li
* @date 2025-10-17
*/
public interface IXzdCbysZjhcbService extends IService<XzdCbysZjhcb>{
/**
* 查询立项及成本-成本预算-总体计划成本
*
* @param id 主键
* @return 立项及成本-成本预算-总体计划成本
*/
XzdCbysZjhcbVo queryById(Long id);
/**
* 分页查询立项及成本-成本预算-总体计划成本列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 立项及成本-成本预算-总体计划成本分页列表
*/
TableDataInfo<XzdCbysZjhcbVo> queryPageList(XzdCbysZjhcbBo bo, PageQuery pageQuery);
/**
* 查询符合条件的立项及成本-成本预算-总体计划成本列表
*
* @param bo 查询条件
* @return 立项及成本-成本预算-总体计划成本列表
*/
List<XzdCbysZjhcbVo> queryList(XzdCbysZjhcbBo bo);
/**
* 新增立项及成本-成本预算-总体计划成本
*
* @param bo 立项及成本-成本预算-总体计划成本
* @return 是否新增成功
*/
Boolean insertByBo(XzdCbysZjhcbBo bo);
/**
* 修改立项及成本-成本预算-总体计划成本
*
* @param bo 立项及成本-成本预算-总体计划成本
* @return 是否修改成功
*/
Boolean updateByBo(XzdCbysZjhcbBo bo);
/**
* 校验并批量删除立项及成本-成本预算-总体计划成本信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
String queryNameById(Long id);
}

View File

@ -0,0 +1,70 @@
package org.dromara.xzd.costProjectApproval.costBudget.service;
import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysZtjhcbBgjlVo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysZtjhcbBgjlBo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysZtjhcbBgjl;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Collection;
import java.util.List;
/**
* 立项及成本-成本预算-变更记录Service接口
*
* @author Lion Li
* @date 2025-10-17
*/
public interface IXzdCbysZtjhcbBgjlService extends IService<XzdCbysZtjhcbBgjl>{
/**
* 查询立项及成本-成本预算-变更记录
*
* @param id 主键
* @return 立项及成本-成本预算-变更记录
*/
XzdCbysZtjhcbBgjlVo queryById(Long id);
/**
* 分页查询立项及成本-成本预算-变更记录列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 立项及成本-成本预算-变更记录分页列表
*/
TableDataInfo<XzdCbysZtjhcbBgjlVo> queryPageList(XzdCbysZtjhcbBgjlBo bo, PageQuery pageQuery);
/**
* 查询符合条件的立项及成本-成本预算-变更记录列表
*
* @param bo 查询条件
* @return 立项及成本-成本预算-变更记录列表
*/
List<XzdCbysZtjhcbBgjlVo> queryList(XzdCbysZtjhcbBgjlBo bo);
/**
* 新增立项及成本-成本预算-变更记录
*
* @param bo 立项及成本-成本预算-变更记录
* @return 是否新增成功
*/
Boolean insertByBo(XzdCbysZtjhcbBgjlBo bo);
/**
* 修改立项及成本-成本预算-变更记录
*
* @param bo 立项及成本-成本预算-变更记录
* @return 是否修改成功
*/
Boolean updateByBo(XzdCbysZtjhcbBgjlBo bo);
/**
* 校验并批量删除立项及成本-成本预算-变更记录信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@ -0,0 +1,147 @@
package org.dromara.xzd.costProjectApproval.costBudget.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysJdcbfjFubiaoBo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysJdcbfjFubiaoVo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysJdcbfjFubiao;
import org.dromara.xzd.costProjectApproval.costBudget.mapper.XzdCbysJdcbfjFubiaoMapper;
import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysJdcbfjFubiaoService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 立项及成本-成本预算-阶段成本分解附Service业务层处理
*
* @author Lion Li
* @date 2025-10-17
*/
@RequiredArgsConstructor
@Service
public class XzdCbysJdcbfjFubiaoServiceImpl extends ServiceImpl<XzdCbysJdcbfjFubiaoMapper, XzdCbysJdcbfjFubiao> implements IXzdCbysJdcbfjFubiaoService {
private final XzdCbysJdcbfjFubiaoMapper baseMapper;
/**
* 查询立项及成本-成本预算-阶段成本分解附
*
* @param id 主键
* @return 立项及成本-成本预算-阶段成本分解附
*/
@Override
public XzdCbysJdcbfjFubiaoVo queryById(Long id){
return baseMapper.selectVoById(id);
}
/**
* 分页查询立项及成本-成本预算-阶段成本分解附列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 立项及成本-成本预算-阶段成本分解附分页列表
*/
@Override
public TableDataInfo<XzdCbysJdcbfjFubiaoVo> queryPageList(XzdCbysJdcbfjFubiaoBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<XzdCbysJdcbfjFubiao> lqw = buildQueryWrapper(bo);
Page<XzdCbysJdcbfjFubiaoVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的立项及成本-成本预算-阶段成本分解附列表
*
* @param bo 查询条件
* @return 立项及成本-成本预算-阶段成本分解附列表
*/
@Override
public List<XzdCbysJdcbfjFubiaoVo> queryList(XzdCbysJdcbfjFubiaoBo bo) {
LambdaQueryWrapper<XzdCbysJdcbfjFubiao> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<XzdCbysJdcbfjFubiao> buildQueryWrapper(XzdCbysJdcbfjFubiaoBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<XzdCbysJdcbfjFubiao> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(XzdCbysJdcbfjFubiao::getId);
lqw.eq(bo.getMainTableId() != null, XzdCbysJdcbfjFubiao::getMainTableId, bo.getMainTableId());
lqw.eq(StringUtils.isNotBlank(bo.getBudgetItemCode()), XzdCbysJdcbfjFubiao::getBudgetItemCode, bo.getBudgetItemCode());
lqw.like(StringUtils.isNotBlank(bo.getBudgetItemName()), XzdCbysJdcbfjFubiao::getBudgetItemName, bo.getBudgetItemName());
lqw.eq(StringUtils.isNotBlank(bo.getBoq()), XzdCbysJdcbfjFubiao::getBoq, bo.getBoq());
lqw.eq(StringUtils.isNotBlank(bo.getWbs()), XzdCbysJdcbfjFubiao::getWbs, bo.getWbs());
lqw.eq(StringUtils.isNotBlank(bo.getCbs()), XzdCbysJdcbfjFubiao::getCbs, bo.getCbs());
lqw.eq(StringUtils.isNotBlank(bo.getUnit()), XzdCbysJdcbfjFubiao::getUnit, bo.getUnit());
lqw.eq(bo.getQuantity() != null, XzdCbysJdcbfjFubiao::getQuantity, bo.getQuantity());
lqw.eq(bo.getUnitPrice() != null, XzdCbysJdcbfjFubiao::getUnitPrice, bo.getUnitPrice());
lqw.eq(bo.getAmount() != null, XzdCbysJdcbfjFubiao::getAmount, bo.getAmount());
lqw.eq(bo.getChangeQuantity() != null, XzdCbysJdcbfjFubiao::getChangeQuantity, bo.getChangeQuantity());
lqw.eq(bo.getChangeAmount() != null, XzdCbysJdcbfjFubiao::getChangeAmount, bo.getChangeAmount());
lqw.eq(bo.getAfterChangeQuantity() != null, XzdCbysJdcbfjFubiao::getAfterChangeQuantity, bo.getAfterChangeQuantity());
lqw.eq(bo.getAfterChangeUnitPrice() != null, XzdCbysJdcbfjFubiao::getAfterChangeUnitPrice, bo.getAfterChangeUnitPrice());
lqw.eq(bo.getAfterChangeAmount() != null, XzdCbysJdcbfjFubiao::getAfterChangeAmount, bo.getAfterChangeAmount());
lqw.eq(StringUtils.isNotBlank(bo.getDocumentReference()), XzdCbysJdcbfjFubiao::getDocumentReference, bo.getDocumentReference());
lqw.eq(StringUtils.isNotBlank(bo.getFileId()), XzdCbysJdcbfjFubiao::getFileId, bo.getFileId());
return lqw;
}
/**
* 新增立项及成本-成本预算-阶段成本分解附
*
* @param bo 立项及成本-成本预算-阶段成本分解附
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(XzdCbysJdcbfjFubiaoBo bo) {
XzdCbysJdcbfjFubiao add = MapstructUtils.convert(bo, XzdCbysJdcbfjFubiao.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改立项及成本-成本预算-阶段成本分解附
*
* @param bo 立项及成本-成本预算-阶段成本分解附
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(XzdCbysJdcbfjFubiaoBo bo) {
XzdCbysJdcbfjFubiao update = MapstructUtils.convert(bo, XzdCbysJdcbfjFubiao.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(XzdCbysJdcbfjFubiao entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除立项及成本-成本预算-阶段成本分解附信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
}

View File

@ -0,0 +1,240 @@
package org.dromara.xzd.costProjectApproval.costBudget.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.common.utils.BatchNumberGenerator;
import org.dromara.system.service.ISysUserService;
import org.dromara.system.service.impl.SysOssServiceImpl;
import org.dromara.xzd.costProjectApproval.costBudget.domain.*;
import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysZjhcbVo;
import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysJdcbfjFubiaoService;
import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysZjhcbService;
import org.dromara.xzd.service.impl.XzdProjectServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysJdcbfjBo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysJdcbfjVo;
import org.dromara.xzd.costProjectApproval.costBudget.mapper.XzdCbysJdcbfjMapper;
import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysJdcbfjService;
import java.util.*;
/**
* 立项及成本-成本预算-阶段成本分解Service业务层处理
*
* @author Lion Li
* @date 2025-10-17
*/
@RequiredArgsConstructor
@Service
public class XzdCbysJdcbfjServiceImpl extends ServiceImpl<XzdCbysJdcbfjMapper, XzdCbysJdcbfj> implements IXzdCbysJdcbfjService {
private final XzdCbysJdcbfjMapper baseMapper;
@Autowired
private IXzdCbysJdcbfjFubiaoService xzdCbysJdcbfjFubiaoService;
@Autowired
private SysOssServiceImpl sysOssService;
@Autowired
private XzdProjectServiceImpl xzdProjectService;
@Autowired
private ISysUserService sysUserService;
@Autowired
private IXzdCbysZjhcbService xzdCbysZjhcbService;
/**
* 查询立项及成本-成本预算-阶段成本分解
*
* @param id 主键
* @return 立项及成本-成本预算-阶段成本分解
*/
@Override
public XzdCbysJdcbfjVo queryById(Long id){
XzdCbysJdcbfjVo vo = baseMapper.selectVoById(id);
getName(vo);
getHttk(vo);
return vo;
}
/**
* 分页查询立项及成本-成本预算-阶段成本分解列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 立项及成本-成本预算-阶段成本分解分页列表
*/
@Override
public TableDataInfo<XzdCbysJdcbfjVo> queryPageList(XzdCbysJdcbfjBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<XzdCbysJdcbfj> lqw = buildQueryWrapper(bo);
Page<XzdCbysJdcbfjVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
result.getRecords().forEach(this::getName);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的立项及成本-成本预算-阶段成本分解列表
*
* @param bo 查询条件
* @return 立项及成本-成本预算-阶段成本分解列表
*/
@Override
public List<XzdCbysJdcbfjVo> queryList(XzdCbysJdcbfjBo bo) {
LambdaQueryWrapper<XzdCbysJdcbfj> lqw = buildQueryWrapper(bo);
List<XzdCbysJdcbfjVo> vos = baseMapper.selectVoList(lqw);
vos.forEach(this::getName);
return vos;
}
private LambdaQueryWrapper<XzdCbysJdcbfj> buildQueryWrapper(XzdCbysJdcbfjBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<XzdCbysJdcbfj> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(XzdCbysJdcbfj::getId);
lqw.eq(StringUtils.isNotBlank(bo.getDocCode()), XzdCbysJdcbfj::getDocCode, bo.getDocCode());
lqw.eq(StringUtils.isNotBlank(bo.getDocTitle()), XzdCbysJdcbfj::getDocTitle, bo.getDocTitle());
lqw.eq(bo.getDocDate() != null, XzdCbysJdcbfj::getDocDate, bo.getDocDate());
lqw.eq(bo.getProjectId() != null, XzdCbysJdcbfj::getProjectId, bo.getProjectId());
lqw.eq(StringUtils.isNotBlank(bo.getBudgetCategory()), XzdCbysJdcbfj::getBudgetCategory, bo.getBudgetCategory());
lqw.eq(bo.getTotalPlanCost() != null, XzdCbysJdcbfj::getTotalPlanCost, bo.getTotalPlanCost());
lqw.eq(bo.getProjectLeader() != null, XzdCbysJdcbfj::getProjectLeader, bo.getProjectLeader());
lqw.eq(bo.getStartDate() != null, XzdCbysJdcbfj::getStartDate, bo.getStartDate());
lqw.eq(bo.getCompletionDate() != null, XzdCbysJdcbfj::getCompletionDate, bo.getCompletionDate());
lqw.eq(bo.getYear() != null, XzdCbysJdcbfj::getYear, bo.getYear());
lqw.eq(StringUtils.isNotBlank(bo.getCurrency()), XzdCbysJdcbfj::getCurrency, bo.getCurrency());
lqw.eq(bo.getExchangeRate() != null, XzdCbysJdcbfj::getExchangeRate, bo.getExchangeRate());
lqw.eq(StringUtils.isNotBlank(bo.getDocumentReference()), XzdCbysJdcbfj::getDocumentReference, bo.getDocumentReference());
lqw.eq(StringUtils.isNotBlank(bo.getFileId()), XzdCbysJdcbfj::getFileId, bo.getFileId());
return lqw;
}
/**
* 新增立项及成本-成本预算-阶段成本分解
*
* @param bo 立项及成本-成本预算-阶段成本分解
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(XzdCbysJdcbfjBo bo) {
XzdCbysJdcbfj add = MapstructUtils.convert(bo, XzdCbysJdcbfj.class);
validEntityBeforeSave(add);
String banBen = BatchNumberGenerator.generateBatchNumber("LXCBJDCBFJ-");
add.setDocCode(banBen);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
if (bo.getXzdCbysJdcbfjFubiao() != null && !bo.getXzdCbysJdcbfjFubiao().isEmpty()) {
bo.getXzdCbysJdcbfjFubiao().forEach(item -> {
String code = BatchNumberGenerator.generateBatchNumber("LXCBYSBM-");
item.setBudgetItemCode(code);
item.setMainTableId(add.getId());
});
xzdCbysJdcbfjFubiaoService.saveBatch(bo.getXzdCbysJdcbfjFubiao());
}
return flag;
}
/**
* 修改立项及成本-成本预算-阶段成本分解
*
* @param bo 立项及成本-成本预算-阶段成本分解
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(XzdCbysJdcbfjBo bo) {
XzdCbysJdcbfj update = MapstructUtils.convert(bo, XzdCbysJdcbfj.class);
validEntityBeforeSave(update);
xzdCbysJdcbfjFubiaoService.remove(new LambdaQueryWrapper<XzdCbysJdcbfjFubiao>().eq(XzdCbysJdcbfjFubiao::getMainTableId, bo.getId()));
if (bo.getXzdCbysJdcbfjFubiao() != null && !bo.getXzdCbysJdcbfjFubiao().isEmpty()) {
bo.getXzdCbysJdcbfjFubiao().forEach(item -> {
String code = BatchNumberGenerator.generateBatchNumber("LXCBYSBM-");
item.setBudgetItemCode(code);
item.setMainTableId(bo.getId());
});
xzdCbysJdcbfjFubiaoService.saveBatch(bo.getXzdCbysJdcbfjFubiao());
}
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(XzdCbysJdcbfj entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除立项及成本-成本预算-阶段成本分解信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
List<Long> deleteIds = new ArrayList<>();
for (Long id : ids) {
XzdCbysJdcbfjVo vo = baseMapper.selectVoById(id);
if (vo != null){
//删除附件
if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){
List<Long> list = Arrays.stream(vo.getFileId().split(",")).map(Long::valueOf).toList();
deleteIds.addAll(list);
}
}
}
if (!deleteIds.isEmpty()) {
sysOssService.deleteWithValidByIds(deleteIds, false);
}
xzdCbysJdcbfjFubiaoService.remove(new LambdaQueryWrapper<XzdCbysJdcbfjFubiao>().in(XzdCbysJdcbfjFubiao::getMainTableId,ids));
return baseMapper.deleteByIds(ids) > 0;
}
/**
* 获取部分字段名称
* @param item
*/
private void getName(XzdCbysJdcbfjVo item) {
//项目名称
if (item.getProjectId() != null){
String projectName = xzdProjectService.queryNameById(item.getProjectId());
if (projectName != null){
item.setProjectName(projectName);
}
}
if (item.getProjectLeader() != null){
String name = sysUserService.queryNameById(item.getProjectLeader());
if (name != null){
item.setProjectLeaderName(name);
}
}
if (item.getTotalPlanCost() != null){
String name = xzdCbysZjhcbService.queryNameById(item.getTotalPlanCost());
if (name != null){
item.setTotalPlanCostName(name);
}
}
}
/**
* 获取扣款与奖励项
* @param vo
*/
private void getHttk(XzdCbysJdcbfjVo vo) {
List<XzdCbysJdcbfjFubiao> xzdCbysZtjhcbBgjls = xzdCbysJdcbfjFubiaoService.getBaseMapper().selectList(new LambdaQueryWrapper<XzdCbysJdcbfjFubiao>().eq(XzdCbysJdcbfjFubiao::getMainTableId, vo.getId()));
vo.setXzdCbysJdcbfjFubiao(xzdCbysZtjhcbBgjls);
}
}

View File

@ -0,0 +1,139 @@
package org.dromara.xzd.costProjectApproval.costBudget.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysSscbBo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysSscbVo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysSscb;
import org.dromara.xzd.costProjectApproval.costBudget.mapper.XzdCbysSscbMapper;
import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysSscbService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 税收项明细Service业务层处理
*
* @author Lion Li
* @date 2025-10-17
*/
@RequiredArgsConstructor
@Service
public class XzdCbysSscbServiceImpl extends ServiceImpl<XzdCbysSscbMapper, XzdCbysSscb> implements IXzdCbysSscbService {
private final XzdCbysSscbMapper baseMapper;
/**
* 查询税收项明细
*
* @param id 主键
* @return 税收项明细
*/
@Override
public XzdCbysSscbVo queryById(Long id){
return baseMapper.selectVoById(id);
}
/**
* 分页查询税收项明细列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 税收项明细分页列表
*/
@Override
public TableDataInfo<XzdCbysSscbVo> queryPageList(XzdCbysSscbBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<XzdCbysSscb> lqw = buildQueryWrapper(bo);
Page<XzdCbysSscbVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的税收项明细列表
*
* @param bo 查询条件
* @return 税收项明细列表
*/
@Override
public List<XzdCbysSscbVo> queryList(XzdCbysSscbBo bo) {
LambdaQueryWrapper<XzdCbysSscb> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<XzdCbysSscb> buildQueryWrapper(XzdCbysSscbBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<XzdCbysSscb> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(XzdCbysSscb::getId);
lqw.eq(bo.getMainDocumentId() != null, XzdCbysSscb::getMainDocumentId, bo.getMainDocumentId());
lqw.eq(StringUtils.isNotBlank(bo.getTaxItem()), XzdCbysSscb::getTaxItem, bo.getTaxItem());
lqw.eq(bo.getTaxableAmount() != null, XzdCbysSscb::getTaxableAmount, bo.getTaxableAmount());
lqw.eq(bo.getTaxRate() != null, XzdCbysSscb::getTaxRate, bo.getTaxRate());
lqw.eq(bo.getTaxPayable() != null, XzdCbysSscb::getTaxPayable, bo.getTaxPayable());
lqw.eq(bo.getTaxDeductible() != null, XzdCbysSscb::getTaxDeductible, bo.getTaxDeductible());
lqw.eq(bo.getTaxDue() != null, XzdCbysSscb::getTaxDue, bo.getTaxDue());
lqw.eq(StringUtils.isNotBlank(bo.getDocumentReference()), XzdCbysSscb::getDocumentReference, bo.getDocumentReference());
lqw.eq(StringUtils.isNotBlank(bo.getFileId()), XzdCbysSscb::getFileId, bo.getFileId());
return lqw;
}
/**
* 新增税收项明细
*
* @param bo 税收项明细
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(XzdCbysSscbBo bo) {
XzdCbysSscb add = MapstructUtils.convert(bo, XzdCbysSscb.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改税收项明细
*
* @param bo 税收项明细
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(XzdCbysSscbBo bo) {
XzdCbysSscb update = MapstructUtils.convert(bo, XzdCbysSscb.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(XzdCbysSscb entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除税收项明细信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
}

View File

@ -0,0 +1,148 @@
package org.dromara.xzd.costProjectApproval.costBudget.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysWgcbtbFubiaoBo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysWgcbtbFubiaoVo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysWgcbtbFubiao;
import org.dromara.xzd.costProjectApproval.costBudget.mapper.XzdCbysWgcbtbFubiaoMapper;
import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysWgcbtbFubiaoService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 立项及成本-成本预算-附Service业务层处理
*
* @author Lion Li
* @date 2025-10-17
*/
@RequiredArgsConstructor
@Service
public class XzdCbysWgcbtbFubiaoServiceImpl extends ServiceImpl<XzdCbysWgcbtbFubiaoMapper, XzdCbysWgcbtbFubiao> implements IXzdCbysWgcbtbFubiaoService {
private final XzdCbysWgcbtbFubiaoMapper baseMapper;
/**
* 查询立项及成本-成本预算-附
*
* @param id 主键
* @return 立项及成本-成本预算-附
*/
@Override
public XzdCbysWgcbtbFubiaoVo queryById(Long id){
return baseMapper.selectVoById(id);
}
/**
* 分页查询立项及成本-成本预算-附列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 立项及成本-成本预算-附分页列表
*/
@Override
public TableDataInfo<XzdCbysWgcbtbFubiaoVo> queryPageList(XzdCbysWgcbtbFubiaoBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<XzdCbysWgcbtbFubiao> lqw = buildQueryWrapper(bo);
Page<XzdCbysWgcbtbFubiaoVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的立项及成本-成本预算-附列表
*
* @param bo 查询条件
* @return 立项及成本-成本预算-附列表
*/
@Override
public List<XzdCbysWgcbtbFubiaoVo> queryList(XzdCbysWgcbtbFubiaoBo bo) {
LambdaQueryWrapper<XzdCbysWgcbtbFubiao> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<XzdCbysWgcbtbFubiao> buildQueryWrapper(XzdCbysWgcbtbFubiaoBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<XzdCbysWgcbtbFubiao> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(XzdCbysWgcbtbFubiao::getId);
lqw.eq(bo.getMainDocId() != null, XzdCbysWgcbtbFubiao::getMainDocId, bo.getMainDocId());
lqw.eq(StringUtils.isNotBlank(bo.getBudgetItemCode()), XzdCbysWgcbtbFubiao::getBudgetItemCode, bo.getBudgetItemCode());
lqw.eq(StringUtils.isNotBlank(bo.getBudgetItemTitle()), XzdCbysWgcbtbFubiao::getBudgetItemTitle, bo.getBudgetItemTitle());
lqw.eq(StringUtils.isNotBlank(bo.getBoq()), XzdCbysWgcbtbFubiao::getBoq, bo.getBoq());
lqw.eq(StringUtils.isNotBlank(bo.getWbs()), XzdCbysWgcbtbFubiao::getWbs, bo.getWbs());
lqw.eq(StringUtils.isNotBlank(bo.getCbs()), XzdCbysWgcbtbFubiao::getCbs, bo.getCbs());
lqw.eq(StringUtils.isNotBlank(bo.getUnit()), XzdCbysWgcbtbFubiao::getUnit, bo.getUnit());
lqw.eq(bo.getUnitPrice() != null, XzdCbysWgcbtbFubiao::getUnitPrice, bo.getUnitPrice());
lqw.eq(bo.getPlanQuantity() != null, XzdCbysWgcbtbFubiao::getPlanQuantity, bo.getPlanQuantity());
lqw.eq(bo.getCumulativePlanQuantity() != null, XzdCbysWgcbtbFubiao::getCumulativePlanQuantity, bo.getCumulativePlanQuantity());
lqw.eq(bo.getPlanAmount() != null, XzdCbysWgcbtbFubiao::getPlanAmount, bo.getPlanAmount());
lqw.eq(bo.getCumulativePlanAmount() != null, XzdCbysWgcbtbFubiao::getCumulativePlanAmount, bo.getCumulativePlanAmount());
lqw.eq(bo.getCompletedQuantity() != null, XzdCbysWgcbtbFubiao::getCompletedQuantity, bo.getCompletedQuantity());
lqw.eq(bo.getCumulativeCompletedQuantity() != null, XzdCbysWgcbtbFubiao::getCumulativeCompletedQuantity, bo.getCumulativeCompletedQuantity());
lqw.eq(bo.getCompletedAmount() != null, XzdCbysWgcbtbFubiao::getCompletedAmount, bo.getCompletedAmount());
lqw.eq(bo.getCumulativeCompletedAmount() != null, XzdCbysWgcbtbFubiao::getCumulativeCompletedAmount, bo.getCumulativeCompletedAmount());
lqw.eq(StringUtils.isNotBlank(bo.getDocumentReference()), XzdCbysWgcbtbFubiao::getDocumentReference, bo.getDocumentReference());
lqw.eq(StringUtils.isNotBlank(bo.getFileId()), XzdCbysWgcbtbFubiao::getFileId, bo.getFileId());
return lqw;
}
/**
* 新增立项及成本-成本预算-附
*
* @param bo 立项及成本-成本预算-附
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(XzdCbysWgcbtbFubiaoBo bo) {
XzdCbysWgcbtbFubiao add = MapstructUtils.convert(bo, XzdCbysWgcbtbFubiao.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改立项及成本-成本预算-附
*
* @param bo 立项及成本-成本预算-附
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(XzdCbysWgcbtbFubiaoBo bo) {
XzdCbysWgcbtbFubiao update = MapstructUtils.convert(bo, XzdCbysWgcbtbFubiao.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(XzdCbysWgcbtbFubiao entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除立项及成本-成本预算-附信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
}

View File

@ -0,0 +1,213 @@
package org.dromara.xzd.costProjectApproval.costBudget.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.common.utils.BatchNumberGenerator;
import org.dromara.system.service.impl.SysOssServiceImpl;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysWgcbtbFubiao;
import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysWgcbtbFubiaoService;
import org.dromara.xzd.domain.XzdContractDetails;
import org.dromara.xzd.domain.dto.QuerCorrespondentDto;
import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.TaxInfo;
import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.vo.AppreciationInvoiceVo;
import org.dromara.xzd.service.IXzdProjectService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysWgcbtbBo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysWgcbtbVo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysWgcbtb;
import org.dromara.xzd.costProjectApproval.costBudget.mapper.XzdCbysWgcbtbMapper;
import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysWgcbtbService;
import java.util.*;
import java.util.stream.Collectors;
/**
* 立项及成本-成本预算-完工成本填报Service业务层处理
*
* @author Lion Li
* @date 2025-10-17
*/
@RequiredArgsConstructor
@Service
public class XzdCbysWgcbtbServiceImpl extends ServiceImpl<XzdCbysWgcbtbMapper, XzdCbysWgcbtb> implements IXzdCbysWgcbtbService {
private final XzdCbysWgcbtbMapper baseMapper;
@Autowired
private IXzdCbysWgcbtbFubiaoService fubiaoService;
private final IXzdProjectService xzdProjectService;
@Autowired
private SysOssServiceImpl sysOssService;
/**
* 查询立项及成本-成本预算-完工成本填报
*
* @param id 主键
* @return 立项及成本-成本预算-完工成本填报
*/
@Override
public XzdCbysWgcbtbVo queryById(Long id){
XzdCbysWgcbtbVo xzdCbysWgcbtbVo = baseMapper.selectVoById(id);
List<XzdCbysWgcbtbVo> vo = List.of(xzdCbysWgcbtbVo);
saveValu(vo);
return vo.getFirst();
}
/**
* 分页查询立项及成本-成本预算-完工成本填报列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 立项及成本-成本预算-完工成本填报分页列表
*/
@Override
public TableDataInfo<XzdCbysWgcbtbVo> queryPageList(XzdCbysWgcbtbBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<XzdCbysWgcbtb> lqw = buildQueryWrapper(bo);
Page<XzdCbysWgcbtbVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
saveValu(result.getRecords());
return TableDataInfo.build(result);
}
private void saveValu(List<XzdCbysWgcbtbVo> records) {
for (XzdCbysWgcbtbVo item : records) {
//项目名称
if (item.getProjectId() != null){
String projectName = xzdProjectService.queryNameById(item.getProjectId());
if (projectName != null){
item.setProjectName(projectName);
}
}
}
}
/**
* 查询符合条件的立项及成本-成本预算-完工成本填报列表
*
* @param bo 查询条件
* @return 立项及成本-成本预算-完工成本填报列表
*/
@Override
public List<XzdCbysWgcbtbVo> queryList(XzdCbysWgcbtbBo bo) {
LambdaQueryWrapper<XzdCbysWgcbtb> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<XzdCbysWgcbtb> buildQueryWrapper(XzdCbysWgcbtbBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<XzdCbysWgcbtb> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(XzdCbysWgcbtb::getId);
lqw.eq(StringUtils.isNotBlank(bo.getDocCode()), XzdCbysWgcbtb::getDocCode, bo.getDocCode());
lqw.eq(StringUtils.isNotBlank(bo.getDocTitle()), XzdCbysWgcbtb::getDocTitle, bo.getDocTitle());
lqw.eq(bo.getDocDate() != null, XzdCbysWgcbtb::getDocDate, bo.getDocDate());
lqw.eq(StringUtils.isNotBlank(bo.getBudgetCategory()), XzdCbysWgcbtb::getBudgetCategory, bo.getBudgetCategory());
lqw.eq(bo.getProjectId() != null, XzdCbysWgcbtb::getProjectId, bo.getProjectId());
lqw.eq(bo.getProjectLeader() != null, XzdCbysWgcbtb::getProjectLeader, bo.getProjectLeader());
lqw.eq(bo.getStartDate() != null, XzdCbysWgcbtb::getStartDate, bo.getStartDate());
lqw.eq(bo.getCompletionDate() != null, XzdCbysWgcbtb::getCompletionDate, bo.getCompletionDate());
lqw.eq(bo.getYear() != null, XzdCbysWgcbtb::getYear, bo.getYear());
lqw.eq(bo.getMonth() != null, XzdCbysWgcbtb::getMonth, bo.getMonth());
lqw.eq(StringUtils.isNotBlank(bo.getStatCycle()), XzdCbysWgcbtb::getStatCycle, bo.getStatCycle());
lqw.eq(StringUtils.isNotBlank(bo.getSourceDocType()), XzdCbysWgcbtb::getSourceDocType, bo.getSourceDocType());
lqw.eq(bo.getEnableAccountAttrTab() != null, XzdCbysWgcbtb::getEnableAccountAttrTab, bo.getEnableAccountAttrTab());
lqw.eq(StringUtils.isNotBlank(bo.getDocumentReference()), XzdCbysWgcbtb::getDocumentReference, bo.getDocumentReference());
lqw.eq(StringUtils.isNotBlank(bo.getFileId()), XzdCbysWgcbtb::getFileId, bo.getFileId());
return lqw;
}
/**
* 新增立项及成本-成本预算-完工成本填报
*
* @param bo 立项及成本-成本预算-完工成本填报
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(XzdCbysWgcbtbBo bo) {
XzdCbysWgcbtb add = MapstructUtils.convert(bo, XzdCbysWgcbtb.class);
validEntityBeforeSave(add);
String banBen = BatchNumberGenerator.generateBatchNumber("CBTB");
add.setDocCode(banBen);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
if (bo.getXzdCbysWgcbtbFubiao() == null || bo.getXzdCbysWgcbtbFubiao().isEmpty()) {
throw new ServiceException("成本明细不能为空");
}
bo.getXzdCbysWgcbtbFubiao().forEach(item -> {item.setMainDocId(add.getId());});
fubiaoService.saveBatch(bo.getXzdCbysWgcbtbFubiao());
return flag;
}
/**
* 修改立项及成本-成本预算-完工成本填报
*
* @param bo 立项及成本-成本预算-完工成本填报
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(XzdCbysWgcbtbBo bo) {
XzdCbysWgcbtb update = MapstructUtils.convert(bo, XzdCbysWgcbtb.class);
validEntityBeforeSave(update);
if (bo.getXzdCbysWgcbtbFubiao() == null || bo.getXzdCbysWgcbtbFubiao().isEmpty()) {
throw new ServiceException("成本明细不能为空");
}
HashMap<String, Object> hashMap = new HashMap<>();
hashMap.put("main_doc_id", update.getId());
fubiaoService.getBaseMapper().deleteByMap(hashMap);
bo.getXzdCbysWgcbtbFubiao().forEach(item -> {item.setMainDocId(update.getId());});
fubiaoService.saveBatch(bo.getXzdCbysWgcbtbFubiao());
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(XzdCbysWgcbtb entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除立项及成本-成本预算-完工成本填报信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
for (Long id : ids) {
XzdCbysWgcbtbVo vo = baseMapper.selectVoById(id);
// 删除附件
if (!StringUtils.isEmpty(vo.getFileId())){
List<Long> collect = Arrays.stream(vo.getFileId().split(",")).map(item -> {
return Long.parseLong(item);
}).collect(Collectors.toList());
sysOssService.deleteWithValidByIds(collect, false);
}
}
fubiaoService.getBaseMapper().delete(new LambdaQueryWrapper<XzdCbysWgcbtbFubiao>().in(XzdCbysWgcbtbFubiao::getMainDocId, ids));
return baseMapper.deleteByIds(ids) > 0;
}
}

View File

@ -0,0 +1,159 @@
package org.dromara.xzd.costProjectApproval.costBudget.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysZjhcbFubiaoBo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysZjhcbFubiaoVo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysZjhcbFubiao;
import org.dromara.xzd.costProjectApproval.costBudget.mapper.XzdCbysZjhcbFubiaoMapper;
import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysZjhcbFubiaoService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 立项及成本-成本预算-总体计划成本附Service业务层处理
*
* @author Lion Li
* @date 2025-10-17
*/
@RequiredArgsConstructor
@Service
public class XzdCbysZjhcbFubiaoServiceImpl extends ServiceImpl<XzdCbysZjhcbFubiaoMapper, XzdCbysZjhcbFubiao> implements IXzdCbysZjhcbFubiaoService {
private final XzdCbysZjhcbFubiaoMapper baseMapper;
/**
* 查询立项及成本-成本预算-总体计划成本附
*
* @param id 主键
* @return 立项及成本-成本预算-总体计划成本附
*/
@Override
public XzdCbysZjhcbFubiaoVo queryById(Long id){
return baseMapper.selectVoById(id);
}
/**
* 分页查询立项及成本-成本预算-总体计划成本附列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 立项及成本-成本预算-总体计划成本附分页列表
*/
@Override
public TableDataInfo<XzdCbysZjhcbFubiaoVo> queryPageList(XzdCbysZjhcbFubiaoBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<XzdCbysZjhcbFubiao> lqw = buildQueryWrapper(bo);
Page<XzdCbysZjhcbFubiaoVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的立项及成本-成本预算-总体计划成本附列表
*
* @param bo 查询条件
* @return 立项及成本-成本预算-总体计划成本附列表
*/
@Override
public List<XzdCbysZjhcbFubiaoVo> queryList(XzdCbysZjhcbFubiaoBo bo) {
LambdaQueryWrapper<XzdCbysZjhcbFubiao> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<XzdCbysZjhcbFubiao> buildQueryWrapper(XzdCbysZjhcbFubiaoBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<XzdCbysZjhcbFubiao> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(XzdCbysZjhcbFubiao::getId);
lqw.eq(StringUtils.isNotBlank(bo.getBudgetCode()), XzdCbysZjhcbFubiao::getBudgetCode, bo.getBudgetCode());
lqw.like(StringUtils.isNotBlank(bo.getBudgetName()), XzdCbysZjhcbFubiao::getBudgetName, bo.getBudgetName());
lqw.eq(StringUtils.isNotBlank(bo.getWbs()), XzdCbysZjhcbFubiao::getWbs, bo.getWbs());
lqw.eq(StringUtils.isNotBlank(bo.getCbs()), XzdCbysZjhcbFubiao::getCbs, bo.getCbs());
lqw.eq(StringUtils.isNotBlank(bo.getUnit()), XzdCbysZjhcbFubiao::getUnit, bo.getUnit());
lqw.eq(bo.getQuantity() != null, XzdCbysZjhcbFubiao::getQuantity, bo.getQuantity());
lqw.eq(bo.getUnitPrice() != null, XzdCbysZjhcbFubiao::getUnitPrice, bo.getUnitPrice());
lqw.eq(bo.getTaxIncludedUnitPrice() != null, XzdCbysZjhcbFubiao::getTaxIncludedUnitPrice, bo.getTaxIncludedUnitPrice());
lqw.eq(bo.getTaxRate() != null, XzdCbysZjhcbFubiao::getTaxRate, bo.getTaxRate());
lqw.eq(bo.getTaxAmount() != null, XzdCbysZjhcbFubiao::getTaxAmount, bo.getTaxAmount());
lqw.eq(bo.getTaxExcludedAmount() != null, XzdCbysZjhcbFubiao::getTaxExcludedAmount, bo.getTaxExcludedAmount());
lqw.eq(bo.getTaxIncludedAmount() != null, XzdCbysZjhcbFubiao::getTaxIncludedAmount, bo.getTaxIncludedAmount());
lqw.eq(bo.getChangeQuantity() != null, XzdCbysZjhcbFubiao::getChangeQuantity, bo.getChangeQuantity());
lqw.eq(bo.getChangeUnitPrice() != null, XzdCbysZjhcbFubiao::getChangeUnitPrice, bo.getChangeUnitPrice());
lqw.eq(bo.getChangeTaxIncludedUnitPrice() != null, XzdCbysZjhcbFubiao::getChangeTaxIncludedUnitPrice, bo.getChangeTaxIncludedUnitPrice());
lqw.eq(bo.getChangeTaxRate() != null, XzdCbysZjhcbFubiao::getChangeTaxRate, bo.getChangeTaxRate());
lqw.eq(bo.getChangeTaxAmount() != null, XzdCbysZjhcbFubiao::getChangeTaxAmount, bo.getChangeTaxAmount());
lqw.eq(bo.getAfterChangeQuantity() != null, XzdCbysZjhcbFubiao::getAfterChangeQuantity, bo.getAfterChangeQuantity());
lqw.eq(bo.getAfterChangeUnitPrice() != null, XzdCbysZjhcbFubiao::getAfterChangeUnitPrice, bo.getAfterChangeUnitPrice());
lqw.eq(bo.getAfterChangeTaxIncludedUnitPrice() != null, XzdCbysZjhcbFubiao::getAfterChangeTaxIncludedUnitPrice, bo.getAfterChangeTaxIncludedUnitPrice());
lqw.eq(bo.getAfterChangeTaxRate() != null, XzdCbysZjhcbFubiao::getAfterChangeTaxRate, bo.getAfterChangeTaxRate());
lqw.eq(bo.getAfterChangeTaxAmount() != null, XzdCbysZjhcbFubiao::getAfterChangeTaxAmount, bo.getAfterChangeTaxAmount());
lqw.eq(bo.getAfterChangeTaxExcludedAmount() != null, XzdCbysZjhcbFubiao::getAfterChangeTaxExcludedAmount, bo.getAfterChangeTaxExcludedAmount());
lqw.eq(bo.getAfterChangeTaxIncludedAmount() != null, XzdCbysZjhcbFubiao::getAfterChangeTaxIncludedAmount, bo.getAfterChangeTaxIncludedAmount());
lqw.eq(StringUtils.isNotBlank(bo.getRemarks()), XzdCbysZjhcbFubiao::getRemarks, bo.getRemarks());
lqw.eq(StringUtils.isNotBlank(bo.getContractMode()), XzdCbysZjhcbFubiao::getContractMode, bo.getContractMode());
lqw.eq(bo.getBidBudgetIncome() != null, XzdCbysZjhcbFubiao::getBidBudgetIncome, bo.getBidBudgetIncome());
lqw.eq(bo.getProfitRate() != null, XzdCbysZjhcbFubiao::getProfitRate, bo.getProfitRate());
lqw.eq(StringUtils.isNotBlank(bo.getAttachment()), XzdCbysZjhcbFubiao::getAttachment, bo.getAttachment());
return lqw;
}
/**
* 新增立项及成本-成本预算-总体计划成本附
*
* @param bo 立项及成本-成本预算-总体计划成本附
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(XzdCbysZjhcbFubiaoBo bo) {
XzdCbysZjhcbFubiao add = MapstructUtils.convert(bo, XzdCbysZjhcbFubiao.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改立项及成本-成本预算-总体计划成本附
*
* @param bo 立项及成本-成本预算-总体计划成本附
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(XzdCbysZjhcbFubiaoBo bo) {
XzdCbysZjhcbFubiao update = MapstructUtils.convert(bo, XzdCbysZjhcbFubiao.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(XzdCbysZjhcbFubiao entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除立项及成本-成本预算-总体计划成本附信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
}

View File

@ -0,0 +1,279 @@
package org.dromara.xzd.costProjectApproval.costBudget.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.common.utils.BatchNumberGenerator;
import org.dromara.system.service.ISysUserService;
import org.dromara.system.service.impl.SysOssServiceImpl;
import org.dromara.xzd.costProjectApproval.costBudget.domain.*;
import org.dromara.xzd.costProjectApproval.costBudget.service.*;
import org.dromara.xzd.service.impl.XzdProjectServiceImpl;
import org.dromara.xzd.settlement.domain.XzdJsDeductionItems;
import org.dromara.xzd.settlement.domain.vo.XzdJsCgJungonVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysZjhcbBo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysZjhcbVo;
import org.dromara.xzd.costProjectApproval.costBudget.mapper.XzdCbysZjhcbMapper;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
/**
* 立项及成本-成本预算-总体计划成本Service业务层处理
*
* @author Lion Li
* @date 2025-10-17
*/
@RequiredArgsConstructor
@Service
public class XzdCbysZjhcbServiceImpl extends ServiceImpl<XzdCbysZjhcbMapper, XzdCbysZjhcb> implements IXzdCbysZjhcbService {
private final XzdCbysZjhcbMapper baseMapper;
@Autowired
private IXzdCbysZtjhcbBgjlService xzdCbysZtjhcbBgjlService;
@Autowired
private IXzdCbysSscbService xzdCbysSscbService;
@Autowired
private IXzdCbysZjhcbFubiaoService fubiaoService;
@Autowired
private SysOssServiceImpl sysOssService;
@Autowired
private XzdProjectServiceImpl xzdProjectService;
@Autowired
private ISysUserService sysUserService;
/**
* 查询立项及成本-成本预算-总体计划成本
*
* @param id 主键
* @return 立项及成本-成本预算-总体计划成本
*/
@Override
public XzdCbysZjhcbVo queryById(Long id){
XzdCbysZjhcbVo vo = baseMapper.selectVoById(id);
getName(vo);
getHttk(vo);
return vo;
}
/**
* 分页查询立项及成本-成本预算-总体计划成本列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 立项及成本-成本预算-总体计划成本分页列表
*/
@Override
public TableDataInfo<XzdCbysZjhcbVo> queryPageList(XzdCbysZjhcbBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<XzdCbysZjhcb> lqw = buildQueryWrapper(bo);
Page<XzdCbysZjhcbVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
result.getRecords().forEach(this::getName);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的立项及成本-成本预算-总体计划成本列表
*
* @param bo 查询条件
* @return 立项及成本-成本预算-总体计划成本列表
*/
@Override
public List<XzdCbysZjhcbVo> queryList(XzdCbysZjhcbBo bo) {
LambdaQueryWrapper<XzdCbysZjhcb> lqw = buildQueryWrapper(bo);
List<XzdCbysZjhcbVo> vos = baseMapper.selectVoList(lqw);
vos.forEach(this::getName);
return vos;
}
private LambdaQueryWrapper<XzdCbysZjhcb> buildQueryWrapper(XzdCbysZjhcbBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<XzdCbysZjhcb> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(XzdCbysZjhcb::getId);
lqw.eq(StringUtils.isNotBlank(bo.getDocCode()), XzdCbysZjhcb::getDocCode, bo.getDocCode());
lqw.eq(StringUtils.isNotBlank(bo.getDocTitle()), XzdCbysZjhcb::getDocTitle, bo.getDocTitle());
lqw.eq(bo.getDocDate() != null, XzdCbysZjhcb::getDocDate, bo.getDocDate());
lqw.eq(bo.getProjectId() != null, XzdCbysZjhcb::getProjectId, bo.getProjectId());
lqw.eq(StringUtils.isNotBlank(bo.getBudgetCategory()), XzdCbysZjhcb::getBudgetCategory, bo.getBudgetCategory());
lqw.eq(bo.getTotalTaxExclAmount() != null, XzdCbysZjhcb::getTotalTaxExclAmount, bo.getTotalTaxExclAmount());
lqw.eq(bo.getTotalTaxAmount() != null, XzdCbysZjhcb::getTotalTaxAmount, bo.getTotalTaxAmount());
lqw.eq(bo.getTotalTaxInclAmount() != null, XzdCbysZjhcb::getTotalTaxInclAmount, bo.getTotalTaxInclAmount());
lqw.eq(bo.getProjectLeader() != null, XzdCbysZjhcb::getProjectLeader, bo.getProjectLeader());
lqw.eq(bo.getExecProjectManager() != null, XzdCbysZjhcb::getExecProjectManager, bo.getExecProjectManager());
lqw.eq(bo.getContractAmount() != null, XzdCbysZjhcb::getContractAmount, bo.getContractAmount());
lqw.eq(bo.getTaxCost() != null, XzdCbysZjhcb::getTaxCost, bo.getTaxCost());
lqw.eq(bo.getProfitRate() != null, XzdCbysZjhcb::getProfitRate, bo.getProfitRate());
lqw.eq(bo.getProfitAmount() != null, XzdCbysZjhcb::getProfitAmount, bo.getProfitAmount());
lqw.eq(bo.getEnableCostPrecontrol() != null, XzdCbysZjhcb::getEnableCostPrecontrol, bo.getEnableCostPrecontrol());
lqw.eq(StringUtils.isNotBlank(bo.getCostControlMode()), XzdCbysZjhcb::getCostControlMode, bo.getCostControlMode());
lqw.eq(StringUtils.isNotBlank(bo.getForeignCurrencyTaxType()), XzdCbysZjhcb::getForeignCurrencyTaxType, bo.getForeignCurrencyTaxType());
lqw.eq(StringUtils.isNotBlank(bo.getForbidFlag()), XzdCbysZjhcb::getForbidFlag, bo.getForbidFlag());
lqw.eq(bo.getEnableAccountAttrTab() != null, XzdCbysZjhcb::getEnableAccountAttrTab, bo.getEnableAccountAttrTab());
lqw.eq(bo.getEnableMaterialGroup() != null, XzdCbysZjhcb::getEnableMaterialGroup, bo.getEnableMaterialGroup());
lqw.eq(StringUtils.isNotBlank(bo.getDocumentReference()), XzdCbysZjhcb::getDocumentReference, bo.getDocumentReference());
lqw.eq(StringUtils.isNotBlank(bo.getFileId()), XzdCbysZjhcb::getFileId, bo.getFileId());
return lqw;
}
/**
* 新增立项及成本-成本预算-总体计划成本
*
* @param bo 立项及成本-成本预算-总体计划成本
* @return 是否新增成功
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean insertByBo(XzdCbysZjhcbBo bo) {
XzdCbysZjhcb add = MapstructUtils.convert(bo, XzdCbysZjhcb.class);
validEntityBeforeSave(add);
String banBen = BatchNumberGenerator.generateBatchNumber("LXCBZTJHCB-");
add.setDocCode(banBen);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
if (bo.getXzdCbysSscb() == null || bo.getXzdCbysSscb().isEmpty()) {
throw new ServiceException("税收成本不能为空");
}
if (bo.getXzdCbysZtjhcbBgjl() == null || bo.getXzdCbysZtjhcbBgjl().isEmpty()) {
throw new ServiceException("变更记录不能为空");
}
if (bo.getXzdCbysWgcbtbFubiao() == null || bo.getXzdCbysWgcbtbFubiao().isEmpty()) {
throw new ServiceException("成本明细不能为空");
}
bo.getXzdCbysSscb().forEach(item -> {item.setMainDocumentId(add.getId());});
xzdCbysSscbService.saveBatch(bo.getXzdCbysSscb());
bo.getXzdCbysZtjhcbBgjl().forEach(item -> {item.setMainDocumentId(add.getId());});
xzdCbysZtjhcbBgjlService.saveBatch(bo.getXzdCbysZtjhcbBgjl());
bo.getXzdCbysWgcbtbFubiao().forEach(item -> {item.setMainDocumentId(add.getId());});
fubiaoService.saveBatch(bo.getXzdCbysWgcbtbFubiao());
return flag;
}
/**
* 修改立项及成本-成本预算-总体计划成本
*
* @param bo 立项及成本-成本预算-总体计划成本
* @return 是否修改成功
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean updateByBo(XzdCbysZjhcbBo bo) {
XzdCbysZjhcb update = MapstructUtils.convert(bo, XzdCbysZjhcb.class);
validEntityBeforeSave(update);
if (bo.getXzdCbysSscb() == null || bo.getXzdCbysSscb().isEmpty()) {
throw new ServiceException("税收成本不能为空");
}
if (bo.getXzdCbysZtjhcbBgjl() == null || bo.getXzdCbysZtjhcbBgjl().isEmpty()) {
throw new ServiceException("变更记录不能为空");
}
if (bo.getXzdCbysWgcbtbFubiao() == null || bo.getXzdCbysWgcbtbFubiao().isEmpty()) {
throw new ServiceException("成本明细不能为空");
}
xzdCbysZtjhcbBgjlService.remove(new LambdaQueryWrapper<XzdCbysZtjhcbBgjl>().eq(XzdCbysZtjhcbBgjl::getMainDocumentId, bo.getId()));
xzdCbysSscbService.remove(new LambdaQueryWrapper<XzdCbysSscb>().eq(XzdCbysSscb::getMainDocumentId, bo.getId()));
fubiaoService.remove(new LambdaQueryWrapper<XzdCbysZjhcbFubiao>().eq(XzdCbysZjhcbFubiao::getMainDocumentId, bo.getId()));
bo.getXzdCbysSscb().forEach(item -> {item.setMainDocumentId(bo.getId());});
xzdCbysSscbService.saveBatch(bo.getXzdCbysSscb());
bo.getXzdCbysZtjhcbBgjl().forEach(item -> {item.setMainDocumentId(bo.getId());});
xzdCbysZtjhcbBgjlService.saveBatch(bo.getXzdCbysZtjhcbBgjl());
bo.getXzdCbysWgcbtbFubiao().forEach(item -> {item.setMainDocumentId(bo.getId());});
fubiaoService.saveBatch(bo.getXzdCbysWgcbtbFubiao());
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(XzdCbysZjhcb entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除立项及成本-成本预算-总体计划成本信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
List<Long> deleteIds = new ArrayList<>();
for (Long id : ids) {
XzdCbysZjhcbVo vo = baseMapper.selectVoById(id);
if (vo != null){
//删除附件
if (vo.getFileId()!= null && !vo.getFileId().isEmpty()){
List<Long> list = Arrays.stream(vo.getFileId().split(",")).map(Long::valueOf).toList();
deleteIds.addAll(list);
}
}
}
if (!deleteIds.isEmpty()) {
sysOssService.deleteWithValidByIds(deleteIds, false);
}
xzdCbysZtjhcbBgjlService.remove(new LambdaQueryWrapper<XzdCbysZtjhcbBgjl>().in(XzdCbysZtjhcbBgjl::getMainDocumentId, ids));
xzdCbysSscbService.remove(new LambdaQueryWrapper<XzdCbysSscb>().in(XzdCbysSscb::getMainDocumentId, ids));
fubiaoService.remove(new LambdaQueryWrapper<XzdCbysZjhcbFubiao>().in(XzdCbysZjhcbFubiao::getMainDocumentId, ids));
return baseMapper.deleteByIds(ids) > 0;
}
@Override
public String queryNameById(Long id) {
return baseMapper.selectVoById(id).getDocTitle();
}
/**
* 获取部分字段名称
* @param item
*/
private void getName(XzdCbysZjhcbVo item) {
//项目名称
if (item.getProjectId() != null){
String projectName = xzdProjectService.queryNameById(item.getProjectId());
if (projectName != null){
item.setProjectName(projectName);
}
}
if (item.getProjectLeader() != null){
String name = sysUserService.queryNameById(item.getProjectLeader());
if (name != null){
item.setProjectLeaderName(name);
}
}
if (item.getExecProjectManager() != null){
String name = sysUserService.queryNameById(item.getExecProjectManager());
if (name != null){
item.setExecProjectManagerName(name);
}
}
}
/**
* 获取扣款与奖励项
* @param vo
*/
private void getHttk(XzdCbysZjhcbVo vo) {
List<XzdCbysZtjhcbBgjl> xzdCbysZtjhcbBgjls = xzdCbysZtjhcbBgjlService.getBaseMapper().selectList(new LambdaQueryWrapper<XzdCbysZtjhcbBgjl>().eq(XzdCbysZtjhcbBgjl::getMainDocumentId, vo.getId()));
vo.setXzdCbysZtjhcbBgjl(xzdCbysZtjhcbBgjls);
List<XzdCbysSscb> xzdCbysSscbs = xzdCbysSscbService.getBaseMapper().selectList(new LambdaQueryWrapper<XzdCbysSscb>().eq(XzdCbysSscb::getMainDocumentId, vo.getId()));
vo.setXzdCbysSscb(xzdCbysSscbs);
List<XzdCbysZjhcbFubiao> xzdCbysWgcbtbFubiaos = fubiaoService.getBaseMapper().selectList(new LambdaQueryWrapper<XzdCbysZjhcbFubiao>().eq(XzdCbysZjhcbFubiao::getMainDocumentId, vo.getId()));
vo.setXzdCbysWgcbtbFubiao(xzdCbysWgcbtbFubiaos);
}
}

View File

@ -0,0 +1,141 @@
package org.dromara.xzd.costProjectApproval.costBudget.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.mybatis.core.page.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.dromara.xzd.costProjectApproval.costBudget.domain.bo.XzdCbysZtjhcbBgjlBo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.vo.XzdCbysZtjhcbBgjlVo;
import org.dromara.xzd.costProjectApproval.costBudget.domain.XzdCbysZtjhcbBgjl;
import org.dromara.xzd.costProjectApproval.costBudget.mapper.XzdCbysZtjhcbBgjlMapper;
import org.dromara.xzd.costProjectApproval.costBudget.service.IXzdCbysZtjhcbBgjlService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 立项及成本-成本预算-变更记录Service业务层处理
*
* @author Lion Li
* @date 2025-10-17
*/
@RequiredArgsConstructor
@Service
public class XzdCbysZtjhcbBgjlServiceImpl extends ServiceImpl<XzdCbysZtjhcbBgjlMapper, XzdCbysZtjhcbBgjl> implements IXzdCbysZtjhcbBgjlService {
private final XzdCbysZtjhcbBgjlMapper baseMapper;
/**
* 查询立项及成本-成本预算-变更记录
*
* @param id 主键
* @return 立项及成本-成本预算-变更记录
*/
@Override
public XzdCbysZtjhcbBgjlVo queryById(Long id){
return baseMapper.selectVoById(id);
}
/**
* 分页查询立项及成本-成本预算-变更记录列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 立项及成本-成本预算-变更记录分页列表
*/
@Override
public TableDataInfo<XzdCbysZtjhcbBgjlVo> queryPageList(XzdCbysZtjhcbBgjlBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<XzdCbysZtjhcbBgjl> lqw = buildQueryWrapper(bo);
Page<XzdCbysZtjhcbBgjlVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询符合条件的立项及成本-成本预算-变更记录列表
*
* @param bo 查询条件
* @return 立项及成本-成本预算-变更记录列表
*/
@Override
public List<XzdCbysZtjhcbBgjlVo> queryList(XzdCbysZtjhcbBgjlBo bo) {
LambdaQueryWrapper<XzdCbysZtjhcbBgjl> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<XzdCbysZtjhcbBgjl> buildQueryWrapper(XzdCbysZtjhcbBgjlBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<XzdCbysZtjhcbBgjl> lqw = Wrappers.lambdaQuery();
lqw.orderByDesc(XzdCbysZtjhcbBgjl::getId);
lqw.eq(StringUtils.isNotBlank(bo.getDocCode()), XzdCbysZtjhcbBgjl::getDocCode, bo.getDocCode());
lqw.eq(StringUtils.isNotBlank(bo.getDocTitle()), XzdCbysZtjhcbBgjl::getDocTitle, bo.getDocTitle());
lqw.eq(bo.getDocDate() != null, XzdCbysZtjhcbBgjl::getDocDate, bo.getDocDate());
lqw.like(StringUtils.isNotBlank(bo.getProjectName()), XzdCbysZtjhcbBgjl::getProjectName, bo.getProjectName());
lqw.eq(StringUtils.isNotBlank(bo.getChangeSource()), XzdCbysZtjhcbBgjl::getChangeSource, bo.getChangeSource());
lqw.eq(bo.getChangeTaxExclAmount() != null, XzdCbysZtjhcbBgjl::getChangeTaxExclAmount, bo.getChangeTaxExclAmount());
lqw.eq(bo.getChangeTaxInclAmount() != null, XzdCbysZtjhcbBgjl::getChangeTaxInclAmount, bo.getChangeTaxInclAmount());
lqw.eq(StringUtils.isNotBlank(bo.getApprover()), XzdCbysZtjhcbBgjl::getApprover, bo.getApprover());
lqw.eq(StringUtils.isNotBlank(bo.getProjectLeader()), XzdCbysZtjhcbBgjl::getProjectLeader, bo.getProjectLeader());
lqw.eq(StringUtils.isNotBlank(bo.getDocumentReference()), XzdCbysZtjhcbBgjl::getDocumentReference, bo.getDocumentReference());
lqw.eq(StringUtils.isNotBlank(bo.getFileId()), XzdCbysZtjhcbBgjl::getFileId, bo.getFileId());
return lqw;
}
/**
* 新增立项及成本-成本预算-变更记录
*
* @param bo 立项及成本-成本预算-变更记录
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(XzdCbysZtjhcbBgjlBo bo) {
XzdCbysZtjhcbBgjl add = MapstructUtils.convert(bo, XzdCbysZtjhcbBgjl.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setId(add.getId());
}
return flag;
}
/**
* 修改立项及成本-成本预算-变更记录
*
* @param bo 立项及成本-成本预算-变更记录
* @return 是否修改成功
*/
@Override
public Boolean updateByBo(XzdCbysZtjhcbBgjlBo bo) {
XzdCbysZtjhcbBgjl update = MapstructUtils.convert(bo, XzdCbysZtjhcbBgjl.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(XzdCbysZtjhcbBgjl entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 校验并批量删除立项及成本-成本预算-变更记录信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteByIds(ids) > 0;
}
}

View File

@ -0,0 +1,105 @@
package org.dromara.xzd.fapiaotaizhang.zengzhishui.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.vo.AppreciationInvoiceVo;
import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.bo.AppreciationInvoiceBo;
import org.dromara.xzd.fapiaotaizhang.zengzhishui.service.IAppreciationInvoiceService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 增值税发票
*
* @author Lion Li
* @date 2025-10-17
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/zengzhishui/invoice")
public class AppreciationInvoiceController extends BaseController {
private final IAppreciationInvoiceService appreciationInvoiceService;
/**
* 查询增值税发票列表
*/
@SaCheckPermission("zengzhishui:invoice:list")
@GetMapping("/list")
public TableDataInfo<AppreciationInvoiceVo> list(AppreciationInvoiceBo bo, PageQuery pageQuery) {
return appreciationInvoiceService.queryPageList(bo, pageQuery);
}
/**
* 导出增值税发票列表
*/
@SaCheckPermission("zengzhishui:invoice:export")
@Log(title = "增值税发票", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(AppreciationInvoiceBo bo, HttpServletResponse response) {
List<AppreciationInvoiceVo> list = appreciationInvoiceService.queryList(bo);
ExcelUtil.exportExcel(list, "增值税发票", AppreciationInvoiceVo.class, response);
}
/**
* 获取增值税发票详细信息
*
* @param id 主键
*/
@SaCheckPermission("zengzhishui:invoice:query")
@GetMapping("/{id}")
public R<AppreciationInvoiceVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long id) {
return R.ok(appreciationInvoiceService.queryById(id));
}
/**
* 新增增值税发票
*/
@SaCheckPermission("zengzhishui:invoice:add")
@Log(title = "增值税发票", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody AppreciationInvoiceBo bo) {
return toAjax(appreciationInvoiceService.insertByBo(bo));
}
/**
* 修改增值税发票
*/
@SaCheckPermission("zengzhishui:invoice:edit")
@Log(title = "增值税发票", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody AppreciationInvoiceBo bo) {
return toAjax(appreciationInvoiceService.updateByBo(bo));
}
/**
* 删除增值税发票
*
* @param ids 主键串
*/
@SaCheckPermission("zengzhishui:invoice:remove")
@Log(title = "增值税发票", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(appreciationInvoiceService.deleteWithValidByIds(List.of(ids), true));
}
}

View File

@ -0,0 +1,105 @@
package org.dromara.xzd.fapiaotaizhang.zengzhishui.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.web.core.BaseController;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import org.dromara.common.log.enums.BusinessType;
import org.dromara.common.excel.utils.ExcelUtil;
import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.vo.TaxInfoVo;
import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.bo.TaxInfoBo;
import org.dromara.xzd.fapiaotaizhang.zengzhishui.service.ITaxInfoService;
import org.dromara.common.mybatis.core.page.TableDataInfo;
/**
* 征税项目
*
* @author Lion Li
* @date 2025-10-17
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/zengzhishui/info")
public class TaxInfoController extends BaseController {
private final ITaxInfoService taxInfoService;
/**
* 查询征税项目列表
*/
@SaCheckPermission("zengzhishui:info:list")
@GetMapping("/list")
public TableDataInfo<TaxInfoVo> list(TaxInfoBo bo, PageQuery pageQuery) {
return taxInfoService.queryPageList(bo, pageQuery);
}
/**
* 导出征税项目列表
*/
@SaCheckPermission("zengzhishui:info:export")
@Log(title = "征税项目", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(TaxInfoBo bo, HttpServletResponse response) {
List<TaxInfoVo> list = taxInfoService.queryList(bo);
ExcelUtil.exportExcel(list, "征税项目", TaxInfoVo.class, response);
}
/**
* 获取征税项目详细信息
*
* @param levyCode 主键
*/
@SaCheckPermission("zengzhishui:info:query")
@GetMapping("/{levyCode}")
public R<TaxInfoVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable String levyCode) {
return R.ok(taxInfoService.queryById(levyCode));
}
/**
* 新增征税项目
*/
@SaCheckPermission("zengzhishui:info:add")
@Log(title = "征税项目", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody TaxInfoBo bo) {
return toAjax(taxInfoService.insertByBo(bo));
}
/**
* 修改征税项目
*/
@SaCheckPermission("zengzhishui:info:edit")
@Log(title = "征税项目", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody TaxInfoBo bo) {
return toAjax(taxInfoService.updateByBo(bo));
}
/**
* 删除征税项目
*
* @param levyCodes 主键串
*/
@SaCheckPermission("zengzhishui:info:remove")
@Log(title = "征税项目", businessType = BusinessType.DELETE)
@DeleteMapping("/{levyCodes}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable String[] levyCodes) {
return toAjax(taxInfoService.deleteWithValidByIds(List.of(levyCodes), true));
}
}

View File

@ -0,0 +1,210 @@
package org.dromara.xzd.fapiaotaizhang.zengzhishui.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serial;
/**
* 增值税发票对象 appreciation_invoice
*
* @author Lion Li
* @date 2025-10-17
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("appreciation_invoice")
public class AppreciationInvoice extends BaseEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id")
private Long id;
/**
* 发票类型
*/
private String invoiceType;
/**
* 项目
*/
private Long project;
/**
* 合同号 承包合同
*/
private Long contractNo;
/**
* 录入日期
*/
private LocalDate entryDate;
/**
* 年度
*/
private Long year;
/**
* 会计期
*/
private Long accountingPeriod;
/**
* 销项类型
*/
private String taxType;
/**
* 征税项目
*/
private Long taxItem;
/**
* 所属组织
*/
private Long organization;
/**
* 经办人
*/
private Long handler;
/**
* 发票用途
*/
private String invoicePurpose;
/**
* 发票代码
*/
private String invoiceCode;
/**
* 发票号码
*/
private String invoiceNo;
/**
* 开票日期
*/
private LocalDate invoiceDate;
/**
* 公司税号
*/
private String companyTaxNo;
/**
* 公司名称
*/
private String companyName;
/**
* 金额
*/
private BigDecimal amount;
/**
* 税额
*/
private BigDecimal taxAmount;
/**
* 税率
*/
private BigDecimal taxRate;
/**
* 价税合计
*/
private BigDecimal totalAmount;
/**
* 购方税号
*/
private String buyerTaxNo;
/**
* 购方名称
*/
private Long buyerName;
/**
* 购方纳税人名称
*/
private String buyerTaxpayerName;
/**
* 跨区涉税报告
*/
private String crossTaxReport;
/**
* 3%征收率减按2%征收标识0为否1为是
*/
private Long percentageCharges;
/**
* 减征额
*/
private BigDecimal deductionAmount;
/**
* 拆分标志
*/
private String splitFlag;
/**
* 校验码
*/
private String checkCode;
/**
* 机器编码
*/
private String machineCode;
/**
* 备注信息1
*/
private String remark1;
/**
* 备注信息2
*/
private String remark2;
/**
* 数电票号码
*/
private String electronicInvoiceNo;
/**
* 文件ID
*/
private String fileId;
/**
* 备注
*/
private String remark;
/**
* 审核状态
*/
private String auditStatus;
}

View File

@ -0,0 +1,44 @@
package org.dromara.xzd.fapiaotaizhang.zengzhishui.domain;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 征税项目对象 tax_info
*
* @author Lion Li
* @date 2025-10-17
*/
@Data
@TableName("tax_info")
public class TaxInfo {
@Serial
private static final long serialVersionUID = 1L;
/**
* 征收编码
*/
private String levyCode;
/**
* 征收方式
*/
private String levyMethod;
/**
* 征税项目
*/
private String taxItem;
/**
* 税率
*/
private String taxRate;
}

View File

@ -0,0 +1,209 @@
package org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.bo;
import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.AppreciationInvoice;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
* 增值税发票业务对象 appreciation_invoice
*
* @author Lion Li
* @date 2025-10-17
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = AppreciationInvoice.class, reverseConvertGenerate = false)
public class AppreciationInvoiceBo extends BaseEntity {
/**
* 主键ID
*/
@NotNull(message = "主键ID不能为空", groups = { EditGroup.class })
private Long id;
/**
* 发票类型
*/
private String invoiceType;
/**
* 项目
*/
private Long project;
/**
* 合同号 承包合同
*/
private Long contractNo;
/**
* 录入日期
*/
private LocalDate entryDate;
/**
* 年度
*/
private Long year;
/**
* 会计期
*/
private Long accountingPeriod;
/**
* 销项类型
*/
private String taxType;
/**
* 征税项目
*/
private Long taxItem;
/**
* 所属组织
*/
private Long organization;
/**
* 经办人
*/
private Long handler;
/**
* 发票用途
*/
private String invoicePurpose;
/**
* 发票代码
*/
private String invoiceCode;
/**
* 发票号码
*/
private String invoiceNo;
/**
* 开票日期
*/
private LocalDate invoiceDate;
/**
* 公司税号
*/
private String companyTaxNo;
/**
* 公司名称
*/
private String companyName;
/**
* 金额
*/
private BigDecimal amount;
/**
* 税额
*/
private BigDecimal taxAmount;
/**
* 税率
*/
private BigDecimal taxRate;
/**
* 价税合计
*/
private BigDecimal totalAmount;
/**
* 购方税号
*/
private String buyerTaxNo;
/**
* 购方名称
*/
private Long buyerName;
/**
* 购方纳税人名称
*/
private String buyerTaxpayerName;
/**
* 跨区涉税报告
*/
private String crossTaxReport;
/**
* 3%征收率减按2%征收标识0为否1为是
*/
private Long percentageCharges;
/**
* 减征额
*/
private BigDecimal deductionAmount;
/**
* 拆分标志
*/
private String splitFlag;
/**
* 校验码
*/
private String checkCode;
/**
* 机器编码
*/
private String machineCode;
/**
* 备注信息1
*/
private String remark1;
/**
* 备注信息2
*/
private String remark2;
/**
* 数电票号码
*/
private String electronicInvoiceNo;
/**
* 文件ID
*/
private String fileId;
/**
* 备注
*/
private String remark;
/**
* 审核状态
*/
private String auditStatus;
}

View File

@ -0,0 +1,43 @@
package org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.bo;
import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.TaxInfo;
import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.common.core.validate.AddGroup;
import org.dromara.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
/**
* 征税项目业务对象 tax_info
*
* @author Lion Li
* @date 2025-10-17
*/
@Data
@AutoMapper(target = TaxInfo.class, reverseConvertGenerate = false)
public class TaxInfoBo {
/**
* 征收编码
*/
private String levyCode;
/**
* 征收方式
*/
private String levyMethod;
/**
* 征税项目
*/
private String taxItem;
/**
* 税率
*/
private String taxRate;
}

View File

@ -0,0 +1,295 @@
package org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.vo;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.AppreciationInvoice;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 增值税发票视图对象 appreciation_invoice
*
* @author Lion Li
* @date 2025-10-17
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = AppreciationInvoice.class)
public class AppreciationInvoiceVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@ExcelProperty(value = "主键ID")
private Long id;
/**
* 发票类型
*/
@ExcelProperty(value = "发票类型")
private String invoiceType;
/**
* 项目
*/
@ExcelProperty(value = "项目")
private Long project;
/**
* 项目名称
*/
@ExcelProperty(value = "项目名称")
private String projectName;
/**
* 合同号 承包合同
*/
@ExcelProperty(value = "合同号 承包合同")
private Long contractNo;
/**
* 合同号 承包合同编码
*/
@ExcelProperty(value = "合同号 承包合同编码")
private String contractNoName;
/**
* 录入日期
*/
@ExcelProperty(value = "录入日期")
private LocalDate entryDate;
/**
* 年度
*/
@ExcelProperty(value = "年度")
private Long year;
/**
* 会计期
*/
@ExcelProperty(value = "会计期")
private Long accountingPeriod;
/**
* 销项类型
*/
@ExcelProperty(value = "销项类型")
private String taxType;
/**
* 征税项目
*/
@ExcelProperty(value = "征税项目")
private Long taxItem;
/**
* 征税项目名称
*/
@ExcelProperty(value = "征税项目名称")
private String taxItemName;
/**
* 所属组织
*/
@ExcelProperty(value = "所属组织")
private Long organization;
/**
* 所属组织名称
*/
@ExcelProperty(value = "所属组织名称")
@Translation(type = TransConstant.DEPT_ID_TO_NAME, mapper = "organization")
private String organizationName;
/**
* 经办人
*/
@ExcelProperty(value = "经办人")
private Long handler;
/**
* 经办人名称
*/
@ExcelProperty(value = "经办人名称")
@Translation(type = TransConstant.USER_ID_TO_NICKNAME, mapper = "handler")
private String handlerNme;
/**
* 发票用途
*/
@ExcelProperty(value = "发票用途")
private String invoicePurpose;
/**
* 发票代码
*/
@ExcelProperty(value = "发票代码")
private String invoiceCode;
/**
* 发票号码
*/
@ExcelProperty(value = "发票号码")
private String invoiceNo;
/**
* 开票日期
*/
@ExcelProperty(value = "开票日期")
private LocalDate invoiceDate;
/**
* 公司税号
*/
@ExcelProperty(value = "公司税号")
private String companyTaxNo;
/**
* 公司名称
*/
@ExcelProperty(value = "公司名称")
private String companyName;
/**
* 金额
*/
@ExcelProperty(value = "金额")
private BigDecimal amount;
/**
* 税额
*/
@ExcelProperty(value = "税额")
private BigDecimal taxAmount;
/**
* 税率
*/
@ExcelProperty(value = "税率")
private BigDecimal taxRate;
/**
* 价税合计
*/
@ExcelProperty(value = "价税合计")
private BigDecimal totalAmount;
/**
* 购方税号
*/
@ExcelProperty(value = "购方税号")
private String buyerTaxNo;
/**
* 购方名称(客户id)
*/
@ExcelProperty(value = "购方名称 id")
private Long buyerName;
/**
* 购方名称
*/
@ExcelProperty(value = "购方名称")
private String buyerNameS;
/**
* 购方纳税人名称
*/
@ExcelProperty(value = "购方纳税人名称")
private String buyerTaxpayerName;
/**
* 跨区涉税报告
*/
@ExcelProperty(value = "跨区涉税报告")
private String crossTaxReport;
/**
* 3%征收率减按2%征收标识0为否1为是
*/
@ExcelProperty(value = "3%征收率减按2%征收标识", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "0=为否1为是")
private Long percentageCharges;
/**
* 减征额
*/
@ExcelProperty(value = "减征额")
private BigDecimal deductionAmount;
/**
* 拆分标志
*/
@ExcelProperty(value = "拆分标志")
private String splitFlag;
/**
* 校验码
*/
@ExcelProperty(value = "校验码")
private String checkCode;
/**
* 机器编码
*/
@ExcelProperty(value = "机器编码")
private String machineCode;
/**
* 备注信息1
*/
@ExcelProperty(value = "备注信息1")
private String remark1;
/**
* 备注信息2
*/
@ExcelProperty(value = "备注信息2")
private String remark2;
/**
* 数电票号码
*/
@ExcelProperty(value = "数电票号码")
private String electronicInvoiceNo;
/**
* 文件ID
*/
@ExcelProperty(value = "文件ID")
private String fileId;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 审核状态
*/
@ExcelProperty(value = "审核状态")
private String auditStatus;
}

View File

@ -0,0 +1,56 @@
package org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.vo;
import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.TaxInfo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 征税项目视图对象 tax_info
*
* @author Lion Li
* @date 2025-10-17
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = TaxInfo.class)
public class TaxInfoVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 征收编码
*/
@ExcelProperty(value = "征收编码")
private String levyCode;
/**
* 征收方式
*/
@ExcelProperty(value = "征收方式")
private String levyMethod;
/**
* 征税项目
*/
@ExcelProperty(value = "征税项目")
private String taxItem;
/**
* 税率
*/
@ExcelProperty(value = "税率")
private String taxRate;
}

View File

@ -0,0 +1,15 @@
package org.dromara.xzd.fapiaotaizhang.zengzhishui.mapper;
import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.AppreciationInvoice;
import org.dromara.xzd.fapiaotaizhang.zengzhishui.domain.vo.AppreciationInvoiceVo;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 增值税发票Mapper接口
*
* @author Lion Li
* @date 2025-10-17
*/
public interface AppreciationInvoiceMapper extends BaseMapperPlus<AppreciationInvoice, AppreciationInvoiceVo> {
}

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