服务公司列表相关

This commit is contained in:
mx 2024-10-16 18:19:24 +08:00
parent 9a0b88c977
commit 64269c4ee4
31 changed files with 577 additions and 253 deletions

View File

@ -204,7 +204,7 @@
${contract.startServiceDate?string('yyyy年MM月dd日')}至${contract.endServiceDate?string('yyyy年MM月dd日')}。
</p>
</#if>
<p class="content">本合同中的企业托管服务,在合同到期前 30 天,乙方有义务告知甲方。如果双方在合同期满前 30 天内未提出终止或变更要求,未办理交接手续,本合同将自行延期一年。如为其他业务,则与双方约定时间为准。</p>
<p class="content">本合同中的企业托管服务,在合同到期前 30 天,乙方有义务告知甲方。如果双方在合同期满前 30 天内未提出终止或变更要求,未办理交接手续,本合同将自行延期一年。如是其他业务,则以双方约定时间为准。</p>
<p class="title"> 二、甲方权利与义务</p>
<p class="content"> (一)甲方须按本合同约定,按时足额支付服务费用,否则乙方有权拒绝提供服务;</p>
@ -228,12 +228,12 @@
<p class="title"> 六、通知与送达</p>
<p class="content"> 甲方确保其通信地址、联系人、联系电话的准确性及有效性,因乙方经努力而无法与甲方取得联系而引起的一切后果,由甲方承担;</p>
<p class="content"> (一)如果是专人送交,则在对方签收视为已送达。</p>
<p class="content"> (二)如用快递、传真发送,则在收到传输确认书的当天被视为送到,如果传输当天不是工作日,或传输时工作日已结束营业,则在下一个工作日被视作已送达日。</p>
<p class="content"> (二)如用快递、传真发送,则在收到传输确认书的当天被视为已送达,如果传输当天不是工作日,或传输时工作日已结束营业,则在下一个工作日被视作已送达日。</p>
<p class="content"> 以电子邮件、微信、QQ等社交软件发出的则为发送人的邮件系统确认电子邮件发送至收件人的邮件接收系统后的当天为送达日。</p>
<p class="content"> (四)各方均应积极履行通知义务,且确保送达地址的有效及准确,任何一方不得以拒绝签收、无人签收、变更地址未收到等理由否定送达效力。</p>
<p class="content"> (五)乙方工商注册环节的企业营业执照、印章等物品的快递费用由乙方承担,注册企业之后所开具发票的快递(到付)费用由甲方自行承担。</p>
<p class="title"> 七、合同份数及法律效力</p>
<p class="content"> 本合同式贰份,甲方持壹份,乙方持壹份,每份合同具有相同的法律效力。本合同自双方签署后生效。</p>
<p class="content"> 本合同式贰份,甲方持壹份,乙方持壹份,每份合同具有相同的法律效力。本合同自双方签署后生效。</p>
<p class="title"> 八、其他</p>
<p class="content"> (一)乙方出于宣传目的而采取发放宣传册、广告、网页推广、销售人员宣讲等方式展现的内容不具有合同效力,双方权利义务内容以本合同为准。</p>
<p class="content"> (二)乙方工作人员无权向甲方作出超出本合同内容的承诺以及代表乙方以个人形式签署任何文件,双方均应以加盖印章的文件作为双方权利义务约定的唯一形式。</p>
@ -270,9 +270,9 @@
<span style=" text-decoration:underline"> </span> 月
<span style=" text-decoration:underline"> </span> 日-->
</p>
<#-- <#if isSign?? && isSign>-->
<#if isSign?? && isSign>
<img style="width:150px; height:150px; margin-top: -120px;margin-left: 120px" src="${imagePath}/doc/image/${mainPrefix}all.png"/>
<#-- </#if>-->
</#if>
</div>
</div>

View File

@ -3,6 +3,8 @@ package com.pusong.common.core.utils;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.lang.management.ManagementFactory;
import java.text.ParseException;
@ -10,9 +12,8 @@ import java.text.SimpleDateFormat;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
/**
* 时间工具类
@ -22,6 +23,7 @@ import java.util.List;
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
private static final Logger logger = LoggerFactory.getLogger(DateUtils.class);
public static final String YYYY = "yyyy";
public static final String YYYY_MM = "yyyy-MM";
@ -209,4 +211,32 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
return ChronoUnit.MONTHS.between(startDate.withDayOfMonth(1), endDate.withDayOfMonth(1));
}
public static Date getZeroTime(Date date){
// 使用Calendar类设置时间为今日0点
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
// 获取今日0点的Date对象
Date startOfDay = calendar.getTime();
return startOfDay;
}
public static int diffDay(Date startDate, Date endDate){
if (endDate == null){
return 0;
}
try {
long msNum = getZeroTime(endDate).getTime() - getZeroTime(startDate).getTime();//时间戳相差的毫秒数
long dayNum = msNum / 86400000; //除以一天的毫秒数得到相差天数(24 * 60 * 60 * 1000)
return (int)dayNum;
} catch (Exception e) {
logger.error("", e);
}
return 0;
}
}

View File

@ -69,7 +69,7 @@ public class PageEventHandler implements IEventHandler {
public void sign(Canvas canvas, int pageNum, float right){
if (!isSign){
// return;
return;
}
String psth;
if(pageNum % 2 == 1){
@ -81,7 +81,7 @@ public class PageEventHandler implements IEventHandler {
try {
ImageData image = ImageDataFactory.create(psth);
PdfCanvas pdfCanvas = canvas.getPdfCanvas();
float width = 75 * 0.72f;
float width = 75 * 0.73f;
pdfCanvas.addImage(image,right - width,500, width, false);
} catch (MalformedURLException e) {
throw new RuntimeException(e);

View File

@ -1,28 +1,22 @@
package com.pusong.business.controller;
import java.util.List;
import cn.dev33.satoken.annotation.SaIgnore;
import com.pusong.business.service.IPsContractInfoService;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import 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.PsApproverRecordVo;
import com.pusong.business.domain.bo.PsApproverRecordBo;
import com.pusong.business.domain.vo.PsApproverRecordVo;
import com.pusong.business.service.IPsApproverRecordService;
import com.pusong.business.service.IPsContractInfoService;
import com.pusong.common.core.domain.R;
import com.pusong.common.idempotent.annotation.RepeatSubmit;
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.NotNull;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 审批记录
@ -60,8 +54,9 @@ public class PsApproverRecordController extends BaseController {
@RepeatSubmit()
@GetMapping("/approver")
public R<Void> approver(@NotBlank(message = "操作类型不能为空") String operate,
@NotNull(message = "数据id不能为空") Long id, String desc) {
contractInfoService.finish(psApproverRecordService.approver(operate, id, desc));
@NotNull(message = "数据id不能为空") String id, String desc) {
String[] ids = id.split(",");
contractInfoService.finish(psApproverRecordService.approver(operate, ids, desc));
return R.ok();
}

View File

@ -1,33 +1,30 @@
package com.pusong.business.controller;
import java.util.List;
import cn.dev33.satoken.annotation.SaIgnore;
import com.pusong.business.domain.bo.PsCompanyQueryBo;
import com.pusong.business.domain.bo.PsCustomRecordQueryBo;
import com.pusong.business.domain.vo.PsCompanyQueryVo;
import com.pusong.business.domain.vo.PsContractInfoVo;
import com.pusong.business.domain.vo.PsCustomerRecordVo;
import com.pusong.common.core.validate.QueryGroup;
import lombok.RequiredArgsConstructor;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import 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.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.pusong.business.domain.bo.PsCompanyFollowBo;
import com.pusong.business.domain.bo.PsCompanyInfoBo;
import com.pusong.business.domain.bo.PsCompanyQueryBo;
import com.pusong.business.domain.vo.PsApproverRecordVo;
import com.pusong.business.domain.vo.PsCompanyInfoVo;
import com.pusong.business.service.IPsCompanyInfoService;
import com.pusong.business.service.IPsTaskService;
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.core.validate.QueryGroup;
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.excel.utils.ExcelUtil;
import com.pusong.business.domain.vo.PsCompanyInfoVo;
import com.pusong.business.domain.bo.PsCompanyInfoBo;
import com.pusong.business.service.IPsCompanyInfoService;
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.NotEmpty;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 公司信息
@ -42,13 +39,14 @@ import com.pusong.common.mybatis.core.page.TableDataInfo;
public class PsCompanyInfoController extends BaseController {
private final IPsCompanyInfoService psCompanyInfoService;
private final IPsTaskService psTaskService;
/**
* 查询公司信息列表
*/
@SaCheckPermission("business:companyInfo:list")
@GetMapping("/list")
public R<List<PsCompanyInfoVo>> list(@Validated(QueryGroup.class) PsCompanyInfoBo bo) {
bo.setCompanyType("1");
return R.ok(psCompanyInfoService.queryList(bo));
}
@ -65,13 +63,29 @@ public class PsCompanyInfoController extends BaseController {
/**
* 服务公司列表
*/
@SaCheckPermission("business:customInfo:list")
@SaCheckPermission("business:companyInfo:list")
@Log(title = "服务公司列表" )
@GetMapping("/serviceList")
public TableDataInfo<PsCompanyInfoVo> serviceList(PsCompanyQueryBo queryBo, PageQuery pageQuery) {
return psCompanyInfoService.queryServiceCompany(queryBo, pageQuery);
}
@SaCheckPermission("business:customInfo:list")
@SaCheckPermission("business:companyInfo:list")
@Log(title = "分盘跟进人员" )
@GetMapping("/followUsers")
public R<Void> followUsers(PsCompanyFollowBo queryBo) {
psCompanyInfoService.followUsers(queryBo);
return R.ok();
}
@SaCheckPermission("business:companyInfo:list")
@Log(title = "查看免费工单" )
@GetMapping("/freeWork")
public Page<PsApproverRecordVo> freeWork(Long companyId) {
return psTaskService.freeWork(companyId);
}
@SaCheckPermission("business:companyInfo:list")
@Log(title = "服务公司列表" )
@GetMapping("/searchServiceCompany")
public TableDataInfo<PsCompanyInfoVo> searchServiceCompany(@RequestParam("keyWorld") String keyWorld) {
@ -81,7 +95,7 @@ public class PsCompanyInfoController extends BaseController {
/**
* 停止代账
*/
@SaCheckPermission("business:customInfo:list")
@SaCheckPermission("business:companyInfo:list")
@Log(title = "停止代账" )
@GetMapping("/applyTerminationService")
public R<Void> terminationService(PsCompanyQueryBo queryBo, PageQuery pageQuery) {
@ -109,7 +123,7 @@ public class PsCompanyInfoController extends BaseController {
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody PsCompanyInfoBo bo) {
return toAjax(psCompanyInfoService.saveBo(bo));
return toAjax(psCompanyInfoService.update(bo));
}
/**

View File

@ -1,33 +1,29 @@
package com.pusong.business.controller;
import cn.dev33.satoken.annotation.SaIgnore;
import com.pusong.business.domain.PsTaskAppoint;
import cn.dev33.satoken.annotation.SaCheckPermission;
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.business.domain.vo.TaskPlanVo;
import com.pusong.business.service.IPsContractInfoService;
import com.pusong.business.service.IPsTaskService;
import com.pusong.common.core.domain.R;
import com.pusong.common.core.validate.QueryGroup;
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 lombok.RequiredArgsConstructor;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.jetbrains.annotations.NotNull;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
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 org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
import java.util.Map;
/**
@ -159,8 +155,9 @@ public class PsTaskController extends BaseController {
@SaCheckPermission("business:task:list")
@GetMapping("/reset")
@RepeatSubmit()
public R<Void> taskReset(@NotNull Long id,@NotNull Long executorId) {
psTaskMainService.taskReset(id, executorId);
public R<Void> taskReset(@NotNull Long id, @NotNull String executorIdStr) {
String[] executorIds = executorIdStr.split(",");
psTaskMainService.taskReset(id, executorIds);
return R.ok();
}
@ -174,7 +171,7 @@ public class PsTaskController extends BaseController {
@SaCheckPermission("business:task:list")
@GetMapping("/cancel")
@RepeatSubmit()
public R<Void> taskReset(@NotNull("任务id不能为空") Long id,@NotNull("作废原因不能为空") String desc) {
public R<Void> cancel(@NotNull("任务id不能为空") Long id,@NotNull("作废原因不能为空") String desc) {
psTaskMainService.cancel(id, desc);
return R.ok();
}
@ -189,7 +186,7 @@ public class PsTaskController extends BaseController {
@SaCheckPermission("business:task:list")
@PostMapping(value = "/invoice", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
@RepeatSubmit()
public R<Void> taskReset(@RequestPart("file") MultipartFile file, @NotNull Long id) {
public R<Void> invoice(@RequestPart("file") MultipartFile file, @NotNull Long id) {
psTaskMainService.invoice(file,id);
return R.ok();
}

View File

@ -0,0 +1,46 @@
package com.pusong.business.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.pusong.common.tenant.core.TenantEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 服务公司跟进人员 ps_company_info
*
* @author wls
* @date 2024-07-29
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("ps_company_follow")
public class PsCompanyFollow extends TenantEntity {
@Serial
private static final long serialVersionUID = 1L;
/**
* 公司ID
*/
@TableId(value = "id",type = IdType.AUTO)
private Long id;
/**
* 跟进人员
*/
private Long userId;
/**
* 公司id
*/
private Long companyId;
/**
* 2逻辑删除 0 默认有效
*/
private Long delFlag;
}

View File

@ -159,9 +159,6 @@ public class PsCompanyInfo extends TenantEntity {
*/
private String companyType;
/**
* 公司设立时间
*/

View File

@ -1,15 +1,15 @@
package com.pusong.business.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.pusong.common.tenant.core.TenantEntity;
import com.baomidou.mybatisplus.annotation.*;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.math.BigDecimal;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.io.Serial;
import java.math.BigDecimal;
import java.util.Date;
/**
* 合同基本信息对象 ps_contract_info
@ -81,10 +81,7 @@ public class PsContractInfo extends TenantEntity {
*/
private BigDecimal contractAmount;
/**
* 合同状态
*/
private String contractStatus;
/**
* 签约日期
@ -130,19 +127,12 @@ public class PsContractInfo extends TenantEntity {
* 2逻辑删除 0 默认有效
*/
private Long delFlag;
/**
* 合同回传状态CommonStatusEnum
*/
private String rollBackStatus;
/**
* 回传的合同文件ossid
*/
private Long rollBackPdf;
/**
* 合同签章状态CommonStatusEnum
*/
private String signStatus;
/**
* 服务周期开始时间
*/
@ -152,11 +142,6 @@ public class PsContractInfo extends TenantEntity {
*/
private Date endServiceDate;
/**
* 是否作废
*/
private String isCancel;
/**
* 合同完成时间
*/
@ -174,4 +159,23 @@ public class PsContractInfo extends TenantEntity {
* 续费日期
*/
private Date renewalDate;
/**
* 合同状态,ContractStatusEnum 修改审批中
*/
private String contractStatus;
/**
* 合同回传状态CommonStatusEnum
*/
private String rollBackStatus;
/**
* 合同签章状态CommonStatusEnum
*/
private String signStatus;
/**
* 是否作废CommonStatusEnum
*/
private String isCancel;
}

View File

@ -1,13 +1,15 @@
package com.pusong.business.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
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;
import java.util.Date;
/**
* 主任务对象 ps_task_main
@ -86,6 +88,7 @@ public class PsTaskMain extends TenantEntity {
/**
* 扩展: 类型为开发票时 发票内容
* 免费工单时为 工单id
*/
private String extend;

View File

@ -0,0 +1,31 @@
package com.pusong.business.domain.bo;
import com.pusong.business.domain.PsCompanyFollow;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
/**
* 服务公司跟进人员 ps_company_info
*
* @author wls
* @date 2024-07-29
*/
@Data
@EqualsAndHashCode
@AutoMapper(target = PsCompanyFollow.class)
public class PsCompanyFollowBo {
/**
* 跟进人员
*/
private List<Long> listUserId;
/**
* 公司id
*/
private Long companyId;
}

View File

@ -1,17 +1,14 @@
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;
import com.pusong.common.core.validate.AddGroup;
import com.pusong.common.core.validate.EditGroup;
import io.github.linpeilie.annotations.AutoMapper;
import io.github.linpeilie.annotations.AutoMapping;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@ -36,13 +33,11 @@ public class PsCompanyInfoBo {
/**
* 客户id
*/
@NotNull(message = "客户id不能为空",groups = {EditGroup.class, AddGroup.class, QueryGroup.class})
private Long customId;
/**
* 公司名称
*/
@NotBlank(message = "公司名称不能为空",groups = {EditGroup.class, AddGroup.class})
private String companyName;
/**
@ -166,7 +161,6 @@ public class PsCompanyInfoBo {
/**
* 合同服务类别
*/
@NotEmpty(message = "合同服务类别不能为空")
private List<PsContractBusinessBo> businessList;
@JsonFormat(pattern = "yyyy-MM-dd")
@ -238,6 +232,11 @@ public class PsCompanyInfoBo {
*/
private String remark;
/**
* 跟进人员
*/
private List<Long> followUsers;
public BigDecimal getContractAmount(){
this.businessAmount = businessList == null ? new BigDecimal(0) : businessList.stream().map(PsContractBusinessBo::getBusinessAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);

View File

@ -1,12 +1,10 @@
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 jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*;
import java.util.Date;
import java.util.List;
/**
@ -24,6 +22,7 @@ public class PsTaskQueryBo {
*/
private Long id;
/**
* 公司名称
*/
@ -113,4 +112,10 @@ public class PsTaskQueryBo {
*/
private String appointStatus;
/**
* 免费工单的申请单 id 对应extend
*/
private List<String> extendList;
}

View File

@ -1,25 +1,16 @@
package com.pusong.business.domain.vo;
import java.math.BigDecimal;
import java.util.Date;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pusong.business.domain.PsApproverRecord;
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 com.pusong.common.translation.annotation.Translation;
import com.pusong.common.translation.constant.TransConstant;
import io.github.linpeilie.annotations.AutoMapper;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@ -63,7 +54,7 @@ public class PsApproverRecordVo implements Serializable {
*/
private String businessType;
/**
* 关联业务id
* 关联业务id, 合同审批为合同号
*/
private String businessId;
/**
@ -232,7 +223,14 @@ public class PsApproverRecordVo implements Serializable {
* 退款详细信息
*/
private PsContractPayVo psContractPayVo;
public String getBusinessIdAndBusinessType(){
return this.businessId + "_" + this.businessType;
private PsTaskMainVo psTaskMainVo;
public String getContractCodeAndBusinessType(){
return this.contractCode + "_" + this.businessType;
}
public String idStr(){
return id.toString();
}
}

View File

@ -1,15 +1,8 @@
package com.pusong.business.domain.vo;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pusong.business.domain.PsCompanyInfo;
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 com.pusong.common.translation.annotation.Translation;
import com.pusong.common.translation.constant.TransConstant;
import com.pusong.system.domain.SysUser;
@ -18,6 +11,7 @@ import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@ -273,4 +267,5 @@ public class PsCompanyInfoVo implements Serializable {
*/
private String contractCode;
}

View File

@ -1,14 +1,8 @@
package com.pusong.business.domain.vo;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.TableId;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.pusong.business.domain.PsContractBusiness;
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 com.pusong.common.translation.annotation.Translation;
import com.pusong.common.translation.constant.TransConstant;
import io.github.linpeilie.annotations.AutoMapper;
@ -16,6 +10,7 @@ import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
@ -90,4 +85,11 @@ public class PsContractBusinessVo implements Serializable {
@JsonFormat(pattern = "yyyy-MM-dd")
private Date applyDate;
private Long companyId;
/**
* 剩余天数
*/
private int remainingDay;
}

View File

@ -267,6 +267,11 @@ public class PsContractInfoVo implements Serializable {
*/
private boolean taskNoFinish;
/**
* 最后一条申请
*/
private List<PsApproverRecordVo> lastApprover;
/**
* 服务项目里是否为 托管服务
* @return

View File

@ -0,0 +1,17 @@
package com.pusong.business.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.pusong.business.domain.PsApproverRecord;
import com.pusong.business.domain.PsCompanyFollow;
import com.pusong.business.domain.PsCompanyInfo;
import com.pusong.business.domain.vo.PsCompanyInfoVo;
import com.pusong.common.mybatis.core.mapper.BaseMapperPlus;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface PsCompanyFollowMapper extends BaseMapperPlus<PsCompanyFollow, PsCompanyFollow> {
}

View File

@ -5,9 +5,9 @@ import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.pusong.business.domain.PsApproverRecord;
import com.pusong.business.domain.PsCompanyInfo;
import com.pusong.business.domain.vo.PsApproverRecordVo;
import com.pusong.business.domain.vo.PsCompanyInfoVo;
import com.pusong.business.domain.vo.PsCompanyQueryVo;
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;
@ -22,6 +22,10 @@ import java.util.List;
public interface PsCompanyInfoMapper extends BaseMapperPlus<PsCompanyInfo, PsCompanyInfoVo> {
Page<PsCompanyInfoVo> selectPageList(@Param("page") Page<PsApproverRecord> page, @Param(Constants.WRAPPER) Wrapper<PsCompanyInfo> queryWrapper);
@DataPermission({
// @DataColumn(key = "deptName", value = "appo.create_dept"),
@DataColumn(key = "userName", value = "usr.user_id")
})
Page<PsCompanyInfoVo> selectPageList2(@Param("page") Page<PsApproverRecord> page, @Param(Constants.WRAPPER) Wrapper<PsCompanyInfo> queryWrapper);
List<PsCompanyInfoVo> selectServiceCompanyList(@Param(Constants.WRAPPER) Wrapper<PsCompanyInfoVo> queryWrapper);

View File

@ -1,5 +1,6 @@
package com.pusong.business.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.pusong.business.domain.PsContractBusiness;
import com.pusong.business.domain.vo.PsContractBusinessVo;
@ -18,4 +19,10 @@ public interface PsContractBusinessMapper extends BaseMapperPlus<PsContractBusin
List<PsContractBusinessVo> selectBusinessList(@Param("contractCode") List<String> contractCode, @Param("serviceCompanyId")Long serviceCompanyId);
List<PsContractBusinessVo> selectTuoGuanBusinessListByCompanyId(@Param("companyId") String companyId);
List<PsContractBusinessVo> selectTuoGuanBusinessList(@Param(Constants.WRAPPER) Wrapper<PsContractBusiness> queryWrapper);
}

View File

@ -1,11 +1,10 @@
package com.pusong.business.service;
import com.pusong.business.domain.vo.PsApproverRecordVo;
import com.pusong.business.domain.bo.PsApproverRecordBo;
import com.pusong.common.mybatis.core.page.TableDataInfo;
import com.pusong.business.domain.vo.PsApproverRecordVo;
import com.pusong.common.mybatis.core.page.PageQuery;
import com.pusong.common.mybatis.core.page.TableDataInfo;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@ -49,7 +48,7 @@ public interface IPsApproverRecordService {
* @param id 审批表id
* @return
*/
String approver(String operate, Long id,String desc);
String approver(String operate, String [] id,String desc);
/**
* 根据条件查询最后一条审批失败的原因
@ -58,6 +57,8 @@ public interface IPsApproverRecordService {
String getLastFail(String businessId,String contractCode,List<String> businessTypes);
Map<String, String> getLastFail(List<String> businessIds, List<String> businessTypes);
Map<String, List<PsApproverRecordVo>> getLastRecord(List<String> contractCodes, List<String> businessTypes);
//
// /**
// * 新增审批记录

View File

@ -1,10 +1,13 @@
package com.pusong.business.service;
import com.pusong.business.domain.bo.PsCompanyQueryBo;
import com.pusong.business.domain.vo.PsCompanyInfoVo;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.pusong.business.domain.bo.PsCompanyFollowBo;
import com.pusong.business.domain.bo.PsCompanyInfoBo;
import com.pusong.common.mybatis.core.page.TableDataInfo;
import com.pusong.business.domain.bo.PsCompanyQueryBo;
import com.pusong.business.domain.vo.PsApproverRecordVo;
import com.pusong.business.domain.vo.PsCompanyInfoVo;
import com.pusong.common.mybatis.core.page.PageQuery;
import com.pusong.common.mybatis.core.page.TableDataInfo;
import java.util.Collection;
import java.util.List;
@ -50,6 +53,10 @@ public interface IPsCompanyInfoService {
TableDataInfo<PsCompanyInfoVo> queryServiceCompany(PsCompanyQueryBo bo, PageQuery pageQuery);
void followUsers(PsCompanyFollowBo bo);
TableDataInfo<PsCompanyInfoVo> searchServiceCompany(String keyWorld);
/**
@ -59,7 +66,7 @@ public interface IPsCompanyInfoService {
* @return 是否新增成功
*/
Boolean saveBo(PsCompanyInfoBo bo);
int update(PsCompanyInfoBo bo);
/**
* 保存合同公司关联表
* @param list

View File

@ -1,15 +1,16 @@
package com.pusong.business.service;
import com.pusong.business.domain.PsTaskAppoint;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
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.PsApproverRecordVo;
import com.pusong.business.domain.vo.PsTaskAppointVo;
import com.pusong.business.domain.vo.PsTaskMainVo;
import com.pusong.business.domain.vo.TaskPlanVo;
import com.pusong.common.mybatis.core.page.TableDataInfo;
import com.pusong.common.mybatis.core.page.PageQuery;
import com.pusong.common.mybatis.core.page.TableDataInfo;
import org.jetbrains.annotations.NotNull;
import org.springframework.web.multipart.MultipartFile;
@ -121,7 +122,7 @@ public interface IPsTaskService {
* @param id 任务委派表id
* @param executorId 任务新的执行者id
*/
void taskReset(Long id,Long executorId);
void taskReset(Long id, String[] executorId);
/**
* 免费工单任务作废
* @param id 任务主表id
@ -189,4 +190,7 @@ public interface IPsTaskService {
* @return 是否删除成功
*//*
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);*/
Page<PsApproverRecordVo> freeWork(Long companyId);
}

View File

@ -5,15 +5,15 @@ 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.PsApproverRecord;
import com.pusong.business.domain.PsContractInfo;
import com.pusong.business.domain.PsTaskAppoint;
import com.pusong.business.domain.PsTaskMain;
import com.pusong.business.domain.bo.PsApproverRecordBo;
import com.pusong.business.domain.vo.PsApproverRecordVo;
import com.pusong.business.domain.vo.PsCompanyInfoVo;
import com.pusong.business.domain.vo.PsContractInfoVo;
import com.pusong.business.domain.vo.PsContractPayVo;
import com.pusong.business.enums.*;
import com.pusong.business.enums.ApproverTypeEnum;
import com.pusong.business.enums.PayStatusEnum;
import com.pusong.business.enums.TaskStatusEnum;
import com.pusong.business.enums.TaskTypeEnum;
import com.pusong.business.mapper.PsApproverRecordMapper;
import com.pusong.business.mapper.PsTaskAppointMapper;
import com.pusong.business.mapper.PsTaskMainMapper;
@ -65,6 +65,7 @@ public class FreeApproverServiceImpl extends ApproverAbstractServiceImpl {
psTaskMain.setServiceCompanyId(psCompanyInfoVo.getId());
psTaskMain.setBusinessType(psApproverRecord.getUpdateData().split("@@")[0]);
psTaskMain.setBusinessProject(psApproverRecord.getUpdateData().split("@@")[1]);
psTaskMain.setExtend(psApproverRecord.getId().toString());
taskMainMapper.insert(psTaskMain);
// if(StringUtils.equals(vo.getSrcContractCode(), ContractStatusEnum.SUCCESS.getCode())){
// PsContractInfo info = new PsContractInfo();
@ -89,7 +90,8 @@ public class FreeApproverServiceImpl extends ApproverAbstractServiceImpl {
*/
@Override
public Page<PsApproverRecordVo> queryList(PsApproverRecordBo bo, PageQuery pageQuery){
QueryWrapper<PsApproverRecord> lqw = Wrappers.<PsApproverRecord>query().eq("app.business_type", approverType())
QueryWrapper<PsApproverRecord> lqw = Wrappers.<PsApproverRecord>query()
.eq(StringUtils.isNotBlank(bo.getBusinessType()),"app.business_type", approverType())
.eq(bo.getId() != null,"app.id",bo.getId())
.eq("app.del_flag","0")
.eq(StringUtils.isNotBlank(bo.getApproverStatus()),"app.approver_status", bo.getApproverStatus())
@ -97,6 +99,7 @@ public class FreeApproverServiceImpl extends ApproverAbstractServiceImpl {
.like(StringUtils.isNotBlank(bo.getCompanyName()),"com.company_name", bo.getCompanyName())
//销售经理姓名
.exists(StringUtils.isNotBlank(bo.getCustomManagerName()),"select 1 from sys_user su where su.user_id = info.custom_manager and su.nick_name like '%"+bo.getCustomManagerName()+"%'")
.eq(StringUtils.isNotBlank(bo.getBusinessId()),"app.business_id", bo.getBusinessId())
.orderByAsc("app.approver_status").orderByDesc("app.apply_date");
Page<PsApproverRecordVo> res = recordMapper.selectPageFreeApproverList(pageQuery.build(), lqw);
if(CollectionUtils.isNotEmpty(res.getRecords())){

View File

@ -1,32 +1,28 @@
package com.pusong.business.service.impl;
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.pusong.business.domain.PsContractInfo;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.pusong.business.domain.PsApproverRecord;
import com.pusong.business.domain.bo.PsApproverRecordBo;
import com.pusong.business.domain.vo.PsApproverRecordVo;
import com.pusong.business.enums.ApproverStatusEnum;
import com.pusong.business.enums.ApproverTypeEnum;
import com.pusong.business.enums.TaskStatusEnum;
import com.pusong.business.mapper.PsApproverRecordMapper;
import com.pusong.business.service.IPsApproverRecordService;
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.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 com.pusong.common.mybatis.core.page.TableDataInfo;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.pusong.business.domain.bo.PsApproverRecordBo;
import com.pusong.business.domain.vo.PsApproverRecordVo;
import com.pusong.business.domain.PsApproverRecord;
import com.pusong.business.mapper.PsApproverRecordMapper;
import com.pusong.business.service.IPsApproverRecordService;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.stream.Collectors;
/**
* 审批记录Service业务层处理
@ -93,11 +89,13 @@ public class PsApproverRecordServiceImpl implements IPsApproverRecordService {
* 审批
*
* @param operate 2 通过 3拒绝
* @param id 审批表id
* @param ids 审批表id
* @return
*/
@Transactional
public String approver(String operate, Long id,String desc){
public String approver(String operate, String[] ids, String desc){
for (String idStr : ids) {
Long id = Long.valueOf(idStr);
PsApproverRecord info = baseMapper.selectById(id);
if(!StringUtils.equals(ApproverStatusEnum.INIT.getCode(),info.getApproverStatus())){
throw new ServiceException("操作失败:该审批状态已变更");
@ -120,6 +118,7 @@ public class PsApproverRecordServiceImpl implements IPsApproverRecordService {
StringUtils.equals(info.getBusinessType(),ApproverTypeEnum.TASKFINISH.getCode())){
return info.getContractCode();
}
}
return null;
}
@ -150,7 +149,7 @@ public class PsApproverRecordServiceImpl implements IPsApproverRecordService {
Map<String, String> map = new HashMap<>();
for (PsApproverRecordVo v : record) {
if (StringUtils.equals(ApproverStatusEnum.FAIL.getCode(), v.getApproverStatus())){
map.put(v.getBusinessIdAndBusinessType(), v.getApproverDesc());
map.put(v.getContractCodeAndBusinessType(), v.getApproverDesc());
}
}
// Map<String, String> map
@ -159,7 +158,22 @@ public class PsApproverRecordServiceImpl implements IPsApproverRecordService {
// .collect(Collectors.toMap(PsApproverRecordVo::getBusinessIdAndBusinessType, v -> v.getApproverDesc()));
return map;
}
public Map<String, List<PsApproverRecordVo>> getLastRecord(List<String> contractCodes, List<String> businessTypes){
if (contractCodes.isEmpty()){
return new HashMap<>();
}
QueryWrapper<PsApproverRecord> qw = Wrappers.query();
qw.in("r.contract_code", contractCodes)
.in("r.business_type", businessTypes);
List<PsApproverRecordVo> record = baseMapper.getLastFail(qw);
Map<String, List<PsApproverRecordVo>> map = new HashMap<>();
for (PsApproverRecordVo v : record) {
List<PsApproverRecordVo> psApproverRecordVos = map.computeIfAbsent(v.getContractCode(), s -> new ArrayList<>());
psApproverRecordVos.add(v);
}
return map;
}
// /**
// * 新增审批记录
// *

View File

@ -5,21 +5,20 @@ 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.PsContractCompany;
import com.pusong.business.domain.PsContractInfo;
import com.pusong.business.domain.*;
import com.pusong.business.domain.bo.PsCompanyFollowBo;
import com.pusong.business.domain.bo.PsCompanyInfoBo;
import com.pusong.business.domain.bo.PsCompanyQueryBo;
import com.pusong.business.domain.bo.PsContractBusinessBo;
import com.pusong.business.domain.vo.PsCompanyInfoVo;
import com.pusong.business.domain.vo.PsContractBusinessVo;
import com.pusong.business.enums.ApproverTypeEnum;
import com.pusong.business.mapper.PsCompanyInfoMapper;
import com.pusong.business.mapper.PsContractCompanyMapper;
import com.pusong.business.mapper.PsContractInfoMapper;
import com.pusong.business.mapper.*;
import com.pusong.business.service.IPsCompanyInfoService;
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.utils.DateUtils;
import com.pusong.common.core.utils.MapstructUtils;
import com.pusong.common.core.utils.StringUtils;
import com.pusong.common.mybatis.core.page.PageQuery;
@ -30,9 +29,8 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
* 公司信息Service业务层处理
@ -52,6 +50,12 @@ public class PsCompanyInfoServiceImpl implements IPsCompanyInfoService {
@Resource
private final ApproverContainer container;
private final PsContractBusinessMapper contractBusinessMapper;
private final PsCompanyFollowMapper psCompanyFollowMapper;
@Resource
private PsApproverRecordMapper recordMapper;
/**
* 查询公司信息
*
@ -143,9 +147,43 @@ public class PsCompanyInfoServiceImpl implements IPsCompanyInfoService {
}
lqw.exists(bo.getType() != 1, sql.toString());
Page<PsCompanyInfoVo> result = baseMapper.selectPageList2(pageQuery.build(), lqw);
if (!result.getRecords().isEmpty()){
//填充代账服务项目
List<Long> companyIds = result.getRecords().stream().map(PsCompanyInfoVo::getId).collect(Collectors.toList());
QueryWrapper<PsContractBusiness> queryParam = Wrappers.query();
queryParam.in("cc.company_id", companyIds);
List<PsContractBusinessVo> psContractBusinessVos = contractBusinessMapper.selectTuoGuanBusinessList(queryParam);
Map<Long, List<PsContractBusinessVo>> contractBusinessVoMap = psContractBusinessVos.stream().collect(Collectors.groupingBy(PsContractBusinessVo::getCompanyId, Collectors.toList()));
for (PsCompanyInfoVo record : result.getRecords()) {
record.setBusinessVoList(contractBusinessVoMap.get(record.getId()));
if (record.getBusinessVoList() == null){
continue;
}
for (PsContractBusinessVo psContractBusinessVo : record.getBusinessVoList()) {
int diffDay = DateUtils.diffDay(new Date(), psContractBusinessVo.getEndDate());
psContractBusinessVo.setRemainingDay(diffDay);
}
}
}
return TableDataInfo.build(result);
}
public void followUsers(PsCompanyFollowBo bo){
LambdaQueryWrapper<PsCompanyFollow> lqw = Wrappers.lambdaQuery();
lqw.eq(PsCompanyFollow::getCompanyId, bo.getCompanyId());
psCompanyFollowMapper.delete(lqw);
List<PsCompanyFollow> listInsert = new ArrayList<>();
for (Long followUser : bo.getListUserId()) {
PsCompanyFollow psCompanyFollow = new PsCompanyFollow();
psCompanyFollow.setCompanyId(bo.getCompanyId());
psCompanyFollow.setUserId(followUser);
listInsert.add(psCompanyFollow);
}
psCompanyFollowMapper.insertBatch(listInsert);
}
public TableDataInfo<PsCompanyInfoVo> searchServiceCompany(String keyWorld){
if (keyWorld == null || keyWorld.equals("")){
return TableDataInfo.build();
@ -158,9 +196,12 @@ public class PsCompanyInfoServiceImpl implements IPsCompanyInfoService {
Page<PsCompanyInfoVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
private LambdaQueryWrapper<PsCompanyInfo> buildQueryWrapper(PsCompanyInfoBo bo) {
LambdaQueryWrapper<PsCompanyInfo> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getId() != null, PsCompanyInfo::getId, bo.getId());
lqw.eq(bo.getCompanyType() != null, PsCompanyInfo::getCompanyType, bo.getCompanyType());
lqw.eq(bo.getCustomId() != null, PsCompanyInfo::getCustomId, bo.getCustomId());
lqw.eq(StringUtils.isNotBlank(bo.getCompanyName()), PsCompanyInfo::getCompanyName, bo.getCompanyName());
lqw.eq( PsCompanyInfo::getDelFlag, "0");
@ -200,6 +241,11 @@ public class PsCompanyInfoServiceImpl implements IPsCompanyInfoService {
}
return flag;
}
@Override
public int update(PsCompanyInfoBo bo) {
PsCompanyInfo add = MapstructUtils.convert(bo, PsCompanyInfo.class);
return baseMapper.updateById(add);
}
/**
* 保存公司合同关联表
@ -323,6 +369,6 @@ public class PsCompanyInfoServiceImpl implements IPsCompanyInfoService {
public void terminationService(Long serviceCompanyId) {
//发起审批
ApproverService service = container.getService(ApproverTypeEnum.STOPACCOUNT.getCode());
service.apply(serviceCompanyId + "", "",null, null);
service.apply(serviceCompanyId + "", "",null, "1");
}
}

View File

@ -543,7 +543,9 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService {
if (infoVo.getPayMoney().compareTo(BigDecimal.ZERO) == 0){
info.setIsCancel(CommonStatusEnum.SUCCESS.getCode());
}else{
if(StringUtils.isBlank(desc)){throw new ServiceException("请填写作废原因");}
if(StringUtils.isBlank(desc)){
throw new ServiceException("请填写作废原因");
}
//有收款点击作废填写作废原因后发起作废审批
ApproverService service = container.getService(ApproverTypeEnum.CANCELLA.getCode());
service.apply(contractCode,contractCode,desc, null);
@ -913,28 +915,15 @@ public class PsContractInfoServiceImpl implements IPsContractInfoService {
fillMoney(vos);
List<String> businessIds = new ArrayList<>();
List<String> contractCodes = new ArrayList<>();
for (PsContractInfoVo vo : vos) {
//电子签章审批
if(StringUtils.equals(CommonStatusEnum.FAIL.getCode(), vo.getSignStatus())){
// signFail.add(vo.getContractCode());
businessIds.add(vo.getContractCode());
contractCodes.add(vo.getContractCode());
}
//回传合同审批
if(StringUtils.equals(CommonStatusEnum.FAIL.getCode(), vo.getRollBackStatus())){
businessIds.add(vo.getContractCode());
}
//合同作废审批
if(StringUtils.equals(CommonStatusEnum.FAIL.getCode(), vo.getIsCancel())){
businessIds.add(vo.getContractCode());
}
}
Map<String, String> lastFailMap = approverRecordService.getLastFail(businessIds
, List.of(ApproverTypeEnum.SIGN.getCode(), ApproverTypeEnum.ROLBACK.getCode(), ApproverTypeEnum.CANCELLA.getCode()));
Map<String, List<PsApproverRecordVo>> lastFailMap = approverRecordService.getLastRecord(contractCodes
, List.of(ApproverTypeEnum.SIGN.getCode(), ApproverTypeEnum.ROLBACK.getCode()
, ApproverTypeEnum.UPDATE.getCode(), ApproverTypeEnum.RETURN.getCode(), ApproverTypeEnum.PAY.getCode()));
for (PsContractInfoVo vo : vos) {
vo.setSignFailDesc(lastFailMap.get(vo.getContractCode() + "_" + ApproverTypeEnum.SIGN.getCode()));
vo.setRollBackFailDesc(lastFailMap.get(vo.getContractCode() + "_" + ApproverTypeEnum.ROLBACK.getCode()));
vo.setContractStatusDesc(lastFailMap.get(vo.getContractCode() + "_" + ApproverTypeEnum.CANCELLA.getCode()));
vo.setLastApprover(lastFailMap.get(vo.getContractCode()));
}
//装填服务公司信息

View File

@ -5,8 +5,10 @@ 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.PsApproverRecord;
import com.pusong.business.domain.PsContractInfo;
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.PsTaskMediaBo;
@ -15,13 +17,17 @@ import com.pusong.business.domain.vo.*;
import com.pusong.business.enums.ApproverTypeEnum;
import com.pusong.business.enums.ContractStatusEnum;
import com.pusong.business.enums.TaskStatusEnum;
import com.pusong.business.enums.TaskStatusEnum.*;
import com.pusong.business.enums.TaskStatusEnum.AppointStatusEnum;
import com.pusong.business.enums.TaskTypeEnum;
import com.pusong.business.mapper.PsApproverRecordMapper;
import com.pusong.business.mapper.PsContractInfoMapper;
import com.pusong.business.mapper.PsTaskAppointMapper;
import com.pusong.business.service.*;
import com.pusong.business.mapper.PsTaskMainMapper;
import com.pusong.business.service.IPsApproverRecordService;
import com.pusong.business.service.IPsCompanyInfoService;
import com.pusong.business.service.IPsTaskMediaService;
import com.pusong.business.service.IPsTaskService;
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.utils.DateUtils;
import com.pusong.common.core.utils.StringUtils;
@ -35,9 +41,8 @@ import lombok.RequiredArgsConstructor;
import org.apache.ibatis.executor.BatchResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.pusong.business.domain.PsTaskMain;
import com.pusong.business.mapper.PsTaskMainMapper;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
@ -66,6 +71,8 @@ public class PsTaskServiceImpl implements IPsTaskService {
@Resource
private PsContractInfoMapper contractInfoMapper;
private final IPsApproverRecordService approverRecordService;
@Autowired
private PsApproverRecordMapper recordMapper;
/**
* 新增主任务
*
@ -344,9 +351,9 @@ public class PsTaskServiceImpl implements IPsTaskService {
baseMapper.updateById(update);
contractInfoMapper.update(Wrappers.<PsContractInfo>lambdaUpdate().set(PsContractInfo::getContractStatus, ContractStatusEnum.EXECUTION.getCode())
.eq(PsContractInfo::getContractCode,mainTask.getContractCode()).eq(PsContractInfo::getDelFlag,0));
}
List<PsTaskAppoint> insertList = new ArrayList<>();
for (Long userId : bo.getUserIds()) {
PsTaskAppoint psTaskAppoint = new PsTaskAppoint();
psTaskAppoint.setAppointStatus(AppointStatusEnum.ING.getCode());
@ -355,8 +362,9 @@ public class PsTaskServiceImpl implements IPsTaskService {
psTaskAppoint.setTaskId(mainTask.getId());
psTaskAppoint.setExecutor(userId);
psTaskAppoint.setTaskContentDesc(bo.getTaskContentDesc());
appointMapper.insert(psTaskAppoint);
insertList.add(psTaskAppoint);
}
appointMapper.insert(insertList);
}
/**
@ -428,13 +436,46 @@ public class PsTaskServiceImpl implements IPsTaskService {
* @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("操作失败,子任务状态无法改派");
public void taskReset(Long id, String[] executorIds){
QueryWrapper<PsTaskAppoint> lqw = new QueryWrapper<>();
lqw.eq("task_id", id);
List<PsTaskAppoint> appoints = appointMapper.selectList(lqw);
if (appoints.isEmpty()){
throw new ServiceException("当前未指派任何人, 任务状态无法改派");
}
appoint.setExecutor(executorId);
appointMapper.updateById(appoint);
Set<String> updateExecutorIdSet = new HashSet<>(Set.of(executorIds));
// Map<Long, PsTaskAppoint> executorMap = appoints.stream().collect(Collectors.toMap(PsTaskAppoint::getExecutor, a -> a));
List<Long> remove = new ArrayList<>();
for (PsTaskAppoint existsTaskAppoint : appoints) {
if (!updateExecutorIdSet.contains(existsTaskAppoint.getExecutor().toString())){
remove.add(existsTaskAppoint.getExecutor());
}else{
updateExecutorIdSet.remove(existsTaskAppoint.getExecutor().toString());
}
}
// if(!AppointStatusEnum.canReset(appoint.getAppointStatus())){
// throw new ServiceException("操作失败,子任务状态无法改派");
// }
QueryWrapper<PsTaskAppoint> removeParam = new QueryWrapper<>();
removeParam.eq("task_id", id);
removeParam.in("executor", remove);
appointMapper.delete(removeParam);
List<PsTaskAppoint> insertList = new ArrayList<>();
for (String userIdStr : updateExecutorIdSet) {
PsTaskAppoint psTaskAppoint = new PsTaskAppoint();
psTaskAppoint.setAppointStatus(AppointStatusEnum.ING.getCode());
psTaskAppoint.setAppointType(appoints.get(0).getAppointType());
psTaskAppoint.setContractCode(appoints.get(0).getContractCode());
psTaskAppoint.setTaskId(appoints.get(0).getTaskId());
psTaskAppoint.setExecutor(Long.valueOf(userIdStr));
psTaskAppoint.setTaskContentDesc(appoints.get(0).getTaskContentDesc());
insertList.add(psTaskAppoint);
}
appointMapper.insert(insertList);
}
/**
* 免费工单任务作废
@ -442,16 +483,32 @@ public class PsTaskServiceImpl implements IPsTaskService {
* @param desc 作废原因
*/
public void cancel(Long id, String desc){
// PsTaskMain info = baseMapper.selectById(id);
// if(!StringUtils.equals(TaskTypeEnum.FREE.getCode(),info.getTaskType())){
// throw new ServiceException("只有免费工单的任务可以作废");
// }
// //发起审批
// ApproverService service = approverContainer.getService(ApproverTypeEnum.TASKCANCE.getCode());
// service.apply(id+"", info.getContractCode(),desc, info.getTaskStatus());
// //修改状态为审批中
// info.setTaskStatus(TaskStatusEnum.CANCELAPPO.getCode());
// baseMapper.updateById(info);
//主任务作废
PsTaskMain info = baseMapper.selectById(id);
if(!StringUtils.equals(TaskTypeEnum.FREE.getCode(),info.getTaskType())){
throw new ServiceException("只有免费工单的任务可以作废");
}
//发起审批
ApproverService service = approverContainer.getService(ApproverTypeEnum.TASKCANCE.getCode());
service.apply(id+"", info.getContractCode(),desc, info.getTaskStatus());
//修改状态为审批中
info.setTaskStatus(TaskStatusEnum.CANCELAPPO.getCode());
info.setTaskStatus(TaskStatusEnum.CANCEL.getCode());
info.setComment(desc);
baseMapper.updateById(info);
List<PsTaskAppoint> list = appointMapper.selectList(Wrappers.<PsTaskAppoint>lambdaQuery().eq(PsTaskAppoint::getTaskId, info.getId()));
//子任务作废
appointMapper.update(Wrappers.<PsTaskAppoint>lambdaUpdate()
.set(PsTaskAppoint::getAppointStatus, TaskStatusEnum.AppointStatusEnum.CANCEL.getCode())
.eq(PsTaskAppoint::getTaskId, info.getId()));
if(CollectionUtils.isNotEmpty(list)){
List<String> ids = list.stream().map(PsTaskAppoint::getId).map(Object::toString).toList();
recordMapper.update(Wrappers.<PsApproverRecord>lambdaUpdate().set(PsApproverRecord::getDelFlag, "2").in(PsApproverRecord::getBusinessId, ids));
}
}
private QueryWrapper<PsTaskMain> buildQueryWrapper(PsTaskQueryBo bo) {
@ -471,6 +528,7 @@ public class PsTaskServiceImpl implements IPsTaskService {
lqw.eq(bo.getId() != null,"main.id",bo.getId());
lqw.in(bo.getExtendList() != null,"main.extend", bo.getExtendList());
lqw.like(StringUtils.isNotBlank(bo.getContractCode()), "main.contract_code", bo.getContractCode());
lqw.like(StringUtils.isNotBlank(bo.getCompanyName()), "com.company_name", bo.getCompanyName());//公司名称
@ -633,4 +691,30 @@ public class PsTaskServiceImpl implements IPsTaskService {
// }
// return baseMapper.deleteBatchIds(ids) > 0;
// }
public Page<PsApproverRecordVo> freeWork(Long companyId){
QueryWrapper<PsApproverRecord> lqw = Wrappers.<PsApproverRecord>query()
.eq("app.del_flag","0")
.eq("app.business_id", String.valueOf(companyId))
.orderByAsc("app.approver_status")
.orderByDesc("app.apply_date");
PageQuery pageQuery = new PageQuery();
pageQuery.setPageSize(100);
Page<PsApproverRecordVo> res = recordMapper.selectPageFreeApproverList(pageQuery.build(), lqw);
List<String> approverIds = res.getRecords().stream().map(PsApproverRecordVo::idStr).toList();
PsTaskQueryBo psTaskQueryBo = new PsTaskQueryBo();
psTaskQueryBo.setExtendList(approverIds);
pageQuery.setPageSize(approverIds.size());
TableDataInfo<PsTaskMainVo> psTaskMainVoTableDataInfo = queryPageList(psTaskQueryBo, pageQuery);
Map<String, PsTaskMainVo> approverIdMap = psTaskMainVoTableDataInfo.getRows().stream().collect(Collectors.toMap(PsTaskMainVo::getExtend, a -> a));
for (PsApproverRecordVo record : res.getRecords()) {
record.setPsTaskMainVo(approverIdMap.get(record.idStr()));
}
return res;
}
}

View File

@ -94,14 +94,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
${ew.getCustomSqlSegment}
</select>
<select id="getLastFail" resultType="com.pusong.business.domain.vo.PsApproverRecordVo">
SELECT r.business_id, r.business_type, r.approver_status, r.approver_desc
SELECT r.business_id, r.contract_code, r.business_type, r.approver_status, r.approver_desc
FROM ps_approver_record r
join(
SELECT business_id, business_type, MAX(apply_date) AS max_apply_date
SELECT contract_code, business_type, MAX(apply_date) AS max_apply_date
FROM ps_approver_record
GROUP BY business_id, business_type
) AS max_records ON r.business_type = max_records.business_type AND r.apply_date = max_records.max_apply_date AND r.business_id = max_records.business_id
GROUP BY contract_code, business_type
) AS max_records
ON r.business_type = max_records.business_type
AND r.apply_date = max_records.max_apply_date
AND r.contract_code = max_records.contract_code
and r.approver_status != '2'
${ew.getCustomSqlSegment}
</select>

View File

@ -12,6 +12,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</collection>
<collection columnPrefix="fu_" property="followUsers" ofType="com.pusong.system.domain.vo.SysUserVo" >
</collection>
<!-- <collection column="company_id" property="psContractBusinessVos"-->
<!-- select="com.pusong.business.mapper.PsContractBusinessMapper.selectTuoGuanBusinessListByCompanyId" fetchType="eager"-->
<!-- ofType="com.pusong.business.domain.vo.PsContractBusinessVo" >-->
<!-- </collection>-->
</resultMap>
<resultMap id="serviceCompanyServiceResult2" type="com.pusong.business.domain.vo.PsCompanyInfoVo">
@ -23,6 +29,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</collection>
<collection columnPrefix="fu_" property="followUsers" ofType="com.pusong.system.domain.vo.SysUserVo" >
</collection>
</resultMap>
@ -64,6 +71,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectPageList2" resultMap="serviceCompanyServiceResult">
select
com.*,
com.id company_id,
cus.custom_manager,
cus.custom_name,
cus.custom_mobile,
@ -78,6 +86,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
${ew.getCustomSqlSegment}
</select>
<select id="selectServiceCompanyList" resultMap="serviceCompanyServiceResult2">
select
--pcc.contract_code contract_code, 必须在 com.*, 上边否则company里的 contract_code值会被com表的字段覆盖

View File

@ -34,6 +34,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="serviceCompanyId != null">
and bus.company_id = ${serviceCompanyId}
</if>
</select>
<select id="selectTuoGuanBusinessList" parameterType="String" resultType="com.pusong.business.domain.vo.PsContractBusinessVo">
select
bus.*
from ps_contract_company cc
inner join ps_contract_business bus on bus.contract_code = cc.contract_code and bus.company_id = cc.company_id and business_type = '2'
${ew.getCustomSqlSegment}
</select>
<select id="selectTuoGuanBusinessListByCompanyId" parameterType="string" resultType="com.pusong.business.domain.vo.PsContractBusinessVo">
select
bus.*
from ps_contract_company cc
inner join ps_contract_business bus on bus.contract_code = cc.contract_code and bus.company_id = cc.company_id and business_type = '2'
where cc.company_id = ${companyId}
</select>
</mapper>