feat: update pd ui

This commit is contained in:
Donghuang 2024-10-21 10:33:01 +08:00
parent 007b6599b9
commit fd621ef1ef
63 changed files with 2697 additions and 19 deletions

4
deploy
View File

@ -70,6 +70,10 @@ if [[ "$2" = 'zj' ]]; then
elif [[ "$2" = 'yhp' ]]; then
SERVICE_HOME=/opt/application/${APP}
MVN_PROFILE=yhp
elif [[ "$2" = 'daily' ]]; then
SERVER=xiandou@gz-dev
SERVICE_HOME=/opt/application/${APP}
MVN_PROFILE=default
elif [[ "$2" = 'prod' ]]; then
SERVER=xiandou@cy-crm
SERVICE_HOME=/opt/application/${APP}

View File

@ -11,6 +11,7 @@ public class FileSizeUtils {
/**
* human readable bytes
*
* @param bytes bytes
* @return human readable
*/

View File

@ -1,7 +1,7 @@
package com.pudonghot.yo.operation.dal.assignment;
import com.pudonghot.yo.operation.dal.assignment.model.AssignmentDO;
import com.pudonghot.tigon.dal.BaseDal;
import com.pudonghot.yo.operation.dal.assignment.model.AssignmentDO;
/**
* 催收案件分单记录表

View File

@ -35,6 +35,7 @@ public class AssignmentDO extends BaseDbEntity {
/**
* 催收员ID
*/
@NotUpdate
private Long agentId;
/**

View File

@ -1,5 +1,6 @@
package com.pudonghot.yo.operation.dal.loan;
import java.util.List;
import com.pudonghot.tigon.dal.BaseDal;
import com.pudonghot.yo.operation.dal.loan.model.LoanDO;
@ -27,4 +28,14 @@ public interface LoanDal extends BaseDal<Long, LoanDO> {
* @return loan
*/
LoanDO findBySourceIdAndBizKey(Long sourceId, String bizKey);
/**
* 批量更新字段
*
* @param idList id list
* @param field field
* @param value value
* @return rows
*/
Integer batchUpdate(List<Long> idList, String field, Object value);
}

View File

@ -1,8 +1,15 @@
package com.pudonghot.yo.operation.dal.loan.impl;
import lombok.val;
import java.util.Date;
import java.util.List;
import java.util.HashMap;
import org.springframework.util.Assert;
import com.pudonghot.tigon.mybatis.Search;
import org.apache.commons.lang3.ArrayUtils;
import org.springframework.stereotype.Component;
import com.pudonghot.tigon.dal.impl.BaseDalImpl;
import com.pudonghot.tigon.dal.model.BaseDbEntity;
import com.pudonghot.yo.operation.dal.loan.LoanDal;
import com.pudonghot.yo.operation.dal.loan.model.LoanDO;
import com.pudonghot.yo.operation.dal.loan.mapper.LoanMapper;
@ -34,4 +41,26 @@ public class LoanDalImpl
return find(Search.of(LoanDO.Fields.loanSourceId, sourceId)
.eq(LoanDO.Fields.contractNumber, bizKey));
}
/**
* {@inheritDoc}
*/
@Override
public Integer batchUpdate(final List<Long> idList,
final String field,
final Object value) {
Assert.state(ArrayUtils.contains(
new String[] { BaseDbEntity.Fields.active,
BaseDbEntity.Fields.remark,
LoanDO.Fields.color,
LoanDO.Fields.followMark }, field),
() -> "Invalid update field [" + field + "]");
val update = new HashMap<String, Object>();
update.put(field, value);
update.put(BaseDbEntity.Fields.updatedBy, getMemberId());
update.put(BaseDbEntity.Fields.updatedTime, new Date());
return mapper.update(update, Search.of(idList));
}
}

View File

@ -96,4 +96,14 @@ public class LoanDO extends BaseDbEntity {
* 逾期天数
*/
private Integer overdueDays;
/**
* 跟进标识
*/
private String followMark;
/**
* 调解码
*/
private String tjContractNumber;
}

View File

@ -3,9 +3,9 @@ package com.pudonghot.yo.operation.dal.loan.model;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.FieldNameConstants;
import com.pudonghot.tigon.mybatis.UseGeneratedKeys;
import com.pudonghot.tigon.dal.model.BaseDbEntity;
import com.pudonghot.tigon.mybatis.NotUpdate;
import com.pudonghot.tigon.dal.model.BaseDbEntity;
import com.pudonghot.tigon.mybatis.UseGeneratedKeys;
/**
* 案件来源表

View File

@ -0,0 +1,13 @@
package com.pudonghot.yo.operation.dal.mediator;
import com.pudonghot.tigon.dal.BaseDal;
import com.pudonghot.yo.operation.dal.mediator.model.MediatorDO;
/**
* 站点调解员
*
* @author Donghuang
* @date Oct 15, 2024 10:54:29
*/
public interface MediatorDal extends BaseDal<Long, MediatorDO> {
}

View File

@ -0,0 +1,19 @@
package com.pudonghot.yo.operation.dal.mediator.impl;
import org.springframework.stereotype.Component;
import com.pudonghot.yo.operation.dal.mediator.model.MediatorDO;
import com.pudonghot.yo.operation.dal.mediator.mapper.MediatorMapper;
import com.pudonghot.yo.operation.dal.mediator.MediatorDal;
import com.pudonghot.tigon.dal.impl.BaseDalImpl;
/**
* 站点调解员
*
* @author Donghuang
* @date Oct 15, 2024 10:54:29
*/
@Component
public class MediatorDalImpl
extends BaseDalImpl<Long, MediatorDO, MediatorMapper>
implements MediatorDal {
}

View File

@ -0,0 +1,17 @@
package com.pudonghot.yo.operation.dal.mediator.mapper;
import com.pudonghot.tigon.mybatis.Table;
import org.apache.ibatis.annotations.Mapper;
import com.pudonghot.tigon.mybatis.BaseMapper;
import com.pudonghot.yo.operation.dal.mediator.model.MediatorDO;
/**
* 站点调解员
*
* @author Donghuang
* @date Oct 15, 2024 10:54:29
*/
@Mapper
@Table("tj_mediator")
public interface MediatorMapper extends BaseMapper<Long, MediatorDO> {
}

View File

@ -0,0 +1,13 @@
<?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.pudonghot.yo.operation.dal.mediator.mapper.MediatorMapper">
<!--
/**
* 站点调解员
*
* @author Donghuang
* @date Oct 15, 2024 10:54:29
*/
-->
</mapper>

View File

@ -0,0 +1,75 @@
package com.pudonghot.yo.operation.dal.mediator.model;
import lombok.Getter;
import lombok.Setter;
import com.pudonghot.tigon.mybatis.NotUpdate;
import lombok.experimental.FieldNameConstants;
import com.pudonghot.tigon.dal.model.BaseDbEntity;
import com.pudonghot.tigon.mybatis.UseGeneratedKeys;
import com.pudonghot.tigon.mybatis.NotUpdateWhenNull;
import com.pudonghot.yo.operation.enumeration.customer.GenderEnum;
/**
* 站点调解员
*
* @author Donghuang
* @date Oct 15, 2024 10:54:29
*/
@Getter
@Setter
@UseGeneratedKeys
@FieldNameConstants
public class MediatorDO extends BaseDbEntity {
private static final long serialVersionUID = 1L;
/**
* 姓名
*/
@NotUpdateWhenNull
private String name;
/**
* 性别M/F
*/
@NotUpdateWhenNull
private GenderEnum gender;
/**
* 头像
*/
private String avatar;
/**
* 认证机构法院
*/
@NotUpdateWhenNull
private String certificationInstitute;
/**
* 调解案件数量
*/
@NotUpdateWhenNull
private Integer numMediate;
/**
* 调解成功
*/
@NotUpdateWhenNull
private Integer numSuccess;
/**
* 序号
*/
private Integer ordinal;
/**
* 元数据扩展数据
*/
private String metadata;
/**
* UUID
*/
@NotUpdate
private String uuid;
}

View File

@ -0,0 +1,19 @@
package com.pudonghot.yo.operation.service.assignment;
import com.pudonghot.yo.operation.service.assignment.model.AssignmentBO;
import com.pudonghot.yo.operation.service.assignment.request.AssignmentCreateReqBO;
import com.pudonghot.yo.operation.service.assignment.request.AssignmentUpdateReqBO;
import com.pudonghot.tigon.service.TigonService;
/**
* 催收案件分单记录表
*
* @author Donghuang
* @date Oct 15, 2024 15:49:03
*/
public interface AssignmentService
extends TigonService<Long,
AssignmentBO,
AssignmentCreateReqBO,
AssignmentUpdateReqBO> {
}

View File

@ -0,0 +1,27 @@
package com.pudonghot.yo.operation.service.assignment.impl;
import org.springframework.stereotype.Service;
import com.pudonghot.tigon.service.impl.TigonServiceImpl;
import com.pudonghot.yo.operation.dal.assignment.AssignmentDal;
import com.pudonghot.yo.operation.dal.assignment.model.AssignmentDO;
import com.pudonghot.yo.operation.service.assignment.AssignmentService;
import com.pudonghot.yo.operation.service.assignment.model.AssignmentBO;
import com.pudonghot.yo.operation.service.assignment.request.AssignmentCreateReqBO;
import com.pudonghot.yo.operation.service.assignment.request.AssignmentUpdateReqBO;
/**
* 催收案件分单记录表
*
* @author Donghuang
* @date Oct 15, 2024 15:49:03
*/
@Service
public class AssignmentServiceImpl
extends TigonServiceImpl<Long,
AssignmentBO,
AssignmentCreateReqBO,
AssignmentUpdateReqBO,
AssignmentDO,
AssignmentDal>
implements AssignmentService {
}

View File

@ -0,0 +1,63 @@
package com.pudonghot.yo.operation.service.assignment.model;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
import com.pudonghot.tigon.service.model.ServModel;
/**
* 催收案件分单记录表
*
* @author Donghuang
* @date Oct 15, 2024 15:49:03
*/
@Getter
@Setter
public class AssignmentBO extends ServModel {
private static final long serialVersionUID = 1L;
/**
* 案件ID
*/
private Long loanId;
/**
* 催收员分组ID
*/
private Long groupId;
/**
* 催收员ID
*/
private Long agentId;
/**
* 协助催收员ID
*/
private Long assistantAgentId;
/**
* 催收状态在催出催
*/
private String status;
/**
* 案件分配日期
*/
private Date assignTime;
/**
* 预计出催日期
*/
private Date expectExpireDate;
/**
* 案件实际到期日期
*/
private Date actualExpireDate;
/**
* 分案方式
*/
private String assignType;
}

View File

@ -0,0 +1,63 @@
package com.pudonghot.yo.operation.service.assignment.request;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
import com.pudonghot.tigon.service.request.BaseServReq;
/**
* 催收案件分单记录表
*
* @author Donghuang
* @date Oct 15, 2024 15:49:03
*/
@Getter
@Setter
public class AssignmentCreateReqBO extends BaseServReq {
private static final long serialVersionUID = 1L;
/**
* 案件ID
*/
private Long loanId;
/**
* 催收员分组ID
*/
private Long groupId;
/**
* 催收员ID
*/
private Long agentId;
/**
* 协助催收员ID
*/
private Long assistantAgentId;
/**
* 催收状态在催出催
*/
private String status;
/**
* 案件分配日期
*/
private Date assignTime;
/**
* 预计出催日期
*/
private Date expectExpireDate;
/**
* 案件实际到期日期
*/
private Date actualExpireDate;
/**
* 分案方式
*/
private String assignType;
}

View File

@ -0,0 +1,63 @@
package com.pudonghot.yo.operation.service.assignment.request;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
import com.pudonghot.tigon.service.request.UpdateServReq;
/**
* 催收案件分单记录表
*
* @author Donghuang
* @date Oct 15, 2024 15:49:03
*/
@Getter
@Setter
public class AssignmentUpdateReqBO extends UpdateServReq<Long> {
private static final long serialVersionUID = 1L;
/**
* 案件ID
*/
private Long loanId;
/**
* 催收员分组ID
*/
private Long groupId;
/**
* 催收员ID
*/
private Long agentId;
/**
* 协助催收员ID
*/
private Long assistantAgentId;
/**
* 催收状态在催出催
*/
private String status;
/**
* 案件分配日期
*/
private Date assignTime;
/**
* 预计出催日期
*/
private Date expectExpireDate;
/**
* 案件实际到期日期
*/
private Date actualExpireDate;
/**
* 分案方式
*/
private String assignType;
}

View File

@ -85,11 +85,20 @@ public class HomeServiceImpl implements HomeService {
val tenantId = authHook.getTenantId();
val tenant = tenantDal.find(tenantId);
val sipProfile = tenantDal2.findByCode(tenant.getCode());
val realm = sipProfile.getRealm();
val agent = agentDal.findByDomainAndAccount(realm, account);
val resp = beanService.convert(agent, WebRtcAgentRespBO.class);
resp.setRealm(realm);
if (sipProfile != null) {
val realm = sipProfile.getRealm();
val agent = agentDal.findByDomainAndAccount(realm, account);
if (agent != null) {
val resp = beanService.convert(agent, WebRtcAgentRespBO.class);
resp.setRealm(realm);
resp.setEndpoint(webRtcEndpoint);
return resp;
}
}
val resp = new WebRtcAgentRespBO();
resp.setEndpoint(webRtcEndpoint);
return resp;

View File

@ -0,0 +1,28 @@
package com.pudonghot.yo.operation.service.loan;
import com.pudonghot.tigon.service.TigonService;
import com.pudonghot.yo.operation.service.loan.model.LoanBO;
import com.pudonghot.yo.operation.service.loan.request.LoanCreateReqBO;
import com.pudonghot.yo.operation.service.loan.request.LoanUpdateReqBO;
import com.pudonghot.yo.operation.service.loan.request.LoanBatchUpdateFieldReqBO;
/**
* 信贷案件表
*
* @author Donghuang
* @date Oct 15, 2024 15:56:36
*/
public interface LoanService
extends TigonService<Long,
LoanBO,
LoanCreateReqBO,
LoanUpdateReqBO> {
/**
* 批量更新跟进标识
*
* @param req req
* @return rows
*/
Integer batchUpdateField(LoanBatchUpdateFieldReqBO req);
}

View File

@ -0,0 +1,19 @@
package com.pudonghot.yo.operation.service.loan;
import com.pudonghot.yo.operation.service.loan.model.LoanSourceBO;
import com.pudonghot.yo.operation.service.loan.request.LoanSourceCreateReqBO;
import com.pudonghot.yo.operation.service.loan.request.LoanSourceUpdateReqBO;
import com.pudonghot.tigon.service.TigonService;
/**
* 案件来源表
*
* @author Donghuang
* @date Oct 15, 2024 15:57:07
*/
public interface LoanSourceService
extends TigonService<Long,
LoanSourceBO,
LoanSourceCreateReqBO,
LoanSourceUpdateReqBO> {
}

View File

@ -0,0 +1,36 @@
package com.pudonghot.yo.operation.service.loan.impl;
import org.springframework.stereotype.Service;
import com.pudonghot.yo.operation.dal.loan.LoanDal;
import com.pudonghot.yo.operation.dal.loan.model.LoanDO;
import com.pudonghot.tigon.service.impl.TigonServiceImpl;
import com.pudonghot.yo.operation.service.loan.model.LoanBO;
import com.pudonghot.yo.operation.service.loan.LoanService;
import com.pudonghot.yo.operation.service.loan.request.LoanCreateReqBO;
import com.pudonghot.yo.operation.service.loan.request.LoanUpdateReqBO;
import com.pudonghot.yo.operation.service.loan.request.LoanBatchUpdateFieldReqBO;
/**
* 信贷案件表
*
* @author Donghuang
* @date Oct 15, 2024 15:56:36
*/
@Service
public class LoanServiceImpl
extends TigonServiceImpl<Long,
LoanBO,
LoanCreateReqBO,
LoanUpdateReqBO,
LoanDO,
LoanDal>
implements LoanService {
/**
* {@inheritDoc}
*/
@Override
public Integer batchUpdateField(final LoanBatchUpdateFieldReqBO req) {
return dal.batchUpdate(req.getIdList(), req.getField(), req.getValue());
}
}

View File

@ -0,0 +1,27 @@
package com.pudonghot.yo.operation.service.loan.impl;
import com.pudonghot.yo.operation.dal.loan.LoanSourceDal;
import com.pudonghot.yo.operation.dal.loan.model.LoanSourceDO;
import org.springframework.stereotype.Service;
import com.pudonghot.tigon.service.impl.TigonServiceImpl;
import com.pudonghot.yo.operation.service.loan.model.LoanSourceBO;
import com.pudonghot.yo.operation.service.loan.request.LoanSourceCreateReqBO;
import com.pudonghot.yo.operation.service.loan.request.LoanSourceUpdateReqBO;
import com.pudonghot.yo.operation.service.loan.LoanSourceService;
/**
* 案件来源表
*
* @author Donghuang
* @date Oct 15, 2024 15:57:07
*/
@Service
public class LoanSourceServiceImpl
extends TigonServiceImpl<Long,
LoanSourceBO,
LoanSourceCreateReqBO,
LoanSourceUpdateReqBO,
LoanSourceDO,
LoanSourceDal>
implements LoanSourceService {
}

View File

@ -0,0 +1,98 @@
package com.pudonghot.yo.operation.service.loan.model;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
import com.pudonghot.tigon.service.model.ServModel;
/**
* 信贷案件表
*
* @author Donghuang
* @date Oct 15, 2024 15:56:36
*/
@Getter
@Setter
public class LoanBO extends ServModel {
private static final long serialVersionUID = 1L;
/**
* 导入时间
*/
private Date importTime;
/**
* 导入批次ID
*/
private Long importBatchId;
/**
* 案件来源ID
*/
private Long loanSourceId;
/**
* 外部合同号
*/
private String contractNumber;
/**
* 逾期天数
*/
private Integer overdueDays;
/**
* 应还总金额单位
*/
private Long overdueAmount;
/**
* 应还本金单位
*/
private Long principalAmount;
/**
* 应还利息单位
*/
private Long interestAmount;
/**
* 应还服务费单位
*/
private Long serviceAmount;
/**
* 应还罚息单位
*/
private Long penaltyAmount;
/**
* 还款状态
*/
private String repaymentStatus;
/**
* 颜色
*/
private String color;
/**
* 调解函地址
*/
private String mediateFile;
/**
* 调解结果
*/
private String mediateResult;
/**
* 跟进标识
*/
private String followMark;
/**
* 调解码
*/
private String tjContractNumber;
}

View File

@ -0,0 +1,27 @@
package com.pudonghot.yo.operation.service.loan.model;
import lombok.Getter;
import lombok.Setter;
import com.pudonghot.tigon.service.model.ServModel;
/**
* 案件来源表
*
* @author Donghuang
* @date Oct 15, 2024 15:57:07
*/
@Getter
@Setter
public class LoanSourceBO extends ServModel {
private static final long serialVersionUID = 1L;
/**
* 渠道数据源代码
*/
private String loanSourceCode;
/**
* 渠道数据源名称
*/
private String loanSourceName;
}

View File

@ -0,0 +1,24 @@
package com.pudonghot.yo.operation.service.loan.request;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
import com.pudonghot.tigon.service.request.BaseServReq;
/**
* 信贷案件表批量更新属性
*
* @author Donghuang
* @date Oct 15, 2024 15:56:36
*/
@Getter
@Setter
public class LoanBatchUpdateFieldReqBO extends BaseServReq {
private static final long serialVersionUID = 1L;
private List<Long> idList;
private String field;
private Object value;
}

View File

@ -0,0 +1,88 @@
package com.pudonghot.yo.operation.service.loan.request;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
import com.pudonghot.tigon.service.request.BaseServReq;
/**
* 信贷案件表
*
* @author Donghuang
* @date Oct 15, 2024 15:56:36
*/
@Getter
@Setter
public class LoanCreateReqBO extends BaseServReq {
private static final long serialVersionUID = 1L;
/**
* 导入时间
*/
private Date importTime;
/**
* 导入批次ID
*/
private Long importBatchId;
/**
* 案件来源ID
*/
private Long loanSourceId;
/**
* 外部合同号
*/
private String contractNumber;
/**
* 逾期天数
*/
private Integer overdueDays;
/**
* 应还总金额单位
*/
private Long overdueAmount;
/**
* 应还本金单位
*/
private Long principalAmount;
/**
* 应还利息单位
*/
private Long interestAmount;
/**
* 应还服务费单位
*/
private Long serviceAmount;
/**
* 应还罚息单位
*/
private Long penaltyAmount;
/**
* 还款状态
*/
private String repaymentStatus;
/**
* 颜色
*/
private String color;
/**
* 调解函地址
*/
private String mediateFile;
/**
* 调解结果
*/
private String mediateResult;
}

View File

@ -0,0 +1,27 @@
package com.pudonghot.yo.operation.service.loan.request;
import lombok.Getter;
import lombok.Setter;
import com.pudonghot.tigon.service.request.BaseServReq;
/**
* 案件来源表
*
* @author Donghuang
* @date Oct 15, 2024 15:57:07
*/
@Getter
@Setter
public class LoanSourceCreateReqBO extends BaseServReq {
private static final long serialVersionUID = 1L;
/**
* 渠道数据源代码
*/
private String loanSourceCode;
/**
* 渠道数据源名称
*/
private String loanSourceName;
}

View File

@ -0,0 +1,27 @@
package com.pudonghot.yo.operation.service.loan.request;
import lombok.Getter;
import lombok.Setter;
import com.pudonghot.tigon.service.request.UpdateServReq;
/**
* 案件来源表
*
* @author Donghuang
* @date Oct 15, 2024 15:57:07
*/
@Getter
@Setter
public class LoanSourceUpdateReqBO extends UpdateServReq<Long> {
private static final long serialVersionUID = 1L;
/**
* 渠道数据源代码
*/
private String loanSourceCode;
/**
* 渠道数据源名称
*/
private String loanSourceName;
}

View File

@ -0,0 +1,88 @@
package com.pudonghot.yo.operation.service.loan.request;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
import com.pudonghot.tigon.service.request.UpdateServReq;
/**
* 信贷案件表
*
* @author Donghuang
* @date Oct 15, 2024 15:56:36
*/
@Getter
@Setter
public class LoanUpdateReqBO extends UpdateServReq<Long> {
private static final long serialVersionUID = 1L;
/**
* 导入时间
*/
private Date importTime;
/**
* 导入批次ID
*/
private Long importBatchId;
/**
* 案件来源ID
*/
private Long loanSourceId;
/**
* 外部合同号
*/
private String contractNumber;
/**
* 逾期天数
*/
private Integer overdueDays;
/**
* 应还总金额单位
*/
private Long overdueAmount;
/**
* 应还本金单位
*/
private Long principalAmount;
/**
* 应还利息单位
*/
private Long interestAmount;
/**
* 应还服务费单位
*/
private Long serviceAmount;
/**
* 应还罚息单位
*/
private Long penaltyAmount;
/**
* 还款状态
*/
private String repaymentStatus;
/**
* 颜色
*/
private String color;
/**
* 调解函地址
*/
private String mediateFile;
/**
* 调解结果
*/
private String mediateResult;
}

View File

@ -0,0 +1,36 @@
package com.pudonghot.yo.operation.service.mediator;
import com.pudonghot.tigon.service.TigonService;
import com.pudonghot.yo.operation.service.mediator.model.MediatorBO;
import com.pudonghot.yo.operation.service.mediator.response.UuidRespBO;
import com.pudonghot.yo.operation.service.mediator.request.MediatorCreateReqBO;
import com.pudonghot.yo.operation.service.mediator.request.MediatorUpdateReqBO;
import com.pudonghot.yo.operation.service.mediator.request.MediatorBatchUpdateReqBO;
/**
* 站点调解员
*
* @author Donghuang
* @date Oct 15, 2024 10:55:51
*/
public interface MediatorService
extends TigonService<Long,
MediatorBO,
MediatorCreateReqBO,
MediatorUpdateReqBO> {
/**
* gen create data
*
* @return uuid data
*/
UuidRespBO genCreateData();
/**
* batch update
*
* @param req req
* @return effected rows
*/
Integer batchUpdate(MediatorBatchUpdateReqBO req);
}

View File

@ -0,0 +1,161 @@
package com.pudonghot.yo.operation.service.mediator.impl;
import lombok.val;
import java.util.Set;
import java.util.List;
import java.util.Arrays;
import java.util.HashSet;
import java.util.regex.Pattern;
import lombok.extern.slf4j.Slf4j;
import java.util.function.Consumer;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import com.pudonghot.tigon.file.oss.OssService;
import com.pudonghot.tigon.kit.sequence.IdSequence;
import com.pudonghot.tigon.service.request.BatchServReq;
import com.pudonghot.tigon.service.impl.TigonServiceImpl;
import com.pudonghot.tigon.service.request.DeleteServReq;
import org.springframework.beans.factory.annotation.Value;
import com.pudonghot.yo.operation.dal.mediator.MediatorDal;
import org.springframework.beans.factory.annotation.Autowired;
import com.pudonghot.yo.operation.dal.mediator.model.MediatorDO;
import org.springframework.transaction.annotation.Transactional;
import com.pudonghot.yo.operation.enumeration.customer.GenderEnum;
import com.pudonghot.yo.operation.service.mediator.MediatorService;
import com.pudonghot.yo.operation.service.mediator.model.MediatorBO;
import com.pudonghot.yo.operation.service.mediator.response.UuidRespBO;
import com.pudonghot.yo.operation.service.mediator.request.MediatorUpdateReqBO;
import com.pudonghot.yo.operation.service.mediator.request.MediatorCreateReqBO;
import com.pudonghot.yo.operation.service.mediator.request.MediatorBatchUpdateReqBO;
/**
* 站点调解员
*
* @author Donghuang
* @date Oct 15, 2024 10:55:51
*/
@Slf4j
@Service
public class MediatorServiceImpl
extends TigonServiceImpl<Long,
MediatorBO,
MediatorCreateReqBO,
MediatorUpdateReqBO,
MediatorDO,
MediatorDal>
implements MediatorService {
@Value("${yo.mediator.oss.base-dir:site/prod}/mediator/")
private String ossBasePath;
@Autowired
private IdSequence idSeq;
// [*ID 序号 *姓名 性别 认证机构 *调解案件 *成功案件 扩展数据 备注]
private Pattern PATTERN_BATCH_UPDATE = Pattern.compile(
"^(\\d+)\\s+(?:(\\d+)\\s+)?(\\S+)\\s+(?:(男|女|M|F)\\s+)?(?:(\\S+)\\s+)?(\\d+)\\s+(\\d+)\\s*(?:(\\S+)\\s*)?(\\S+)?");
private Set<String> SET_GENDER_MALE = new HashSet<>(Arrays.asList("", "F", "MALE", "1"));
@Autowired
private OssService ossService;
/**
* {@inheritDoc}
*/
@Override
public UuidRespBO genCreateData() {
val uuidServResp = new UuidRespBO();
val uuid = idSeq.uuid();
uuidServResp.setUuid(uuid);
uuidServResp.setAvatarPath(ossBasePath + uuid);
return uuidServResp;
}
/**
* {@inheritDoc}
*/
@Override
@Transactional
public Integer batchUpdate(final MediatorBatchUpdateReqBO req) {
val rows = req.getContents().split("[\n\r]");
int rowsEffected = 0;
for (val row : rows) {
if (StringUtils.isBlank(row)) {
continue;
}
val rowClear = row.trim();
val matcher = PATTERN_BATCH_UPDATE.matcher(rowClear);
if (matcher.find()) {
log.info("Mediator batch update row [{}] found.", rowClear);
// [序号 *姓名 性别 认证机构 *调解案件 *成功案件 扩展数据 备注]
val id = Long.parseLong(matcher.group(1));
val strOrdinal = matcher.group(2);
val name = matcher.group(3);
val strGender = matcher.group(4);
val certificationInstitute = matcher.group(5);
val numMediate = Integer.valueOf(matcher.group(6));
val numSuccess = Integer.valueOf(matcher.group(7));
val metaData = matcher.group(8);
val remark = matcher.group(9);
val mediator = dal.find(id);
if (mediator != null) {
mediator.setName(name);
if (StringUtils.isNotBlank(strOrdinal)) {
mediator.setOrdinal(Integer.valueOf(strOrdinal));
}
if (StringUtils.isNotBlank(strGender)) {
mediator.setGender(GenderEnum.valueOf(
SET_GENDER_MALE.contains(strGender.toUpperCase()) ? "M" : "F"));
}
setIfNotNull(mediator::setCertificationInstitute, certificationInstitute);
setIfNotNull(mediator::setNumMediate, numMediate);
setIfNotNull(mediator::setNumSuccess, numSuccess);
setIfNotNull(mediator::setMetadata, metaData);
setIfNotNull(mediator::setRemark, remark);
dal.update(mediator);
++rowsEffected;
continue;
}
log.warn("No mediator found by name [{}].", name);
}
log.warn("Invalid mediator update row [{}], ignore.", rowClear);
}
return rowsEffected;
}
<T> void setIfNotNull(final Consumer<T> consumer, final T value) {
if (value != null) {
consumer.accept(value);
}
}
/**
* {@inheritDoc}
*/
@Override
protected void afterDelete(final DeleteServReq<Long> req, final MediatorDO model) {
super.afterDelete(req, model);
ossService.remove(model.getAvatar());
}
/**
* {@inheritDoc}
*/
@Override
protected void afterDelete(final BatchServReq<Long> req, final List<MediatorDO> models) {
super.afterDelete(req, models);
models.forEach(model -> ossService.remove(model.getAvatar()));
}
}

View File

@ -0,0 +1,62 @@
package com.pudonghot.yo.operation.service.mediator.model;
import lombok.Getter;
import lombok.Setter;
import com.pudonghot.tigon.service.model.ServModel;
/**
* 站点调解员
*
* @author Donghuang
* @date Oct 15, 2024 10:55:51
*/
@Getter
@Setter
public class MediatorBO extends ServModel {
private static final long serialVersionUID = 1L;
/**
* 姓名
*/
private String name;
/**
* 性别M/F
*/
private String gender;
/**
* 头像
*/
private String avatar;
/**
* 认证机构法院
*/
private String certificationInstitute;
/**
* 调解案件数量
*/
private Integer numMediate;
/**
* 调解成功
*/
private Integer numSuccess;
/**
* 序号
*/
private Integer ordinal;
/**
* 元数据扩展数据
*/
private String metadata;
/**
* UUID
*/
private String uuid;
}

View File

@ -0,0 +1,22 @@
package com.pudonghot.yo.operation.service.mediator.request;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
/**
* 调解员
*
* @author Donghuang
* @date Oct 10, 2023 14:23:55
*/
@Getter
@Setter
public class MediatorBatchUpdateReqBO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* contents
*/
private String contents;
}

View File

@ -0,0 +1,62 @@
package com.pudonghot.yo.operation.service.mediator.request;
import lombok.Getter;
import lombok.Setter;
import com.pudonghot.tigon.service.request.BaseServReq;
/**
* 站点调解员
*
* @author Donghuang
* @date Oct 15, 2024 10:55:51
*/
@Getter
@Setter
public class MediatorCreateReqBO extends BaseServReq {
private static final long serialVersionUID = 1L;
/**
* 姓名
*/
private String name;
/**
* 性别M/F
*/
private String gender;
/**
* 头像
*/
private String avatar;
/**
* 认证机构法院
*/
private String certificationInstitute;
/**
* 调解案件数量
*/
private Integer numMediate;
/**
* 调解成功
*/
private Integer numSuccess;
/**
* 序号
*/
private Integer ordinal;
/**
* 元数据扩展数据
*/
private String metadata;
/**
* UUID
*/
private String uuid;
}

View File

@ -0,0 +1,62 @@
package com.pudonghot.yo.operation.service.mediator.request;
import lombok.Getter;
import lombok.Setter;
import com.pudonghot.tigon.service.request.UpdateServReq;
/**
* 站点调解员
*
* @author Donghuang
* @date Oct 15, 2024 10:55:51
*/
@Getter
@Setter
public class MediatorUpdateReqBO extends UpdateServReq<Long> {
private static final long serialVersionUID = 1L;
/**
* 姓名
*/
private String name;
/**
* 性别M/F
*/
private String gender;
/**
* 头像
*/
private String avatar;
/**
* 认证机构法院
*/
private String certificationInstitute;
/**
* 调解案件数量
*/
private Integer numMediate;
/**
* 调解成功
*/
private Integer numSuccess;
/**
* 序号
*/
private Integer ordinal;
/**
* 元数据扩展数据
*/
private String metadata;
/**
* UUID
*/
private String uuid;
}

View File

@ -0,0 +1,20 @@
package com.pudonghot.yo.operation.service.mediator.response;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.io.Serializable;
/**
* @author Donghuang
* @date Nov 14, 2023 16:17:14
*/
@Getter
@Setter
@ToString
public class UuidRespBO implements Serializable {
private static final long serialVersionUID = 1L;
private String uuid;
private String avatarPath;
}

View File

@ -0,0 +1,31 @@
package com.pudonghot.yo.operation.controller.assignment;
import com.pudonghot.tigon.web.controller.annotation.Api;
import com.pudonghot.tigon.web.controller.annotation.ApiMeta;
import org.springframework.web.bind.annotation.RequestMapping;
import com.pudonghot.tigon.web.controller.annotation.TigonController;
import com.pudonghot.yo.operation.service.assignment.AssignmentService;
import com.pudonghot.yo.operation.controller.assignment.model.AssignmentVO;
import com.pudonghot.yo.operation.controller.assignment.request.AssignmentListReqVO;
import com.pudonghot.yo.operation.controller.assignment.request.AssignmentCreateReqVO;
import com.pudonghot.yo.operation.controller.assignment.request.AssignmentUpdateReqVO;
/**
* 催收案件分单记录表
*
* @author Donghuang
* @date Oct 15, 2024 15:58:10
*/
@TigonController(service = AssignmentService.class,
viewModel = AssignmentVO.class,
list = @Api(AssignmentListReqVO.class),
create = @Api(AssignmentCreateReqVO.class),
update = @Api(AssignmentUpdateReqVO.class),
patch = @Api,
batchEnable = @Api,
batchDisable = @Api
)
@ApiMeta("案件分单")
@RequestMapping("/api/assignment")
public class AssignmentController {
}

View File

@ -0,0 +1,63 @@
package com.pudonghot.yo.operation.controller.assignment.model;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
import com.pudonghot.tigon.web.controller.model.BaseVO;
/**
* 催收案件分单记录表
*
* @author Donghuang
* @date Oct 15, 2024 15:58:10
*/
@Getter
@Setter
public class AssignmentVO extends BaseVO {
private static final long serialVersionUID = 1L;
/**
* 案件ID
*/
private Long loanId;
/**
* 催收员分组ID
*/
private Long groupId;
/**
* 催收员ID
*/
private Long agentId;
/**
* 协助催收员ID
*/
private Long assistantAgentId;
/**
* 催收状态在催出催
*/
private String status;
/**
* 案件分配日期
*/
private Date assignTime;
/**
* 预计出催日期
*/
private Date expectExpireDate;
/**
* 案件实际到期日期
*/
private Date actualExpireDate;
/**
* 分案方式
*/
private String assignType;
}

View File

@ -0,0 +1,63 @@
package com.pudonghot.yo.operation.controller.assignment.request;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
import com.pudonghot.tigon.web.controller.request.BaseCreateReqVO;
/**
* 催收案件分单记录表
*
* @author Donghuang
* @date Oct 15, 2024 15:58:10
*/
@Getter
@Setter
public class AssignmentCreateReqVO extends BaseCreateReqVO {
private static final long serialVersionUID = 1L;
/**
* 案件ID
*/
private Long loanId;
/**
* 催收员分组ID
*/
private Long groupId;
/**
* 催收员ID
*/
private Long agentId;
/**
* 协助催收员ID
*/
private Long assistantAgentId;
/**
* 催收状态在催出催
*/
private String status;
/**
* 案件分配日期
*/
private Date assignTime;
/**
* 预计出催日期
*/
private Date expectExpireDate;
/**
* 案件实际到期日期
*/
private Date actualExpireDate;
/**
* 分案方式
*/
private String assignType;
}

View File

@ -0,0 +1,63 @@
package com.pudonghot.yo.operation.controller.assignment.request;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
import com.pudonghot.tigon.web.controller.request.ListCtrlrReq;
/**
* 催收案件分单记录表
*
* @author Donghuang
* @date Oct 15, 2024 15:58:10
*/
@Getter
@Setter
public class AssignmentListReqVO extends ListCtrlrReq {
private static final long serialVersionUID = 1L;
/**
* 案件ID
*/
private Long loanId;
/**
* 催收员分组ID
*/
private Long groupId;
/**
* 催收员ID
*/
private Long agentId;
/**
* 协助催收员ID
*/
private Long assistantAgentId;
/**
* 催收状态在催出催
*/
private String status;
/**
* 案件分配日期
*/
private Date assignTime;
/**
* 预计出催日期
*/
private Date expectExpireDate;
/**
* 案件实际到期日期
*/
private Date actualExpireDate;
/**
* 分案方式
*/
private String assignType;
}

View File

@ -0,0 +1,63 @@
package com.pudonghot.yo.operation.controller.assignment.request;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
import com.pudonghot.tigon.web.controller.request.BaseUpdateReqVO;
/**
* 催收案件分单记录表
*
* @author Donghuang
* @date Oct 15, 2024 15:58:10
*/
@Getter
@Setter
public class AssignmentUpdateReqVO extends BaseUpdateReqVO {
private static final long serialVersionUID = 1L;
/**
* 案件ID
*/
private Long loanId;
/**
* 催收员分组ID
*/
private Long groupId;
/**
* 催收员ID
*/
private Long agentId;
/**
* 协助催收员ID
*/
private Long assistantAgentId;
/**
* 催收状态在催出催
*/
private String status;
/**
* 案件分配日期
*/
private Date assignTime;
/**
* 预计出催日期
*/
private Date expectExpireDate;
/**
* 案件实际到期日期
*/
private Date actualExpireDate;
/**
* 分案方式
*/
private String assignType;
}

View File

@ -0,0 +1,105 @@
package com.pudonghot.yo.operation.controller.loan;
import lombok.val;
import jakarta.validation.Valid;
import com.pudonghot.tigon.kit.bean.BeanService;
import org.springframework.stereotype.Controller;
import com.pudonghot.tigon.dal.model.BaseDbEntity;
import com.pudonghot.yo.operation.dal.loan.model.LoanDO;
import com.pudonghot.yo.operation.service.loan.LoanService;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import com.pudonghot.tigon.web.controller.annotation.ApiMeta;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import com.pudonghot.yo.operation.service.loan.request.LoanBatchUpdateFieldReqBO;
import com.pudonghot.yo.operation.controller.loan.request.LoanBatchUpdateColorReqVO;
import com.pudonghot.yo.operation.controller.loan.request.LoanBatchUpdateRemarkReqVO;
import com.pudonghot.yo.operation.controller.loan.request.LoanBatchUpdateActiveReqVO;
import com.pudonghot.yo.operation.controller.loan.request.LoanBatchUpdateFollowMarkReqVO;
/**
* 信贷案件表
*
* @author Donghuang
* @date Oct 15, 2024 15:59:16
*/
@Controller
@ApiMeta("案件")
@RequestMapping("/api/loan")
public class LoanController {
@Autowired
private LoanService loanService;
@Autowired
private BeanService beanService;
@ApiMeta("批量更新跟进标识")
@PostMapping("/batch-update/follow-mark")
public Integer batchUpdateFollowMark(
@Valid
@RequestBody
final LoanBatchUpdateFollowMarkReqVO req) {
val reqBO = new LoanBatchUpdateFieldReqBO();
reqBO.setIdList(req.getLoanIdList());
reqBO.setField(LoanDO.Fields.followMark);
reqBO.setValue(req.getFollowMark());
return loanService.batchUpdateField(reqBO);
}
@ApiMeta("批量更新颜色")
@PostMapping("/batch-update/color")
public Integer batchUpdateColor(
@Valid
@RequestBody
final LoanBatchUpdateColorReqVO req) {
val reqBO = new LoanBatchUpdateFieldReqBO();
reqBO.setIdList(req.getLoanIdList());
reqBO.setField(LoanDO.Fields.color);
reqBO.setValue(req.getColor());
return loanService.batchUpdateField(reqBO);
}
@ApiMeta("批量更新备注")
@PostMapping("/batch-update/remark")
public Integer batchUpdateRemark(
@Valid
@RequestBody
final LoanBatchUpdateRemarkReqVO req) {
val reqBO = new LoanBatchUpdateFieldReqBO();
reqBO.setIdList(req.getLoanIdList());
reqBO.setField(BaseDbEntity.Fields.remark);
reqBO.setValue(req.getRemark());
return loanService.batchUpdateField(reqBO);
}
@ApiMeta("批量启用调解")
@PostMapping("/batch-update/enable")
public Integer batchEnableActive(
@Valid
@RequestBody
final LoanBatchUpdateActiveReqVO req) {
val reqBO = new LoanBatchUpdateFieldReqBO();
reqBO.setIdList(req.getLoanIdList());
reqBO.setField(BaseDbEntity.Fields.active);
reqBO.setValue(Boolean.TRUE);
return loanService.batchUpdateField(reqBO);
}
@ApiMeta("批量停止调解")
@PostMapping("/batch-update/disable")
public Integer batchDisableActive(
@Valid
@RequestBody
final LoanBatchUpdateActiveReqVO req) {
val reqBO = new LoanBatchUpdateFieldReqBO();
reqBO.setIdList(req.getLoanIdList());
reqBO.setField(BaseDbEntity.Fields.active);
reqBO.setValue(Boolean.FALSE);
return loanService.batchUpdateField(reqBO);
}
}

View File

@ -0,0 +1,88 @@
package com.pudonghot.yo.operation.controller.loan.model;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
import com.pudonghot.tigon.web.controller.model.BaseVO;
/**
* 信贷案件表
*
* @author Donghuang
* @date Oct 15, 2024 15:59:16
*/
@Getter
@Setter
public class LoanVO extends BaseVO {
private static final long serialVersionUID = 1L;
/**
* 导入时间
*/
private Date importTime;
/**
* 导入批次ID
*/
private Long importBatchId;
/**
* 案件来源ID
*/
private Long loanSourceId;
/**
* 外部合同号
*/
private String contractNumber;
/**
* 逾期天数
*/
private Integer overdueDays;
/**
* 应还总金额单位
*/
private Long overdueAmount;
/**
* 应还本金单位
*/
private Long principalAmount;
/**
* 应还利息单位
*/
private Long interestAmount;
/**
* 应还服务费单位
*/
private Long serviceAmount;
/**
* 应还罚息单位
*/
private Long penaltyAmount;
/**
* 还款状态
*/
private String repaymentStatus;
/**
* 颜色
*/
private String color;
/**
* 调解函地址
*/
private String mediateFile;
/**
* 调解结果
*/
private String mediateResult;
}

View File

@ -0,0 +1,24 @@
package com.pudonghot.yo.operation.controller.loan.request;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.util.List;
import java.io.Serializable;
import jakarta.validation.constraints.NotEmpty;
/**
* 信贷案件表批量更新启用
*
* @author Donghuang
* @date Oct 15, 2024 15:59:16
*/
@Getter
@Setter
@ToString
public class LoanBatchUpdateActiveReqVO implements Serializable {
private static final long serialVersionUID = 1L;
@NotEmpty
private List<Long> loanIdList;
}

View File

@ -0,0 +1,30 @@
package com.pudonghot.yo.operation.controller.loan.request;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
import lombok.ToString;
import java.io.Serializable;
import com.pudonghot.tigon.annotation.Trim;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotBlank;
/**
* 信贷案件表批量更新颜色
*
* @author Donghuang
* @date Oct 15, 2024 15:59:16
*/
@Getter
@Setter
@ToString
public class LoanBatchUpdateColorReqVO implements Serializable {
private static final long serialVersionUID = 1L;
@NotEmpty
private List<Long> loanIdList;
@Trim
@NotBlank
private String color;
}

View File

@ -0,0 +1,30 @@
package com.pudonghot.yo.operation.controller.loan.request;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
import lombok.ToString;
import java.io.Serializable;
import com.pudonghot.tigon.annotation.Trim;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
/**
* 信贷案件表批量更新跟进标志
*
* @author Donghuang
* @date Oct 15, 2024 15:59:16
*/
@Getter
@Setter
@ToString
public class LoanBatchUpdateFollowMarkReqVO implements Serializable {
private static final long serialVersionUID = 1L;
@NotEmpty
private List<Long> loanIdList;
@Trim
@NotBlank
private String followMark;
}

View File

@ -0,0 +1,30 @@
package com.pudonghot.yo.operation.controller.loan.request;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
import lombok.ToString;
import java.io.Serializable;
import com.pudonghot.tigon.annotation.Trim;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
/**
* 信贷案件表批量更新备注
*
* @author Donghuang
* @date Oct 15, 2024 15:59:16
*/
@Getter
@Setter
@ToString
public class LoanBatchUpdateRemarkReqVO implements Serializable {
private static final long serialVersionUID = 1L;
@NotEmpty
private List<Long> loanIdList;
@Trim
@NotBlank
private String remark;
}

View File

@ -0,0 +1,88 @@
package com.pudonghot.yo.operation.controller.loan.request;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
import com.pudonghot.tigon.web.controller.request.BaseCreateReqVO;
/**
* 信贷案件表
*
* @author Donghuang
* @date Oct 15, 2024 15:59:16
*/
@Getter
@Setter
public class LoanCreateReqVO extends BaseCreateReqVO {
private static final long serialVersionUID = 1L;
/**
* 导入时间
*/
private Date importTime;
/**
* 导入批次ID
*/
private Long importBatchId;
/**
* 案件来源ID
*/
private Long loanSourceId;
/**
* 外部合同号
*/
private String contractNumber;
/**
* 逾期天数
*/
private Integer overdueDays;
/**
* 应还总金额单位
*/
private Long overdueAmount;
/**
* 应还本金单位
*/
private Long principalAmount;
/**
* 应还利息单位
*/
private Long interestAmount;
/**
* 应还服务费单位
*/
private Long serviceAmount;
/**
* 应还罚息单位
*/
private Long penaltyAmount;
/**
* 还款状态
*/
private String repaymentStatus;
/**
* 颜色
*/
private String color;
/**
* 调解函地址
*/
private String mediateFile;
/**
* 调解结果
*/
private String mediateResult;
}

View File

@ -0,0 +1,88 @@
package com.pudonghot.yo.operation.controller.loan.request;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
import com.pudonghot.tigon.web.controller.request.ListCtrlrReq;
/**
* 信贷案件表
*
* @author Donghuang
* @date Oct 15, 2024 15:59:16
*/
@Getter
@Setter
public class LoanListReqVO extends ListCtrlrReq {
private static final long serialVersionUID = 1L;
/**
* 导入时间
*/
private Date importTime;
/**
* 导入批次ID
*/
private Long importBatchId;
/**
* 案件来源ID
*/
private Long loanSourceId;
/**
* 外部合同号
*/
private String contractNumber;
/**
* 逾期天数
*/
private Integer overdueDays;
/**
* 应还总金额单位
*/
private Long overdueAmount;
/**
* 应还本金单位
*/
private Long principalAmount;
/**
* 应还利息单位
*/
private Long interestAmount;
/**
* 应还服务费单位
*/
private Long serviceAmount;
/**
* 应还罚息单位
*/
private Long penaltyAmount;
/**
* 还款状态
*/
private String repaymentStatus;
/**
* 颜色
*/
private String color;
/**
* 调解函地址
*/
private String mediateFile;
/**
* 调解结果
*/
private String mediateResult;
}

View File

@ -0,0 +1,88 @@
package com.pudonghot.yo.operation.controller.loan.request;
import lombok.Getter;
import lombok.Setter;
import java.util.Date;
import com.pudonghot.tigon.web.controller.request.BaseUpdateReqVO;
/**
* 信贷案件表
*
* @author Donghuang
* @date Oct 15, 2024 15:59:16
*/
@Getter
@Setter
public class LoanUpdateReqVO extends BaseUpdateReqVO {
private static final long serialVersionUID = 1L;
/**
* 导入时间
*/
private Date importTime;
/**
* 导入批次ID
*/
private Long importBatchId;
/**
* 案件来源ID
*/
private Long loanSourceId;
/**
* 外部合同号
*/
private String contractNumber;
/**
* 逾期天数
*/
private Integer overdueDays;
/**
* 应还总金额单位
*/
private Long overdueAmount;
/**
* 应还本金单位
*/
private Long principalAmount;
/**
* 应还利息单位
*/
private Long interestAmount;
/**
* 应还服务费单位
*/
private Long serviceAmount;
/**
* 应还罚息单位
*/
private Long penaltyAmount;
/**
* 还款状态
*/
private String repaymentStatus;
/**
* 颜色
*/
private String color;
/**
* 调解函地址
*/
private String mediateFile;
/**
* 调解结果
*/
private String mediateResult;
}

View File

@ -7,6 +7,7 @@ import org.apache.commons.lang3.StringUtils;
import com.pudonghot.tigon.kit.bean.BeanService;
import org.springframework.util.CollectionUtils;
import org.springframework.stereotype.Controller;
import com.pudonghot.tigon.web.controller.annotation.ApiMeta;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
@ -20,6 +21,7 @@ import com.pudonghot.yo.operation.controller.loanimport.response.LoanImportRespV
* @date Oct 02, 2024 21:07:55
*/
@Controller
@ApiMeta("案件管理")
@RequestMapping("/api/loan")
public class LoanImportController {
@ -28,6 +30,7 @@ public class LoanImportController {
@Autowired
private BeanService beanService;
@ApiMeta("案件导入")
@PostMapping("/import")
public LoanImportRespVO loanImport(@Valid final LoanImportReqVO req) {
val resp = loanImportService.loanImport(beanService.convert(req, LoanImportReqBO.class));

View File

@ -0,0 +1,56 @@
package com.pudonghot.yo.operation.controller.mediator;
import jakarta.validation.Valid;
import com.pudonghot.tigon.kit.bean.BeanService;
import com.pudonghot.tigon.web.controller.annotation.Api;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import com.pudonghot.tigon.web.controller.annotation.ApiMeta;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import com.pudonghot.yo.operation.service.mediator.MediatorService;
import com.pudonghot.tigon.web.controller.annotation.TigonController;
import com.pudonghot.yo.operation.controller.mediator.model.MediatorVO;
import com.pudonghot.yo.operation.controller.mediator.response.UuidRespVO;
import com.pudonghot.yo.operation.controller.mediator.request.MediatorCreateReqVO;
import com.pudonghot.yo.operation.controller.mediator.request.MediatorUpdateReqVO;
import com.pudonghot.yo.operation.service.mediator.request.MediatorBatchUpdateReqBO;
import com.pudonghot.yo.operation.controller.mediator.request.MediatorBatchUpdateReqVO;
/**
* @author Donghuang
* @date Oct 15, 2024 11:26:25
*/
@TigonController(service = MediatorService.class,
viewModel = MediatorVO.class,
list = @Api,
create = @Api(MediatorCreateReqVO.class),
update = @Api(MediatorUpdateReqVO.class),
patch = @Api,
delete = @Api,
batchEnable = @Api,
batchDisable = @Api,
batchRemove = @Api
)
@ApiMeta("调解员")
@RequestMapping("/api/mediator")
public class MediatorController {
@Autowired
private MediatorService mediatorService;
@Autowired
private BeanService beanService;
@RequestMapping("/gen-create-data")
public UuidRespVO genCreateData() {
return beanService.convert(mediatorService.genCreateData(), UuidRespVO.class);
}
@PostMapping("/batch-update")
public Integer batchUpdate(
@Valid
@RequestBody
final MediatorBatchUpdateReqVO req) {
return mediatorService.batchUpdate(beanService.convert(req, MediatorBatchUpdateReqBO.class));
}
}

View File

@ -0,0 +1,62 @@
package com.pudonghot.yo.operation.controller.mediator.model;
import com.pudonghot.tigon.web.controller.model.BaseVO;
import lombok.Getter;
import lombok.Setter;
/**
* 文章分组
*
* @author Donghuang
* @date Oct 10, 2023 14:23:55
*/
@Getter
@Setter
public class MediatorVO extends BaseVO {
private static final long serialVersionUID = 1L;
/**
* 姓名
*/
private String name;
/**
* 性别
*/
private String gender;
/**
* 头像
*/
private String avatar;
/**
* 认证机构法院
*/
private String certificationInstitute;
/**
* 调解案件数量
*/
private Integer numMediate;
/**
* 调解成功
*/
private Integer numSuccess;
/**
* 元数据扩展数据
*/
private String metadata;
/**
* UUID
*/
private String uuid;
/**
* 序号
*/
private Integer ordinal;
}

View File

@ -0,0 +1,24 @@
package com.pudonghot.yo.operation.controller.mediator.request;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import com.pudonghot.tigon.annotation.Trim;
import jakarta.validation.constraints.NotBlank;
/**
* @author Donghuang
* @date Oct 11, 2023 14:38:17
*/
@Getter
@Setter
public class MediatorBatchUpdateReqVO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 名称
*/
@Trim
@NotBlank
private String contents;
}

View File

@ -0,0 +1,74 @@
package com.pudonghot.yo.operation.controller.mediator.request;
import lombok.Getter;
import lombok.Setter;
import com.pudonghot.tigon.annotation.Trim;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.NotBlank;
import com.pudonghot.tigon.web.controller.request.BaseCreateReqVO;
/**
* @author Donghuang
* @date Oct 11, 2023 14:37:57
*/
@Getter
@Setter
public class MediatorCreateReqVO extends BaseCreateReqVO {
/**
* 名称
*/
@Trim
@NotBlank
private String name;
/**
* 性别
*/
@Trim
@NotBlank
private String gender;
/**
* 头像
*/
@Trim
@NotBlank
private String avatar;
/**
* 认证机构法院
*/
@Trim
@NotBlank
private String certificationInstitute;
/**
* 调解案件数量
*/
@NotNull
private Integer numMediate;
/**
* 调解成功
*/
@NotNull
private Integer numSuccess;
/**
* 元数据扩展数据
*/
@Trim
private String metadata;
/**
* UUID
*/
@Trim
private String uuid;
/**
* 序号
*/
private Integer ordinal;
}

View File

@ -0,0 +1,68 @@
package com.pudonghot.yo.operation.controller.mediator.request;
import lombok.Getter;
import lombok.Setter;
import com.pudonghot.tigon.annotation.Trim;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.NotBlank;
import com.pudonghot.tigon.web.controller.request.BaseUpdateReqVO;
/**
* @author Donghuang
* @date Oct 11, 2023 14:38:17
*/
@Getter
@Setter
public class MediatorUpdateReqVO extends BaseUpdateReqVO {
/**
* 名称
*/
@Trim
@NotBlank
private String name;
/**
* 性别
*/
@Trim
@NotBlank
private String gender;
/**
* 头像
*/
@Trim
@NotBlank
private String avatar;
/**
* 认证机构法院
*/
@Trim
@NotBlank
private String certificationInstitute;
/**
* 调解案件数量
*/
@NotNull
private Integer numMediate;
/**
* 调解成功
*/
@NotNull
private Integer numSuccess;
/**
* 元数据扩展数据
*/
@Trim
private String metadata;
/**
* 序号
*/
private Integer ordinal;
}

View File

@ -0,0 +1,21 @@
package com.pudonghot.yo.operation.controller.mediator.response;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.io.Serializable;
/**
* @author Donghuang
* @date Nov 14, 2023 16:17:14
*/
@Getter
@Setter
@ToString
public class UuidRespVO implements Serializable {
private static final long serialVersionUID = 1L;
private String uuid;
private String avatarPath;
}

View File

@ -0,0 +1,31 @@
package com.pudonghot.yo.operation.controller.system;
import com.pudonghot.tigon.file.oss.StsService;
import com.pudonghot.tigon.kit.bean.BeanService;
import org.springframework.stereotype.Controller;
import org.springframework.beans.factory.annotation.Value;
import com.pudonghot.tigon.web.controller.annotation.ApiMeta;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import com.pudonghot.yo.operation.controller.system.response.OssUploadAcsVO;
/**
* @author Donghuang
* @date Apr 18, 2023 15:58:07
*/
@Controller
@ApiMeta(basic = true)
@RequestMapping("/api/oss/acs")
public class AcsController {
@Autowired
private StsService ossService;
@Autowired
private BeanService beanService;
@Value("${yo.oss.acs-session-key:OSS_UPLOAD}")
private String acsSessionKey;
@RequestMapping("/get")
public OssUploadAcsVO getOssAcs() {
return beanService.convert(ossService.getOssAcs(acsSessionKey), OssUploadAcsVO.class);
}
}

View File

@ -0,0 +1,36 @@
package com.pudonghot.yo.operation.controller.system.response;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.io.Serializable;
/**
* @author Donghuang
* @date Apr 18, 2023 16:53:13
*/
@Getter
@Setter
@ToString
public class OssUploadAcsVO implements Serializable {
private static final long serialVersionUID = 1L;
private String requestId;
// oss-cn-hangzhou
private String region;
private String endpoint;
private String bucket;
private CredentialsVO credentials;
@Getter
@Setter
@ToString
public static class CredentialsVO implements Serializable {
private static final long serialVersionUID = 1L;
private String accessKey;
private String accessSecret;
private String securityToken;
private String expiration;
}
}

View File

@ -6,7 +6,7 @@ server:
spring:
application:
name: auction-cms
name: tj-operation
jackson:
default-property-inclusion: NON_NULL
time-zone: GMT+8
@ -23,7 +23,8 @@ spring:
password: 123456
data:
redis:
host: localhost
# host: localhost
host: 172.16.4.6
port: 6379
password: 123456
database: 0
@ -39,16 +40,67 @@ mybatis:
tigon:
aliyun:
access-key: LTAI5tDnhZtP6hZHFWAfmTAN
access-secret: 7VfUctKi97hpt1SkajJBJqr7r8OCOx
access-key: LTAI5tAMPHkMNQJQZE3D5DU5
access-secret: flVUPZamzDnzzez9eMnZJsKeHhw1aj
sts:
endpoint: sts.cn-shenzhen.aliyuncs.com
region: cn-shenzhen
oss:
bucket: tiaojie-stage
role-arn: acs:ram::1137705773147949:role/ramosstemp
endpoint: oss-cn-shanghai.aliyuncs.com
role-arn: acs:ram::1005633189678051:role/ossreadwrite
cms:
table-prefix: tj
dict:
categories:
- code: SITE_HOME_CATEGORY
name: 站点首页分类
- code: SITE_BANNER
name: 站点轮播图
data-type: IMAGE
- code: SITE_SETTING
name: 站点设置
data-type: RICH_TEXT
singleton: true
dict-attrs:
- attr: title
label: 关于我们标题
type: STRING
required: true
- attr: caseCount
label: 已处理案件
type: NUMBER
required: true
- attr: supervisionPhone
label: 监督电话
type: STRING
required: true
- code: SITE_MEDIATOR
name: 站点调解员
data-type: STRING
meta: false
singleton: false
tree: false
user-code: false
dict-attrs:
- attr: gender
label: 性别
type: STRING
required: true
- attr: caseCount
label: 案件数量
type: NUMBER
required: true
- attr: successCount
label: 成功数量
type: NUMBER
required: true
- attr: certName
label: 认证标识
type: STRING
required: true
security:
session:
timeout: 288000000
@ -60,7 +112,7 @@ tigon:
cas:
server:
# addr: https://cas.zhujiachefu.com
// addr: https://tj-cas-daily.pudonghot.com
# addr: https://tj-cas-daily.pudonghot.com
addr: https://cas-dev.pudonghot.com
callback-path: /api/cas/callback
logout-path: /api/cas/logout
@ -73,7 +125,7 @@ tigon:
yo:
webrtc:
endpoint: wss://cc.ideasfin.com:4443/ws
endpoint: wss://tj-fs-daily.pudonghot.com
websocket:
allowed-origins: >
http://localhost:[*],

View File

@ -1,8 +1,11 @@
package com.pudonghot.yo.operation.controller.auth;
import lombok.val;
import org.junit.Test;
import java.security.Principal;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.session.Session;
import com.pudonghot.yo.operation.TestBase;
import com.pudonghot.tigon.cms.auth.cache.SessionCache;
import com.pudonghot.tigon.web.test.ControllerTestTool;
import org.springframework.beans.factory.annotation.Autowired;
@ -10,10 +13,13 @@ import org.springframework.beans.factory.annotation.Autowired;
* @author Donghuang
* @date Oct 02, 2024 11:42:14
*/
@Slf4j
public class AuthControllerTest extends TestBase {
@Autowired
private ControllerTestTool t;
@Autowired
private SessionCache sessionCache;
@Test
public void testIndex() {
@ -26,8 +32,10 @@ public class AuthControllerTest extends TestBase {
}
@Test
public void testInt() {
t.print(t.get("/auth/info"));
public void testGetSession() {
// val session = sessionCache.get("2399D8C0E96741818E622C1FB2B6A38E");
val session = sessionCache.get("2399D8C0E96741818E622C1FB2B6A38E");
log.info("Session: [{}].", session);
}
}

View File

@ -46,8 +46,46 @@ tigon:
role-arn: acs:ram::1137705773147949:role/ramosstemp
cms:
table-prefix: tj
mybatis:
quotation-mark: "`"
dict:
categories:
- code: SITE_HOME_CATEGORY
name: 站点首页分类
- code: SITE_BANNER
name: 站点轮播图
data-type: IMAGE
- code: SITE_ABOUT_US
name: 站点关于我们
data-type: RICH_TEXT
singleton: true
dict-attrs:
- attr: title
label: 标题
type: STRING
required: true
- code: SITE_MEDIATOR
name: 站点调解员
data-type: STRING
meta: false
singleton: false
tree: false
user-code: false
dict-attrs:
- attr: gender
label: 性别
type: STRING
required: true
- attr: caseCount
label: 案件数量
type: NUMBER
required: true
- attr: successCount
label: 成功数量
type: NUMBER
required: true
- attr: certName
label: 认证标识
type: STRING
required: true
security:
cookie:
session-id: JSID