This commit is contained in:
1073413548 2024-08-09 15:27:34 +08:00
parent f89752942f
commit cb62db6484
67 changed files with 3596 additions and 58 deletions

View File

@ -3,6 +3,8 @@ package com.pusong.business.controller;
import java.util.List;
import com.pusong.business.domain.bo.PsContractInfoQueryBo;
import com.pusong.business.domain.vo.PsContractBusinessVo;
import com.pusong.business.service.IPsContractBusinessService;
import com.pusong.common.core.validate.QueryGroup;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
@ -39,6 +41,7 @@ import javax.management.Query;
public class PsContractInfoController extends BaseController {
private final IPsContractInfoService psContractInfoService;
private final IPsContractBusinessService businessService;
/**
@ -85,7 +88,7 @@ public class PsContractInfoController extends BaseController {
/**
* 根据合同编码查询合同信息
*/
@SaCheckPermission("business:contractInfo:add")
@SaCheckPermission("business:contractInfo:list")
@Log(title = "根据合同编码查询合同信息", businessType = BusinessType.INSERT)
@RepeatSubmit()
@GetMapping("/queryContractByCode")
@ -125,6 +128,17 @@ public class PsContractInfoController extends BaseController {
public R<Boolean> restart(@NotBlank String contractCode) {
return R.ok(psContractInfoService.restart(contractCode));
}
/**
* 根据合同编码查询服务信息
*/
@SaCheckPermission("business:contractInfo:list")
@Log(title = "根据合同编码查询合同信息", businessType = BusinessType.INSERT)
@RepeatSubmit()
@GetMapping("/queryServiceByCode")
public R<List<PsContractBusinessVo>> queryServiceByCode(@NotBlank String contractCode) {
return R.ok(businessService.selectBusinessList(contractCode));
}
//
// /**
// * 获取合同基本信息详细信息

View File

@ -0,0 +1,108 @@
package com.pusong.business.controller;
import cn.dev33.satoken.annotation.SaCheckPermission;
import com.pusong.business.domain.bo.PsContractInfoBo;
import com.pusong.business.domain.bo.PsContractInfoQueryBo;
import com.pusong.business.domain.bo.PsContractPayBo;
import com.pusong.business.domain.vo.PsContractInfoVo;
import com.pusong.business.service.IPsContractInfoService;
import com.pusong.business.service.IPsContractOperateService;
import com.pusong.business.service.IPsContractPayService;
import com.pusong.common.core.domain.R;
import com.pusong.common.core.validate.AddGroup;
import com.pusong.common.core.validate.EditGroup;
import com.pusong.common.idempotent.annotation.RepeatSubmit;
import com.pusong.common.log.annotation.Log;
import com.pusong.common.log.enums.BusinessType;
import com.pusong.common.mybatis.core.page.PageQuery;
import com.pusong.common.mybatis.core.page.TableDataInfo;
import com.pusong.common.web.core.BaseController;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/**
* 合同操作controller
*
* @author wls
* @date 2024-07-29
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/business/contractOperate")
public class PsContractOperateController extends BaseController {
private final IPsContractPayService payService;
private final IPsContractOperateService operateService;
/**
* 合同签章
*
* @param contractCode 合同编码
*/
@SaCheckPermission("business:contractOperate:sign")
@GetMapping("/sign")
public R<Void> getInfo(@NotBlank String contractCode ) {
operateService.sign(contractCode);
return R.ok();
}
/**
* 合同添加回款记录
*/
@SaCheckPermission("business:contractOperate:addPayRecord")
@PostMapping(value = "/addPayRecord", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public R<Void> addPayRecord(@RequestPart("files") List<MultipartFile> files,
@Validated(AddGroup.class) PsContractPayBo psContractPayBo)throws Exception {
payService.addPay( files, psContractPayBo);
return R.ok();
}
/**
* 回传合同
*/
@SaCheckPermission("business:contractOperate:rollBack")
@PostMapping(value = "/rollBack", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public R<Void> rollBack(@RequestPart("file") MultipartFile file,@NotBlank String contractCode )throws Exception {
operateService.rollbackContract( file, contractCode);
return R.ok();
}
//
// /**
// * 获取合同基本信息详细信息
// *
// * @param id 主键
// */
// @SaCheckPermission("business:contractInfo:query")
// @GetMapping("/{id}")
// public R<PsContractInfoVo> getInfo(@NotNull(message = "主键不能为空")
// @PathVariable Long id) {
// return R.ok(psContractInfoService.queryById(id));
// }
//
//
// /**
// * 修改合同基本信息
// */
// @SaCheckPermission("business:contractInfo:edit")
// @Log(title = "合同基本信息", businessType = BusinessType.UPDATE)
// @RepeatSubmit()
// @PutMapping()
// public R<Void> edit(@Validated(EditGroup.class) @RequestBody PsContractInfoBo bo) {
// return toAjax(psContractInfoService.updateByBo(bo));
// }
}

View File

@ -0,0 +1,203 @@
package com.pusong.business.controller;
import com.pusong.business.domain.PsTaskAppoint;
import com.pusong.business.domain.bo.AppointBo;
import com.pusong.business.domain.bo.MediaCompanySaveBo;
import com.pusong.business.domain.bo.PsTaskQueryBo;
import com.pusong.business.domain.vo.PsTaskAppointVo;
import com.pusong.common.core.domain.R;
import com.pusong.common.core.validate.QueryGroup;
import com.pusong.common.log.annotation.Log;
import com.pusong.common.log.enums.BusinessType;
import lombok.RequiredArgsConstructor;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.jetbrains.annotations.NotNull;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import com.pusong.common.web.core.BaseController;
import com.pusong.common.mybatis.core.page.PageQuery;
import com.pusong.business.domain.vo.PsTaskMainVo;
import com.pusong.business.service.IPsTaskService;
import com.pusong.common.mybatis.core.page.TableDataInfo;
import java.util.List;
import java.util.Map;
/**
* 任务controller
*
* @author wls
* @date 2024-08-07
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/business/task")
public class PsTaskController extends BaseController {
private final IPsTaskService psTaskMainService;
/**
* 查询主任务列表
*/
@Log(title = "查询主任务列表")
@SaCheckPermission("business:task:list")
@GetMapping("/list")
public TableDataInfo<PsTaskMainVo> list(PsTaskQueryBo bo, PageQuery pageQuery) {
return psTaskMainService.queryPageList(bo, pageQuery);
}
/**
* 查询内外特任务列表
*/
@Log(title = "查询内外特任务列表")
@SaCheckPermission("business:task:list")
@GetMapping("/childList")
public TableDataInfo<PsTaskMainVo> childList(@Validated(QueryGroup.class) PsTaskQueryBo bo, PageQuery pageQuery) {
return psTaskMainService.queryChildPageList(bo, pageQuery);
}
/**
* 根据任务id查询任务的公司信息和资料信息
*/
@Log(title = "根据任务id查询任务的公司信息和资料信息")
@SaCheckPermission("business:task:list")
@GetMapping("/info")
public R<PsTaskMainVo> info(@NotNull Long id) {
return R.ok(psTaskMainService.queryInfo(id));
}
/**
* 上传资料和公司信息
*/
@Log(title = "上传资料和公司信息")
@SaCheckPermission("business:task:list")
@PostMapping("/saveInfo")
public R<Void> saveInfo( @RequestBody MediaCompanySaveBo save) {
psTaskMainService.saveInfo(save);
return R.ok();
}
/**
* 任务委派
*/
@Log(title = "任务委派")
@SaCheckPermission("business:task:list")
@PostMapping("/appoint")
public R<Void> appoint(@Validated @RequestBody AppointBo appointBo) {
psTaskMainService.appoint(appointBo);
return R.ok();
}
/**
* 主任务完成
* @param id 主任务id
* @return
*/
@Log(title = "主任务完成")
@SaCheckPermission("business:task:list")
@GetMapping("/mainFinish")
public R<Void> mainFinish(@NotNull Long id) {
psTaskMainService.finishMain(id);
return R.ok();
}
/**
* 子任务完成
* @param id 子任务id
* @param desc 特勤备注
* @return
*/
@Log(title = "子任务完成")
@SaCheckPermission("business:task:list")
@GetMapping("/childFinish")
public R<Void> childFinish(@NotNull Long id,String desc) {
psTaskMainService.finishChild(id,desc);
return R.ok();
}
/**
* 获取任务执行者列表
* @param id 任务id
* @return
*/
@Log(title = "获取任务执行者列表")
@SaCheckPermission("business:task:list")
@GetMapping("/executors")
public R<Map<String, PsTaskAppointVo>> executors(@NotNull Long id) {
return R.ok(psTaskMainService.getExecutors(id));
}
/**
* 任务改派
* @param id 任务委派表id
* @param executorId 任务新的执行者id
* @return
*/
@Log(title = "任务改派")
@SaCheckPermission("business:task:list")
@GetMapping("/reset")
public R<Void> taskReset(@NotNull Long id,@NotNull Long executorId) {
psTaskMainService.taskReset(id, executorId);
return R.ok();
}
// /**
// * 导出主任务列表
// */
// @SaCheckPermission("business:taskMain:export")
// @Log(title = "主任务", businessType = BusinessType.EXPORT)
// @PostMapping("/export")
// public void export(PsTaskMainBo bo, HttpServletResponse response) {
// List<PsTaskMainVo> list = psTaskMainService.queryList(bo);
// ExcelUtil.exportExcel(list, "主任务", PsTaskMainVo.class, response);
// }
//
// /**
// * 获取主任务详细信息
// *
// * @param id 主键
// */
// @SaCheckPermission("business:taskMain:query")
// @GetMapping("/{id}")
// public R<PsTaskMainVo> getInfo(@NotNull(message = "主键不能为空")
// @PathVariable Long id) {
// return R.ok(psTaskMainService.queryById(id));
// }
//
// /**
// * 新增主任务
// */
// @SaCheckPermission("business:taskMain:add")
// @Log(title = "主任务", businessType = BusinessType.INSERT)
// @RepeatSubmit()
// @PostMapping()
// public R<Void> add(@Validated(AddGroup.class) @RequestBody PsTaskMainBo bo) {
// return toAjax(psTaskMainService.insertByBo(bo));
// }
//
// /**
// * 修改主任务
// */
// @SaCheckPermission("business:taskMain:edit")
// @Log(title = "主任务", businessType = BusinessType.UPDATE)
// @RepeatSubmit()
// @PutMapping()
// public R<Void> edit(@Validated(EditGroup.class) @RequestBody PsTaskMainBo bo) {
// return toAjax(psTaskMainService.updateByBo(bo));
// }
//
// /**
// * 删除主任务
// *
// * @param ids 主键串
// */
// @SaCheckPermission("business:taskMain:remove")
// @Log(title = "主任务", businessType = BusinessType.DELETE)
// @DeleteMapping("/{ids}")
// public R<Void> remove(@NotEmpty(message = "主键不能为空")
// @PathVariable Long[] ids) {
// return toAjax(psTaskMainService.deleteWithValidByIds(List.of(ids), true));
// }
}

View File

@ -0,0 +1,116 @@
package com.pusong.business.controller;
import java.util.List;
import lombok.RequiredArgsConstructor;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import com.pusong.common.idempotent.annotation.RepeatSubmit;
import com.pusong.common.log.annotation.Log;
import com.pusong.common.web.core.BaseController;
import com.pusong.common.mybatis.core.page.PageQuery;
import com.pusong.common.core.domain.R;
import com.pusong.common.core.validate.AddGroup;
import com.pusong.common.core.validate.EditGroup;
import com.pusong.common.log.enums.BusinessType;
import com.pusong.common.excel.utils.ExcelUtil;
import com.pusong.business.domain.vo.PsTaskWorkRecordVo;
import com.pusong.business.domain.bo.PsTaskWorkRecordBo;
import com.pusong.business.service.IPsTaskWorkRecordService;
import com.pusong.common.mybatis.core.page.TableDataInfo;
/**
* 外勤任务记录
*
* @author wls
* @date 2024-08-09
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/business/taskWorkRecord")
public class PsTaskWorkRecordController extends BaseController {
private final IPsTaskWorkRecordService psTaskWorkRecordService;
/**
* 根据任务委派id查询工作进度列表
*/
@Log(title = "根据任务委派id查询工作进度列表")
@SaCheckPermission("business:taskWorkRecord:list")
@GetMapping("/list")
public R<List<PsTaskWorkRecordVo>> list(@NotNull Long id) {
return R.ok(psTaskWorkRecordService.queryListByAppointId(id));
}
/**
* 新增外勤任务记录
*/
@SaCheckPermission("business:taskWorkRecord:add")
@Log(title = "外勤任务记录", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody PsTaskWorkRecordBo bo) {
return toAjax(psTaskWorkRecordService.insertByBo(bo));
}
// /**
// * 导出外勤任务记录列表
// */
// @SaCheckPermission("business:taskWorkRecord:export")
// @Log(title = "外勤任务记录", businessType = BusinessType.EXPORT)
// @PostMapping("/export")
// public void export(PsTaskWorkRecordBo bo, HttpServletResponse response) {
// List<PsTaskWorkRecordVo> list = psTaskWorkRecordService.queryList(bo);
// ExcelUtil.exportExcel(list, "外勤任务记录", PsTaskWorkRecordVo.class, response);
// }
//
// /**
// * 获取外勤任务记录详细信息
// *
// * @param id 主键
// */
// @SaCheckPermission("business:taskWorkRecord:query")
// @GetMapping("/{id}")
// public R<PsTaskWorkRecordVo> getInfo(@NotNull(message = "主键不能为空")
// @PathVariable Long id) {
// return R.ok(psTaskWorkRecordService.queryById(id));
// }
//
// /**
// * 新增外勤任务记录
// */
// @SaCheckPermission("business:taskWorkRecord:add")
// @Log(title = "外勤任务记录", businessType = BusinessType.INSERT)
// @RepeatSubmit()
// @PostMapping()
// public R<Void> add(@Validated(AddGroup.class) @RequestBody PsTaskWorkRecordBo bo) {
// return toAjax(psTaskWorkRecordService.insertByBo(bo));
// }
//
// /**
// * 修改外勤任务记录
// */
// @SaCheckPermission("business:taskWorkRecord:edit")
// @Log(title = "外勤任务记录", businessType = BusinessType.UPDATE)
// @RepeatSubmit()
// @PutMapping()
// public R<Void> edit(@Validated(EditGroup.class) @RequestBody PsTaskWorkRecordBo bo) {
// return toAjax(psTaskWorkRecordService.updateByBo(bo));
// }
//
// /**
// * 删除外勤任务记录
// *
// * @param ids 主键串
// */
// @SaCheckPermission("business:taskWorkRecord:remove")
// @Log(title = "外勤任务记录", businessType = BusinessType.DELETE)
// @DeleteMapping("/{ids}")
// public R<Void> remove(@NotEmpty(message = "主键不能为空")
// @PathVariable Long[] ids) {
// return toAjax(psTaskWorkRecordService.deleteWithValidByIds(List.of(ids), true));
// }
}

View File

@ -34,7 +34,10 @@ public class PsApproverRecord extends TenantEntity {
* 关联业务id
*/
private String businessId;
/**
* 合同编码
*/
private String contractCode;
/**
* 审批业务类型
*/

View File

@ -7,6 +7,7 @@ import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.io.Serial;
import java.util.Date;
/**
* 公司信息对象 ps_company_info
@ -64,6 +65,70 @@ public class PsCompanyInfo extends TenantEntity {
* 法人电话号
*/
private String legalPersonPhone;
/**
* 纳税人识别号
*/
private String customerNum;
/**
* 纳税人资格
*/
private String customerCert;
/**
* 个税密码
*/
private String companyPersonPassword;
/**
* 税务密码
*/
private String companyTaxPassword;
/**
* 开户行客户经理电话
*/
private String companyBankManagerPhone;
/**
* 刻章公司名称
*/
private String madeSignCompanyName;
/**
* 公司地址详情
*/
private String companyAdressDetail;
/**
* 账套号
*/
private String financeAccountNo;
/**
* 社保开户时间
*/
private Date socialStartDate;
/**
* 公积金开户时间
*/
private Date providentStartDate;
/**
* 营业执照开始时间
*/
private Date licenseStartDate;
/**
* 营业执照结束时间
*/
private Date licenseEndDate;
/**
* 经营范围
*/
private String companyScope;
/**
* 注册资金
*/
private BigDecimal registerAmount;
/**
* 注册类型
*/
private String registerType;
/**
* 发票类型
*/
private String billType;
/**
* 2逻辑删除 0 默认有效
@ -71,4 +136,6 @@ public class PsCompanyInfo extends TenantEntity {
private Long delFlag;
}

View File

@ -119,6 +119,10 @@ public class PsContractInfo extends TenantEntity {
* 合同回传状态CommonStatusEnum
*/
private String rollBackStatus;
/**
* 回传的合同文件ossid
*/
private Long rollBackPdf;
/**
* 合同签章状态CommonStatusEnum

View File

@ -0,0 +1,65 @@
package com.pusong.business.domain;
import com.pusong.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 任务委派对象 ps_task_appoint
*
* @author wls
* @date 2024-08-07
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("ps_task_appoint")
public class PsTaskAppoint extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
@TableId(value = "id")
private Long id;
/**
* 主任务表id
*/
private Long taskId;
/**
* 合同编码
*/
private String contractCode;
/**
* 任务委派类型1内勤,2外勤,3特勤
*/
private String appointType;
/**
* 任务委派状态
*/
private String appointStatus;
/**
* 任务执行者
*/
private Long executor;
/**
* 任务备注
*/
private String taskDesc;
/**
* 2逻辑删除 0 默认有效
*/
@TableLogic
private Long delFlag;
}

View File

@ -0,0 +1,63 @@
package com.pusong.business.domain;
import com.pusong.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serial;
/**
* 主任务对象 ps_task_main
*
* @author wls
* @date 2024-08-07
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("ps_task_main")
public class PsTaskMain extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
@TableId(value = "id")
private Long id;
/**
* 公司id
*/
private Long companyId;
/**
* 合同编码
*/
private String contractCode;
/**
* 任务类型1合同任务,2免费工单,3发票
*/
private String taskType;
/**
* 派单时间
*/
private Date startDate;
/**
* 任务状态
*/
private String taskStatus;
/**
* 2逻辑删除 0 默认有效
*/
@TableLogic
private Long delFlag;
}

View File

@ -0,0 +1,57 @@
package com.pusong.business.domain;
import com.pusong.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 任务资料对象 ps_task_media
*
* @author wls
* @date 2024-08-07
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("ps_task_media")
public class PsTaskMedia extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
@TableId(value = "id")
private Long id;
/**
* 主任务表id
*/
private Long taskId;
/**
* 合同编号
*/
private String contractCode;
/**
* 资料类型
*/
private String mediaType;
/**
* 文件ossid
*/
private String mediaOssId;
/**
* 2逻辑删除 0 默认有效
*/
@TableLogic
private Long delFlag;
}

View File

@ -0,0 +1,79 @@
package com.pusong.business.domain;
import com.pusong.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serial;
/**
* 外勤任务记录对象 ps_task_work_record
*
* @author wls
* @date 2024-08-09
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("ps_task_work_record")
public class PsTaskWorkRecord extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
@TableId(value = "id")
private Long id;
/**
* 任务委派表id
*/
private Long taskAppointId;
/**
* 合同编码
*/
private String contractCode;
/**
* 办理时间
*/
private Date handleDate;
/**
* 办理事项
*/
private String handleInfo;
/**
* 办理进度说明
*/
private String handlePlan;
/**
* 下次办理类型
*/
private String nextType;
/**
* 下次办理描述
*/
private String nextDesc;
/**
* 下次办理时间
*/
private Date nextDate;
/**
* 2逻辑删除 0 默认有效
*/
@TableLogic
private Long delFlag;
}

View File

@ -0,0 +1,29 @@
package com.pusong.business.domain.bo;
import com.pusong.system.domain.bo.SysDictDataBo;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.jetbrains.annotations.NotNull;
@Data
@EqualsAndHashCode
public class AppointBo {
/**
* 任务主表id
*/
@NotNull
private Long id;
/**
* 执行者用户id
*/
@NotNull
private Long userId;
/**
* 任务委派类型1内勤,2外勤,3特勤
*/
@NotBlank
private String AppointType;
}

View File

@ -0,0 +1,27 @@
package com.pusong.business.domain.bo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.jetbrains.annotations.NotNull;
import java.util.List;
@Data
@EqualsAndHashCode
public class MediaCompanySaveBo {
/**
* 主任务表id
*/
@NotNull
private Long id;
/**
* 公司信息
*/
@NotNull
private PsCompanyInfoBo psCompanyInfo;
/**
* 资料信息
*/
private List<PsTaskMediaBo> mediaBoList;
}

View File

@ -18,9 +18,9 @@ import com.fasterxml.jackson.annotation.JsonFormat;
* @date 2024-08-05
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = PsApproverRecord.class, reverseConvertGenerate = false)
public class PsApproverRecordBo extends BaseEntity {
@EqualsAndHashCode
@AutoMapper(target = PsApproverRecord.class)
public class PsApproverRecordBo {
/**
* 主键id
@ -33,7 +33,10 @@ public class PsApproverRecordBo extends BaseEntity {
*/
@NotNull(message = "关联业务id不能为空")
private Long businessId;
/**
* 合同编码
*/
private String contractCode;
/**
* 审批业务类型
*/

View File

@ -1,6 +1,7 @@
package com.pusong.business.domain.bo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pusong.business.domain.PsCompanyInfo;
import com.pusong.common.core.validate.QueryGroup;
import com.pusong.common.mybatis.core.domain.BaseEntity;
@ -11,6 +12,7 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.math.BigDecimal;
import java.util.Date;
/**
* 公司信息业务对象 ps_company_info
@ -69,5 +71,72 @@ public class PsCompanyInfoBo {
*/
private String legalPersonPhone;
/**
* 纳税人识别号
*/
private String customerNum;
/**
* 纳税人资格
*/
private String customerCert;
/**
* 个税密码
*/
private String companyPersonPassword;
/**
* 税务密码
*/
private String companyTaxPassword;
/**
* 开户行客户经理电话
*/
private String companyBankManagerPhone;
/**
* 刻章公司名称
*/
private String madeSignCompanyName;
/**
* 公司地址详情
*/
private String companyAdressDetail;
/**
* 账套号
*/
private String financeAccountNo;
/**
* 社保开户时间
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private Date socialStartDate;
/**
* 公积金开户时间
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private Date providentStartDate;
/**
* 营业执照开始时间
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private Date licenseStartDate;
/**
* 营业执照结束时间
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private Date licenseEndDate;
/**
* 经营范围
*/
private String companyScope;
/**
* 注册资金
*/
private BigDecimal registerAmount;
/**
* 注册类型
*/
private String registerType;
/**
* 发票类型
*/
private String billType;
}

View File

@ -17,9 +17,9 @@ import java.math.BigDecimal;
* @date 2024-07-29
*/
@Data
@EqualsAndHashCode(callSuper = true)
@EqualsAndHashCode
@AutoMapper(target = PsContractBusinessDetail.class)
public class PsContractBusinessDetailBo extends BaseEntity {
public class PsContractBusinessDetailBo {
/**
* 主键id

View File

@ -52,6 +52,15 @@ public class PsContractInfoQueryBo {
*/
private String contractStatus;
/**
* 合同状态(in)
*/
private List<String> inContractStatus;
/**
* 合同状态(not in)
*/
private List<String> notInContractStatus;

View File

@ -19,9 +19,9 @@ import com.fasterxml.jackson.annotation.JsonFormat;
* @date 2024-08-01
*/
@Data
@EqualsAndHashCode(callSuper = true)
@EqualsAndHashCode
@AutoMapper(target = PsContractPay.class)
public class PsContractPayBo extends BaseEntity {
public class PsContractPayBo {
/**
* 主键id
@ -70,11 +70,11 @@ public class PsContractPayBo extends BaseEntity {
@NotBlank(message = "收款主体不能为空", groups = { AddGroup.class, EditGroup.class })
private String gathMain;
/**
* 回款凭证(多个时用逗号分隔)
*/
@NotBlank(message = "回款凭证(多个时用逗号分隔)不能为空", groups = { AddGroup.class, EditGroup.class })
private String payCertification;
// /**
// * 回款凭证(多个时用逗号分隔)
// */
// @NotBlank(message = "回款凭证(多个时用逗号分隔)不能为空", groups = { AddGroup.class, EditGroup.class })
// private String payCertification;
/**
* 回款备注

View File

@ -18,9 +18,9 @@ import java.math.BigDecimal;
* @date 2024-07-25
*/
@Data
@EqualsAndHashCode(callSuper = true)
@EqualsAndHashCode
@AutoMapper(target = PsCustomCallback.class)
public class PsCustomCallbackBo extends BaseEntity {
public class PsCustomCallbackBo {
/**
*

View File

@ -22,9 +22,9 @@ import java.math.BigDecimal;
* @date 2024-07-25
*/
@Data
@EqualsAndHashCode(callSuper = true)
@EqualsAndHashCode
@AutoMapper(target = PsCustomPrice.class)
public class PsCustomPriceBo extends BaseEntity {
public class PsCustomPriceBo {
/**
*

View File

@ -0,0 +1,51 @@
package com.pusong.business.domain.bo;
import com.pusong.business.domain.PsTaskMedia;
import com.pusong.common.core.validate.AddGroup;
import com.pusong.common.core.validate.EditGroup;
import com.pusong.common.mybatis.core.domain.BaseEntity;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
/**
* 任务资料业务对象 ps_task_media
*
* @author wls
* @date 2024-08-07
*/
@Data
@EqualsAndHashCode
@AutoMapper(target = PsTaskMedia.class)
public class PsTaskMediaBo {
/**
* 主键id
*/
private Long id;
/**
* 主任务表id
*/
private Long taskId;
/**
* 合同编号
*/
private String contractCode;
/**
* 资料类型
*/
@NotBlank(message = "资料类型不能为空", groups = { AddGroup.class, EditGroup.class })
private String mediaType;
/**
* 文件ossid多个时用逗号分割删除时传-1
*/
@NotBlank(message = "文件ossid不能为空", groups = { AddGroup.class, EditGroup.class })
private String mediaOssId;
}

View File

@ -0,0 +1,78 @@
package com.pusong.business.domain.bo;
import com.pusong.common.core.validate.AddGroup;
import com.pusong.common.core.validate.EditGroup;
import com.pusong.common.core.validate.QueryGroup;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.util.Date;
import java.util.List;
/**
* 主任务业务对象 ps_task_main
*
* @author wls
* @date 2024-08-07
*/
@Data
@EqualsAndHashCode
public class PsTaskQueryBo {
/**
* 主键id
*/
private Long id;
/**
* 公司名称
*/
private String companyName;
/**
* 纳税人识别号
*/
private String customerNum;
/**
* 纳税人资格
*/
private String customerCert;
/**
* 销售经理姓名
*/
private String customManagerName;
/**
* 服务项目编码集合
*/
private List<String> serviceProjectCode;
/**
* 执行者姓名
*/
private String executor;
/**
* 所属区域公司地址
*/
private String companyAdress;
/**
* 法人手机号
*/
private String mobile;
/**
* 法人身份证号
*/
private String idNo;
/**
* 法人身份证号
*/
private String name;
/**
* 任务委派类型1内勤,2外勤,3特勤 查询子任务列表时使用
*/
@NotBlank(message = "任务委派类型不能为空", groups = {QueryGroup.class})
private String appointType;
}

View File

@ -0,0 +1,79 @@
package com.pusong.business.domain.bo;
import com.pusong.business.domain.PsTaskWorkRecord;
import com.pusong.common.core.validate.AddGroup;
import com.pusong.common.core.validate.EditGroup;
import com.pusong.common.mybatis.core.domain.BaseEntity;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
* 外勤任务记录业务对象 ps_task_work_record
*
* @author wls
* @date 2024-08-09
*/
@Data
@EqualsAndHashCode(callSuper = true)
@AutoMapper(target = PsTaskWorkRecord.class, reverseConvertGenerate = false)
public class PsTaskWorkRecordBo extends BaseEntity {
// /**
// * 主键id
// */
// @NotNull(message = "主键id不能为空", groups = { EditGroup.class })
// private Long id;
/**
* 任务委派表id
*/
@NotNull(message = "任务委派表id不能为空", groups = { AddGroup.class })
private Long taskAppointId;
/**
* 合同编码
*/
private String contractCode;
/**
* 办理时间
*/
@NotNull(message = "办理时间不能为空", groups = { AddGroup.class })
@JsonFormat(pattern = "yyyy-MM-dd")
private Date handleDate;
/**
* 办理事项
*/
@NotBlank(message = "办理事项不能为空", groups = { AddGroup.class })
private String handleInfo;
/**
* 办理进度说明
*/
@NotBlank(message = "办理进度说明不能为空", groups = { AddGroup.class })
private String handlePlan;
/**
* 下次办理类型
*/
@NotBlank(message = "下次办理类型不能为空", groups = { AddGroup.class })
private String nextType;
/**
* 下次办理描述 1指定时间2时间待定3无
*/
private String nextDesc;
/**
* 下次办理时间
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private Date nextDate;
}

View File

@ -42,7 +42,10 @@ public class PsApproverRecordVo implements Serializable {
*/
@ExcelProperty(value = "关联业务id")
private Long businessId;
/**
* 合同编码
*/
private String contractCode;
/**
* 审批业务类型
*/

View File

@ -4,6 +4,7 @@ import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pusong.business.domain.PsCompanyInfo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
@ -79,6 +80,72 @@ public class PsCompanyInfoVo implements Serializable {
*/
private Date updateTime;
/**
* 纳税人识别号
*/
private String customerNum;
/**
* 纳税人资格
*/
private String customerCert;
/**
* 个税密码
*/
private String companyPersonPassword;
/**
* 税务密码
*/
private String companyTaxPassword;
/**
* 开户行客户经理电话
*/
private String companyBankManagerPhone;
/**
* 刻章公司名称
*/
private String madeSignCompanyName;
/**
* 公司地址详情
*/
private String companyAdressDetail;
/**
* 账套号
*/
private String financeAccountNo;
/**
* 社保开户时间
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private Date socialStartDate;
/**
* 公积金开户时间
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private Date providentStartDate;
/**
* 营业执照开始时间
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private Date licenseStartDate;
/**
* 营业执照结束时间
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private Date licenseEndDate;
/**
* 经营范围
*/
private String companyScope;
/**
* 注册资金
*/
private BigDecimal registerAmount;
/**
* 注册类型
*/
private String registerType;
/**
* 发票类型
*/
private String billType;
}

View File

@ -155,6 +155,11 @@ public class PsContractInfoVo implements Serializable {
* 合同回传状态0未回传1已回传
*/
private String rollBackStatus;
/**
* 回传的合同文件ossid
*/
private Long rollBackPdf;
/**
* 合同签章状态CommonStatusEnum
*/

View File

@ -0,0 +1,70 @@
package com.pusong.business.domain.vo;
import com.pusong.business.domain.PsTaskAppoint;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.pusong.common.excel.annotation.ExcelDictFormat;
import com.pusong.common.excel.convert.ExcelDictConvert;
import com.pusong.common.translation.annotation.Translation;
import com.pusong.common.translation.constant.TransConstant;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* 任务委派视图对象 ps_task_appoint
*
* @author wls
* @date 2024-08-07
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = PsTaskAppoint.class)
public class PsTaskAppointVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
private Long id;
/**
* 主任务表id
*/
private Long taskId;
/**
* 合同编码
*/
private String contractCode;
/**
* 任务委派类型1内勤,2外勤,3特勤
*/
private String appointType;
/**
* 任务委派状态
*/
private String appointStatus;
/**
* 任务执行者
*/
private Long executor;
/**
* 任务执行者
*/
@Translation(type = TransConstant.USER_ID_TO_NICKNAME,mapper = "executor")
private String executorName;
/**
* 任务备注
*/
private String taskDesc;
}

View File

@ -0,0 +1,97 @@
package com.pusong.business.domain.vo;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pusong.business.domain.PsTaskMain;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.pusong.common.excel.annotation.ExcelDictFormat;
import com.pusong.common.excel.convert.ExcelDictConvert;
import com.pusong.common.translation.annotation.Translation;
import com.pusong.common.translation.constant.TransConstant;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* 主任务视图对象 ps_task_main
*
* @author wls
* @date 2024-08-07
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = PsTaskMain.class)
public class PsTaskMainVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
private Long id;
/**
* 合同编码
*/
private String contractCode;
/**
* 任务类型1合同任务,2免费工单,3发票
*/
private String taskType;
/**
* 派单时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm")
private Date startDate;
/**
* 任务进行天数
*/
private int numOfDat;
/**
* 主任务状态
*/
private String taskStatus;
/**
* 子任务状态
*/
private String appointStatus;
/**
* 服务类别名多个是用逗号分隔
*/
@Translation(type = TransConstant.DICT_TYPE_TO_LABEL,other = "contract_type")
private String businessTypeName;
/**
* 合同信息
*/
private TaskContractVo contractVo;
/**
* 公司信息
*/
private PsCompanyInfoVo companyInfoVo;
/**
* 客户信息
*/
private PsCustomInfoVo customInfoVo;
/**
* 执行者
*/
@Translation(type = TransConstant.USER_ID_TO_NICKNAME)
private String executors;
/**
* 支付状态描述全款半款
*/
private String payStautsDesc;
/**
* 任务资料信息
*/
private List<PsTaskMediaVo> taskMediaVoList;
}

View File

@ -0,0 +1,62 @@
package com.pusong.business.domain.vo;
import com.pusong.business.domain.PsTaskMedia;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.pusong.common.excel.annotation.ExcelDictFormat;
import com.pusong.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;
/**
* 任务资料视图对象 ps_task_media
*
* @author wls
* @date 2024-08-07
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = PsTaskMedia.class)
public class PsTaskMediaVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
@ExcelProperty(value = "主键id")
private Long id;
/**
* 主任务表id
*/
@ExcelProperty(value = "主任务表id")
private Long taskId;
/**
* 合同编号
*/
@ExcelProperty(value = "合同编号")
private String contractCode;
/**
* 资料类型
*/
@ExcelProperty(value = "资料类型")
private String mediaType;
/**
* 文件ossid
*/
@ExcelProperty(value = "文件ossid")
private String mediaOssId;
}

View File

@ -0,0 +1,87 @@
package com.pusong.business.domain.vo;
import java.util.Date;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pusong.business.domain.PsTaskWorkRecord;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.pusong.common.excel.annotation.ExcelDictFormat;
import com.pusong.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;
/**
* 外勤任务记录视图对象 ps_task_work_record
*
* @author wls
* @date 2024-08-09
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = PsTaskWorkRecord.class)
public class PsTaskWorkRecordVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键id
*/
private Long id;
/**
* 任务委派表id
*/
private Long taskAppointId;
/**
* 合同编码
*/
private String contractCode;
/**
* 办理时间
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private Date handleDate;
/**
* 办理事项
*/
private String handleInfo;
/**
* 办理进度说明
*/
private String handlePlan;
/**
* 下次办理类型
*/
private String nextType;
/**
* 下次办理描述
*/
private String nextDesc;
/**
* 下次办理时间
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private Date nextDate;
/**
* 创建时间(记录时间)
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm")
private Date createTime;
}

View File

@ -0,0 +1,171 @@
package com.pusong.business.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pusong.business.domain.PsContractInfo;
import com.pusong.common.translation.annotation.Translation;
import com.pusong.common.translation.constant.TransConstant;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* 任务查询时使用的合同信息dto
*
* @author wls
* @date 2024-07-29
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = PsContractInfo.class)
public class TaskContractVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 合同编码
*/
private String contractCode;
/**
* 合同名称
*/
private String contractName;
/**
* 客户id
*/
private Long customId;
/**
* 公司id
*/
private Long companyId;
/**
* 合同主体
*/
private String contractMain;
/**
* 合同主体
*/
@Translation(type = TransConstant.DICT_TYPE_TO_LABEL,other = "contract_main",mapper="contractMain")
private String contractMainName;
/**
* 合同总金额
*/
private BigDecimal contractAmount;
/**
* 合同状态
*/
private String contractStatus;
/**
* 合同状态名
*/
@Translation(type = TransConstant.DICT_TYPE_TO_LABEL,other = "contract_status",mapper="contractStatus")
private String contractStatusName;
/**
* 签约日期
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private Date applyDate;
/**
* 服务周期开始时间
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private Date startServiceDate;
/**
* 服务周期结束时间
*/
@JsonFormat(pattern = "yyyy-MM-dd")
private Date endServiceDate;
/**
* 办理期限
*/
private Long timeLimit;
/**
* 客户是否到达现场
*/
private String customScene;
/**
* 是否代账
*/
private String isProxy;
/**
* 所属客户经理
*/
private Long customManager;
/**
* 所属客户经理姓名
*/
private String customManagerName;
/**
* 签约备注
*/
private String signDesc;
/**
* 付款方式描述
*/
private String payModeDesc;
/**
* 文件系统ossId
*/
private Long pdfId;
/**
* 已付金额
*/
private BigDecimal payMoney;
/**
* 退款金额
*/
private BigDecimal returnMoney;
/**
* 未付金额
*/
private BigDecimal residualMoney;
/**
* 回款周期
*/
private Integer period;
/**
* 服务类别名多个是用逗号分隔
*/
@Translation(type = TransConstant.DICT_TYPE_TO_LABEL,other = "contract_type")
private String businessTypeName;
/**
* 合同回传状态0未回传1已回传
*/
private String rollBackStatus;
/**
* 回传的合同文件ossid
*/
private Long rollBackPdf;
/**
* 合同签章状态CommonStatusEnum
*/
private String signStatus;
/**
* 是否老账新接
*/
private String isOld;
/**
* 是否续费
*/
private String isDue;
}

View File

@ -10,7 +10,11 @@ import lombok.Getter;
@AllArgsConstructor
public enum ApproverTypeEnum {
UPDATE("update","修改合同审批"),
CANCELLA("cancellation","作废合同审批");
CANCELLA("cancellation","作废合同审批"),
PAY("pay","合同回款审批"),
SIGN("sign","合同签章审批"),
ROLBACK("rolback","回传合同审批"),
TASKFINISH("taskFinish","任务完成审批");
private String code;
private String text;
}

View File

@ -0,0 +1,99 @@
package com.pusong.business.enums;
import com.pusong.common.core.utils.StringUtils;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.List;
/**
* 任务状态枚举
*/
@Getter
@AllArgsConstructor
public enum TaskStatusEnum {
INIT("10","任务初始化(待派单)"),
ING("20","进行中"),
OA("25","完成审批中"),
OAFAIL("26","完成审批失败"),
FINISH("30","完成"),
PAUSE("40","暂停"),
CANCEL("50","作废");
private String code;
private String text;
/**
* 判断能否派单
*/
public static Boolean canAppoint(String taskStatus){
if(StringUtils.equals(taskStatus,INIT.getCode()) || StringUtils.equals(taskStatus,ING.getCode())){
return true;
}
return false;
}
/**
* 判断能否上传资料
*/
public static Boolean canUpload(String taskStatus){
if(StringUtils.equals(taskStatus,FINISH.getCode())
|| StringUtils.equals(taskStatus,OA.getCode())){
return false;
}
return true;
}
/**
* 判断能否点击完成
*/
public static Boolean canFinish(String taskStatus){
//不能点作废 完成 审批中
if(StringUtils.equals(taskStatus,CANCEL.getCode()) || StringUtils.equals(taskStatus,FINISH.getCode())
|| StringUtils.equals(taskStatus,OA.getCode())){
return false;
}
return true;
}
/**
* 委派表状态枚举
*/
@Getter
@AllArgsConstructor
public enum AppointStatusEnum {
ING("20","进行中"),
FINISH("30","完成"),
PAUSE("40","暂停"),
CANCEL("50","作废");
private String code;
private String text;
/**
* 判断能否完成
*/
public static Boolean canFinish(String taskStatus){
//作废和完成的不能点
if(StringUtils.equals(taskStatus,CANCEL.getCode()) || StringUtils.equals(taskStatus,FINISH.getCode())){
return false;
}
return true;
}
/**
* 判断能否改派
*/
public static Boolean canReset(String taskStatus){
//作废和完成的不能点
if(StringUtils.equals(taskStatus,CANCEL.getCode()) || StringUtils.equals(taskStatus,FINISH.getCode())){
return false;
}
return true;
}
/**
* 获取结束的状态
*/
public static List<String> getEndStauts(){
return List.of(FINISH.getCode(),CANCEL.getCode());
}
}
}

View File

@ -0,0 +1,17 @@
package com.pusong.business.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 审批类型美剧
*/
@Getter
@AllArgsConstructor
public enum TaskTypeEnum {
CONTRACT("1","合同任务"),
FREE("2","免费工单"),
INVOICE("3","发票任务");
private String code;
private String text;
}

View File

@ -24,14 +24,14 @@ public interface PsContractInfoMapper extends BaseMapperPlus<PsContractInfo, PsC
@DataPermission({
@DataColumn(key = "deptName", value = "create_dept"),
@DataColumn(key = "userName", value = "create_by")
@DataColumn(key = "deptName", value = "info.create_dept"),
@DataColumn(key = "userName", value = "info.create_by")
})
Page<PsContractInfoVo> selectPageContractList(@Param("page") Page<PsContractInfo> page, @Param(Constants.WRAPPER) Wrapper<PsContractInfo> queryWrapper);
@DataPermission({
@DataColumn(key = "deptName", value = "create_dept"),
@DataColumn(key = "userName", value = "create_by")
@DataColumn(key = "deptName", value = "info.create_dept"),
@DataColumn(key = "userName", value = "info.create_by")
})
List<PsContractInfoVo> selectContractList(@Param(Constants.WRAPPER) Wrapper<PsContractInfo> queryWrapper);

View File

@ -28,14 +28,14 @@ public interface PsCustomInfoMapper extends BaseMapperPlus<PsCustomInfo, PsCusto
List<PsCustomInfo> selectList(@Param(Constants.WRAPPER) Wrapper<PsCustomInfo> queryWrapper);
@DataPermission({
@DataColumn(key = "deptName", value = "create_dept"),
@DataColumn(key = "userName", value = "create_by")
@DataColumn(key = "deptName", value = "info.create_dept"),
@DataColumn(key = "userName", value = "info.create_by")
})
Page<PsCustomInfoVo> selectPageCustomerList(@Param("page") Page<PsCustomInfo> page, @Param(Constants.WRAPPER) Wrapper<PsCustomInfo> queryWrapper);
@DataPermission({
@DataColumn(key = "deptName", value = "create_dept"),
@DataColumn(key = "userName", value = "create_by")
@DataColumn(key = "deptName", value = "info.create_dept"),
@DataColumn(key = "userName", value = "info.create_by")
})
List<PsCustomInfoVo> selectCustomerList( @Param(Constants.WRAPPER) Wrapper<PsCustomInfo> queryWrapper);
//

View File

@ -0,0 +1,15 @@
package com.pusong.business.mapper;
import com.pusong.business.domain.PsTaskAppoint;
import com.pusong.business.domain.vo.PsTaskAppointVo;
import com.pusong.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 任务委派Mapper接口
*
* @author wls
* @date 2024-08-07
*/
public interface PsTaskAppointMapper extends BaseMapperPlus<PsTaskAppoint, PsTaskAppointVo> {
}

View File

@ -0,0 +1,34 @@
package com.pusong.business.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.pusong.business.domain.PsContractInfo;
import com.pusong.business.domain.PsTaskMain;
import com.pusong.business.domain.vo.PsContractInfoVo;
import com.pusong.business.domain.vo.PsTaskMainVo;
import com.pusong.common.mybatis.annotation.DataColumn;
import com.pusong.common.mybatis.annotation.DataPermission;
import com.pusong.common.mybatis.core.mapper.BaseMapperPlus;
import org.apache.ibatis.annotations.Param;
/**
* 主任务Mapper接口
*
* @author wls
* @date 2024-08-07
*/
public interface PsTaskMainMapper extends BaseMapper<PsTaskMain> {
@DataPermission({
@DataColumn(key = "deptName", value = "main.create_dept"),
@DataColumn(key = "userName", value = "main.create_by")
})
Page<PsTaskMainVo> queryTaskPageList(@Param("page") Page<PsContractInfo> page, @Param(Constants.WRAPPER) Wrapper<PsTaskMain> queryWrapper);
@DataPermission({
@DataColumn(key = "deptName", value = "appo.create_dept"),
@DataColumn(key = "userName", value = "appo.executor")
})
Page<PsTaskMainVo> queryChildTaskPageList(@Param("page") Page<PsContractInfo> page, @Param(Constants.WRAPPER) Wrapper<PsTaskMain> queryWrapper);
}

View File

@ -0,0 +1,15 @@
package com.pusong.business.mapper;
import com.pusong.business.domain.PsTaskMedia;
import com.pusong.business.domain.vo.PsTaskMediaVo;
import com.pusong.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 任务资料Mapper接口
*
* @author wls
* @date 2024-08-07
*/
public interface PsTaskMediaMapper extends BaseMapperPlus<PsTaskMedia, PsTaskMediaVo> {
}

View File

@ -0,0 +1,15 @@
package com.pusong.business.mapper;
import com.pusong.business.domain.PsTaskWorkRecord;
import com.pusong.business.domain.vo.PsTaskWorkRecordVo;
import com.pusong.common.mybatis.core.mapper.BaseMapperPlus;
/**
* 外勤任务记录Mapper接口
*
* @author wls
* @date 2024-08-09
*/
public interface PsTaskWorkRecordMapper extends BaseMapperPlus<PsTaskWorkRecord, PsTaskWorkRecordVo> {
}

View File

@ -33,6 +33,12 @@ public interface IPsContractBusinessService {
*/
List<PsContractBusinessVo> queryList(PsContractBusinessBo bo);
/**
* 根据合同编码查询服务信息
* @param contractCode
* @return
*/
List<PsContractBusinessVo> selectBusinessList(String contractCode);
/**
* 查询合同服务类别
*

View File

@ -73,6 +73,12 @@ public interface IPsContractInfoService {
* @param contractCode 合同编码
*/
boolean restart(String contractCode);
/**
* 根据合同编码修改合同
* @param info
* @return
*/
PsContractInfo updateByCode(PsContractInfo info);
/**
* 查询符合条件的合同基本信息列表
*

View File

@ -0,0 +1,36 @@
package com.pusong.business.service;
import com.pusong.business.domain.bo.PsContractInfoBo;
import com.pusong.business.domain.bo.PsContractInfoQueryBo;
import com.pusong.business.domain.bo.PsContractPayBo;
import com.pusong.business.domain.vo.PsContractInfoVo;
import com.pusong.common.mybatis.core.page.PageQuery;
import com.pusong.common.mybatis.core.page.TableDataInfo;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/**
* 合同操作Service接口
*
* @author wls
* @date 2024-07-29
*/
public interface IPsContractOperateService {
/**
* 合同签章
*
* @param contractCode 合同编码
* @return 合同基本信息
*/
void sign(String contractCode);
/**
* 回传合同
* @param file 回传合同文件
* @param contractCode 合同编码
*/
void rollbackContract( MultipartFile file, String contractCode);
}

View File

@ -1,10 +1,12 @@
package com.pusong.business.service;
import com.pusong.business.domain.PsContractPay;
import com.pusong.business.domain.vo.PsContractPayVo;
import com.pusong.business.domain.bo.PsContractPayBo;
import com.pusong.business.enums.PayStatusEnum;
import com.pusong.common.mybatis.core.page.TableDataInfo;
import com.pusong.common.mybatis.core.page.PageQuery;
import org.springframework.web.multipart.MultipartFile;
import java.util.Collection;
import java.util.List;
@ -28,11 +30,29 @@ public interface IPsContractPayService {
/**
* 添加支付记录
* @param files 支付凭证
* @param payBo 支付信息
*/
void addPay(List<MultipartFile> files, PsContractPayBo payBo);
/**
* 根据主键id查询回款记录
*
* @param id 查询条件
* @return 合同回款记录列表
*/
PsContractPay queryById(Long id);
/* *//**
/**
* 根据id修改合同回款记录
*
* @param pay 合同回款记录
* @return 是否修改成功
*/
Boolean updateById(PsContractPay pay);
/* *//**
* 查询合同回款记录
*
* @param id 主键

View File

@ -0,0 +1,67 @@
package com.pusong.business.service;
import com.pusong.business.domain.vo.PsTaskAppointVo;
import com.pusong.common.mybatis.core.page.TableDataInfo;
import com.pusong.common.mybatis.core.page.PageQuery;
import java.util.Collection;
import java.util.List;
/**
* 任务委派Service接口
*
* @author wls
* @date 2024-08-07
*/
public interface IPsTaskAppointService {
// /**
// * 查询任务委派
// *
// * @param id 主键
// * @return 任务委派
// */
// PsTaskAppointVo queryById(Long id);
//
// /**
// * 分页查询任务委派列表
// *
// * @param bo 查询条件
// * @param pageQuery 分页参数
// * @return 任务委派分页列表
// */
// TableDataInfo<PsTaskAppointVo> queryPageList(PsTaskAppointBo bo, PageQuery pageQuery);
//
// /**
// * 查询符合条件的任务委派列表
// *
// * @param bo 查询条件
// * @return 任务委派列表
// */
// List<PsTaskAppointVo> queryList(PsTaskAppointBo bo);
//
// /**
// * 新增任务委派
// *
// * @param bo 任务委派
// * @return 是否新增成功
// */
// Boolean insertByBo(PsTaskAppointBo bo);
//
// /**
// * 修改任务委派
// *
// * @param bo 任务委派
// * @return 是否修改成功
// */
// Boolean updateByBo(PsTaskAppointBo bo);
//
// /**
// * 校验并批量删除任务委派信息
// *
// * @param ids 待删除的主键集合
// * @param isValid 是否进行有效性校验
// * @return 是否删除成功
// */
// Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@ -0,0 +1,73 @@
package com.pusong.business.service;
import com.pusong.business.domain.vo.PsTaskMediaVo;
import com.pusong.business.domain.bo.PsTaskMediaBo;
import com.pusong.common.mybatis.core.page.TableDataInfo;
import com.pusong.common.mybatis.core.page.PageQuery;
import java.util.Collection;
import java.util.List;
/**
* 任务资料Service接口
*
* @author wls
* @date 2024-08-07
*/
public interface IPsTaskMediaService {
/**
* 查询任务资料
*
* @param id 主键
* @return 任务资料
*/
List<PsTaskMediaVo> queryByTaskId(Long id);
/**
* 保存影响资料信息
* @param voList
*/
void saveMediaList(List<PsTaskMediaBo> voList);
// /**
// * 分页查询任务资料列表
// *
// * @param bo 查询条件
// * @param pageQuery 分页参数
// * @return 任务资料分页列表
// */
// TableDataInfo<PsTaskMediaVo> queryPageList(PsTaskMediaBo bo, PageQuery pageQuery);
//
// /**
// * 查询符合条件的任务资料列表
// *
// * @param bo 查询条件
// * @return 任务资料列表
// */
// List<PsTaskMediaVo> queryList(PsTaskMediaBo bo);
//
// /**
// * 新增任务资料
// *
// * @param bo 任务资料
// * @return 是否新增成功
// */
// Boolean insertByBo(PsTaskMediaBo bo);
//
// /**
// * 修改任务资料
// *
// * @param bo 任务资料
// * @return 是否修改成功
// */
// Boolean updateByBo(PsTaskMediaBo bo);
//
// /**
// * 校验并批量删除任务资料信息
// *
// * @param ids 待删除的主键集合
// * @param isValid 是否进行有效性校验
// * @return 是否删除成功
// */
// Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@ -0,0 +1,146 @@
package com.pusong.business.service;
import com.pusong.business.domain.PsTaskAppoint;
import com.pusong.business.domain.PsTaskMain;
import com.pusong.business.domain.bo.AppointBo;
import com.pusong.business.domain.bo.MediaCompanySaveBo;
import com.pusong.business.domain.bo.PsTaskQueryBo;
import com.pusong.business.domain.vo.PsTaskAppointVo;
import com.pusong.business.domain.vo.PsTaskMainVo;
import com.pusong.common.mybatis.core.page.TableDataInfo;
import com.pusong.common.mybatis.core.page.PageQuery;
import java.util.List;
import java.util.Map;
/**
* 主任务Service接口
*
* @author wls
* @date 2024-08-07
*/
public interface IPsTaskService {
/**
* 新增主任务
*
* @param bo 主任务
* @return 是否新增成功
*/
Boolean insert(PsTaskMain bo);
/**
* 分页查询主任务列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 主任务分页列表
*/
TableDataInfo<PsTaskMainVo> queryPageList(PsTaskQueryBo bo, PageQuery pageQuery);
/**
* 分页查询子任务列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 子任务分页列表
*/
TableDataInfo<PsTaskMainVo> queryChildPageList(PsTaskQueryBo bo, PageQuery pageQuery);
/**
* 分页查询主任务列表
*
* @param id 任务主表主键
* @return 公司及资料信息
*/
PsTaskMainVo queryInfo(Long id);
/**
* 上传资料和公司信息
*
* @param save 公司及资料信息
* @return
*/
void saveInfo(MediaCompanySaveBo save);
/**
* 任务委派
*
* @param bo 任务委派请求信息
* @return
*/
void appoint(AppointBo bo);
/**
* 主任务完成
*
* @param id 任务主键id
* @return
*/
void finishMain(Long id);
/**
* 子任务完成
*
* @param id 任务主键id
* @return
*/
void finishChild(Long id,String desc);
/**
* 获取任务执行者列表
*
* @param id 主任务主键id
* @return
*/
Map<String, PsTaskAppointVo> getExecutors(Long id);
/**
* 任务改派
* @param id 任务委派表id
* @param executorId 任务新的执行者id
*/
void taskReset(Long id,Long executorId);
/* *//**
* 查询主任务
*
* @param id 主键
* @return 主任务
*//*
PsTaskMainVo queryById(Long id);
*//**
* 分页查询主任务列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 主任务分页列表
*//*
TableDataInfo<PsTaskMainVo> queryPageList(PsTaskMainBo bo, PageQuery pageQuery);
*//**
* 查询符合条件的主任务列表
*
* @param bo 查询条件
* @return 主任务列表
*//*
List<PsTaskMainVo> queryList(PsTaskMainBo bo);
*//**
* 修改主任务
*
* @param bo 主任务
* @return 是否修改成功
*//*
Boolean updateByBo(PsTaskMainBo bo);
*//**
* 校验并批量删除主任务信息
*
* @param ids 待删除的主键集合
* @param isValid 是否进行有效性校验
* @return 是否删除成功
*//*
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);*/
}

View File

@ -0,0 +1,84 @@
package com.pusong.business.service;
import com.pusong.business.domain.vo.PsTaskWorkRecordVo;
import com.pusong.business.domain.bo.PsTaskWorkRecordBo;
import com.pusong.common.mybatis.core.page.TableDataInfo;
import com.pusong.common.mybatis.core.page.PageQuery;
import java.util.Collection;
import java.util.List;
/**
* 外勤任务记录Service接口
*
* @author wls
* @date 2024-08-09
*/
public interface IPsTaskWorkRecordService {
/**
* 查询符合条件的外勤任务记录列表
*
* @param id 查询条件
* @return 外勤任务记录列表
*/
List<PsTaskWorkRecordVo> queryListByAppointId( Long id);
/**
* 新增外勤任务记录
*
* @param bo 外勤任务记录
* @return 是否新增成功
*/
Boolean insertByBo(PsTaskWorkRecordBo bo);
// /**
// * 查询外勤任务记录
// *
// * @param id 主键
// * @return 外勤任务记录
// */
// PsTaskWorkRecordVo queryById(Long id);
// /**
// * 分页查询外勤任务记录列表
// *
// * @param bo 查询条件
// * @param pageQuery 分页参数
// * @return 外勤任务记录分页列表
// */
// TableDataInfo<PsTaskWorkRecordVo> queryPageList(PsTaskWorkRecordBo bo, PageQuery pageQuery);
//
// /**
// * 查询符合条件的外勤任务记录列表
// *
// * @param bo 查询条件
// * @return 外勤任务记录列表
// */
// List<PsTaskWorkRecordVo> queryList(PsTaskWorkRecordBo bo);
//
// /**
// * 新增外勤任务记录
// *
// * @param bo 外勤任务记录
// * @return 是否新增成功
// */
// Boolean insertByBo(PsTaskWorkRecordBo bo);
//
// /**
// * 修改外勤任务记录
// *
// * @param bo 外勤任务记录
// * @return 是否修改成功
// */
// Boolean updateByBo(PsTaskWorkRecordBo bo);
//
// /**
// * 校验并批量删除外勤任务记录信息
// *
// * @param ids 待删除的主键集合
// * @param isValid 是否进行有效性校验
// * @return 是否删除成功
// */
// Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@ -1,17 +1,25 @@
package com.pusong.business.service.approver;
import com.pusong.business.domain.PsApproverRecord;
import com.pusong.business.enums.ApproverTypeEnum;
public interface ApproverService {
public void apply( String bussinessId, String desc, Object src);
/**
* 发起审批
* @param bussinessId 关联业务id
* @param contractCode 合同编码
* @param desc 审批说明
* @param src 源数据
*/
public void apply( String bussinessId,String contractCode, String desc, Object src);
/**
* 成功
*/
public void success(Object tag,Object src);
public void success(PsApproverRecord psApproverRecord);
/**
* 失败
*/
public void fail(Object tag,Object src);
public void fail(PsApproverRecord psApproverRecord);
}

View File

@ -34,7 +34,7 @@ public abstract class ApproverAbstractServiceImpl implements ApproverService {
* @param desc
* @param src
*/
public void apply(String bussinessId, String desc, Object src){
public void apply(String bussinessId,String contractCode, String desc, Object src){
List<PsApproverRecord> list = approverRecordMapper.selectList(Wrappers.<PsApproverRecord>lambdaQuery().eq(PsApproverRecord::getDelFlag, "0")
.eq(PsApproverRecord::getBusinessId, bussinessId).eq(PsApproverRecord::getBusinessType,approverType())
.ne(PsApproverRecord::getApproverStatus, ApproverStatusEnum.INIT.getCode()));
@ -44,6 +44,7 @@ public abstract class ApproverAbstractServiceImpl implements ApproverService {
PsApproverRecord record = new PsApproverRecord();
record.setBusinessId(bussinessId);
record.setContractCode(contractCode);
record.setBusinessType(approverType());
record.setApplyDesc(desc);
record.setBeforeData(src == null?null:JSON.toJSONString(src));

View File

@ -0,0 +1,73 @@
package com.pusong.business.service.approver.impl;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.pusong.business.domain.PsApproverRecord;
import com.pusong.business.domain.PsContractInfo;
import com.pusong.business.domain.PsContractPay;
import com.pusong.business.domain.PsTaskMain;
import com.pusong.business.domain.vo.PsContractInfoVo;
import com.pusong.business.domain.vo.PsContractPayVo;
import com.pusong.business.enums.*;
import com.pusong.business.service.IPsContractInfoService;
import com.pusong.business.service.IPsContractPayService;
import com.pusong.business.service.IPsTaskService;
import com.pusong.common.core.utils.StringUtils;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* 合同回款审批处理类
*/
@RequiredArgsConstructor
@Service
@Slf4j
public class PayContractApproverServiceImpl extends ApproverAbstractServiceImpl {
private final IPsContractInfoService psContractInfoService;
private final IPsContractPayService payService;
private final IPsTaskService taskMainService;
@Override
public String approverType() {
return ApproverTypeEnum.PAY.getCode();
}
/**
* 1 审批成功修改回款记录状态增加主任务
* @param psApproverRecord 审批类
*/
@Override
public void success(PsApproverRecord psApproverRecord) {
//查询合同信息
PsContractInfoVo info = psContractInfoService.queryContractByCode(psApproverRecord.getContractCode());
//修改回款记录状态
PsContractPay update = new PsContractPay();
update.setId(Long.valueOf(psApproverRecord.getBusinessId()));
update.setPayStatus(PayStatusEnum.SUCCESS.getCode());
payService.updateById(update);
List<PsContractPayVo> list = payService.queryListByContractCode(info.getContractCode(), PayBuinessStatusEnum.PAY.getCode(), PayStatusEnum.PAYING);
//如果没有过回款记录初始化任务主表,并修改合同状态
if(CollectionUtils.isEmpty(list) && StringUtils.equals(ContractStatusEnum.CREATE.getCode(),info.getContractStatus())){
log.info("合同未回款过,初始化任务主表");
PsTaskMain psTaskMain = new PsTaskMain();
psTaskMain.setContractCode(psApproverRecord.getContractCode());
psTaskMain.setTaskType(TaskTypeEnum.CONTRACT.getCode());
psTaskMain.setTaskStatus(TaskStatusEnum.INIT.getCode());
taskMainService.insert(psTaskMain);
log.info("修改合同状态");
PsContractInfo updateInfo = new PsContractInfo();
updateInfo.setContractCode(info.getContractCode());
updateInfo.setContractStatus(ContractStatusEnum.RETURN.getCode());
psContractInfoService.updateByCode(updateInfo);
}
}
@Override
public void fail(PsApproverRecord psApproverRecord) {
}
}

View File

@ -1,10 +1,15 @@
package com.pusong.business.service.approver.impl;
import com.pusong.business.domain.PsApproverRecord;
import com.pusong.business.enums.ApproverStatusEnum;
import com.pusong.business.enums.ApproverTypeEnum;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@RequiredArgsConstructor
@Service
@Slf4j
public class UpdateContractApproverServiceImpl extends ApproverAbstractServiceImpl {
@Override
public String approverType() {
@ -13,16 +18,15 @@ public class UpdateContractApproverServiceImpl extends ApproverAbstractServiceIm
/**
* 1 审批成功合同已派单任务重置
* @param tag
* @param src
* @param psApproverRecord 神瀑类
*/
@Override
public void success(Object tag, Object src) {
public void success(PsApproverRecord psApproverRecord) {
}
@Override
public void fail(Object tag, Object src) {
public void fail(PsApproverRecord psApproverRecord) {
}
}

View File

@ -0,0 +1,97 @@
package com.pusong.business.service.impl;
import com.pusong.business.domain.PsContractInfo;
import com.pusong.business.domain.PsContractPay;
import com.pusong.business.domain.bo.PsContractPayBo;
import com.pusong.business.domain.vo.PsContractInfoVo;
import com.pusong.business.enums.ApproverTypeEnum;
import com.pusong.business.enums.CommonStatusEnum;
import com.pusong.business.enums.PayBuinessStatusEnum;
import com.pusong.business.mapper.PsContractPayMapper;
import com.pusong.business.service.IPsContractInfoService;
import com.pusong.business.service.IPsContractOperateService;
import com.pusong.business.service.approver.ApproverContainer;
import com.pusong.business.service.approver.ApproverService;
import com.pusong.common.core.utils.MapstructUtils;
import com.pusong.common.core.utils.StringUtils;
import com.pusong.system.domain.vo.SysOssVo;
import com.pusong.system.service.ISysOssService;
import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
/**
* 合同操作Service接口
*
* @author wls
* @date 2024-07-29
*/
@RequiredArgsConstructor
@Service
public class IPsContractOperateServiceImpl implements IPsContractOperateService {
private static final Logger log = LoggerFactory.getLogger(IPsContractOperateServiceImpl.class);
private final IPsContractInfoService contractInfoService;
@Resource
private final ApproverContainer container;
@Resource
private final ISysOssService ossService;
/**
* 合同签章
*
* @param contractCode 合同编码
* @return 合同基本信息
*/
public void sign(String contractCode){
PsContractInfoVo info = contractInfoService.queryContractByCode(contractCode);
//后续添加校验可再次添加
//合同签章
ApproverService service = container.getService(ApproverTypeEnum.SIGN.getCode());
service.apply(contractCode,contractCode,null, null);
PsContractInfo psContractInfo = new PsContractInfo();
psContractInfo.setContractCode(contractCode);
psContractInfo.setSignStatus(CommonStatusEnum.ING.getCode());
contractInfoService.updateByCode(psContractInfo);
}
/**
* 回传合同
* @param file 回传合同文件
* @param contractCode 合同编码
*/
@Transactional
public void rollbackContract( MultipartFile file, String contractCode){
PsContractInfoVo info = contractInfoService.queryContractByCode(contractCode);
//后续添加校验可再次添加
SysOssVo vo = ossService.upload(file);
//发起回传合同审批
ApproverService service = container.getService(ApproverTypeEnum.ROLBACK.getCode());
service.apply(contractCode,contractCode,null, null);
//修改合同信息
PsContractInfo psContractInfo = new PsContractInfo();
psContractInfo.setContractCode(contractCode);
psContractInfo.setRollBackStatus(CommonStatusEnum.ING.getCode());
psContractInfo.setRollBackPdf(vo.getOssId());
contractInfoService.updateByCode(psContractInfo);
//若已存在回传的合同则删除
if(info.getRollBackPdf() != null){
try{
ossService.deleteWithValidByIds(List.of(info.getRollBackPdf()),null);
}catch (Exception e){
log.error("删除回传合同信息失败",e);
}
}
}
}

View File

@ -69,7 +69,6 @@ public class PsApproverRecordServiceImpl implements IPsApproverRecordService {
}
private LambdaQueryWrapper<PsApproverRecord> buildQueryWrapper(PsApproverRecordBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<PsApproverRecord> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getBusinessId() != null, PsApproverRecord::getBusinessId, bo.getBusinessId());
lqw.eq(StringUtils.isNotBlank(bo.getBusinessType()), PsApproverRecord::getBusinessType, bo.getBusinessType());

View File

@ -72,13 +72,15 @@ public class PsCompanyInfoServiceImpl implements IPsCompanyInfoService {
*/
@Override
public Boolean saveBo(PsCompanyInfoBo bo) {
//公司名称唯一
PsCompanyInfoBo query = new PsCompanyInfoBo();
query.setCompanyName(bo.getCompanyName());
query.setCustomId(bo.getCustomId());
List<PsCompanyInfoVo> list = this.queryList(bo);
//如果存在重复名称则修改
if(CollectionUtils.isNotEmpty(list)){bo.setId(list.get(0).getId());}
if(bo.getId() == null){
//公司名称唯一
PsCompanyInfoBo query = new PsCompanyInfoBo();
query.setCompanyName(bo.getCompanyName());
query.setCustomId(bo.getCustomId());
List<PsCompanyInfoVo> list = this.queryList(bo);
//如果存在重复名称则修改
if(CollectionUtils.isNotEmpty(list)){bo.setId(list.get(0).getId());}
}
PsCompanyInfo add = MapstructUtils.convert(bo, PsCompanyInfo.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insertOrUpdate(add);

View File

@ -85,6 +85,15 @@ public class PsContractBusinessServiceImpl implements IPsContractBusinessService
return lqw;
}
/**
* 根据合同编码查询服务信息
* @param contractCode
* @return
*/
public List<PsContractBusinessVo> selectBusinessList(String contractCode) {
return baseMapper.selectBusinessList(contractCode);
}
/* *//**
* 查询合同服务类别

View File

@ -35,6 +35,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.io.File;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
/**
* 合同基本信息Service业务层处理
@ -48,7 +49,6 @@ import java.util.*;
public class PsContractInfoServiceImpl implements IPsContractInfoService {
private final PsContractInfoMapper baseMapper;
private final PsContractBusinessMapper businessMapper;
// private final PsContractBusinessDetailMapper businessDetailMapper;
private final IPsContractBusinessService businessService;
private final IPsContractBusinessDetailService businessDetailService;
@ -230,7 +230,7 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService {
if(StringUtils.isBlank(desc)){throw new ServiceException("请填写作废原因");}
//有收款点击作废填写作废原因后发起作废审批
ApproverService service = container.getService(ApproverTypeEnum.CANCELLA.getCode());
service.apply(contractCode,desc, null);
service.apply(contractCode,contractCode,desc, null);
info.setContractStatus(ContractStatusEnum.CANAPPROVER.getCode());
}
@ -262,6 +262,11 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService {
return true;
}
/**
* 根据合同编码修改合同
* @param info
* @return
*/
public PsContractInfo updateByCode(PsContractInfo info){
baseMapper.update(info,Wrappers.<PsContractInfo>lambdaUpdate().eq(PsContractInfo::getContractCode,info.getContractCode()).eq(PsContractInfo::getDelFlag,0));
return info;
@ -307,6 +312,8 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService {
qw.eq( "info.del_flag", 0);//删除标志
//合同表条件
qw.eq( StringUtils.isNotBlank(bo.getContractStatus()),"contract_status", bo.getContractStatus());
qw.in( CollectionUtils.isNotEmpty(bo.getInContractStatus()),"contract_status", bo.getInContractStatus());
qw.notIn( CollectionUtils.isNotEmpty(bo.getNotInContractStatus()),"contract_status", bo.getNotInContractStatus());
//客户表条件
qw.like( StringUtils.isNotBlank(bo.getCustomName()),"cus.custom_name", bo.getCustomName());
qw.like( StringUtils.isNotBlank(bo.getCustomMobile()),"cus.custom_mobile", bo.getCustomMobile());
@ -318,7 +325,8 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService {
}
private PsContractInfoVo fillContractInfo(PsContractInfoVo vo){
//装填服务类型和服务项目信息
List<PsContractBusinessVo> list = businessMapper.selectBusinessList(vo.getContractCode());
List<PsContractBusinessVo> list = businessService.selectBusinessList(vo.getContractCode());
vo.setBusinessTypeName(StringUtils.join(list.stream().map(PsContractBusinessVo::getBusinessType).collect(Collectors.toList()), ","));
vo.setBusinessVoList(list);
//装填回款记录
List<PsContractPayVo> payList = contractPayService.queryListByContractCode(vo.getContractCode(),null,PayStatusEnum.SUCCESS);
@ -402,7 +410,7 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService {
if(ContractStatusEnum.isReturn(srcVo.getContractStatus())){
//发起审批
ApproverService service = container.getService(ApproverTypeEnum.UPDATE.getCode());
service.apply(updateBo.getContractCode(),updateBo.getUpdateDesc(), JSON.toJSONString(srcVo));
service.apply(updateBo.getContractCode(),updateBo.getContractCode(),updateBo.getUpdateDesc(), JSON.toJSONString(srcVo));
}
//3.签章合同签字盖章成功:修改合同成功合同签字盖章变回未签章状态需重新进行签章申请

View File

@ -1,6 +1,9 @@
package com.pusong.business.service.impl;
import com.pusong.business.enums.ApproverTypeEnum;
import com.pusong.business.enums.PayStatusEnum;
import com.pusong.business.service.approver.ApproverContainer;
import com.pusong.business.service.approver.ApproverService;
import com.pusong.common.core.utils.MapstructUtils;
import com.pusong.common.core.utils.StringUtils;
import com.pusong.common.mybatis.core.page.TableDataInfo;
@ -8,6 +11,9 @@ import com.pusong.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 com.pusong.system.domain.vo.SysOssVo;
import com.pusong.system.service.ISysOssService;
import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.pusong.business.domain.bo.PsContractPayBo;
@ -15,6 +21,8 @@ import com.pusong.business.domain.vo.PsContractPayVo;
import com.pusong.business.domain.PsContractPay;
import com.pusong.business.mapper.PsContractPayMapper;
import com.pusong.business.service.IPsContractPayService;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import java.util.ArrayList;
import java.util.List;
@ -32,8 +40,9 @@ import java.util.Collection;
public class PsContractPayServiceImpl implements IPsContractPayService {
private final PsContractPayMapper baseMapper;
private final ISysOssService ossService;
@Resource
private final ApproverContainer container;
/**
* 查询合同回款记录列表
*
@ -50,7 +59,50 @@ public class PsContractPayServiceImpl implements IPsContractPayService {
return list == null?new ArrayList<>():list;
}
/**
* 添加支付记录
*
* @param payBo 支付信息
* @return 是否新增成功
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void addPay(List<MultipartFile> files, PsContractPayBo payBo){
PsContractPay pay = MapstructUtils.convert(payBo, PsContractPay.class);
List<String> payCertifications = new ArrayList<>();
for(MultipartFile file : files){
SysOssVo vo = ossService.upload(file);
payCertifications.add(vo.getOssId()+"");
}
pay.setPayCertification(StringUtils.join(payCertifications,","));
pay.setPayStatus(PayStatusEnum.PAYING.getCode());
baseMapper.insert(pay);
//发起审批
ApproverService service = container.getService(ApproverTypeEnum.PAY.getCode());
service.apply(pay.getId()+"",pay.getContractCode(),null, null);
}
/**
* 根据主键id查询回款记录
*
* @param id 查询条件
* @return 合同回款记录列表
*/
@Override
public PsContractPay queryById(Long id) {
return baseMapper.selectById(id);
}
/**
* 根据id修改合同回款记录
*
* @param pay 合同回款记录
* @return 是否修改成功
*/
@Override
public Boolean updateById(PsContractPay pay) {
return baseMapper.updateById(pay) > 0;
}
/* *//**
* 查询合同回款记录
*

View File

@ -0,0 +1,132 @@
package com.pusong.business.service.impl;
import com.pusong.common.core.utils.MapstructUtils;
import com.pusong.common.core.utils.StringUtils;
import com.pusong.common.mybatis.core.page.TableDataInfo;
import com.pusong.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 com.pusong.business.domain.vo.PsTaskAppointVo;
import com.pusong.business.domain.PsTaskAppoint;
import com.pusong.business.mapper.PsTaskAppointMapper;
import com.pusong.business.service.IPsTaskAppointService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 任务委派Service业务层处理
*
* @author wls
* @date 2024-08-07
*/
@RequiredArgsConstructor
@Service
public class PsTaskAppointServiceImpl implements IPsTaskAppointService {
private final PsTaskAppointMapper baseMapper;
// /**
// * 查询任务委派
// *
// * @param id 主键
// * @return 任务委派
// */
// @Override
// public PsTaskAppointVo queryById(Long id){
// return baseMapper.selectVoById(id);
// }
//
// /**
// * 分页查询任务委派列表
// *
// * @param bo 查询条件
// * @param pageQuery 分页参数
// * @return 任务委派分页列表
// */
// @Override
// public TableDataInfo<PsTaskAppointVo> queryPageList(PsTaskAppointBo bo, PageQuery pageQuery) {
// LambdaQueryWrapper<PsTaskAppoint> lqw = buildQueryWrapper(bo);
// Page<PsTaskAppointVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
// return TableDataInfo.build(result);
// }
//
// /**
// * 查询符合条件的任务委派列表
// *
// * @param bo 查询条件
// * @return 任务委派列表
// */
// @Override
// public List<PsTaskAppointVo> queryList(PsTaskAppointBo bo) {
// LambdaQueryWrapper<PsTaskAppoint> lqw = buildQueryWrapper(bo);
// return baseMapper.selectVoList(lqw);
// }
//
// private LambdaQueryWrapper<PsTaskAppoint> buildQueryWrapper(PsTaskAppointBo bo) {
// Map<String, Object> params = bo.getParams();
// LambdaQueryWrapper<PsTaskAppoint> lqw = Wrappers.lambdaQuery();
// lqw.eq(bo.getTaskId() != null, PsTaskAppoint::getTaskId, bo.getTaskId());
// lqw.eq(StringUtils.isNotBlank(bo.getContractCode()), PsTaskAppoint::getContractCode, bo.getContractCode());
// lqw.eq(StringUtils.isNotBlank(bo.getAppointType()), PsTaskAppoint::getAppointType, bo.getAppointType());
// lqw.eq(StringUtils.isNotBlank(bo.getAppointStatus()), PsTaskAppoint::getAppointStatus, bo.getAppointStatus());
// lqw.eq(bo.getExecutor() != null, PsTaskAppoint::getExecutor, bo.getExecutor());
// return lqw;
// }
//
// /**
// * 新增任务委派
// *
// * @param bo 任务委派
// * @return 是否新增成功
// */
// @Override
// public Boolean insertByBo(PsTaskAppointBo bo) {
// PsTaskAppoint add = MapstructUtils.convert(bo, PsTaskAppoint.class);
// validEntityBeforeSave(add);
// boolean flag = baseMapper.insert(add) > 0;
// if (flag) {
// bo.setId(add.getId());
// }
// return flag;
// }
//
// /**
// * 修改任务委派
// *
// * @param bo 任务委派
// * @return 是否修改成功
// */
// @Override
// public Boolean updateByBo(PsTaskAppointBo bo) {
// PsTaskAppoint update = MapstructUtils.convert(bo, PsTaskAppoint.class);
// validEntityBeforeSave(update);
// return baseMapper.updateById(update) > 0;
// }
//
// /**
// * 保存前的数据校验
// */
// private void validEntityBeforeSave(PsTaskAppoint entity){
// //TODO 做一些数据校验,如唯一约束
// }
//
// /**
// * 校验并批量删除任务委派信息
// *
// * @param ids 待删除的主键集合
// * @param isValid 是否进行有效性校验
// * @return 是否删除成功
// */
// @Override
// public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
// if(isValid){
// //TODO 做一些业务上的校验,判断是否需要校验
// }
// return baseMapper.deleteBatchIds(ids) > 0;
// }
}

View File

@ -0,0 +1,139 @@
package com.pusong.business.service.impl;
import com.pusong.common.core.utils.MapstructUtils;
import com.pusong.common.core.utils.StringUtils;
import com.pusong.common.mybatis.core.page.TableDataInfo;
import com.pusong.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 com.pusong.business.domain.bo.PsTaskMediaBo;
import com.pusong.business.domain.vo.PsTaskMediaVo;
import com.pusong.business.domain.PsTaskMedia;
import com.pusong.business.mapper.PsTaskMediaMapper;
import com.pusong.business.service.IPsTaskMediaService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 任务资料Service业务层处理
*
* @author wls
* @date 2024-08-07
*/
@RequiredArgsConstructor
@Service
public class PsTaskMediaServiceImpl implements IPsTaskMediaService {
private final PsTaskMediaMapper baseMapper;
/**
* 查询任务资料
*
* @param id 主键
* @return 任务资料
*/
@Override
public List<PsTaskMediaVo> queryByTaskId(Long id){
PsTaskMediaBo bo = new PsTaskMediaBo();
bo.setTaskId(id);
LambdaQueryWrapper<PsTaskMedia> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<PsTaskMedia> buildQueryWrapper(PsTaskMediaBo bo) {
LambdaQueryWrapper<PsTaskMedia> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getTaskId() != null, PsTaskMedia::getTaskId, bo.getTaskId());
lqw.eq(StringUtils.isNotBlank(bo.getContractCode()), PsTaskMedia::getContractCode, bo.getContractCode());
lqw.eq(StringUtils.isNotBlank(bo.getMediaType()), PsTaskMedia::getMediaType, bo.getMediaType());
lqw.eq(StringUtils.isNotBlank(bo.getMediaOssId()), PsTaskMedia::getMediaOssId, bo.getMediaOssId());
return lqw;
}
public void saveMediaList(List<PsTaskMediaBo> voList){
List<PsTaskMedia> save = MapstructUtils.convert(voList, PsTaskMedia.class);
baseMapper.insertOrUpdateBatch(save);
}
// /**
// * 分页查询任务资料列表
// *
// * @param bo 查询条件
// * @param pageQuery 分页参数
// * @return 任务资料分页列表
// */
// @Override
// public TableDataInfo<PsTaskMediaVo> queryPageList(PsTaskMediaBo bo, PageQuery pageQuery) {
// LambdaQueryWrapper<PsTaskMedia> lqw = buildQueryWrapper(bo);
// Page<PsTaskMediaVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
// return TableDataInfo.build(result);
// }
//
// /**
// * 查询符合条件的任务资料列表
// *
// * @param bo 查询条件
// * @return 任务资料列表
// */
// @Override
// public List<PsTaskMediaVo> queryList(PsTaskMediaBo bo) {
// LambdaQueryWrapper<PsTaskMedia> lqw = buildQueryWrapper(bo);
// return baseMapper.selectVoList(lqw);
// }
//
//
//
// /**
// * 新增任务资料
// *
// * @param bo 任务资料
// * @return 是否新增成功
// */
// @Override
// public Boolean insertByBo(PsTaskMediaBo bo) {
// PsTaskMedia add = MapstructUtils.convert(bo, PsTaskMedia.class);
// validEntityBeforeSave(add);
// boolean flag = baseMapper.insert(add) > 0;
// if (flag) {
// bo.setId(add.getId());
// }
// return flag;
// }
//
// /**
// * 修改任务资料
// *
// * @param bo 任务资料
// * @return 是否修改成功
// */
// @Override
// public Boolean updateByBo(PsTaskMediaBo bo) {
// PsTaskMedia update = MapstructUtils.convert(bo, PsTaskMedia.class);
// validEntityBeforeSave(update);
// return baseMapper.updateById(update) > 0;
// }
//
// /**
// * 保存前的数据校验
// */
// private void validEntityBeforeSave(PsTaskMedia entity){
// //TODO 做一些数据校验,如唯一约束
// }
//
// /**
// * 校验并批量删除任务资料信息
// *
// * @param ids 待删除的主键集合
// * @param isValid 是否进行有效性校验
// * @return 是否删除成功
// */
// @Override
// public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
// if(isValid){
// //TODO 做一些业务上的校验,判断是否需要校验
// }
// return baseMapper.deleteBatchIds(ids) > 0;
// }
}

View File

@ -0,0 +1,407 @@
package com.pusong.business.service.impl;
import cn.hutool.core.lang.Assert;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.pusong.business.domain.PsCompanyInfo;
import com.pusong.business.domain.PsTaskAppoint;
import com.pusong.business.domain.bo.AppointBo;
import com.pusong.business.domain.bo.MediaCompanySaveBo;
import com.pusong.business.domain.bo.PsTaskMediaBo;
import com.pusong.business.domain.bo.PsTaskQueryBo;
import com.pusong.business.domain.vo.*;
import com.pusong.business.enums.ApproverTypeEnum;
import com.pusong.business.enums.TaskStatusEnum;
import com.pusong.business.enums.TaskStatusEnum.*;
import com.pusong.business.mapper.PsContractBusinessMapper;
import com.pusong.business.mapper.PsTaskAppointMapper;
import com.pusong.business.service.IPsCompanyInfoService;
import com.pusong.business.service.IPsTaskMediaService;
import com.pusong.business.service.approver.ApproverContainer;
import com.pusong.business.service.approver.ApproverService;
import com.pusong.common.core.exception.ServiceException;
import com.pusong.common.core.service.OssService;
import com.pusong.common.core.utils.DateUtils;
import com.pusong.common.core.utils.MapstructUtils;
import com.pusong.common.core.utils.StringUtils;
import com.pusong.common.mybatis.core.page.PageQuery;
import com.pusong.common.mybatis.core.page.TableDataInfo;
import com.pusong.system.service.ISysOssService;
import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import com.pusong.business.domain.PsTaskMain;
import com.pusong.business.mapper.PsTaskMainMapper;
import com.pusong.business.service.IPsTaskService;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* 主任务Service业务层处理
*
* @author wls
* @date 2024-08-07
*/
@RequiredArgsConstructor
@Service
public class PsTaskServiceImpl implements IPsTaskService {
private static final Logger log = LoggerFactory.getLogger(PsTaskServiceImpl.class);
private final PsTaskMainMapper baseMapper;
private final PsTaskAppointMapper appointMapper;
private final IPsTaskMediaService mediaService;
private final IPsCompanyInfoService companyInfoService;
private final ISysOssService ossService;
@Resource
private ApproverContainer approverContainer;
/**
* 新增主任务
*
* @param add 主任务
* @return 是否新增成功
*/
@Override
public Boolean insert(PsTaskMain add) {
boolean flag = baseMapper.insert(add) > 0;
return flag;
}
/**
* 分页查询主任务列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 主任务分页列表
*/
public TableDataInfo<PsTaskMainVo> queryPageList(PsTaskQueryBo bo, PageQuery pageQuery){
QueryWrapper<PsTaskMain> lqw = buildQueryWrapper(bo);
Page<PsTaskMainVo> page = baseMapper.queryTaskPageList(pageQuery.build(), lqw);
for (PsTaskMainVo vo : page.getRecords()) {
if(vo.getStartDate() != null){
vo.setNumOfDat(DateUtils.calWorkDate(vo.getStartDate(),new Date())+1);
}
}
return TableDataInfo.build(page);
}
/**
* 分页查询子任务列表
*
* @param bo 查询条件
* @param pageQuery 分页参数
* @return 主任务分页列表
*/
public TableDataInfo<PsTaskMainVo> queryChildPageList(PsTaskQueryBo bo, PageQuery pageQuery){
QueryWrapper<PsTaskMain> lqw = buildQueryWrapper(bo);
lqw.eq("appo.appoint_type",bo.getAppointType());
Page<PsTaskMainVo> page = baseMapper.queryChildTaskPageList(pageQuery.build(), lqw);
for (PsTaskMainVo vo : page.getRecords()) {
if(vo.getStartDate() != null){
vo.setNumOfDat(DateUtils.calWorkDate(vo.getStartDate(),new Date())+1);
}
}
return TableDataInfo.build(page);
}
/**
* 根据任务id查询任务的公司信息和资料信息
*
* @param id 任务主表主键
* @return 公司及资料信息
*/
public PsTaskMainVo queryInfo(Long id){
//查询任务信息
PsTaskMain mainTask = baseMapper.selectById(id);
//查询公司信息
PsCompanyInfoVo companyInfoVo = companyInfoService.queryById(mainTask.getCompanyId());
//查询资料信息
List<PsTaskMediaVo> list = mediaService.queryByTaskId(mainTask.getId());
PsTaskMainVo psTaskMainVo = new PsTaskMainVo();
psTaskMainVo.setCompanyInfoVo(companyInfoVo);
psTaskMainVo.setTaskMediaVoList(list);
return psTaskMainVo;
}
/**
* 上传资料和公司信息
*
* @param save 公司及资料信息
* @return
*/
@Override
@Transactional
public void saveInfo(MediaCompanySaveBo save){
//1.1信息校验
PsTaskMain taskMain = baseMapper.selectById(save.getId());
if(!TaskStatusEnum.canUpload(taskMain.getTaskStatus())){
log.error("任务已完成,无法修改");
throw new ServiceException("任务已完成,无法修改");
}
if(save.getPsCompanyInfo().getId() != null || !save.getPsCompanyInfo().getId().equals( taskMain.getCompanyId())){
log.error("公司id不同或为空");
throw new ServiceException("非法请求");
}
if(CollectionUtils.isEmpty(save.getMediaBoList())){
boolean repetition = save.getMediaBoList().stream().map(PsTaskMediaBo::getMediaType)
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
.entrySet().stream().anyMatch(e -> e.getValue() > 1);
if(repetition){
log.error("请求的任务类型重复");
throw new ServiceException("请求的任务类型重复,请刷新页面重试");
}
}
//1.2保存公司信息
companyInfoService.saveBo(save.getPsCompanyInfo());
if(CollectionUtils.isEmpty(save.getMediaBoList())){
return;
}
//2.1查询原始的合同资料信息
List<PsTaskMediaVo> mediaList = mediaService.queryByTaskId(save.getId());
//此次需要保存的资料id后续删除使用
List<String> ossIdList = new ArrayList<>();
save.getMediaBoList().forEach(item->{
item.setTaskId(taskMain.getId());
item.setContractCode(taskMain.getContractCode());
if(StringUtils.isNotBlank(item.getMediaOssId()) && !StringUtils.equals("-1",item.getMediaOssId())){
ossIdList.addAll(List.of(item.getMediaOssId().split(",")));
}
});
//2.2保存最新的合同资料信息
mediaService.saveMediaList(save.getMediaBoList());
//把历史的资料id储存到list中
List<String> list = mediaList.stream().filter(item -> StringUtils.isNotBlank(item.getMediaOssId())).map(item -> item.getMediaOssId().split(",")).flatMap(Arrays::stream).collect(Collectors.toList());
//去掉与本次保存重叠的资料-1
list.removeIf(item->StringUtils.equals("-1", item) || ossIdList.contains(item));
//2.3删除无用资料
if(CollectionUtils.isNotEmpty(list)){
ossService.deleteWithValidByIds(list.stream().map(Long::parseLong).collect(Collectors.toList()),null);
}
}
/**
* 任务委派
*
* @param bo 任务委派请求信息
* @return
*/
@Override
@Transactional
public void appoint(AppointBo bo){
//前置校验
PsTaskMain mainTask = baseMapper.selectById(bo.getId());
if(!TaskStatusEnum.canAppoint(mainTask.getTaskStatus())){
throw new ServiceException("任务已完成,无法继续派单");
}
List<PsTaskAppoint> list = appointMapper.selectList(Wrappers.<PsTaskAppoint>lambdaQuery()
.eq(PsTaskAppoint::getDelFlag,"0").eq(PsTaskAppoint::getTaskId, bo.getId())
.eq(PsTaskAppoint::getAppointType, bo.getAppointType())
.ne(PsTaskAppoint::getAppointStatus, AppointStatusEnum.CANCEL.getCode()));
if(CollectionUtils.isNotEmpty(list)){
throw new ServiceException("操作失败,任务已委派");
}
//如果是第一次派单需要修改任务状态
if(StringUtils.equals(TaskStatusEnum.INIT.getCode(),mainTask.getTaskStatus())){
PsTaskMain update = new PsTaskMain();
update.setId(mainTask.getId());
update.setTaskStatus(TaskStatusEnum.ING.getCode());
baseMapper.updateById(update);
}
PsTaskAppoint psTaskAppoint = new PsTaskAppoint();
psTaskAppoint.setAppointStatus(AppointStatusEnum.ING.getCode());
psTaskAppoint.setAppointType(bo.getAppointType());
psTaskAppoint.setContractCode(mainTask.getContractCode());
psTaskAppoint.setTaskId(mainTask.getId());
psTaskAppoint.setExecutor(bo.getUserId());
appointMapper.insert(psTaskAppoint);
}
/**
* 主任务完成
*
* @param id 任务主键id
* @return
*/
public void finishMain(Long id){
PsTaskMain main = baseMapper.selectById(id);
if(!TaskStatusEnum.canFinish(main.getTaskStatus())){
throw new ServiceException("此任务无法执行此操作,请刷新页面后重新操作");
}
List<PsTaskAppoint> list = appointMapper.selectList(Wrappers.<PsTaskAppoint>lambdaQuery()
.eq(PsTaskAppoint::getDelFlag,"0").eq(PsTaskAppoint::getTaskId, id)
.notIn(PsTaskAppoint::getAppointStatus, AppointStatusEnum.getEndStauts()));
if(CollectionUtils.isNotEmpty(list)){
throw new ServiceException("操作失败,子任务未完成");
}
ApproverService service = approverContainer.getService(ApproverTypeEnum.TASKFINISH.getCode());
service.apply(id+"",main.getContractCode(),null,null);
main.setTaskStatus(TaskStatusEnum.OA.getCode());
}
/**
* 子任务完成
*
* @param id 任务主键id
* @return
*/
public void finishChild(Long id,String desc){
PsTaskAppoint appoint = appointMapper.selectById(id);
if(StringUtils.equals("3",appoint.getAppointType()) && StringUtils.isBlank(desc)){
throw new ServiceException("请填写特勤备注");
}
if(!AppointStatusEnum.canFinish(appoint.getAppointStatus())){
throw new ServiceException("此任务无法执行此操作,请刷新页面后重新操作");
}
appoint.setAppointStatus(AppointStatusEnum.FINISH.getCode());
appoint.setTaskDesc(desc);
appointMapper.updateById(appoint);
}
/**
* 获取任务执行者列表
*
* @param id 主任务主键id
* @return
*/
public Map<String, PsTaskAppointVo> getExecutors(Long id){
List<PsTaskAppointVo> list = appointMapper.selectVoList(Wrappers.<PsTaskAppoint>lambdaQuery()
.eq(PsTaskAppoint::getDelFlag,"0").eq(PsTaskAppoint::getTaskId, id)
.ne(PsTaskAppoint::getAppointStatus, AppointStatusEnum.CANCEL.getCode()));
Map<String, PsTaskAppointVo> map = new HashMap<>();
if(CollectionUtils.isNotEmpty(list)){
map = list.stream().collect(Collectors.groupingBy(PsTaskAppointVo::getAppointType,
Collectors.collectingAndThen(Collectors.maxBy(Comparator.comparingLong(PsTaskAppointVo::getId)), Optional::get)));
}
return map;
}
/**
* 任务改派
* @param id 任务委派表id
* @param executorId 任务新的执行者id
*/
public void taskReset(Long id,Long executorId){
PsTaskAppoint appoint = appointMapper.selectById(id);
if(!AppointStatusEnum.canReset(appoint.getAppointStatus())){
throw new ServiceException("操作失败,子任务状态无法改派");
}
appoint.setExecutor(executorId);
appointMapper.updateById(appoint);
}
private QueryWrapper<PsTaskMain> buildQueryWrapper(PsTaskQueryBo bo) {
QueryWrapper<PsTaskMain> lqw = new QueryWrapper<PsTaskMain>();
lqw.eq("del_flag","0");
lqw.ne("task_status",TaskStatusEnum.CANCEL.getCode());
lqw.like(StringUtils.isNotBlank(bo.getCompanyName()), "com.company_name", bo.getCompanyName());//公司地址
lqw.like(StringUtils.isNotBlank(bo.getCustomerNum()), "com.customer_num", bo.getCustomerNum());//纳税人识别号
lqw.eq(StringUtils.isNotBlank(bo.getCustomerCert()), "com.customer_cert", bo.getCustomerCert());//纳税人资格
lqw.like(StringUtils.isNotBlank(bo.getCustomManagerName()), "us.nick_name", bo.getCustomManagerName());//销售经理姓名
lqw.like(StringUtils.isNotBlank(bo.getCompanyAdress()), "com.company_adress", bo.getCompanyAdress());//公司地址
lqw.like(StringUtils.isNotBlank(bo.getMobile()), "com.legal_person_phone", bo.getMobile());//法人手机号
lqw.like(StringUtils.isNotBlank(bo.getIdNo()), "com.legal_person_idcard", bo.getIdNo());//法人身份证
lqw.like(StringUtils.isNotBlank(bo.getName()), "com.legal_person_name", bo.getName());//法人姓名
//服务项目编码集合
lqw.exists(CollectionUtils.isNotEmpty(bo.getServiceProjectCode()), "select 1 from ps_contract_business_detail detail " +
"where detail.contract_code = con.contract_code and detail.business_project in ("+StringUtils.join(bo.getServiceProjectCode(),",")+")");//服务项目编码集合
//执行者姓名
lqw.exists(StringUtils.isNotBlank(bo.getExecutor()), "select 1 from ps_task_appoint appoint,sys_user su " +
"where appoint.executor = su.user_id and appoint.task_id = main.id and su.nick_name like '%" + bo.getExecutor() + "%'");
return lqw;
}
// /**
// * 查询主任务
// *
// * @param id 主键
// * @return 主任务
// */
// @Override
// public PsTaskMainVo queryById(Long id){
// return baseMapper.selectVoById(id);
// }
//
// /**
// * 分页查询主任务列表
// *
// * @param bo 查询条件
// * @param pageQuery 分页参数
// * @return 主任务分页列表
// */
// @Override
// public TableDataInfo<PsTaskMainVo> queryPageList(PsTaskMainBo bo, PageQuery pageQuery) {
// LambdaQueryWrapper<PsTaskMain> lqw = buildQueryWrapper(bo);
// Page<PsTaskMainVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
// return TableDataInfo.build(result);
// }
//
// /**
// * 查询符合条件的主任务列表
// *
// * @param bo 查询条件
// * @return 主任务列表
// */
// @Override
// public List<PsTaskMainVo> queryList(PsTaskMainBo bo) {
// LambdaQueryWrapper<PsTaskMain> lqw = buildQueryWrapper(bo);
// return baseMapper.selectVoList(lqw);
// }
//
// private LambdaQueryWrapper<PsTaskMain> buildQueryWrapper(PsTaskMainBo bo) {
// Map<String, Object> params = bo.getParams();
// LambdaQueryWrapper<PsTaskMain> lqw = Wrappers.lambdaQuery();
// lqw.eq(StringUtils.isNotBlank(bo.getContractCode()), PsTaskMain::getContractCode, bo.getContractCode());
// lqw.eq(StringUtils.isNotBlank(bo.getTaskType()), PsTaskMain::getTaskType, bo.getTaskType());
// lqw.eq(bo.getStartDate() != null, PsTaskMain::getStartDate, bo.getStartDate());
// lqw.eq(StringUtils.isNotBlank(bo.getTaskStatus()), PsTaskMain::getTaskStatus, bo.getTaskStatus());
// return lqw;
// }
//
//
//
// /**
// * 修改主任务
// *
// * @param bo 主任务
// * @return 是否修改成功
// */
// @Override
// public Boolean updateByBo(PsTaskMainBo bo) {
// PsTaskMain update = MapstructUtils.convert(bo, PsTaskMain.class);
// validEntityBeforeSave(update);
// return baseMapper.updateById(update) > 0;
// }
//
// /**
// * 保存前的数据校验
// */
// private void validEntityBeforeSave(PsTaskMain entity){
// //TODO 做一些数据校验,如唯一约束
// }
//
// /**
// * 校验并批量删除主任务信息
// *
// * @param ids 待删除的主键集合
// * @param isValid 是否进行有效性校验
// * @return 是否删除成功
// */
// @Override
// public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
// if(isValid){
// //TODO 做一些业务上的校验,判断是否需要校验
// }
// return baseMapper.deleteBatchIds(ids) > 0;
// }
}

View File

@ -0,0 +1,169 @@
package com.pusong.business.service.impl;
import com.pusong.business.domain.PsTaskAppoint;
import com.pusong.business.mapper.PsTaskAppointMapper;
import com.pusong.common.core.utils.MapstructUtils;
import com.pusong.common.core.utils.StringUtils;
import com.pusong.common.mybatis.core.page.TableDataInfo;
import com.pusong.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 com.pusong.business.domain.bo.PsTaskWorkRecordBo;
import com.pusong.business.domain.vo.PsTaskWorkRecordVo;
import com.pusong.business.domain.PsTaskWorkRecord;
import com.pusong.business.mapper.PsTaskWorkRecordMapper;
import com.pusong.business.service.IPsTaskWorkRecordService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 外勤任务记录Service业务层处理
*
* @author wls
* @date 2024-08-09
*/
@RequiredArgsConstructor
@Service
public class PsTaskWorkRecordServiceImpl implements IPsTaskWorkRecordService {
private final PsTaskWorkRecordMapper baseMapper;
private final PsTaskAppointMapper appointMapper;
/**
* 根据任务委派id查询工作进度列表
*
* @param id 任务委派id
* @return 外勤任务记录列表
*/
@Override
public List<PsTaskWorkRecordVo> queryListByAppointId(Long id) {
LambdaQueryWrapper<PsTaskWorkRecord> lqw = Wrappers.lambdaQuery();
lqw.eq(PsTaskWorkRecord::getDelFlag,"0");
lqw.eq(PsTaskWorkRecord::getTaskAppointId,id);
return baseMapper.selectVoList(lqw);
}
/**
* 新增外勤任务记录
*
* @param bo 外勤任务记录
* @return 是否新增成功
*/
@Override
public Boolean insertByBo(PsTaskWorkRecordBo bo) {
PsTaskAppoint appoint = appointMapper.selectById(bo.getTaskAppointId());
PsTaskWorkRecord add = MapstructUtils.convert(bo, PsTaskWorkRecord.class);
add.setContractCode(appoint.getContractCode());
boolean flag = baseMapper.insert(add) > 0;
return flag;
}
// /**
// * 查询外勤任务记录
// *
// * @param id 主键
// * @return 外勤任务记录
// */
// @Override
// public PsTaskWorkRecordVo queryById(Long id){
// return baseMapper.selectVoById(id);
// }
//
// /**
// * 分页查询外勤任务记录列表
// *
// * @param bo 查询条件
// * @param pageQuery 分页参数
// * @return 外勤任务记录分页列表
// */
// @Override
// public TableDataInfo<PsTaskWorkRecordVo> queryPageList(PsTaskWorkRecordBo bo, PageQuery pageQuery) {
// LambdaQueryWrapper<PsTaskWorkRecord> lqw = buildQueryWrapper(bo);
// Page<PsTaskWorkRecordVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
// return TableDataInfo.build(result);
// }
//
// /**
// * 查询符合条件的外勤任务记录列表
// *
// * @param bo 查询条件
// * @return 外勤任务记录列表
// */
// @Override
// public List<PsTaskWorkRecordVo> queryList(PsTaskWorkRecordBo bo) {
// LambdaQueryWrapper<PsTaskWorkRecord> lqw = buildQueryWrapper(bo);
// return baseMapper.selectVoList(lqw);
// }
//
// private LambdaQueryWrapper<PsTaskWorkRecord> buildQueryWrapper(PsTaskWorkRecordBo bo) {
// Map<String, Object> params = bo.getParams();
// LambdaQueryWrapper<PsTaskWorkRecord> lqw = Wrappers.lambdaQuery();
// lqw.eq(bo.getTaskAppointId() != null, PsTaskWorkRecord::getTaskAppointId, bo.getTaskAppointId());
// lqw.eq(StringUtils.isNotBlank(bo.getContractCode()), PsTaskWorkRecord::getContractCode, bo.getContractCode());
// lqw.eq(bo.getHandleDate() != null, PsTaskWorkRecord::getHandleDate, bo.getHandleDate());
// lqw.eq(StringUtils.isNotBlank(bo.getHandleInfo()), PsTaskWorkRecord::getHandleInfo, bo.getHandleInfo());
// lqw.eq(StringUtils.isNotBlank(bo.getHandlePlan()), PsTaskWorkRecord::getHandlePlan, bo.getHandlePlan());
// lqw.eq(StringUtils.isNotBlank(bo.getNextType()), PsTaskWorkRecord::getNextType, bo.getNextType());
// lqw.eq(StringUtils.isNotBlank(bo.getNextDesc()), PsTaskWorkRecord::getNextDesc, bo.getNextDesc());
// lqw.eq(StringUtils.isNotBlank(bo.getNextDate()), PsTaskWorkRecord::getNextDate, bo.getNextDate());
// return lqw;
// }
//
// /**
// * 新增外勤任务记录
// *
// * @param bo 外勤任务记录
// * @return 是否新增成功
// */
// @Override
// public Boolean insertByBo(PsTaskWorkRecordBo bo) {
// PsTaskWorkRecord add = MapstructUtils.convert(bo, PsTaskWorkRecord.class);
// validEntityBeforeSave(add);
// boolean flag = baseMapper.insert(add) > 0;
// if (flag) {
// bo.setId(add.getId());
// }
// return flag;
// }
//
// /**
// * 修改外勤任务记录
// *
// * @param bo 外勤任务记录
// * @return 是否修改成功
// */
// @Override
// public Boolean updateByBo(PsTaskWorkRecordBo bo) {
// PsTaskWorkRecord update = MapstructUtils.convert(bo, PsTaskWorkRecord.class);
// validEntityBeforeSave(update);
// return baseMapper.updateById(update) > 0;
// }
//
// /**
// * 保存前的数据校验
// */
// private void validEntityBeforeSave(PsTaskWorkRecord entity){
// //TODO 做一些数据校验,如唯一约束
// }
//
// /**
// * 校验并批量删除外勤任务记录信息
// *
// * @param ids 待删除的主键集合
// * @param isValid 是否进行有效性校验
// * @return 是否删除成功
// */
// @Override
// public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
// if(isValid){
// //TODO 做一些业务上的校验,判断是否需要校验
// }
// return baseMapper.deleteBatchIds(ids) > 0;
// }
}

View File

@ -7,7 +7,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<id column="contract_code" property="contractCode"></id>
<collection columnPrefix="com_" property="psCompanyInfoVo" ofType="com.pusong.business.domain.vo.PsCompanyInfoVo" >
</collection>
<collection columnPrefix="cus." property="psCustomInfoVo" ofType="com.pusong.business.domain.vo.PsCustomInfoVo" >
<collection columnPrefix="cus_" property="psCustomInfoVo" ofType="com.pusong.business.domain.vo.PsCustomInfoVo" >
</collection>
</resultMap>
<sql id="queryContractList" >

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.pusong.business.mapper.PsTaskAppointMapper">
</mapper>

View File

@ -0,0 +1,94 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.pusong.business.mapper.PsTaskMainMapper">
<resultMap id="taskMainResult" type="com.pusong.business.domain.vo.PsTaskMainVo">
<id column="id" property="id"></id>
<collection columnPrefix="con_" property="contractVo" ofType="com.pusong.business.domain.vo.TaskContractVo" >
</collection>
<collection columnPrefix="com_" property="companyInfoVo" ofType="com.pusong.business.domain.vo.PsCompanyInfoVo" >
</collection>
<collection columnPrefix="cus_" property="customInfoVo" ofType="com.pusong.business.domain.vo.PsCustomInfoVo" >
</collection>
</resultMap>
<select id="queryTaskPageList" resultMap="taskMainResult">
select main.id,
main.task_type,
main.start_date,
main.task_status,
main.contract_code,
con.is_proxy con_is_proxy,
con.custom_scene con_custom_scene,
con.custom_manager con_custom_manager,
us.nick_name con_custom_manager_name,
con.sign_desc con_sign_desc,
com.company_adress com_company_adress,
com.company_name com_company_name,
com.legal_person_name com_legal_person_name,
com.legal_person_idcard com_legal_person_idcard,
com.legal_person_phone com_legal_person_phone,
com.customer_num com_customer_num,
com.customer_cert com_customer_cert,
cus.custom_name cus_custom_name ,
cus.custom_mobile cus_custom_mobile,
(CASE WHEN (info.contract_amount -
(select IFNULL(sum(money),0) from ps_contract_pay pay where pay.business_type =1 ) +
(select IFNULL(sum(money),0) from ps_contract_pay cpay where cpay.business_type =2 )
) > 0 THEN '半款' ELSE '全款' END) as pay_stauts_desc,
(select GROUP_CONCAT(appoint.executor SEPARATOR ',')
from ps_task_appoint appoint where appoint.task_id = main.id) as executors
(select GROUP_CONCAT(business.business_type SEPARATOR ',')
from ps_contract_business business where business.contract_code = con.contract_code) as business_type_name
from ps_task_main main
left join ps_contract_info con on main.contract_code = con.contract_code
left join ps_company_info com on con.company_id = com.id
left join ps_custom_info cus on con.custom_id = cus.id
left join sys_user usr on con.custom_manager = usr.user_id
${ew.getCustomSqlSegment}
</select>
<select id="queryChildPageList" resultMap="taskMainResult">
select
main.task_type,
main.start_date,
main.task_status,
main.contract_code,
con.is_proxy con_is_proxy,
con.custom_scene con_custom_scene,
con.custom_manager con_custom_manager,
us.nick_name con_custom_manager_name,
con.sign_desc con_sign_desc,
com.company_adress com_company_adress,
com.company_name com_company_name,
com.legal_person_name com_legal_person_name,
com.legal_person_idcard com_legal_person_idcard,
com.legal_person_phone com_legal_person_phone,
com.customer_num com_customer_num,
com.customer_cert com_customer_cert,
com.finance_account_no com_finance_account_no
cus.custom_name cus_custom_name ,
cus.custom_mobile cus_custom_mobile,
(CASE WHEN (info.contract_amount -
(select IFNULL(sum(money),0) from ps_contract_pay pay where pay.business_type =1 ) +
(select IFNULL(sum(money),0) from ps_contract_pay cpay where cpay.business_type =2 )
) > 0 THEN '半款' ELSE '全款' END) as pay_stauts_desc,
appo.executor as executors,
appo.appoint_status,
appo.id,
(select GROUP_CONCAT(business.business_type SEPARATOR ',')
from ps_contract_business business where business.contract_code = con.contract_code) as business_type_name
from ps_task_appoint appo
left join ps_task_main main on appo.task_id = main.id and appo.appoint_status != '50'
left join ps_contract_info con on main.contract_code = con.contract_code
left join ps_company_info com on con.company_id = com.id
left join ps_custom_info cus on con.custom_id = cus.id
left join sys_user usr on con.custom_manager = usr.user_id
${ew.getCustomSqlSegment}
</select>
</mapper>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.pusong.business.mapper.PsTaskMediaMapper">
</mapper>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.pusong.business.mapper.PsTaskWorkRecordMapper">
</mapper>