类
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
public class Project extends BaseModel {
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
@ApiModelProperty(value = "主键id")
@TableId
private Long id;
/**
* 项目名称
*/
@ApiModelProperty(value = "项目名称")
private String projName;
/**
* 项目类别(0-新建项目、1-续建项目、2-运维服务类项目、3-其他)
*/
@ApiModelProperty(value = "项目类别(0-新建项目、1-续建项目、2-运维服务类项目、3-其他)")
private Integer projType;
/**
* 建设单位
*/
@ApiModelProperty(value = "建设单位")
private String buildDept;
/**
* 项目总金额
*/
@ApiModelProperty(value = "项目总金额")
private BigDecimal projAmount;
/**
* 资金来源(0-财政资金、1-自筹资金、2-上级补助、3-其他)
*/
@ApiModelProperty(value = "资金来源(0-财政资金、1-自筹资金、2-上级补助、3-其他)")
private Integer fundSource;
/**
* 项目资金安排年度
*/
@ApiModelProperty(value = "项目资金安排年度")
private String projFundYear;
/**
* 周期属性(0-一次性项目、1-经常性项目)
*/
@ApiModelProperty(value = "周期属性(0-一次性项目、1-经常性项目)")
private Integer cycleType;
/**
* 项目周期(开始时间)
*/
@ApiModelProperty(value = "项目周期(开始时间)")
private String projCycleStart;
/**
* 项目周期(截止时间)
*/
@ApiModelProperty(value = "项目周期(截止时间)")
private String projCycleEnd;
/**
* 是否部署政务云:0-是/1-否
*/
@ApiModelProperty(value = "是否部署政务云:0-是/1-否")
private Integer ifDeployGovernment;
/**
* 是否监控视频类:0-是/1-否
*/
@ApiModelProperty(value = "是否监控视频类:0-是/1-否")
private Integer ifMonitorVideo;
/**
* 项目情况
*/
@ApiModelProperty(value = "项目情况")
private String projSituation;
/**
* 项目负责人: 项目负责人的真实姓名
*/
@ApiModelProperty(value = "项目负责人: 项目负责人的真实姓名")
private String projLeaderName;
/**
* 项目负责人电话
*/
@ApiModelProperty(value = "项目负责人电话")
private String projLeaderPhone;
/**
* 项目联系人: 项目联系人的真实姓名
*/
@ApiModelProperty(value = "项目联系人: 项目联系人的真实姓名")
private String projContactName;
/**
* 项目联系人电话
*/
@ApiModelProperty(value = "项目联系人电话")
private String projContactPhone;
/**
* 创建时间
*/
@ApiModelProperty(value = "创建时间")
@JsonFormat(pattern = DateUtil.DATETIME_FORMAT)
private Date createTime;
/**
* 创建人
*/
@ApiModelProperty(value = "创建人")
private Long createUser;
/**
* 修改时间
*/
@ApiModelProperty(value = "修改时间")
@JsonFormat(pattern = DateUtil.DATETIME_FORMAT)
private Date updateTime;
/**
* 修改人员
*/
@ApiModelProperty(value = "修改人员")
private Long updateUser;
/**
* 所属部门
*/
@ApiModelProperty(value = "所属部门")
private Long belongDept;
/**
* 项目状态:0-分为立项备案、1-合同备案、2-系统备案、3-验收通过、4-验收不通过(部门可以点击查看具体原因)、5-废弃待审、6-已废弃、7-废弃不通过
*/
@ApiModelProperty(value = "项目状态:0-分为立项备案、1-合同备案、2-系统备案、3-验收通过、4-验收不通过(部门可以点击查看具体原因)、5-废弃待审、6-已废弃、7-废弃不通过")
private Integer projState;
/**
* 项目赋码
*/
@ApiModelProperty(value = "项目赋码")
private String projNum;
/**
* 年度项目需要安排资金
*/
@ApiModelProperty(value = "年度项目需要安排资金")
private String yearProjFund;
@ApiModelProperty(value = "项目流程 " +
"0-项目申报、\n" +
"1-项目评审、\n" +
"2-项目建设、\n" +
"3-项目招标、\n" +
"4-项目签约,\n" +
"5-财政拨款(首付),\n" +
"6-项目动工,\n" +
"7-项目初验,\n" +
"8-财政拨款(初验),\n" +
"9-项目终验,\n" +
"10-财政拨款(终验),\n" +
"11-项目质保,\n" +
"12-财政拨款(质保),\n" +
"13-项目完成")
private Integer type;
@ApiModelProperty(value = "是否曾经备案验收成功(0-否、1-是)")
private Integer ifSuccess;
@ApiModelProperty(value = "电子邮箱")
private String email;
@ApiModelProperty(value = "建设必要性和依据")
private String constructionBasis;
@ApiModelProperty(value = "市公共财政预算")
private String municipalBudget;
@ApiModelProperty(value = "其它财政性资金")
private String otherBudget;
@ApiModelProperty(value = "自筹")
private String raise;
@ApiModelProperty(value = "合计")
private String sum;
@ApiModelProperty(value = "计划工期")
private String startPlannedDuration;
@ApiModelProperty(value = "计划工期")
private String endPlannedDuration;
@ApiModelProperty(value = "本年度工期")
private String startYearPlannedDuration;
@ApiModelProperty(value = "本年度工期")
private String endYearPlannedDuration;
@ApiModelProperty(value = "总投资估算")
private String totalInvestmentEstimation;
@ApiModelProperty(value = "已完成投资")
private String completedInvestment;
@ApiModelProperty(value = "建设方案文件上传,多文件之间uuid用,分割")
private String constructionSchemeUuid;
@ApiModelProperty(value = "预算清单文件上传,多文件之间uuid用,分割")
private String detailedListUuid;
@ApiModelProperty(value = "招标文件文件上传,多文件之间uuid用,分割")
private String biddingDocumentsUuid;
@ApiModelProperty(value = "文件上传,多文件之间uuid用,分割")
private String projUuid;
@ApiModelProperty(value = "项目流程 " +
"0-项目申报、\n" +
"1-项目评审、\n" +
"2-项目建设、\n" +
"3-项目招标、\n" +
"4-项目签约,\n" +
"5-财政拨款(首付),\n" +
"6-项目动工,\n" +
"7-项目初验,\n" +
"8-财政拨款(初验),\n" +
"9-项目终验,\n" +
"10-财政拨款(终验),\n" +
"11-项目质保,\n" +
"12-财政拨款(质保),\n" +
"13-项目完成")
private Integer projectType;
}
使用方法
public Boolean updateProject(Project project, Long userId) throws BizException, IllegalAccessException {
// 查询之前项目数据
Project projectServiceById = projectService.getById(project.getId());
Date date = new Date();
project.setUpdateTime(new Date()).setUpdateUser(userId);
boolean update = projectService.updateById(project);
Assert.notTrue(update, "更新失败!");
// ----------------记录字段变更-----------------
Field[] fieldsBefore = projectServiceById.getClass().getDeclaredFields();
Field[] fieldsAfter = project.getClass().getDeclaredFields();
List<ProjectUpdateDetails> detailsList = new ArrayList<>();
for (int i = 0; i < fieldsBefore.length; i++) {
fieldsBefore[i].setAccessible(true);
fieldsAfter[i].setAccessible(true);
Object ofieldsBefore = fieldsBefore[i].get(projectServiceById);
Object ofieldsAfter = fieldsAfter[i].get(project);
if (ofieldsAfter != null && !ofieldsBefore.equals(ofieldsAfter)) {
// 值有所变更,开始执行变更记录存储
ProjectUpdateDetails projectUpdateDetails = new ProjectUpdateDetails()
.setProjId(project.getId())
.setParamName(fieldsBefore[i].getName())
.setBeforeDetails(ofieldsBefore.toString())
.setAfterDetails(ofieldsAfter.toString())
.setCreateTime(date)
.setCreateUser(userId)
.setProjectType(projectServiceById.getProjectType());
detailsList.add(projectUpdateDetails);
}
}
if (detailsList.size() > 0) {
projectUpdateDetailsService.addUpdateDetails(detailsList);
}
// 开始存储消息
List<Long> userList = new ArrayList<>();
userList.add(userId);
AddMessageDto addMessageDto = new AddMessageDto().setTitle("更新项目成功!")
.setContent("您于"+ date + "时更新项目【"+project.getProjName() + "】成功!")
.setType(2)
.setCreateUser(userId)
.setBelongUserList(userList);
messageService.addMessage(addMessageDto);
return true;
}