Commit 5d273bda authored by hongguangwu's avatar hongguangwu

Merge remote-tracking branch 'origin/develop'

parents a889153e 244be27f
...@@ -25,6 +25,7 @@ import com.yifu.cloud.plus.v1.yifu.archives.vo.TAutoInsurRuleInfoSearchVo; ...@@ -25,6 +25,7 @@ import com.yifu.cloud.plus.v1.yifu.archives.vo.TAutoInsurRuleInfoSearchVo;
import com.yifu.cloud.plus.v1.yifu.common.core.util.ErrorMessage; import com.yifu.cloud.plus.v1.yifu.common.core.util.ErrorMessage;
import com.yifu.cloud.plus.v1.yifu.common.core.util.R; import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import com.yifu.cloud.plus.v1.yifu.common.log.annotation.SysLog; import com.yifu.cloud.plus.v1.yifu.common.log.annotation.SysLog;
import com.yifu.cloud.plus.v1.yifu.common.security.annotation.Inner;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
...@@ -35,6 +36,7 @@ import org.springframework.web.multipart.MultipartFile; ...@@ -35,6 +36,7 @@ import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
...@@ -152,4 +154,6 @@ public class TAutoInsurRuleInfoController { ...@@ -152,4 +154,6 @@ public class TAutoInsurRuleInfoController {
public void export(HttpServletResponse response, @RequestBody TAutoInsurRuleInfoSearchVo searchVo) { public void export(HttpServletResponse response, @RequestBody TAutoInsurRuleInfoSearchVo searchVo) {
tAutoInsurRuleInfoService.listExport(response,searchVo); tAutoInsurRuleInfoService.listExport(response,searchVo);
} }
} }
...@@ -31,6 +31,7 @@ import com.yifu.cloud.plus.v1.yifu.common.core.util.R; ...@@ -31,6 +31,7 @@ import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import com.yifu.cloud.plus.v1.yifu.common.core.vo.YifuUser; import com.yifu.cloud.plus.v1.yifu.common.core.vo.YifuUser;
import com.yifu.cloud.plus.v1.yifu.common.dapr.util.MenuUtil; import com.yifu.cloud.plus.v1.yifu.common.dapr.util.MenuUtil;
import com.yifu.cloud.plus.v1.yifu.common.log.annotation.SysLog; import com.yifu.cloud.plus.v1.yifu.common.log.annotation.SysLog;
import com.yifu.cloud.plus.v1.yifu.common.security.annotation.Inner;
import com.yifu.cloud.plus.v1.yifu.common.security.util.SecurityUtils; import com.yifu.cloud.plus.v1.yifu.common.security.util.SecurityUtils;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
...@@ -42,6 +43,7 @@ import org.springframework.web.multipart.MultipartFile; ...@@ -42,6 +43,7 @@ import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
...@@ -183,4 +185,15 @@ public class TAutoMainRelController { ...@@ -183,4 +185,15 @@ public class TAutoMainRelController {
menuUtil.setAuthSql(user, tAutoMainRel); menuUtil.setAuthSql(user, tAutoMainRel);
tAutoMainRelService.listExport(response,tAutoMainRel); tAutoMainRelService.listExport(response,tAutoMainRel);
} }
/**
* @Author fxj
* @Description 远程接口获取项目对应商险的自动化配置信息,有商险自动化且配置为启用的
* @Date 11:20 2025/9/17
**/
@Inner
@PostMapping("/inner/getProjectAutoSetMap")
public Map<String,String> getProjectAutoSetMap(@RequestBody List<String> departNos) {
return tAutoMainRelService.getProjectAutoSetMap(departNos);
}
} }
...@@ -28,6 +28,7 @@ import com.yifu.cloud.plus.v1.yifu.common.core.util.R; ...@@ -28,6 +28,7 @@ import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.InputStream; import java.io.InputStream;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* 商险购买规则配置表 * 商险购买规则配置表
...@@ -48,4 +49,5 @@ public interface TAutoInsurRuleInfoService extends IService<TAutoInsurRuleInfo> ...@@ -48,4 +49,5 @@ public interface TAutoInsurRuleInfoService extends IService<TAutoInsurRuleInfo>
void listExport(HttpServletResponse response, TAutoInsurRuleInfoSearchVo searchVo); void listExport(HttpServletResponse response, TAutoInsurRuleInfoSearchVo searchVo);
List<TAutoInsurRuleInfo> noPageDiy(TAutoInsurRuleInfoSearchVo searchVo); List<TAutoInsurRuleInfo> noPageDiy(TAutoInsurRuleInfoSearchVo searchVo);
} }
...@@ -32,6 +32,7 @@ import com.yifu.cloud.plus.v1.yifu.common.core.util.R; ...@@ -32,6 +32,7 @@ import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.InputStream; import java.io.InputStream;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* 项目配置表主表 * 项目配置表主表
...@@ -62,4 +63,6 @@ public interface TAutoMainRelService extends IService<TAutoMainRel> { ...@@ -62,4 +63,6 @@ public interface TAutoMainRelService extends IService<TAutoMainRel> {
R<TAutoMainRelDetailVo> getProjectRule(String deptId, String deptNo); R<TAutoMainRelDetailVo> getProjectRule(String deptId, String deptNo);
IPage<TAutoContractScheme> getContractSchemePage(Page<TAutoContractScheme> page, TAutoContractScheme search); IPage<TAutoContractScheme> getContractSchemePage(Page<TAutoContractScheme> page, TAutoContractScheme search);
Map<String, String> getProjectAutoSetMap(List<String> departNos);
} }
...@@ -33,6 +33,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; ...@@ -33,6 +33,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yifu.cloud.plus.v1.yifu.archives.entity.TAutoInsurRuleInfo; import com.yifu.cloud.plus.v1.yifu.archives.entity.TAutoInsurRuleInfo;
import com.yifu.cloud.plus.v1.yifu.archives.mapper.TAutoInsurRuleInfoMapper; import com.yifu.cloud.plus.v1.yifu.archives.mapper.TAutoInsurRuleInfoMapper;
import com.yifu.cloud.plus.v1.yifu.archives.service.TAutoInsurRuleInfoService; import com.yifu.cloud.plus.v1.yifu.archives.service.TAutoInsurRuleInfoService;
import com.yifu.cloud.plus.v1.yifu.archives.vo.MSetttleCustomerUserVo;
import com.yifu.cloud.plus.v1.yifu.archives.vo.TAutoInsurRuleInfoSearchVo; import com.yifu.cloud.plus.v1.yifu.archives.vo.TAutoInsurRuleInfoSearchVo;
import com.yifu.cloud.plus.v1.yifu.archives.vo.TAutoInsurRuleInfoVo; import com.yifu.cloud.plus.v1.yifu.archives.vo.TAutoInsurRuleInfoVo;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants; import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants;
...@@ -47,7 +48,10 @@ import java.io.IOException; ...@@ -47,7 +48,10 @@ import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* 商险购买规则配置表 * 商险购买规则配置表
* *
...@@ -244,4 +248,6 @@ public class TAutoInsurRuleInfoServiceImpl extends ServiceImpl<TAutoInsurRuleInf ...@@ -244,4 +248,6 @@ public class TAutoInsurRuleInfoServiceImpl extends ServiceImpl<TAutoInsurRuleInf
BeanUtil.copyProperties(excel, insert); BeanUtil.copyProperties(excel, insert);
this.save(insert); this.save(insert);
} }
} }
...@@ -1112,4 +1112,21 @@ private R<Boolean> checkItemRepeat(List<SysAutoDictItem> autoDictItems, Map<Stri ...@@ -1112,4 +1112,21 @@ private R<Boolean> checkItemRepeat(List<SysAutoDictItem> autoDictItems, Map<Stri
} }
return wrapper; return wrapper;
} }
/**
* @Author fxj
* @Description 远程接口获取项目对应商险的自动化配置信息,有商险自动化且配置为启用的
* @Date 11:26 2025/9/17
**/
@Override
public Map<String, String> getProjectAutoSetMap(List<String> departNos) {
Map<String,String> map = new HashMap<>();
//和产品确认了只要有配置的,则限制商险派单,不看配置是否可用,不看是否配置了商险自动化
List<TAutoMainRel> list = baseMapper.selectList(Wrappers.<TAutoMainRel>query().lambda());
if(Common.isNotNull(list)){
for(TAutoMainRel vo :list){
map.put(vo.getDeptNo(),vo.getDeptNo());
}
}
return map;
}
} }
...@@ -3889,12 +3889,13 @@ public class TEmployeeInfoServiceImpl extends ServiceImpl<TEmployeeInfoMapper, T ...@@ -3889,12 +3889,13 @@ public class TEmployeeInfoServiceImpl extends ServiceImpl<TEmployeeInfoMapper, T
errorMust.append("身份证号;"); errorMust.append("身份证号;");
} }
// 2格式不正确:在循环里已经判断了 // 2格式不正确:在循环里已经判断了
// 3校验是否通过:姓名&身份证号是否一致、手机号是否真实、姓名&银行卡号是否一致 // 3校验是否通过:姓名&身份证号是否一致、手机号是否真实、姓名&身份证&银行卡号是否一致
if (Common.isNotNull(detail.getBankNo())) { if (Common.isNotNull(detail.getBankNo())) {
if (Common.isNotNull(detail.getEmpName())) { if (Common.isNotNull(detail.getEmpName())) {
bankCheck = new TCheckBankNo(); bankCheck = new TCheckBankNo();
bankCheck.setBankNo(detail.getBankNo()); bankCheck.setBankNo(detail.getBankNo());
bankCheck.setName(detail.getEmpName()); bankCheck.setName(detail.getEmpName());
bankCheck.setIdNum(detail.getEmpIdcard());
bankList.add(bankCheck); bankList.add(bankCheck);
} else { } else {
errorMust.append("有银行卡号则员工姓名必填;"); errorMust.append("有银行卡号则员工姓名必填;");
......
...@@ -3697,6 +3697,7 @@ public class TPreEmpMainServiceImpl extends ServiceImpl<TPreEmpMainMapper, TPreE ...@@ -3697,6 +3697,7 @@ public class TPreEmpMainServiceImpl extends ServiceImpl<TPreEmpMainMapper, TPreE
bankCheck = new TCheckBankNo(); bankCheck = new TCheckBankNo();
bankCheck.setBankNo(detail.getBankNo()); bankCheck.setBankNo(detail.getBankNo());
bankCheck.setName(detail.getEmpName()); bankCheck.setName(detail.getEmpName());
bankCheck.setIdNum(detail.getEmpIdcard());
bankList.add(bankCheck); bankList.add(bankCheck);
} }
} }
......
...@@ -112,6 +112,7 @@ public class ChecksUtil { ...@@ -112,6 +112,7 @@ public class ChecksUtil {
TCheckBankNo checkBankNo = new TCheckBankNo(); TCheckBankNo checkBankNo = new TCheckBankNo();
checkBankNo.setBankNo(cardNo); checkBankNo.setBankNo(cardNo);
checkBankNo.setName(name); checkBankNo.setName(name);
checkBankNo.setIdNum(idNum);
checkBankNo.setMessage(ChecksConstants.CHECK_CONFIG_ACCESS); checkBankNo.setMessage(ChecksConstants.CHECK_CONFIG_ACCESS);
checkBankNo.setResult("01"); checkBankNo.setResult("01");
checkBankNo.setType(CommonConstants.ONE_STRING); checkBankNo.setType(CommonConstants.ONE_STRING);
...@@ -173,6 +174,7 @@ public class ChecksUtil { ...@@ -173,6 +174,7 @@ public class ChecksUtil {
checkBankNo.setCardType(getJsonElementValue(resJson.getAsJsonObject().get("cardType"))); checkBankNo.setCardType(getJsonElementValue(resJson.getAsJsonObject().get("cardType")));
checkBankNo.setResult(getJsonElementValue(resJson.getAsJsonObject().get(ChecksConstants.RESULT))); checkBankNo.setResult(getJsonElementValue(resJson.getAsJsonObject().get(ChecksConstants.RESULT)));
checkBankNo.setMessage(message); checkBankNo.setMessage(message);
checkBankNo.setIdNum(idNum);
checkBankNo.setRemark(getJsonElementValue(resJson.getAsJsonObject().get(ChecksConstants.REMARK))); checkBankNo.setRemark(getJsonElementValue(resJson.getAsJsonObject().get(ChecksConstants.REMARK)));
checkBankNo.setType(CommonConstants.ONE_STRING); checkBankNo.setType(CommonConstants.ONE_STRING);
checkBankNo.setName(name); checkBankNo.setName(name);
......
...@@ -126,7 +126,7 @@ public class TCheckBankNoController { ...@@ -126,7 +126,7 @@ public class TCheckBankNoController {
@Inner @Inner
@PostMapping("/inner/checkBankNo" ) @PostMapping("/inner/checkBankNo" )
public CheckBankNoVo checkBankNoInner(@RequestBody TCheckBankNo checkBankNo) { public CheckBankNoVo checkBankNoInner(@RequestBody TCheckBankNo checkBankNo) {
return tCheckBankNoService.checkBankNoTwo(checkBankNo.getName(),checkBankNo.getBankNo()); return tCheckBankNoService.checkBankNoThree(checkBankNo.getName(),checkBankNo.getBankNo(),checkBankNo.getIdNum());
} }
/** /**
...@@ -141,8 +141,8 @@ public class TCheckBankNoController { ...@@ -141,8 +141,8 @@ public class TCheckBankNoController {
@Operation(description = "C端预入职银行卡号校验") @Operation(description = "C端预入职银行卡号校验")
@SysLog("C端预入职银行卡号校验" ) @SysLog("C端预入职银行卡号校验" )
@GetMapping("/checkPreBankNo" ) @GetMapping("/checkPreBankNo" )
public R<String> checkPreBankNo(@RequestParam String empName,@RequestParam String bankNo, @RequestParam String deptId) { public R<String> checkPreBankNo(@RequestParam String empName,@RequestParam String bankNo, @RequestParam String deptId,@RequestParam String idNum) {
return tCheckBankNoService.checkPreBankNo(empName, bankNo, deptId); return tCheckBankNoService.checkPreBankNo(empName, bankNo, deptId,idNum);
} }
/** /**
...@@ -186,6 +186,20 @@ public class TCheckBankNoController { ...@@ -186,6 +186,20 @@ public class TCheckBankNoController {
return tCheckBankNoService.checkBankNo(name, bankNo); return tCheckBankNoService.checkBankNo(name, bankNo);
} }
/**
* @Description: 代发户调用银行卡校验--如果其他接口也要调用,加上信息
* @Author: hgw
* @Date: 2023/1/13 9:41
* @return: com.yifu.cloud.plus.v1.yifu.common.core.util.R<com.yifu.cloud.plus.v1.check.entity.TCheckBankNo>
**/
@Operation(description = "调用银行卡校验")
@SysLog("调用银行卡校验" )
@PostMapping("/checkBankNoThree" )
public R<TCheckBankNo> checkBankNoThree(@RequestParam String name, @RequestParam String bankNo, @RequestParam String idNum) {
CheckBankNoVo vo = tCheckBankNoService.checkBankNoThree(name, bankNo,idNum);
return vo.getRes();
}
/** /**
* 银行卡号校验 * 银行卡号校验
* @param checkBankNo 姓名 是 [string] 身份证号码,限单个 是 [string] 银行卡号,限单个 是 [string]银行预留手机号,仅支持国内11位号码 * @param checkBankNo 姓名 是 [string] 身份证号码,限单个 是 [string] 银行卡号,限单个 是 [string]银行预留手机号,仅支持国内11位号码
......
...@@ -54,7 +54,7 @@ public interface TCheckBankNoService extends IService<TCheckBankNo> { ...@@ -54,7 +54,7 @@ public interface TCheckBankNoService extends IService<TCheckBankNo> {
* @Date: 2024/7/16 15:00 * @Date: 2024/7/16 15:00
* @return: com.yifu.cloud.plus.v1.yifu.common.core.util.R<java.lang.String> * @return: com.yifu.cloud.plus.v1.yifu.common.core.util.R<java.lang.String>
**/ **/
R<String> checkPreBankNo(String empName, String bankNo, String deptId); R<String> checkPreBankNo(String empName, String bankNo, String deptId,String idNum);
/** /**
* @param list * @param list
......
...@@ -41,6 +41,7 @@ import com.yifu.cloud.plus.v1.yifu.archives.vo.EmpWorkRecordExcelVO; ...@@ -41,6 +41,7 @@ import com.yifu.cloud.plus.v1.yifu.archives.vo.EmpWorkRecordExcelVO;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants; import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants;
import com.yifu.cloud.plus.v1.yifu.common.core.exception.ErrorCodes; import com.yifu.cloud.plus.v1.yifu.common.core.exception.ErrorCodes;
import com.yifu.cloud.plus.v1.yifu.common.core.util.*; import com.yifu.cloud.plus.v1.yifu.common.core.util.*;
import com.yifu.cloud.plus.v1.yifu.common.mybatis.base.BaseEntity;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -97,6 +98,7 @@ public class TCheckBankNoServiceImpl extends ServiceImpl<TCheckBankNoMapper, TCh ...@@ -97,6 +98,7 @@ public class TCheckBankNoServiceImpl extends ServiceImpl<TCheckBankNoMapper, TCh
TCheckBankNo checkBankNo = baseMapper.selectOne(Wrappers.<TCheckBankNo>query().lambda() TCheckBankNo checkBankNo = baseMapper.selectOne(Wrappers.<TCheckBankNo>query().lambda()
.eq(TCheckBankNo::getBankNo,cardNo) .eq(TCheckBankNo::getBankNo,cardNo)
.eq(TCheckBankNo::getName,name) .eq(TCheckBankNo::getName,name)
.eq(TCheckBankNo::getIdNum,idNum)
.last(CommonConstants.LAST_ONE_SQL)); .last(CommonConstants.LAST_ONE_SQL));
if (Common.isNotNull(checkBankNo)){ if (Common.isNotNull(checkBankNo)){
vo.setRes(R.ok(checkBankNo)); vo.setRes(R.ok(checkBankNo));
...@@ -112,14 +114,15 @@ public class TCheckBankNoServiceImpl extends ServiceImpl<TCheckBankNoMapper, TCh ...@@ -112,14 +114,15 @@ public class TCheckBankNoServiceImpl extends ServiceImpl<TCheckBankNoMapper, TCh
} }
@Override @Override
public R<String> checkPreBankNo(String empName, String bankNo, String deptId) { public R<String> checkPreBankNo(String empName, String bankNo, String deptId,String idNum) {
if (Common.isEmpty(empName) || Common.isEmpty(bankNo)){ if (Common.isEmpty(empName) || Common.isEmpty(bankNo) || Common.isEmpty(idNum)){
return R.failed(MsgUtils.getMessage(ErrorCodes.CHECKS_BANK_NO_REQUEST_PARAM_ERROR)); return R.failed(MsgUtils.getMessage(ErrorCodes.CHECKS_BANK_NO_REQUEST_PARAM_ERROR));
} }
synchronized (this){ synchronized (this){
TCheckBankNo checkBankNo = baseMapper.selectOne(Wrappers.<TCheckBankNo>query().lambda() TCheckBankNo checkBankNo = baseMapper.selectOne(Wrappers.<TCheckBankNo>query().lambda()
.eq(TCheckBankNo::getBankNo,bankNo) .eq(TCheckBankNo::getBankNo,bankNo)
.eq(TCheckBankNo::getName,empName) .eq(TCheckBankNo::getName,empName)
.eq(TCheckBankNo::getIdNum,idNum)
.last(CommonConstants.LAST_ONE_SQL)); .last(CommonConstants.LAST_ONE_SQL));
if (Common.isNotNull(checkBankNo)){ if (Common.isNotNull(checkBankNo)){
if (CommonConstants.ZERO_ONE.equals(checkBankNo.getResult())) { if (CommonConstants.ZERO_ONE.equals(checkBankNo.getResult())) {
...@@ -149,7 +152,7 @@ public class TCheckBankNoServiceImpl extends ServiceImpl<TCheckBankNoMapper, TCh ...@@ -149,7 +152,7 @@ public class TCheckBankNoServiceImpl extends ServiceImpl<TCheckBankNoMapper, TCh
} }
} }
} }
R<TCheckBankNo> resR = ChecksUtil.checkBankNoTwo(empName,bankNo,canCheckService.getCanCheck()); R<TCheckBankNo> resR = ChecksUtil.checkBankNoThree(empName,bankNo,idNum,canCheckService.getCanCheck());
if (Common.isNotNull(resR) && Common.isNotNull(resR.getData())){ if (Common.isNotNull(resR) && Common.isNotNull(resR.getData())){
baseMapper.insert(resR.getData()); baseMapper.insert(resR.getData());
checkBankNo = resR.getData(); checkBankNo = resR.getData();
......
...@@ -150,6 +150,8 @@ public interface CacheConstants { ...@@ -150,6 +150,8 @@ public interface CacheConstants {
String PAYMENT_SOCIAL_IMPORT = "payment_social_import"; String PAYMENT_SOCIAL_IMPORT = "payment_social_import";
String INSURANCE_POLICY_IMPORT = "insurance_policy_import";
String PAYMENT_FUND_IMPORT = "payment_fund_import"; String PAYMENT_FUND_IMPORT = "payment_fund_import";
String PAYMENT_SOCIAL_PUSH = "payment_social_push"; String PAYMENT_SOCIAL_PUSH = "payment_social_push";
......
...@@ -680,4 +680,10 @@ public interface CommonConstants { ...@@ -680,4 +680,10 @@ public interface CommonConstants {
// 瓜子推送成功标识 // 瓜子推送成功标识
String GZ_SUCCESS_CODE = "S00000"; String GZ_SUCCESS_CODE = "S00000";
// 税友、花名册、模板里的要签名的字体
String QIAN_MING = "qian_ming";
// 税友、花名册、模板里的固定文字
String GU_DING = "gu_ding";
// 税友、关键字里的户:
String HU_CORE = "_户户_";
} }
...@@ -162,10 +162,10 @@ public class ExcelAttributeConstants { ...@@ -162,10 +162,10 @@ public class ExcelAttributeConstants {
// 公积金办理失败类型 // 公积金办理失败类型
public static final String FUND_DISPATCH_HANDLE_REASON = "fund-conduct-add-reason"; public static final String FUND_DISPATCH_HANDLE_REASON = "fund-conduct-add-reason";
//社保派委托备注 //社保派委托备注
public static final String TRUST_REMARK_REDUCE = "trustRemarkReduce"; public static final String TRUST_REMARK_REDUCE = "trustRemarkReduce";
//社保派委托备注 //社保派委托备注
public static final String TRUST_REMARK_ADD = "trustRemark"; public static final String TRUST_REMARK_ADD = "trustRemark";
// 瓜子的人员类别编码 // 瓜子的人员类别编码
public static final String GZ_EMP_TYPE = "gz_emp_type"; public static final String GZ_EMP_TYPE = "gz_emp_type";
......
...@@ -751,4 +751,19 @@ public class Common { ...@@ -751,4 +751,19 @@ public class Common {
} }
} }
} }
/**
* @Author fxj
* @Description 判断所有返回数据,是否全部为正确的
* @Date 16:32 2025/8/29
**/
public static R<List<ErrorMessage>> judgeAllMessage(List<ErrorMessage> errorMessageList) {
if (!errorMessageList.isEmpty() && errorMessageList.stream().noneMatch(e -> e.getColor().equals(CommonConstants.RED))) {
return R.ok();
}
if (!errorMessageList.isEmpty() && errorMessageList.stream().anyMatch(e -> CommonConstants.ONE_STRING.equals(e.getName()))) {
return R.ok(errorMessageList, "error");
}
return R.ok(errorMessageList);
}
} }
...@@ -36,6 +36,20 @@ public class ArchivesDaprUtil { ...@@ -36,6 +36,20 @@ public class ArchivesDaprUtil {
@Autowired @Autowired
private DaprArchivesProperties daprArchivesProperties; private DaprArchivesProperties daprArchivesProperties;
/**
* @Author fxj
* @Description 获取项目自动化设置信息,只返回配置了自动化且商险自动化为是的信息
* @Date 11:16 2025/9/17
**/
public R<Map<String,String>> getProjectAutoSetMap(List<String> departNos){
R<Map> res = HttpDaprUtil.invokeMethodPost(daprArchivesProperties.getAppUrl(),daprArchivesProperties.getAppId(),"/tautomainrel/inner/getProjectAutoSetMap" , JSON.toJSONString(departNos), Map.class, SecurityConstants.FROM_IN);
if (Common.isEmpty(res)){
return R.failed("获取项目商险自动化信息失败!");
}
Map<String,String> map = JSON.parseObject(JSON.toJSONString(res.getData()),new TypeReference<HashMap<String,String>>(){});
return R.ok(map);
}
public R<Map<String,String>> getCustomerUserMap(List<String> userList){ public R<Map<String,String>> getCustomerUserMap(List<String> userList){
R<Map> res = HttpDaprUtil.invokeMethodPost(daprArchivesProperties.getAppUrl(),daprArchivesProperties.getAppId(),"/msetttlecustomeruser/inner/getCustomerUserMap" , JSON.toJSONString(userList), Map.class, SecurityConstants.FROM_IN); R<Map> res = HttpDaprUtil.invokeMethodPost(daprArchivesProperties.getAppUrl(),daprArchivesProperties.getAppId(),"/msetttlecustomeruser/inner/getCustomerUserMap" , JSON.toJSONString(userList), Map.class, SecurityConstants.FROM_IN);
if (Common.isEmpty(res)){ if (Common.isEmpty(res)){
......
package com.yifu.cloud.plus.v1.yifu.common.dapr.util; package com.yifu.cloud.plus.v1.yifu.common.dapr.util;
import com.alibaba.fastjson.JSON;
import com.yifu.cloud.plus.v1.yifu.admin.api.entity.SysUser; import com.yifu.cloud.plus.v1.yifu.admin.api.entity.SysUser;
import com.yifu.cloud.plus.v1.yifu.admin.api.vo.*; import com.yifu.cloud.plus.v1.yifu.admin.api.vo.*;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.SecurityConstants; import com.yifu.cloud.plus.v1.yifu.common.core.constant.SecurityConstants;
...@@ -183,4 +182,29 @@ public class UpmsDaprUtils { ...@@ -183,4 +182,29 @@ public class UpmsDaprUtils {
} }
return relDictMapR; return relDictMapR;
} }
/**
* @param paramVo 用户IDList + 菜单Id
* @Description: 判断用户的角色是否有菜单
* @Author: hgw
* @Date: 2025/9/4 16:09
* @return: com.yifu.cloud.plus.v1.yifu.common.core.util.R<com.yifu.cloud.plus.v1.yifu.admin.api.vo.AreaVo>
**/
public R<KeyValueReturnVo> judgeMenuByUserIdAndMenuId(ListAndStringVo paramVo) {
return HttpDaprUtil.invokeMethodPost(daprUpmsProperties.getAppUrl(),daprUpmsProperties.getAppId()
,"/user/inner/judgeDispatchAudit", paramVo, KeyValueReturnVo.class, SecurityConstants.FROM_IN);
}
/**
* @param paramVo 用户IDList + 菜单Id
* @Description: 判断用户的权限(用户拼接用户组)是否有菜单
* @Author: hgw
* @Date: 2025/9/4 16:09
* @return: com.yifu.cloud.plus.v1.yifu.common.core.util.R<com.yifu.cloud.plus.v1.yifu.admin.api.vo.AreaVo>
**/
public R<KeyValueReturnVo> judgeDiyAuthMenuByUserId(ListAndStringVo paramVo) {
return HttpDaprUtil.invokeMethodPost(daprUpmsProperties.getAppUrl(),daprUpmsProperties.getAppId()
,"/user/inner/judgeDiyAuthMenuByUserId", paramVo, KeyValueReturnVo.class, SecurityConstants.FROM_IN);
}
} }
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the yifu4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
package com.yifu.cloud.plus.v1.ekp.entity;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.ExcelAttribute;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import java.util.Date;
/**
* EKP合同台账合同信息表
*
* @author fxj
* @date 2025-07-21 09:49:56
*/
@Data
@TableName("view_contract_info")
@Schema(description = "EKP合同台账合同信息表")
public class EkpContractInfo {
/**
* 主键
*/
@TableId(type = IdType.ASSIGN_ID)
@ExcelProperty("主键")
@Schema(description = "主键")
private String fdId;
/**
* 预警科目ID
*/
@ExcelAttribute(name = "预警科目ID", maxLength = 1000)
@Length(max = 1000, message = "预警科目ID不能超过1000个字符")
@ExcelProperty("预警科目ID")
@Schema(description = "预警科目ID")
private String fdAlertSubject;
/**
* 预警科目
*/
@ExcelAttribute(name = "预警科目", maxLength = 1000)
@Length(max = 1000, message = "预警科目不能超过1000个字符")
@ExcelProperty("预警科目")
@Schema(description = "预警科目")
private String fdAlertSubjectText;
/**
* 有效日期始
*/
@ExcelAttribute(name = "有效日期始", isDate = true)
@ExcelProperty("有效日期始")
@Schema(description = "有效日期始")
private Date fdEffectiveStartDate;
/**
* 有效日期止
*/
@ExcelAttribute(name = "有效日期止", isDate = true)
@ExcelProperty("有效日期止")
@Schema(description = "有效日期止")
private Date fdEffectiveEndDate;
/**
* 检测方式
*/
@ExcelAttribute(name = "检测方式", maxLength = 200)
@Length(max = 200, message = "检测方式不能超过200个字符")
@ExcelProperty("检测方式")
@Schema(description = "检测方式")
private String fdDetectionMethod;
/**
* 阈值(%)
*/
@ExcelAttribute(name = "阈值")
@ExcelProperty("阈值")
@Schema(description = "阈值")
private Integer fdThresholdValue;
/**
* 是否有效:是 否
*/
@ExcelAttribute(name = "是否有效", maxLength = 200)
@Length(max = 200, message = "是否有效不能超过200个字符")
@ExcelProperty("是否有效")
@Schema(description = "是否有效")
private String fdIsActive;
/**
* 预警内容
*/
@ExcelAttribute(name = "预警内容")
@ExcelProperty("预警内容")
@Schema(description = "预警内容")
private String fdAlertMessage;
/**
* 检测方式-每日时间
*/
@ExcelAttribute(name = "检测方式-每日", isDate = true)
@ExcelProperty("检测方式-每日")
@Schema(description = "检测方式-每日")
private Date fdEverydayTime;
/**
* 检测方式-每月:每月时间(日)
*/
@ExcelAttribute(name = "检测方式", maxLength = 20)
@Length(max = 20, message = "检测方式不能超过20个字符")
@ExcelProperty("检测方式")
@Schema(description = "检测方式")
private String fdChecktype;
/**
* 检测方式-每月:1.每月 2.每日
*/
@ExcelAttribute(name = "检测方式-每月")
@ExcelProperty("检测方式-每月")
@Schema(description = "检测方式-每月")
private Integer fdMonthday;
}
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the yifu4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
package com.yifu.cloud.plus.v1.ekp.entity;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.ExcelAttribute;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import java.util.Date;
/**
* EKP发票池发票信息表
*
* @author fxj
* @date 2025-07-21 09:49:56
*/
@Data
@TableName("view_invoice_info")
@Schema(description = "EKP发票池发票信息表")
public class EkpInvoiceInfo {
/**
* 主键
*/
@TableId(type = IdType.ASSIGN_ID)
@ExcelProperty("主键")
@Schema(description = "主键")
private String fdId;
/**
* 预警科目ID
*/
@ExcelAttribute(name = "预警科目ID", maxLength = 1000)
@Length(max = 1000, message = "预警科目ID不能超过1000个字符")
@ExcelProperty("预警科目ID")
@Schema(description = "预警科目ID")
private String fdAlertSubject;
/**
* 预警科目
*/
@ExcelAttribute(name = "预警科目", maxLength = 1000)
@Length(max = 1000, message = "预警科目不能超过1000个字符")
@ExcelProperty("预警科目")
@Schema(description = "预警科目")
private String fdAlertSubjectText;
/**
* 有效日期始
*/
@ExcelAttribute(name = "有效日期始", isDate = true)
@ExcelProperty("有效日期始")
@Schema(description = "有效日期始")
private Date fdEffectiveStartDate;
/**
* 有效日期止
*/
@ExcelAttribute(name = "有效日期止", isDate = true)
@ExcelProperty("有效日期止")
@Schema(description = "有效日期止")
private Date fdEffectiveEndDate;
/**
* 检测方式
*/
@ExcelAttribute(name = "检测方式", maxLength = 200)
@Length(max = 200, message = "检测方式不能超过200个字符")
@ExcelProperty("检测方式")
@Schema(description = "检测方式")
private String fdDetectionMethod;
/**
* 阈值(%)
*/
@ExcelAttribute(name = "阈值")
@ExcelProperty("阈值")
@Schema(description = "阈值")
private Integer fdThresholdValue;
/**
* 是否有效:是 否
*/
@ExcelAttribute(name = "是否有效", maxLength = 200)
@Length(max = 200, message = "是否有效不能超过200个字符")
@ExcelProperty("是否有效")
@Schema(description = "是否有效")
private String fdIsActive;
/**
* 预警内容
*/
@ExcelAttribute(name = "预警内容")
@ExcelProperty("预警内容")
@Schema(description = "预警内容")
private String fdAlertMessage;
/**
* 检测方式-每日时间
*/
@ExcelAttribute(name = "检测方式-每日", isDate = true)
@ExcelProperty("检测方式-每日")
@Schema(description = "检测方式-每日")
private Date fdEverydayTime;
/**
* 检测方式-每月:每月时间(日)
*/
@ExcelAttribute(name = "检测方式", maxLength = 20)
@Length(max = 20, message = "检测方式不能超过20个字符")
@ExcelProperty("检测方式")
@Schema(description = "检测方式")
private String fdChecktype;
/**
* 检测方式-每月:1.每月 2.每日
*/
@ExcelAttribute(name = "检测方式-每月")
@ExcelProperty("检测方式-每月")
@Schema(description = "检测方式-每月")
private Integer fdMonthday;
}
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the yifu4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
package com.yifu.cloud.plus.v1.ekp.entity;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 招行卡
*
* @author hgw
* @date 2025-09-09 16:22:40
*/
@Data
@TableName("ekp_zhao_hang_detail")
@Schema(description = "招行卡")
public class EkpZhaoHangDetail {
/**
* 主键
*/
@TableId(type = IdType.ASSIGN_ID)
@ExcelProperty("主键")
@Schema(description = "主键")
private String fdId;
@Schema(description = "流水号")
private String fdNo;
@Schema(description = "交易时间")
private String fdDate;
@Schema(description = "交易金额")
private BigDecimal fdMoney;
@Schema(description = "交易商户名称")
private String fdAcpName;
@Schema(description = "交易卡号")
private String fdBankNo;
// 作为EKP登录用户查询的ID(用登录ID,查找ekp_zhao_hang_bank_no里的fdAccountId,再关联本表查询数据)
@Schema(description = "账户ID")
private String fdAccountId;
@Schema(description = "中文名")
private String fdEmpName;
@Schema(description = "EKP的登录用户的FdId")
private String fdUserId;
@Schema(description = "创建时间")
private LocalDateTime createTime;
}
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the yifu4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
package com.yifu.cloud.plus.v1.ekp.entity;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.time.LocalDateTime;
/**
* 招行卡
*
* @author hgw
* @date 2025-09-09 16:22:40
*/
@Data
@TableName("ekp_zhao_hang_detail_log")
@Schema(description = "招行卡")
public class EkpZhaoHangDetailLog {
/**
* 主键
*/
@TableId(type = IdType.ASSIGN_ID)
@ExcelProperty("主键")
@Schema(description = "主键")
private String fdId;
@Schema(description = "推送参数")
private String fdParam;
@Schema(description = "返回数据")
private String fdData;
@Schema(description = "推送时间")
private LocalDateTime fdDatePush;
@Schema(description = "收到时间")
private LocalDateTime fdDateBack;
}
...@@ -104,7 +104,11 @@ ...@@ -104,7 +104,11 @@
<artifactId>yifu-common-ekp</artifactId> <artifactId>yifu-common-ekp</artifactId>
<version>1.0.0</version> <version>1.0.0</version>
</dependency> </dependency>
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-cp</artifactId>
<version>4.7.0</version>
</dependency>
</dependencies> </dependencies>
<build> <build>
......
package com.yifu.cloud.plus.v1.ekp.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
/**
* @auther hgw
* @date 2025-9-9 11:31:54
* 招行卡配置信息
*/
@RefreshScope
@ConfigurationProperties(prefix = "zhaohang")
@Data
public class ZhaoHangConfigProperties {
// 客户号 10025498
private String clientId;
// 密码 cno7G+kNfJbf9nyskHdr0g==
private String clientSecret;
// 成本中心号 9910025498
private String corNum;
}
...@@ -70,4 +70,17 @@ public class EkpAlertTableController { ...@@ -70,4 +70,17 @@ public class EkpAlertTableController {
ekpAlertTableService.pushBudgetAlertInfoTomanager(0); ekpAlertTableService.pushBudgetAlertInfoTomanager(0);
} }
/**
* @Author fxj
* @Description 企业微信智能表格API调用调试入口
* @Date 15:56 2025/9/26
* @Param
* @return
**/
@PostMapping("/tesxWxExcelApi")
public void tesxWxExcelApi() {
//ekpAlertTableService.tesxWxExcelApi();
}
} }
package com.yifu.cloud.plus.v1.ekp.controller;
import com.yifu.cloud.plus.v1.ekp.service.QwExcelApiService;
import com.yifu.cloud.plus.v1.ekp.service.ZhaoHangService;
import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import com.yifu.cloud.plus.v1.yifu.common.security.annotation.Inner;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* 招行卡相关控制器
* @author hgw
* @date 2025-9-9 11:24:36
*/
@RestController
@RequiredArgsConstructor
@RequestMapping("/qwExcelApi")
@Tag(name = "招行卡相关控制器")
public class QwExcelApiController {
private final QwExcelApiService qwExcelApiService;
/**
* @Author fxj
* @Description 企业微信智能表格API调用调试入口
* @Date 15:56 2025/9/26
* @Param
* @return
**/
@PostMapping("/tesxWxExcelApi")
public void tesxWxExcelApi() {
qwExcelApiService.tesxWxExcelApi();
}
}
package com.yifu.cloud.plus.v1.ekp.controller;
import com.icbc.api.response.JftApiPayrollQueryDetailResponseV1;
import com.yifu.cloud.plus.v1.ekp.service.IcbcTransactionFlowIssueService;
import com.yifu.cloud.plus.v1.ekp.service.ZhaoHangService;
import com.yifu.cloud.plus.v1.ekp.vo.EkpBankAttaReturnVo;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants;
import com.yifu.cloud.plus.v1.yifu.common.core.util.Common;
import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import com.yifu.cloud.plus.v1.yifu.common.log.annotation.SysLog;
import com.yifu.cloud.plus.v1.yifu.common.security.annotation.Inner;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 招行卡相关控制器
* @author hgw
* @date 2025-9-9 11:24:36
*/
@RestController
@RequiredArgsConstructor
@RequestMapping("/zhaoHang")
@Tag(name = "招行卡相关控制器")
public class ZhaoHangController {
private final ZhaoHangService zhaoHangService;
@Operation(summary = "每天获取招行卡流水", description = "每天获取招行卡流水")
@Inner
@PostMapping("/inner/doGetZhaoHangInfo")
public R<String> doGetZhaoHangInfo() {
return zhaoHangService.doGetZhaoHangInfo();
}
// 特殊情况使用,或者是测试,或者是历史数据,postDate 格式:"2025-07-02"
@Operation(summary = "测试接口,获取招行卡流水接口数据", description = "获取招行卡流水接口数据")
@PostMapping("/doGetZhaoHangCore")
public R<String> doGetZhaoHangCore(@RequestParam String postDate) {
return zhaoHangService.doGetZhaoHangCore(postDate);
}
}
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the yifu4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
package com.yifu.cloud.plus.v1.ekp.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yifu.cloud.plus.v1.ekp.entity.EkpZhaoHangDetailLog;
import org.apache.ibatis.annotations.Mapper;
/**
* 招行卡
*
* @author hgw
* @date 2025-09-09 16:22:40
*/
@Mapper
public interface EkpZhaoHangDetailLogMapper extends BaseMapper<EkpZhaoHangDetailLog> {
}
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the yifu4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
package com.yifu.cloud.plus.v1.ekp.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yifu.cloud.plus.v1.ekp.entity.EkpZhaoHangDetail;
import com.yifu.cloud.plus.v1.yifu.admin.api.vo.KeyValueVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 招行卡
*
* @author hgw
* @date 2025-09-09 16:22:40
*/
@Mapper
public interface EkpZhaoHangDetailMapper extends BaseMapper<EkpZhaoHangDetail> {
List<String> getByNo(@Param("noList") List<String> noList);
List<KeyValueVo> getAccountIdAndUserId();
}
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the yifu4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
package com.yifu.cloud.plus.v1.ekp.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yifu.cloud.plus.v1.ekp.entity.EkpAlertTable;
import com.yifu.cloud.plus.v1.ekp.entity.EkpInvoiceInfo;
import com.yifu.cloud.plus.v1.ekp.vo.BudgetWarningVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
import java.util.Map;
/**
* @Author fxj
* @Description EKP的发票信息、合同信息
* @Date 16:28 2025/9/26
* @Param
* @return
**/
@Mapper
public interface QwExcelApiMapper extends BaseMapper<EkpInvoiceInfo> {
@Select("select \n" +
"invoiceNo as '发票号',\n" +
"contractNo as '合同号',\n" +
"invoiceFee as '开票金额',\n" +
"invoiceDate as '开票时间',\n" +
"invoiceMonth as '开票月份',\n" +
"saleName as '购买名称',\n" +
"invoiceStatus as '发票状态',\n" +
"invoiceRedReversal as '红冲状态',\n" +
"concatInfo as '发票号&购买方名称&开票月份组合'\n" +
"FROM view_invoice_info")
List<Map<String, Object>> selectInvoiceInfoAsMap();
@Select("select \n" +
"contractNo as '合同号',\n" +
"contractName as '合同名称',\n" +
"customerName as '客户名称',\n" +
"customerNo as '客户编码',\n" +
"division as '事业部',\n" +
"newLine as '事业部条线',\n" +
"incomeBelong as '业务收入归属部门',\n" +
"contractStatus as '合同状态'\n" +
"FROM view_contract_info")
List<Map<String, Object>> selectContractInfoAsMap();
}
...@@ -30,4 +30,6 @@ public interface EkpAlertTableService extends IService<EkpAlertTable> { ...@@ -30,4 +30,6 @@ public interface EkpAlertTableService extends IService<EkpAlertTable> {
void pushBudgetAlertInfoTomanager(int type); void pushBudgetAlertInfoTomanager(int type);
//void tesxWxExcelApi();
} }
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the yifu4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
package com.yifu.cloud.plus.v1.ekp.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yifu.cloud.plus.v1.ekp.entity.EkpZhaoHangDetail;
import java.util.List;
import java.util.Map;
/**
* 招行卡
*
* @author hgw
* @date 2025-09-09 16:22:40
*/
public interface EkpZhaoHangDetailService extends IService<EkpZhaoHangDetail> {
// 返回已存在的流水号
List<String> getByNo(List<String> noList);
// 返回招行账号ID与EKP用户ID的Map
Map<String, String> getAccountIdAndUserId();
}
package com.yifu.cloud.plus.v1.ekp.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yifu.cloud.plus.v1.ekp.entity.EkpInvoiceInfo;
import java.util.List;
import java.util.Map;
/**
* @Author fxj
* @Date 2025/9/26
* @Description
* @Version 1.0
*/
public interface QwExcelApiService extends IService<EkpInvoiceInfo> {
void tesxWxExcelApi();
/**
* @Author fxj
* @Description 获取所有发票池信息
* @Date 16:09 2025/9/26
* @Param
* @return
**/
public List<Map<String, Object>> getInvoiceList();
/**
* @Author fxj
* @Description 获取所有合同数据
* @Date 16:09 2025/9/26
* @Param
* @return
**/
public List<Map<String, Object>> getContractList();
}
package com.yifu.cloud.plus.v1.ekp.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.icbc.api.response.JftApiPayrollQueryDetailResponseV1;
import com.yifu.cloud.plus.v1.ekp.entity.EkpSocialInfo;
import com.yifu.cloud.plus.v1.ekp.vo.EkpBankAttaReturnVo;
import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 聚富通代发工资相关
*
* @author huyc
* @date 2024-05-24 10:55:24
*/
public interface ZhaoHangService extends IService<EkpSocialInfo> {
/**
* @Description: 代发任务确认提交
* @Author: huyc
* @Date: 2024-11-12
* @return: R
**/
R<String> doGetZhaoHangInfo();
// 特殊情况使用,或者是测试,或者是历史数据,postDate 格式:"2025-07-02"
R<String> doGetZhaoHangCore(String postDate);
}
...@@ -23,6 +23,8 @@ import com.yifu.cloud.plus.v1.ekp.entity.EkpBudgetWarningInfo; ...@@ -23,6 +23,8 @@ import com.yifu.cloud.plus.v1.ekp.entity.EkpBudgetWarningInfo;
import com.yifu.cloud.plus.v1.ekp.mapper.EkpAlertTableMapper; import com.yifu.cloud.plus.v1.ekp.mapper.EkpAlertTableMapper;
import com.yifu.cloud.plus.v1.ekp.mapper.EkpBudgetWarningInfoMapper; import com.yifu.cloud.plus.v1.ekp.mapper.EkpBudgetWarningInfoMapper;
import com.yifu.cloud.plus.v1.ekp.service.EkpAlertTableService; import com.yifu.cloud.plus.v1.ekp.service.EkpAlertTableService;
import com.yifu.cloud.plus.v1.ekp.util.SmartSheetDebugService;
import com.yifu.cloud.plus.v1.ekp.util.WeComSmartSheetManager;
import com.yifu.cloud.plus.v1.ekp.vo.BudgetWarningVo; import com.yifu.cloud.plus.v1.ekp.vo.BudgetWarningVo;
import com.yifu.cloud.plus.v1.yifu.admin.api.entity.SysUser; import com.yifu.cloud.plus.v1.yifu.admin.api.entity.SysUser;
import com.yifu.cloud.plus.v1.yifu.admin.api.vo.SysUserListVo; import com.yifu.cloud.plus.v1.yifu.admin.api.vo.SysUserListVo;
...@@ -57,6 +59,15 @@ public class EkpAlertTableServiceImpl extends ServiceImpl<EkpAlertTableMapper, E ...@@ -57,6 +59,15 @@ public class EkpAlertTableServiceImpl extends ServiceImpl<EkpAlertTableMapper, E
@Autowired @Autowired
private EkpBudgetWarningInfoMapper warningInfoMapper; private EkpBudgetWarningInfoMapper warningInfoMapper;
@Autowired
private WeComSmartSheetManager smartSheetManager;
@Autowired
private SmartSheetDebugService debugService;
/** /**
...@@ -243,6 +254,7 @@ public class EkpAlertTableServiceImpl extends ServiceImpl<EkpAlertTableMapper, E ...@@ -243,6 +254,7 @@ public class EkpAlertTableServiceImpl extends ServiceImpl<EkpAlertTableMapper, E
log.error("执行预算预警任务时发生异常:", e); log.error("执行预算预警任务时发生异常:", e);
} }
} }
/** /**
* @param config 预警配置 * @param config 预警配置
* @return 是否超额 * @return 是否超额
...@@ -296,4 +308,27 @@ public class EkpAlertTableServiceImpl extends ServiceImpl<EkpAlertTableMapper, E ...@@ -296,4 +308,27 @@ public class EkpAlertTableServiceImpl extends ServiceImpl<EkpAlertTableMapper, E
} }
return false; return false;
} }
//@Override
public void tesxWxExcelApi() {
/*RestTemplate restTemplate = new RestTemplate();
String accessToken = wxConfig.getAccessToken(restTemplate);
Map<String, Object> requestBody = new HashMap<>();
//requestBody.put("spaceid", ""); // 非必填,空间spaceid。若指定spaceid,则fatherid也要同时指定
//requestBody.put("fatherid", "Sheet1"); // 非必填,父目录fileid, 在根目录时为空间spaceid
requestBody.put("doc_type", 10); // 文档类型, 3:文档 4:表格 10:智能表格
requestBody.put("doc_name", "发票基础信息"); // 文档名字(注意:文件名最多填255个字符, 超过255个字符会被截断)
requestBody.put("admin_users", new String[]{"FeiTaiLang_Fang"}); // 非必填,文档管理员userid
// 发送POST请求(示例使用Spring的RestTemplate)
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(requestBody, headers);
restTemplate = new RestTemplate();
String createDocUrl = "https://qyapi.weixin.qq.com/cgi-bin/wedoc/create_doc?access_token="+accessToken;
ResponseEntity<String> response = restTemplate.postForEntity(createDocUrl,requestEntity, String.class);*/
//smartSheetManager.test(wxConfig);
//debugService.debugInsertIssue(wxConfig);
}
} }
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the yifu4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
package com.yifu.cloud.plus.v1.ekp.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yifu.cloud.plus.v1.ekp.entity.EkpZhaoHangDetail;
import com.yifu.cloud.plus.v1.ekp.mapper.EkpZhaoHangDetailMapper;
import com.yifu.cloud.plus.v1.ekp.service.EkpZhaoHangDetailService;
import com.yifu.cloud.plus.v1.yifu.admin.api.vo.KeyValueVo;
import lombok.extern.log4j.Log4j2;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 招行卡
*
* @author hgw
* @date 2025-09-09 16:22:40
*/
@Log4j2
@Service
public class EkpZhaoHangDetailServiceImpl extends ServiceImpl<EkpZhaoHangDetailMapper, EkpZhaoHangDetail> implements EkpZhaoHangDetailService {
@Override
public List<String> getByNo(List<String> noList) {
return baseMapper.getByNo(noList);
}
/**
* @Description: 返回招行账号ID与EKP用户ID的Map
* @Author: hgw
* @Date: 2025/9/9 18:02
* @return: java.util.Map<java.lang.String, java.lang.String>
**/
@Override
public Map<String, String> getAccountIdAndUserId() {
List<KeyValueVo> list = baseMapper.getAccountIdAndUserId();
Map<String, String> returnMap = new HashMap<>();
if (list != null && !list.isEmpty()) {
for (KeyValueVo keyValueVo : list) {
returnMap.put(keyValueVo.getKeyStr(), keyValueVo.getValueStr());
}
}
return returnMap;
}
}
package com.yifu.cloud.plus.v1.ekp.service.impl.QwExce;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yifu.cloud.plus.v1.ekp.config.WxConfig;
import com.yifu.cloud.plus.v1.ekp.entity.EkpBankAtta;
import com.yifu.cloud.plus.v1.ekp.entity.EkpInvoiceInfo;
import com.yifu.cloud.plus.v1.ekp.mapper.EkpBankAttaMapper;
import com.yifu.cloud.plus.v1.ekp.mapper.QwExcelApiMapper;
import com.yifu.cloud.plus.v1.ekp.service.QwExcelApiService;
import com.yifu.cloud.plus.v1.ekp.util.SmartSheetDebugService;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
* @Author fxj
* @Date 2025/9/26
* @Description
* @Version 1.0
*/
@Log4j2
@Service
public class QwExcelApiServiceImpl extends ServiceImpl<QwExcelApiMapper, EkpInvoiceInfo> implements QwExcelApiService {
@Autowired
private SmartSheetDebugService debugService;
@Autowired
private WxConfig wxConfig;
@Override
public void tesxWxExcelApi() {
List<Map<String, Object>> records = baseMapper.selectInvoiceInfoAsMap();
debugService.debugInsertIssue(wxConfig,records);
}
@Override
public List<Map<String, Object>> getInvoiceList() {
return baseMapper.selectInvoiceInfoAsMap();
}
@Override
public List<Map<String, Object>> getContractList() {
return baseMapper.selectContractInfoAsMap();
}
}
package com.yifu.cloud.plus.v1.ekp.util;
import lombok.Data;
/**
* @Author fxj
* @Date 2025/9/18
* @Description
* @Version 1.0
*/
@Data
public class FieldInfo {
private String fieldId;
private String title;
private String type;
@Override
public String toString() {
return "FieldInfo{" +
"fieldId='" + fieldId + '\'' +
", title='" + title + '\'' +
", type='" + type + '\'' +
'}';
}
}
package com.yifu.cloud.plus.v1.ekp.util;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yifu.cloud.plus.v1.ekp.config.WxConfig;
import com.yifu.cloud.plus.v1.yifu.common.core.util.Common;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @Author fxj
* @Date 2025/9/18
* @Description
* @Version 1.0
*/
@Log4j2
@Service
public class SmartSheetDebugService {
@Autowired
private WeComSmartSheetDebugger debugger;
/**
* 调试企业微信智能表格记录添加问题
*
*/
public void debugInsertIssue(WxConfig wxConfig,List<Map<String, Object>> records) {
if (Common.isEmpty( records)){
log.info("数据为空");
return;
}
String corpId = "wwbcb090af0dfe50e5";
// HR审批应用 agentid: 1000009,corpSecret:R0nKkvsY-oF41fuQvUXZ-kFG3_g_Ce0bpZt6mByx524
String corpSecret = "16kqEL_eU-ARwYyqLgEBWHgxm8gXVnkzv_eJMLy9Np";
String docId = "dcTSMCj4lWV9MEP7lquZacOY8WS4g-iHxP_jVYA02tdYwb2YYc3BpDR8NrFWkEngHUg8abET4eTIpo9Zv-571NEA";
String sheetId = "q979lj";
log.info("=== 开始调试企业微信智能表格记录添加问题 ===");
// 1. 获取并打印表格字段信息
log.info("=== 表格字段信息 ===");
List<WeComSmartSheetDebugger.FieldInfo> fields = debugger.getSheetFields(wxConfig,corpId, corpSecret, docId, sheetId);
if (fields.isEmpty()) {
log.info("未能获取到表格字段信息,请检查参数是否正确");
return;
}
for (WeComSmartSheetDebugger.FieldInfo field : fields) {
log.info("字段ID: " + field.getFieldId() +
", 字段标题: '" + field.getTitle() + "'" +
", 字段类型: " + field.getType());
}
// 3. 验证字段匹配性
log.info("\n=== 字段匹配性验证 ===");
List<String> mismatches = debugger.validateFields(wxConfig,corpId, corpSecret, docId, sheetId, records);
if (mismatches.isEmpty()) {
log.info("所有字段都匹配");
} else {
log.info("以下字段不匹配:");
for (String mismatch : mismatches) {
log.info("- " + mismatch);
}
log.info("请根据以上信息修正数据后重试");
return;
}
// 4. 测试插入数据并查看详细响应
log.info("\n=== 测试数据插入 ===");
String response = debugger.testInsertData(wxConfig,corpId, corpSecret, docId, sheetId, records);
log.info("API响应: " + response);
log.info("\n=== 调试完成 ===");
}
}
\ No newline at end of file
package com.yifu.cloud.plus.v1.ekp.util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.springframework.http.*;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import java.util.ArrayList;
import java.util.List;
/**
* 企业微信智能表格字段信息获取工具类
* 用于获取智能表格的字段信息,帮助诊断"字段不存在"错误
*/
@Component
public class WeComSheetFieldFetcher {
/**
* 企业微信API基础URL
*/
private static final String WE_COM_API_BASE_URL = "https://qyapi.weixin.qq.com/cgi-bin";
/**
* 获取access_token的接口路径
*/
private static final String GET_TOKEN_PATH = "/gettoken";
/**
* 获取智能表格字段信息的接口路径
*/
private static final String GET_FIELDS_PATH = "/wedoc/smartsheet/get_fields";
/**
* 获取智能表格字段信息
*
* @param corpId 企业ID
* @param corpSecret 应用的密钥
* @param docId 文档ID
* @param sheetId 工作表ID
* @return 字段信息列表
*/
public List<FieldInfo> getSheetFields(String corpId, String corpSecret, String docId, String sheetId) {
List<FieldInfo> fieldInfos = new ArrayList<>();
try {
// 1. 获取access_token
String accessToken = getAccessToken(corpId, corpSecret);
if (accessToken == null || accessToken.isEmpty()) {
System.err.println("获取access_token失败");
return fieldInfos;
}
// 2. 获取字段信息
fieldInfos = fetchFields(accessToken, docId, sheetId);
} catch (Exception e) {
System.err.println("获取表格字段信息时发生异常: " + e.getMessage());
e.printStackTrace();
}
return fieldInfos;
}
/**
* 获取企业微信access_token
*
* @param corpId 企业ID
* @param corpSecret 应用密钥
* @return access_token
*/
private String getAccessToken(String corpId, String corpSecret) {
try {
String url = WE_COM_API_BASE_URL + GET_TOKEN_PATH + "?corpid=" + corpId + "&corpsecret=" + corpSecret;
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);
if (response.getStatusCode() == HttpStatus.OK) {
JSONObject jsonObject = JSON.parseObject(response.getBody());
if (jsonObject.getInteger("errcode") == 0) {
return jsonObject.getString("access_token");
} else {
System.err.println("获取access_token失败,错误代码:" + jsonObject.getInteger("errcode")
+ ",错误信息:" + jsonObject.getString("errmsg"));
return null;
}
}
} catch (Exception e) {
System.err.println("获取access_token时发生异常: " + e.getMessage());
e.printStackTrace();
}
return null;
}
/**
* 获取字段信息
*
* @param accessToken 访问令牌
* @param docId 文档ID
* @param sheetId 工作表ID
* @return 字段信息列表
*/
private List<FieldInfo> fetchFields(String accessToken, String docId, String sheetId) {
List<FieldInfo> fieldInfos = new ArrayList<>();
try {
String url = WE_COM_API_BASE_URL + GET_FIELDS_PATH + "?access_token=" + accessToken;
RestTemplate restTemplate = new RestTemplate();
// 构造请求体
JSONObject requestBody = new JSONObject();
requestBody.put("docid", docId);
requestBody.put("sheet_id", sheetId);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<String> request = new HttpEntity<>(requestBody.toJSONString(), headers);
ResponseEntity<String> response = restTemplate.postForEntity(url, request, String.class);
if (response.getStatusCode() == HttpStatus.OK) {
JSONObject jsonObject = JSON.parseObject(response.getBody());
if (jsonObject.getInteger("errcode") == 0) {
JSONArray fields = jsonObject.getJSONArray("fields");
if (fields != null && !fields.isEmpty()) {
for (int i = 0; i < fields.size(); i++) {
JSONObject field = fields.getJSONObject(i);
FieldInfo fieldInfo = new FieldInfo();
fieldInfo.setFieldId(field.getString("field_id"));
fieldInfo.setTitle(field.getString("title"));
fieldInfo.setType(field.getString("type"));
fieldInfos.add(fieldInfo);
}
}
} else {
System.err.println("获取字段信息失败,错误代码:" + jsonObject.getInteger("errcode")
+ ",错误信息:" + jsonObject.getString("errmsg"));
}
}
} catch (Exception e) {
System.err.println("获取字段信息时发生异常: " + e.getMessage());
e.printStackTrace();
}
return fieldInfos;
}
/**
* 使用示例
*
* @param args 命令行参数
*/
public static void main(String[] args) {
WeComSheetFieldFetcher fetcher = new WeComSheetFieldFetcher();
// 示例数据
String corpId = "your_corp_id";
String corpSecret = "your_corp_secret";
String docId = "your_doc_id";
String sheetId = "your_sheet_id";
// 获取字段信息列表
List<FieldInfo> fields = fetcher.getSheetFields(corpId, corpSecret, docId, sheetId);
System.out.println("获取到的字段信息列表: " + fields);
// 打印每个字段的详细信息
for (FieldInfo field : fields) {
System.out.println("字段ID: " + field.getFieldId() +
", 字段标题: " + field.getTitle() +
", 字段类型: " + field.getType());
}
}
}
\ No newline at end of file
package com.yifu.cloud.plus.v1.ekp.util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yifu.cloud.plus.v1.ekp.config.WxConfig;
import lombok.Data;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.*;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import java.util.ArrayList;
import java.util.List;
/**
* 企业微信智能表格SheetId获取工具类
* 用于通过文档ID获取表格ID
*/
@Data
@Component
public class WeComSheetIdFetcher {
/**
* 企业微信API基础URL
*/
private static final String WE_COM_API_BASE_URL = "https://qyapi.weixin.qq.com/cgi-bin";
/**
* 获取access_token的接口路径
*/
private static final String GET_TOKEN_PATH = "/gettoken";
/**
* 查询子表的接口路径
*/
private static final String GET_SHEET_PATH = "/wedoc/smartsheet/get_sheet";
/**
* 通过文档ID获取表格ID列表
*
* @param docId 文档ID
* @return 表格ID列表
*/
public List<String> getSheetIds(WxConfig wxConfig,String docId) {
List<String> sheetIds = new ArrayList<>();
try {
RestTemplate restTemplate = new RestTemplate();
// 1. 获取access_token
String accessToken = wxConfig.getAccessToken(restTemplate);
//getAccessToken(corpId, corpSecret);
if (accessToken == null || accessToken.isEmpty()) {
System.err.println("获取access_token失败");
return sheetIds;
}
// 2. 查询子表信息
List<SheetInfo> sheetInfos = getSheetInfo(accessToken, docId);
for (SheetInfo sheetInfo : sheetInfos) {
// 只返回智能表类型的sheet_id
if ("smartsheet".equals(sheetInfo.getType())) {
sheetIds.add(sheetInfo.getSheetId());
}
}
} catch (Exception e) {
System.err.println("获取表格ID时发生异常: " + e.getMessage());
e.printStackTrace();
}
return sheetIds;
}
/**
* 获取企业微信access_token
*
* @param corpId 企业ID
* @param corpSecret 应用密钥
* @return access_token
*/
private String getAccessToken(String corpId, String corpSecret) {
try {
String url = WE_COM_API_BASE_URL + GET_TOKEN_PATH + "?corpid=" + corpId + "&corpsecret=" + corpSecret;
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);
if (response.getStatusCode() == HttpStatus.OK) {
JSONObject jsonObject = JSON.parseObject(response.getBody());
if (jsonObject.getInteger("errcode") == 0) {
return jsonObject.getString("access_token");
} else {
System.err.println("获取access_token失败,错误代码:" + jsonObject.getInteger("errcode")
+ ",错误信息:" + jsonObject.getString("errmsg"));
return null;
}
}
} catch (Exception e) {
System.err.println("获取access_token时发生异常: " + e.getMessage());
e.printStackTrace();
}
return null;
}
/**
* 查询子表信息
*
* @param accessToken 访问令牌
* @param docId 文档ID
* @return 子表信息列表
*/
private List<SheetInfo> getSheetInfo(String accessToken, String docId) {
List<SheetInfo> sheetInfos = new ArrayList<>();
try {
String url = WE_COM_API_BASE_URL + GET_SHEET_PATH + "?access_token=" + accessToken;
RestTemplate restTemplate = new RestTemplate();
// 构造请求体
JSONObject requestBody = new JSONObject();
requestBody.put("docid", docId);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<String> request = new HttpEntity<>(requestBody.toJSONString(), headers);
ResponseEntity<String> response = restTemplate.postForEntity(url, request, String.class);
if (response.getStatusCode() == HttpStatus.OK) {
JSONObject jsonObject = JSON.parseObject(response.getBody());
if (jsonObject.getInteger("errcode") == 0) {
JSONArray sheets = jsonObject.getJSONArray("sheet_list");
if (sheets != null && !sheets.isEmpty()) {
for (int i = 0; i < sheets.size(); i++) {
JSONObject sheet = sheets.getJSONObject(i);
SheetInfo sheetInfo = new SheetInfo();
sheetInfo.setSheetId(sheet.getString("sheet_id"));
sheetInfo.setTitle(sheet.getString("title"));
sheetInfo.setType(sheet.getString("type"));
sheetInfos.add(sheetInfo);
}
}
} else {
System.err.println("查询子表信息失败,错误代码:" + jsonObject.getInteger("errcode")
+ ",错误信息:" + jsonObject.getString("errmsg"));
}
}
} catch (Exception e) {
System.err.println("查询子表信息时发生异常: " + e.getMessage());
e.printStackTrace();
}
return sheetInfos;
}
/**
* 子表信息内部类
*/
public static class SheetInfo {
private String sheetId;
private String title;
private String type; // smartsheet: 智能表, dashboard: 仪表盘, external: 说明页
public String getSheetId() {
return sheetId;
}
public void setSheetId(String sheetId) {
this.sheetId = sheetId;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
@Override
public String toString() {
return "SheetInfo{" +
"sheetId='" + sheetId + '\'' +
", title='" + title + '\'' +
", type='" + type + '\'' +
'}';
}
}
/**
* 使用示例
*
* @param args 命令行参数
*/
public static void main(String[] args) {
WeComSheetIdFetcher fetcher = new WeComSheetIdFetcher();
// 示例数据
String corpId = "your_corp_id";
String corpSecret = "your_corp_secret";
String docId = "your_doc_id";
// 获取表格ID列表
/* List<String> sheetIds = fetcher.getSheetIds(docId);
System.out.println("获取到的表格ID列表: " + sheetIds);*/
}
}
\ No newline at end of file
package com.yifu.cloud.plus.v1.ekp.util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.yifu.cloud.plus.v1.ekp.config.WxConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.*;
import org.springframework.stereotype.Component;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import java.util.List;
import java.util.Map;
/**
* 企业微信智能表格数据插入工具类
* 用于向已有的企业微信智能表格中插入数据
*/
@Component
public class WeComSmartSheetDataInserter {
@Autowired
private WxConfig wxConfig;
/**
* 企业微信API基础URL
*/
private static final String WE_COM_API_BASE_URL = "https://qyapi.weixin.qq.com/cgi-bin";
/**
* 获取access_token的接口路径
*/
private static final String GET_TOKEN_PATH = "/gettoken";
/**
* 智能表格添加记录的接口路径
*/
private static final String ADD_RECORDS_PATH = "/wedoc/smartsheet/add_records";
/**
* 向企业微信智能表格中插入数据
*
* @param docId 文档ID
* @param sheetId 表格ID
* @param records 要插入的记录列表
* @return 插入结果
*/
public boolean insertData(String docId, String sheetId, List<Map<String, Object>> records) {
try {
RestTemplate restTemplate = new RestTemplate();
// 1. 获取access_token
String accessToken = wxConfig.getAccessToken(restTemplate);
//getAccessToken(corpId, corpSecret);
if (accessToken == null || accessToken.isEmpty()) {
System.err.println("获取access_token失败");
return false;
}
// 2. 构造请求体
JSONObject requestBody = new JSONObject();
requestBody.put("docid", docId);
requestBody.put("sheet_id", sheetId);
requestBody.put("key_type", "CELL_VALUE_KEY_TYPE_FIELD_TITLE");
// 构造records数组
new com.alibaba.fastjson.JSONArray();
requestBody.put("records", records);
// 3. 发送请求插入数据
boolean result = addRecords(accessToken, requestBody);
if (result) {
System.out.println("数据插入成功");
} else {
System.err.println("数据插入失败");
}
return result;
} catch (Exception e) {
System.err.println("插入数据时发生异常: " + e.getMessage());
e.printStackTrace();
return false;
}
}
/**
* 获取企业微信access_token
*
* @param corpId 企业ID
* @param corpSecret 应用密钥
* @return access_token
*/
private String getAccessToken(String corpId, String corpSecret) {
try {
String url = WE_COM_API_BASE_URL + GET_TOKEN_PATH + "?corpid=" + corpId + "&corpsecret=" + corpSecret;
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> response = restTemplate.getForEntity(url, String.class);
if (response.getStatusCode() == HttpStatus.OK) {
JSONObject jsonObject = JSON.parseObject(response.getBody());
if (jsonObject.getInteger("errcode") == 0) {
return jsonObject.getString("access_token");
} else {
System.err.println("获取access_token失败,错误代码:" + jsonObject.getInteger("errcode")
+ ",错误信息:" + jsonObject.getString("errmsg"));
return null;
}
}
} catch (Exception e) {
System.err.println("获取access_token时发生异常: " + e.getMessage());
e.printStackTrace();
}
return null;
}
/**
* 向智能表格添加记录
*
* @param accessToken 访问令牌
* @param requestBody 请求体
* @return 是否成功
*/
private boolean addRecords(String accessToken, JSONObject requestBody) {
try {
String url = WE_COM_API_BASE_URL + ADD_RECORDS_PATH + "?access_token=" + accessToken;
RestTemplate restTemplate = new RestTemplate();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
HttpEntity<String> request = new HttpEntity<>(requestBody.toJSONString(), headers);
ResponseEntity<String> response = restTemplate.postForEntity(url, request, String.class);
if (response.getStatusCode() == HttpStatus.OK) {
JSONObject jsonObject = JSON.parseObject(response.getBody());
if (jsonObject.getInteger("errcode") == 0) {
return true;
} else {
System.err.println("添加记录失败,错误代码:" + jsonObject.getInteger("errcode")
+ ",错误信息:" + jsonObject.getString("errmsg"));
return false;
}
}
} catch (Exception e) {
System.err.println("添加记录时发生异常: " + e.getMessage());
e.printStackTrace();
}
return false;
}
/**
* 使用示例
*
* @param args 命令行参数
*/
public static void main(String[] args) {
WeComSmartSheetDataInserter inserter = new WeComSmartSheetDataInserter();
// 示例数据
String corpId = "your_corp_id";
String corpSecret = "your_corp_secret";
String docId = "your_doc_id";
String sheetId = "your_sheet_id";
// 构造要插入的数据
new java.util.ArrayList<Map<String, Object>>();
/*
// 示例记录
Map<String, Object> record1 = new HashMap<>();
Map<String, Object> values1 = new HashMap<>();
values1.put("姓名", "张三");
values1.put("年龄", 25);
values1.put("部门", "技术部");
record1.put("values", values1);
Map<String, Object> record2 = new HashMap<>();
Map<String, Object> values2 = new HashMap<>();
values2.put("姓名", "李四");
values2.put("年龄", 30);
values2.put("部门", "市场部");
record2.put("values", values2);
records.add(record1);
records.add(record2);
// 执行插入
boolean success = inserter.insertData(corpId, corpSecret, docId, sheetId, records);
if (success) {
System.out.println("数据插入成功");
} else {
System.out.println("数据插入失败");
}
*/
}
}
\ No newline at end of file
...@@ -88,3 +88,9 @@ icbcissue: ...@@ -88,3 +88,9 @@ icbcissue:
aesKey: 8jTKCqZ9035g+HRzpZQqZA== aesKey: 8jTKCqZ9035g+HRzpZQqZA==
caSm: MIICSTCCAeygAwIBAgIGAJuAEtYAMAwGCCqBHM9VAYN1BQAwQTELMAkGA1UEBhMCY24xGzAZBgNVBAoMEnNtMmNvci5pY2JjLmNvbS5jbjEVMBMGA1UEAwwMc20ycm9vdGNhY29yMB4XDTIzMTIyMTA5NTAxNloXDTI4MTIyMTE1NTk1OVowVDELMAkGA1UEBhMCY24xGzAZBgNVBAoMEnNtMmNvci5pY2JjLmNvbS5jbjENMAsGA1UECwwEMTMwMjEZMBcGA1UEAwwQYWh3eC55LjEzMDIuMDIwMTBZMBMGByqGSM49AgEGCCqBHM9VAYItA0IABGEC1fF2rHTWfipQhOr+8SfvXDBiazIrImcsPH5aGaYMFK2RIXv0AF2xe2ZgAzcWRbgop0cAjaBHXpzSfIlnfl6jgbowgbcwHwYDVR0jBBgwFoAUDD6RRlIIkxjZ0/0x6S8mKdW3D2YwCQYDVR0TBAIwADBdBgNVHR8EVjBUMFKgUKBOpEwwSjEQMA4GA1UEAwwHY3JsNDE3MDEMMAoGA1UECwwDY3JsMRswGQYDVQQKDBJzbTJjb3IuaWNiYy5jb20uY24xCzAJBgNVBAYTAmNuMAsGA1UdDwQEAwIHgDAdBgNVHQ4EFgQUd0LHEI6l7Faq6/9GObNld3SH7xswDAYIKoEcz1UBg3UFAANJADBGAiEA68uRM5zYzMhaheAG+fw3AtkRFE5146+Qw6GVP93WojwCIQDzsIL3duLRtTot8ciVuKUQkI+GrXAg7nWnd2M2o9oRBw== caSm: MIICSTCCAeygAwIBAgIGAJuAEtYAMAwGCCqBHM9VAYN1BQAwQTELMAkGA1UEBhMCY24xGzAZBgNVBAoMEnNtMmNvci5pY2JjLmNvbS5jbjEVMBMGA1UEAwwMc20ycm9vdGNhY29yMB4XDTIzMTIyMTA5NTAxNloXDTI4MTIyMTE1NTk1OVowVDELMAkGA1UEBhMCY24xGzAZBgNVBAoMEnNtMmNvci5pY2JjLmNvbS5jbjENMAsGA1UECwwEMTMwMjEZMBcGA1UEAwwQYWh3eC55LjEzMDIuMDIwMTBZMBMGByqGSM49AgEGCCqBHM9VAYItA0IABGEC1fF2rHTWfipQhOr+8SfvXDBiazIrImcsPH5aGaYMFK2RIXv0AF2xe2ZgAzcWRbgop0cAjaBHXpzSfIlnfl6jgbowgbcwHwYDVR0jBBgwFoAUDD6RRlIIkxjZ0/0x6S8mKdW3D2YwCQYDVR0TBAIwADBdBgNVHR8EVjBUMFKgUKBOpEwwSjEQMA4GA1UEAwwHY3JsNDE3MDEMMAoGA1UECwwDY3JsMRswGQYDVQQKDBJzbTJjb3IuaWNiYy5jb20uY24xCzAJBgNVBAYTAmNuMAsGA1UdDwQEAwIHgDAdBgNVHQ4EFgQUd0LHEI6l7Faq6/9GObNld3SH7xswDAYIKoEcz1UBg3UFAANJADBGAiEA68uRM5zYzMhaheAG+fw3AtkRFE5146+Qw6GVP93WojwCIQDzsIL3duLRtTot8ciVuKUQkI+GrXAg7nWnd2M2o9oRBw==
caSmIcbc: MIIDdDCCAxegAwIBAgIFRjBiNDYwDAYIKoEcz1UBg3UFADBcMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRswGQYDVQQDDBJDRkNBIEFDUyBTTTIgT0NBMzEwHhcNMjMwMjE1MDkyMTA5WhcNMjgwMjE1MDkyMTA5WjCBpTELMAkGA1UEBhMCQ04xGzAZBgNVBAoMEkNGQ0EgQUNTIFNNMiBPQ0EzMTETMBEGA1UECwwKQ0ZDQSBPQ0EzMTEZMBcGA1UECwwQT3JnYW5pemF0aW9uYWwtMTFJMEcGA1UEAwxAQ0ZDQUDkuK3lm73lt6XllYbpk7booYzogqHku73mnInpmZDlhazlj7hATjkxMTAwMDAwMTAwMDAzOTYyVEAxNjBZMBMGByqGSM49AgEGCCqBHM9VAYItA0IABC7pDFU19+SE4Bog4M7om/nsDbTtXHBlfp5G2e1Iya4LmFW5ZqOxmmQBysFwl9nDq3svOHMZ53Mpe14Z1m/OYFajggF4MIIBdDBsBggrBgEFBQcBAQRgMF4wKAYIKwYBBQUHMAGGHGh0dHA6Ly9vY3NwLmNmY2EuY29tLmNuL29jc3AwMgYIKwYBBQUHMAKGJmh0dHA6Ly9jcmwuY2ZjYS5jb20uY24vb2NhMzEvb2NhMzEuY2VyMB8GA1UdIwQYMBaAFAjY0SbESH2c7KyY6fF/YrmAzqlFMAwGA1UdEwEB/wQCMAAwSAYDVR0gBEEwPzA9BghggRyG7yoBBDAxMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmNmY2EuY29tLmNuL3VzL3VzLTE0Lmh0bTA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLmNmY2EuY29tLmNuL29jYTMxL1NNMi9jcmwyNzMwLmNybDAOBgNVHQ8BAf8EBAMCBsAwHQYDVR0OBBYEFOpEqrs73yvBXqvDQoT33v05FnDIMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDBDAMBggqgRzPVQGDdQUAA0kAMEYCIQCdKpfhUijpAKEQekHxlk4LvnqzzaYmODo3T3qmZUJsUwIhAOaMMH0IpwefVTSwJlhrVbmEB5DmoxLo1Xb/1tvfW1l2 caSmIcbc: MIIDdDCCAxegAwIBAgIFRjBiNDYwDAYIKoEcz1UBg3UFADBcMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRswGQYDVQQDDBJDRkNBIEFDUyBTTTIgT0NBMzEwHhcNMjMwMjE1MDkyMTA5WhcNMjgwMjE1MDkyMTA5WjCBpTELMAkGA1UEBhMCQ04xGzAZBgNVBAoMEkNGQ0EgQUNTIFNNMiBPQ0EzMTETMBEGA1UECwwKQ0ZDQSBPQ0EzMTEZMBcGA1UECwwQT3JnYW5pemF0aW9uYWwtMTFJMEcGA1UEAwxAQ0ZDQUDkuK3lm73lt6XllYbpk7booYzogqHku73mnInpmZDlhazlj7hATjkxMTAwMDAwMTAwMDAzOTYyVEAxNjBZMBMGByqGSM49AgEGCCqBHM9VAYItA0IABC7pDFU19+SE4Bog4M7om/nsDbTtXHBlfp5G2e1Iya4LmFW5ZqOxmmQBysFwl9nDq3svOHMZ53Mpe14Z1m/OYFajggF4MIIBdDBsBggrBgEFBQcBAQRgMF4wKAYIKwYBBQUHMAGGHGh0dHA6Ly9vY3NwLmNmY2EuY29tLmNuL29jc3AwMgYIKwYBBQUHMAKGJmh0dHA6Ly9jcmwuY2ZjYS5jb20uY24vb2NhMzEvb2NhMzEuY2VyMB8GA1UdIwQYMBaAFAjY0SbESH2c7KyY6fF/YrmAzqlFMAwGA1UdEwEB/wQCMAAwSAYDVR0gBEEwPzA9BghggRyG7yoBBDAxMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmNmY2EuY29tLmNuL3VzL3VzLTE0Lmh0bTA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLmNmY2EuY29tLmNuL29jYTMxL1NNMi9jcmwyNzMwLmNybDAOBgNVHQ8BAf8EBAMCBsAwHQYDVR0OBBYEFOpEqrs73yvBXqvDQoT33v05FnDIMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDBDAMBggqgRzPVQGDdQUAA0kAMEYCIQCdKpfhUijpAKEQekHxlk4LvnqzzaYmODo3T3qmZUJsUwIhAOaMMH0IpwefVTSwJlhrVbmEB5DmoxLo1Xb/1tvfW1l2
# 招行配置
zhaohang:
clientId: 10025498
clientSecret: cno7G+kNfJbf9nyskHdr0g==
corNum: 9910025498
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!--
~
~ Copyright (c) 2018-2025, lengleng All rights reserved.
~
~ Redistribution and use in source and binary forms, with or without
~ modification, are permitted provided that the following conditions are met:
~
~ Redistributions of source code must retain the above copyright notice,
~ this list of conditions and the following disclaimer.
~ Redistributions in binary form must reproduce the above copyright
~ notice, this list of conditions and the following disclaimer in the
~ documentation and/or other materials provided with the distribution.
~ Neither the name of the yifu4cloud.com developer nor the names of its
~ contributors may be used to endorse or promote products derived from
~ this software without specific prior written permission.
~ Author: lengleng (wangiegie@gmail.com)
~
-->
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yifu.cloud.plus.v1.ekp.mapper.EkpZhaoHangDetailLogMapper">
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!--
~
~ Copyright (c) 2018-2025, lengleng All rights reserved.
~
~ Redistribution and use in source and binary forms, with or without
~ modification, are permitted provided that the following conditions are met:
~
~ Redistributions of source code must retain the above copyright notice,
~ this list of conditions and the following disclaimer.
~ Redistributions in binary form must reproduce the above copyright
~ notice, this list of conditions and the following disclaimer in the
~ documentation and/or other materials provided with the distribution.
~ Neither the name of the yifu4cloud.com developer nor the names of its
~ contributors may be used to endorse or promote products derived from
~ this software without specific prior written permission.
~ Author: lengleng (wangiegie@gmail.com)
~
-->
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yifu.cloud.plus.v1.ekp.mapper.EkpZhaoHangDetailMapper">
<select id="getByNo" resultType="java.lang.String">
SELECT
a.FD_NO
FROM ekp_zhao_hang_detail a
where a.FD_NO in
<foreach item="item" index="index" collection="noList" separator="," open="(" close=")">
#{item}
</foreach>
</select>
<select id="getAccountIdAndUserId" resultType="com.yifu.cloud.plus.v1.yifu.admin.api.vo.KeyValueVo">
select a.FD_ACCOUNT_ID keyStr,a.FD_USER_ID valueStr from ekp_zhao_hang_bank_no a GROUP BY a.FD_ACCOUNT_ID
</select>
</mapper>
...@@ -1336,4 +1336,11 @@ public class InsurancesConstants { ...@@ -1336,4 +1336,11 @@ public class InsurancesConstants {
* 商险到期提醒默认提醒人配置KEY * 商险到期提醒默认提醒人配置KEY
*/ */
public static final String INSURANCE_ALERT_DEFAULT_PERSON = "INSURANCE_ALERT_DEFAULT_PERSON"; public static final String INSURANCE_ALERT_DEFAULT_PERSON = "INSURANCE_ALERT_DEFAULT_PERSON";
/**
* 保单号维护模版导入
*
*/
public static final String IMPORT_POLICY_REMARK = "保单号维护模版导入";
public static final String INSURANCE_AUTO_FLAG_IS_ENABLE = "该项目已纳入自动化,请至作业自动化模块入职登记-接收确认后自动派单";
} }
...@@ -31,11 +31,6 @@ public class InsuranceExportListOneVO implements Serializable { ...@@ -31,11 +31,6 @@ public class InsuranceExportListOneVO implements Serializable {
@Schema(description = "项目名称") @Schema(description = "项目名称")
private String projectName; private String projectName;
/**
* 客户名称
*/
@Schema(description = "客户名称")
private String unitName;
/** /**
* 项目编码 * 项目编码
...@@ -184,12 +179,6 @@ public class InsuranceExportListOneVO implements Serializable { ...@@ -184,12 +179,6 @@ public class InsuranceExportListOneVO implements Serializable {
@Schema(description = "封面抬头") @Schema(description = "封面抬头")
private String invoiceTitle; private String invoiceTitle;
/**
* 是否地市自购0是 1 否
*/
@Schema(description = "是否地市自购")
private String isAdress;
/** /**
* 派单备注 * 派单备注
*/ */
...@@ -197,4 +186,10 @@ public class InsuranceExportListOneVO implements Serializable { ...@@ -197,4 +186,10 @@ public class InsuranceExportListOneVO implements Serializable {
@HeadFontStyle(fontHeightInPoints = 11) @HeadFontStyle(fontHeightInPoints = 11)
@ExcelProperty(value = "派单备注") @ExcelProperty(value = "派单备注")
private String remarkDispatch; private String remarkDispatch;
/**
* 客户名称
*/
@Schema(description = "客户名称")
private String unitName;
} }
package com.yifu.cloud.plus.v1.yifu.insurances.vo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.HeadFontStyle;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.ExcelAttribute;
import com.yifu.cloud.plus.v1.yifu.common.core.util.DateUtil;
import com.yifu.cloud.plus.v1.yifu.common.core.vo.RowIndex;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import java.io.Serializable;
/**
* @Author fxj
* @Description 保单维护导入对象
* @Date 16:34 2025/8/29
**/
@Data
@Schema(description = "保单维护导入对象")
public class InsurancePolicyImportVo extends RowIndex implements Serializable {
private static final long serialVersionUID = 1442112261102562729L;
/**
* 保单号
*/
@Length(max = 50, message = "保单号 不能超过50 个字符" )
@ExcelAttribute(name = "保单号", maxLength = 50, isNotEmpty = true,errorInfo = "保单号不能为空")
@ExcelProperty("保单号" )
@Schema(description = "保单号")
private String policyNo;
/**
* 保单开始日期
*/
@ExcelAttribute(name = "保单开始日期",isDate = true, isNotEmpty = true,dateFormat = DateUtil.ISO_EXPANDED_DATE_FORMAT, errorInfo = "保单开始日期不能为空")
@ExcelProperty("保单开始日期" )
@Schema(description = "保单开始日期")
private String policyStart;
/**
* 保单截止日期
*/
@ExcelAttribute(name = "保单截止日期", isDate = true, isNotEmpty = true,dateFormat = DateUtil.ISO_EXPANDED_DATE_FORMAT,errorInfo = "保单截止日期不能为空")
@ExcelProperty("保单截止日期" )
@Schema(description = "保单截止日期")
private String policyEnd;
/**
* 保险公司
*/
@ExcelAttribute(name = "保险公司", maxLength = 60, isNotEmpty = true,errorInfo = "保险公司不能为空")
@ExcelProperty("保险公司" )
@Schema(description = "保险公司")
private String insuranceCompanyName;
/**
* 险种
*/
@ExcelAttribute(name = "险种", maxLength = 50, isNotEmpty = true,errorInfo = "险种不能为空")
@ExcelProperty("险种" )
@Schema(description = "险种")
private String insuranceTypeName;
}
package com.yifu.cloud.plus.v1.yifu.insurances.vo;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.format.DateTimeFormat;
import com.alibaba.excel.annotation.write.style.HeadFontStyle;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.ExcelAttribute;
import com.yifu.cloud.plus.v1.yifu.common.core.util.DateUtil;
import com.yifu.cloud.plus.v1.yifu.insurances.util.LocalDateConverter;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDate;
/**
* @author fxj
* @description 已投保查询返回类
* @date 2022-07-21 09:46:09
*/
@Data
@Tag(name = "已投保查询返回类")
public class PolicyListVo implements Serializable {
private static final long serialVersionUID = -6673220061558171816L;
/**
* 主键
*/
@Schema(description = "主键")
private String id;
/**
* 保单号
*/
@Length(max = 50, message = "保单号 不能超过50 个字符" )
@ExcelAttribute(name = "保单号", maxLength = 50, isNotEmpty = true,errorInfo = "保单号不能为空")
@ExcelProperty("保单号" )
@Schema(description = "保单号")
private String policyNo;
/**
* 保单开始日期
*/
@ExcelAttribute(name = "保单开始日期",isDate = true, isNotEmpty = true,dateFormat = DateUtil.ISO_EXPANDED_DATE_FORMAT, errorInfo = "保单开始日期不能为空")
@ExcelProperty("保单开始日期" )
@Schema(description = "保单开始日期")
private String policyStart;
/**
* 保单截止日期
*/
@ExcelAttribute(name = "保单截止日期", isDate = true, isNotEmpty = true,dateFormat = DateUtil.ISO_EXPANDED_DATE_FORMAT,errorInfo = "保单截止日期不能为空")
@ExcelProperty("保单截止日期" )
@Schema(description = "保单截止日期")
private String policyEnd;
/**
* 保险公司
*/
@ExcelAttribute(name = "保险公司", maxLength = 60, isNotEmpty = true,errorInfo = "保险公司不能为空")
@ExcelProperty("保险公司" )
@Schema(description = "保险公司")
private String insuranceCompanyName;
/**
* 险种
*/
@ExcelAttribute(name = "险种", maxLength = 50, isNotEmpty = true,errorInfo = "险种不能为空")
@ExcelProperty("险种" )
@Schema(description = "险种")
private String insuranceTypeName;
/**
* 商险购买地省code
*/
@Schema(description = "商险购买地省code")
@ExcelIgnore
private Integer insuranceProvince;
/**
* 商险购买地省
*/
@Schema(description = "商险购买地省")
@ExcelIgnore
private String insuranceProvinceName;
/**
* 商险购买地市code
*/
@Schema(description = "商险购买地市code")
@ExcelIgnore
private Integer insuranceCity;
/**
* 商险购买地市
*/
@Schema(description = "商险购买地市")
@HeadFontStyle(fontHeightInPoints = 11)
@ExcelProperty(value = "商险购买地")
private String insuranceCityName;
/**
* 购买标准
*/
@Schema(description = "购买标准")
private String buyStandard;
/**
* 险种主键
*/
@Schema(description = "险种主键")
private Long insuranceTypeId;
}
...@@ -223,12 +223,6 @@ public class RefundExportListVo implements Serializable { ...@@ -223,12 +223,6 @@ public class RefundExportListVo implements Serializable {
@Schema(description = "派单日期") @Schema(description = "派单日期")
private LocalDateTime createTime; private LocalDateTime createTime;
/**
* 是否地市自购0是 1 否
*/
@Schema(description = "是否地市自购")
private String isAdress;
@Schema(description ="客户名称") @Schema(description ="客户名称")
private String unitName; private String unitName;
......
...@@ -132,7 +132,7 @@ public class TInsuranceDetailController { ...@@ -132,7 +132,7 @@ public class TInsuranceDetailController {
@PostMapping("/addInsurance") @PostMapping("/addInsurance")
@PreAuthorize("@pms.hasPermission('insurance_custserve_insure_add')") @PreAuthorize("@pms.hasPermission('insurance_custserve_insure_add')")
public R<List<InsuranceAddParam>> addInsurance(@RequestBody @Valid @Size(min = 1,message = "集合不能为空") List<InsuranceAddParam> paramList){ public R<List<InsuranceAddParam>> addInsurance(@RequestBody @Valid @Size(min = 1,message = "集合不能为空") List<InsuranceAddParam> paramList){
return tInsuranceDetailService.addInsurance(paramList,null); return tInsuranceDetailService.addInsurance(paramList,null,false);
} }
/** /**
...@@ -146,7 +146,7 @@ public class TInsuranceDetailController { ...@@ -146,7 +146,7 @@ public class TInsuranceDetailController {
@PostMapping("/batchInsurance") @PostMapping("/batchInsurance")
@PreAuthorize("@pms.hasPermission('insurance_custserve_insure_batch_add')") @PreAuthorize("@pms.hasPermission('insurance_custserve_insure_batch_add')")
public R<List<InsuranceBatchParam>> batchInsurance(@RequestBody @Valid @Size(min = 1,message = "集合不能为空") List<InsuranceBatchParam> paramList){ public R<List<InsuranceBatchParam>> batchInsurance(@RequestBody @Valid @Size(min = 1,message = "集合不能为空") List<InsuranceBatchParam> paramList){
return tInsuranceDetailService.batchInsurance(paramList,null); return tInsuranceDetailService.batchInsurance(paramList,null,false);
} }
/** /**
...@@ -160,7 +160,7 @@ public class TInsuranceDetailController { ...@@ -160,7 +160,7 @@ public class TInsuranceDetailController {
@PostMapping("/replaceInsurance") @PostMapping("/replaceInsurance")
@PreAuthorize("@pms.hasPermission('insurance_custserve_insure_update')") @PreAuthorize("@pms.hasPermission('insurance_custserve_insure_update')")
public R<List<InsuranceReplaceParam>> replaceInsurance(@RequestBody @Valid @Size(min = 1,message = "集合不能为空") List<InsuranceReplaceParam> paramList){ public R<List<InsuranceReplaceParam>> replaceInsurance(@RequestBody @Valid @Size(min = 1,message = "集合不能为空") List<InsuranceReplaceParam> paramList){
return tInsuranceDetailService.replaceInsurance(paramList,null); return tInsuranceDetailService.replaceInsurance(paramList,null,false);
} }
/** /**
......
...@@ -2,19 +2,28 @@ package com.yifu.cloud.plus.v1.yifu.insurances.controller; ...@@ -2,19 +2,28 @@ package com.yifu.cloud.plus.v1.yifu.insurances.controller;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.CacheConstants;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.CommonConstants;
import com.yifu.cloud.plus.v1.yifu.common.core.constant.ResultConstants;
import com.yifu.cloud.plus.v1.yifu.common.core.redis.RedisDistributedLock;
import com.yifu.cloud.plus.v1.yifu.common.core.util.Common;
import com.yifu.cloud.plus.v1.yifu.common.core.util.ErrorMessage;
import com.yifu.cloud.plus.v1.yifu.common.core.util.R; import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import com.yifu.cloud.plus.v1.yifu.common.core.vo.YifuUser;
import com.yifu.cloud.plus.v1.yifu.common.log.annotation.SysLog;
import com.yifu.cloud.plus.v1.yifu.common.security.util.SecurityUtils;
import com.yifu.cloud.plus.v1.yifu.insurances.entity.TInsurancePolicy; import com.yifu.cloud.plus.v1.yifu.insurances.entity.TInsurancePolicy;
import com.yifu.cloud.plus.v1.yifu.insurances.service.insurance.TInsurancePolicyService; import com.yifu.cloud.plus.v1.yifu.insurances.service.insurance.TInsurancePolicyService;
import com.yifu.cloud.plus.v1.yifu.insurances.vo.InsurancePolicyListEditParam; import com.yifu.cloud.plus.v1.yifu.insurances.vo.*;
import com.yifu.cloud.plus.v1.yifu.insurances.vo.InsurancePolicyListParam;
import com.yifu.cloud.plus.v1.yifu.insurances.vo.TInsurancePolicyDetailVO;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.security.SecurityRequirement;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.validation.Valid; import javax.validation.Valid;
...@@ -104,4 +113,52 @@ public class TInsurancePolicyController { ...@@ -104,4 +113,52 @@ public class TInsurancePolicyController {
return tInsurancePolicyService.deleteInsurancePolicy(id); return tInsurancePolicyService.deleteInsurancePolicy(id);
} }
@SneakyThrows
@Operation(description = "批量新增保单号维护")
@SysLog("批量新增保单号维护")
@PostMapping("/importListAdd")
public R<List<ErrorMessage>> importListAdd(@RequestBody MultipartFile file) {
YifuUser user = SecurityUtils.getUser();
if (Common.isEmpty(user)){
return R.failed(CommonConstants.USER_FAIL);
}
// 获取redis分布式事务锁
String key = CacheConstants.INSURANCE_POLICY_IMPORT + CommonConstants.DOWN_LINE_STRING + user.getId();
String requestId;
try {
requestId = RedisDistributedLock.getLock(key,"10");
} catch (Exception e) {
throw new RuntimeException(ResultConstants.NO_GETLOCK_DATA+CommonConstants.DOWN_LINE_STRING+e.getMessage());
}
try {
if (Common.isNotNull(requestId)) {
return tInsurancePolicyService.importInsurancePolicy(file.getInputStream());
} else {
return R.failed(ResultConstants.NO_GETLOCK_DATA);
}
}finally {
//主动释放锁
RedisDistributedLock.unlock(key, requestId);
}
}
/**
* 商险自动化-针对批增的查询保单号的分页接口
* 根据保单号去重,未过期的保单
* MVP1.7.15 取值从保单维护表获取
*
* @author fxj
* @param page 分页对象
* @param param 查询参数
* @return {@link R<IPage< InsuredListVo >>}
* @since 1.7.15
* @date 2025/9/1
*/
@Operation(summary = "商险自动化-针对批增的查询保单号的分页接口")
@PostMapping("/policyPageToAutoSelect" )
public R<IPage<PolicyListVo>> policyPageToAutoSelect(Page<PolicyListVo> page, @RequestBody InsuredParam param,
@RequestParam(required = false) String mId) {
return R.ok(tInsurancePolicyService.policyPageToAutoSelect(page, param, mId));
}
} }
package com.yifu.cloud.plus.v1.yifu.insurances.mapper.insurances; package com.yifu.cloud.plus.v1.yifu.insurances.mapper.insurances;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yifu.cloud.plus.v1.yifu.insurances.entity.TInsurancePolicy; import com.yifu.cloud.plus.v1.yifu.insurances.entity.TInsurancePolicy;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yifu.cloud.plus.v1.yifu.insurances.vo.InsurancePolicyListParam; import com.yifu.cloud.plus.v1.yifu.insurances.vo.InsurancePolicyListParam;
import com.yifu.cloud.plus.v1.yifu.insurances.vo.InsuredParam;
import com.yifu.cloud.plus.v1.yifu.insurances.vo.PolicyListVo;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
...@@ -36,6 +38,8 @@ public interface TInsurancePolicyMapper extends BaseMapper<TInsurancePolicy> { ...@@ -36,6 +38,8 @@ public interface TInsurancePolicyMapper extends BaseMapper<TInsurancePolicy> {
* @return {@link List< TInsurancePolicy>} * @return {@link List< TInsurancePolicy>}
*/ */
List<TInsurancePolicy> getInsurancePolicyList(@Param("param") InsurancePolicyListParam param); List<TInsurancePolicy> getInsurancePolicyList(@Param("param") InsurancePolicyListParam param);
Page<PolicyListVo> policyPageToAutoSelect(Page page,@Param("param") InsuredParam param);
} }
......
...@@ -82,7 +82,7 @@ public interface TInsuranceDetailService extends IService<TInsuranceDetail> { ...@@ -82,7 +82,7 @@ public interface TInsuranceDetailService extends IService<TInsuranceDetail> {
* @param paramList * @param paramList
* @return {@link R<List<InsuranceAddParam>>} * @return {@link R<List<InsuranceAddParam>>}
*/ */
R<List<InsuranceAddParam>> addInsurance(List<InsuranceAddParam> paramList,String orderNo); R<List<InsuranceAddParam>> addInsurance(List<InsuranceAddParam> paramList,String orderNo,boolean autoFlag);
/** /**
* 商险批增 * 商险批增
...@@ -91,7 +91,7 @@ public interface TInsuranceDetailService extends IService<TInsuranceDetail> { ...@@ -91,7 +91,7 @@ public interface TInsuranceDetailService extends IService<TInsuranceDetail> {
* @param paramList * @param paramList
* @return {@link R<List<InsuranceBatchParam>>} * @return {@link R<List<InsuranceBatchParam>>}
*/ */
R<List<InsuranceBatchParam>> batchInsurance(List<InsuranceBatchParam> paramList,String orderNo); R<List<InsuranceBatchParam>> batchInsurance(List<InsuranceBatchParam> paramList,String orderNo,boolean autoFlag);
/** /**
* 商险替换 * 商险替换
* *
...@@ -99,7 +99,7 @@ public interface TInsuranceDetailService extends IService<TInsuranceDetail> { ...@@ -99,7 +99,7 @@ public interface TInsuranceDetailService extends IService<TInsuranceDetail> {
* @param paramList * @param paramList
* @return {@link R<List<InsuranceReplaceParam>>} * @return {@link R<List<InsuranceReplaceParam>>}
*/ */
R<List<InsuranceReplaceParam>> replaceInsurance(List<InsuranceReplaceParam> paramList,String orderNo); R<List<InsuranceReplaceParam>> replaceInsurance(List<InsuranceReplaceParam> paramList,String orderNo,boolean autoFlag);
/** /**
* 通过id删除 * 通过id删除
......
...@@ -2,13 +2,13 @@ package com.yifu.cloud.plus.v1.yifu.insurances.service.insurance; ...@@ -2,13 +2,13 @@ package com.yifu.cloud.plus.v1.yifu.insurances.service.insurance;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yifu.cloud.plus.v1.yifu.common.core.util.ErrorMessage;
import com.yifu.cloud.plus.v1.yifu.common.core.util.R; import com.yifu.cloud.plus.v1.yifu.common.core.util.R;
import com.yifu.cloud.plus.v1.yifu.insurances.entity.TInsurancePolicy; import com.yifu.cloud.plus.v1.yifu.insurances.entity.TInsurancePolicy;
import com.baomidou.mybatisplus.extension.service.IService; import com.yifu.cloud.plus.v1.yifu.insurances.vo.*;
import com.yifu.cloud.plus.v1.yifu.insurances.vo.InsurancePolicyListEditParam;
import com.yifu.cloud.plus.v1.yifu.insurances.vo.InsurancePolicyListParam;
import com.yifu.cloud.plus.v1.yifu.insurances.vo.TInsurancePolicyDetailVO;
import java.io.InputStream;
import java.util.List; import java.util.List;
/** /**
...@@ -72,4 +72,8 @@ public interface TInsurancePolicyService extends IService<TInsurancePolicy> { ...@@ -72,4 +72,8 @@ public interface TInsurancePolicyService extends IService<TInsurancePolicy> {
* @return {@link R} * @return {@link R}
*/ */
R deleteInsurancePolicy(String id); R deleteInsurancePolicy(String id);
R<List<ErrorMessage>> importInsurancePolicy(InputStream inputStream);
Page<PolicyListVo> policyPageToAutoSelect(Page<PolicyListVo> page, InsuredParam param, String mId);
} }
...@@ -269,19 +269,19 @@ public class TEmployeeInsurancePreServiceImpl extends ServiceImpl<TEmployeeInsur ...@@ -269,19 +269,19 @@ public class TEmployeeInsurancePreServiceImpl extends ServiceImpl<TEmployeeInsur
List<InsuranceBatchParam> batchParamList = new ArrayList<>(); List<InsuranceBatchParam> batchParamList = new ArrayList<>();
List<InsuranceReplaceParam> replaceParamList = new ArrayList<>(); List<InsuranceReplaceParam> replaceParamList = new ArrayList<>();
if (!addParamList.isEmpty()) { if (!addParamList.isEmpty()) {
R<List<InsuranceAddParam>> listR = detailService.addInsurance(addParamList,null); R<List<InsuranceAddParam>> listR = detailService.addInsurance(addParamList,null,true);
if (Common.isNotNull(listR) && Common.isNotNull(listR.getData()) && !listR.getData().isEmpty()) { if (Common.isNotNull(listR) && Common.isNotNull(listR.getData()) && !listR.getData().isEmpty()) {
paramList = listR.getData(); paramList = listR.getData();
} }
} }
if (!batchAddParamList.isEmpty()) { if (!batchAddParamList.isEmpty()) {
R<List<InsuranceBatchParam>> listR = detailService.batchInsurance(batchAddParamList,null); R<List<InsuranceBatchParam>> listR = detailService.batchInsurance(batchAddParamList,null,true);
if (Common.isNotNull(listR) && Common.isNotNull(listR.getData()) && !listR.getData().isEmpty()) { if (Common.isNotNull(listR) && Common.isNotNull(listR.getData()) && !listR.getData().isEmpty()) {
batchParamList = listR.getData(); batchParamList = listR.getData();
} }
} }
if (!replaceAddParamList.isEmpty()) { if (!replaceAddParamList.isEmpty()) {
R<List<InsuranceReplaceParam>> listR = detailService.replaceInsurance(replaceAddParamList,null); R<List<InsuranceReplaceParam>> listR = detailService.replaceInsurance(replaceAddParamList,null,true);
if (Common.isNotNull(listR) && Common.isNotNull(listR.getData()) && !listR.getData().isEmpty()) { if (Common.isNotNull(listR) && Common.isNotNull(listR.getData()) && !listR.getData().isEmpty()) {
replaceParamList = listR.getData(); replaceParamList = listR.getData();
} }
......
...@@ -505,8 +505,7 @@ ...@@ -505,8 +505,7 @@
a.SETTLE_TYPE as settleType, a.SETTLE_TYPE as settleType,
a.CREATE_NAME as createName, a.CREATE_NAME as createName,
a.POLICY_NO as policyNo, a.POLICY_NO as policyNo,
a.REMARK as remark, a.REMARK as remark,a.UNIT_NAME as unitName
a.IS_ADRESS as isAdress,a.UNIT_NAME as unitName
from t_insurance_detail a from t_insurance_detail a
where a.DELETE_FLAG = 0 and a.id in where a.DELETE_FLAG = 0 and a.id in
<foreach collection="idList" index="index" item="item" open="(" separator="," close=")"> <foreach collection="idList" index="index" item="item" open="(" separator="," close=")">
...@@ -538,8 +537,7 @@ ...@@ -538,8 +537,7 @@
a.SETTLE_TYPE as settleType, a.SETTLE_TYPE as settleType,
a.CREATE_NAME as createName, a.CREATE_NAME as createName,
a.POLICY_NO as policyNo, a.POLICY_NO as policyNo,
a.REMARK as remark, a.REMARK as remark,a.UNIT_NAME as unitName
a.IS_ADRESS as isAdress,a.UNIT_NAME as unitName
from t_insurance_detail a from t_insurance_detail a
where a.DELETE_FLAG = 0 and a.BUY_HANDLE_STATUS = #{param.buyHandleStatus} where a.DELETE_FLAG = 0 and a.BUY_HANDLE_STATUS = #{param.buyHandleStatus}
<if test="param.empName != null and param.empName.trim() != ''"> <if test="param.empName != null and param.empName.trim() != ''">
...@@ -1243,8 +1241,7 @@ ...@@ -1243,8 +1241,7 @@
a.POLICY_NO as policyNo, a.POLICY_NO as policyNo,
refund.CREATE_NAME as createName, refund.CREATE_NAME as createName,
a.REDUCE_HANDLE_STATUS as reduceHandleStatus, a.REDUCE_HANDLE_STATUS as reduceHandleStatus,
refund.REMARK as remark, refund.REMARK as remark,a.UNIT_NAME as unitName
a.IS_ADRESS as isAdress,a.UNIT_NAME as unitName
from from
t_insurance_detail a, t_insurance_detail a,
t_insurance_refund refund t_insurance_refund refund
...@@ -1281,8 +1278,7 @@ ...@@ -1281,8 +1278,7 @@
a.SETTLE_TYPE as settleType, a.SETTLE_TYPE as settleType,
refund.CREATE_NAME as createName, refund.CREATE_NAME as createName,
a.POLICY_NO as policyNo, a.POLICY_NO as policyNo,
refund.REMARK as remark, refund.REMARK as remark,a.UNIT_NAME as unitName
a.IS_ADRESS as isAdress,a.UNIT_NAME as unitName
from from
t_insurance_detail a, t_insurance_detail a,
t_insurance_refund refund t_insurance_refund refund
......
...@@ -90,4 +90,49 @@ ...@@ -90,4 +90,49 @@
</if> </if>
ORDER BY CREATE_TIME DESC ORDER BY CREATE_TIME DESC
</select> </select>
<!--商险自动化-针对批增的查询保单号的分页接口-->
<select id="policyPageToAutoSelect" resultType="com.yifu.cloud.plus.v1.yifu.insurances.vo.PolicyListVo">
select
a.id as id,
a.POLICY_NO as policyNo,
a.POLICY_START as policyStart,
a.POLICY_END as policyEnd,
a.INSURANCE_COMPANY_NAME as insuranceCompanyName,
a.INSURANCE_TYPE_NAME as insuranceTypeName,
c.id as insuranceTypeId,
d.BUY_STANDARD as buyStandard
from t_insurance_policy a
LEFT JOIN t_insurance_company b on a.INSURANCE_COMPANY_NAME=b.COMPANY_NAME
LEFT JOIN t_insurance_type c on a.INSURANCE_TYPE_NAME = c.`NAME`
LEFT JOIN t_insurance_type_standard d on c.ID = d.INSURANCE_TYPE_ID
where
a.DELETE_FLAG = 0 and a.ENABLE_FLAG = 0
and a.POLICY_NO is not null
and a.POLICY_NO != ""
and d.DELETE_FLAG='0' and d.`ENABLE`='0'
and c.DELETE_FLAG='0' and c.`ENABLE`='0'
and b.DELETE_FLAG='0'
<if test="param.policyNo != null and param.policyNo.trim() != ''">
and a.POLICY_NO like concat('%',replace(replace(#{param.policyNo},'_','\_'),'%','\%'),'%')
</if>
<if test="param.insuranceCompanyName != null and param.insuranceCompanyName.trim() != ''">
and a.INSURANCE_COMPANY_NAME like concat('%',replace(replace(#{param.insuranceCompanyName},'_','\_'),'%','\%'),'%')
</if>
<if test="param.insuranceTypeName != null and param.insuranceTypeName.trim() != ''">
and a.INSURANCE_TYPE_NAME like concat('%',replace(replace(#{param.insuranceTypeName},'_','\_'),'%','\%'),'%')
</if>
<if test="param.buyStandardMin != null and param.buyStandardMin.trim() != ''">
AND d.BUY_STANDARD+0 <![CDATA[ >= ]]> #{param.buyStandardMin}+0
</if>
<if test="param.buyStandardMax != null and param.buyStandardMax.trim() != ''">
AND d.BUY_STANDARD+0 <![CDATA[ <= ]]> #{param.buyStandardMax}+0
</if>
<if test="param.policyEnd != null and param.policyEnd.trim() != ''">
AND DATE(a.POLICY_END) <![CDATA[ >= ]]> #{param.policyEnd}
</if>
group by a.POLICY_NO,d.BUY_STANDARD
ORDER BY a.CREATE_TIME DESC ,a.ID ASC
</select>
</mapper> </mapper>
...@@ -93,4 +93,16 @@ public class EkpTask { ...@@ -93,4 +93,16 @@ public class EkpTask {
HttpDaprUtil.invokeMethodPost(daprEkpProperties.getAppUrl(),daprEkpProperties.getAppId(),"/ekpalerttable/inner/pushBudgetAlertInfoTomanagerMonth","", Object.class, SecurityConstants.FROM_IN); HttpDaprUtil.invokeMethodPost(daprEkpProperties.getAppUrl(),daprEkpProperties.getAppId(),"/ekpalerttable/inner/pushBudgetAlertInfoTomanagerMonth","", Object.class, SecurityConstants.FROM_IN);
log.info("------------定时生成每月预算预警信息-定时任务结束------------"); log.info("------------定时生成每月预算预警信息-定时任务结束------------");
} }
/**
* @Author hgw
* @Description 每天获取招行卡流水
* @Date 2025-9-9 17:22:21
**/
public void doGetZhaoHangInfo() {
log.info("------------每天获取招行卡流水-定时任务开始------------");
HttpDaprUtil.invokeMethodPost(daprEkpProperties.getAppUrl(),daprEkpProperties.getAppId()
,"/zhaoHang/inner/doGetZhaoHangInfo","", Object.class, SecurityConstants.FROM_IN);
log.info("------------每天获取招行卡流水-定时任务结束------------");
}
} }
\ No newline at end of file
...@@ -334,6 +334,7 @@ public class TSalaryEmployeeServiceImpl extends ServiceImpl<TSalaryEmployeeMappe ...@@ -334,6 +334,7 @@ public class TSalaryEmployeeServiceImpl extends ServiceImpl<TSalaryEmployeeMappe
checkBankNo = new TCheckBankNo(); checkBankNo = new TCheckBankNo();
checkBankNo.setName(employee.getEmpName()); checkBankNo.setName(employee.getEmpName());
checkBankNo.setBankNo(employee.getBankNo()); checkBankNo.setBankNo(employee.getBankNo());
checkBankNo.setIdNum(employee.getEmpIdcard());
bankList.add(checkBankNo); bankList.add(checkBankNo);
} }
// 将重复的手机号组装到map里,下面去拦截 // 将重复的手机号组装到map里,下面去拦截
...@@ -469,6 +470,7 @@ public class TSalaryEmployeeServiceImpl extends ServiceImpl<TSalaryEmployeeMappe ...@@ -469,6 +470,7 @@ public class TSalaryEmployeeServiceImpl extends ServiceImpl<TSalaryEmployeeMappe
checkBankNo = new TCheckBankNo(); checkBankNo = new TCheckBankNo();
checkBankNo.setName(employee.getEmpName()); checkBankNo.setName(employee.getEmpName());
checkBankNo.setBankNo(employee.getBankNo()); checkBankNo.setBankNo(employee.getBankNo());
checkBankNo.setIdNum(employee.getEmpIdcard());
bankList.add(checkBankNo); bankList.add(checkBankNo);
} }
// 将重复的手机号组装到map里,下面去拦截 // 将重复的手机号组装到map里,下面去拦截
...@@ -717,9 +719,10 @@ public class TSalaryEmployeeServiceImpl extends ServiceImpl<TSalaryEmployeeMappe ...@@ -717,9 +719,10 @@ public class TSalaryEmployeeServiceImpl extends ServiceImpl<TSalaryEmployeeMappe
TCheckBankNo checkBankNo = new TCheckBankNo(); TCheckBankNo checkBankNo = new TCheckBankNo();
checkBankNo.setName(employee.getEmpName()); checkBankNo.setName(employee.getEmpName());
checkBankNo.setBankNo(employee.getBankNo()); checkBankNo.setBankNo(employee.getBankNo());
checkBankNo.setIdNum(employee.getEmpIdcard());
R<CheckBankNoVo> checkListR = HttpDaprUtil.invokeMethodPost(checkProperties.getAppUrl(), checkProperties.getAppId() R<CheckBankNoVo> checkListR = HttpDaprUtil.invokeMethodPost(checkProperties.getAppUrl(), checkProperties.getAppId()
, "/tcheckbankno/inner/checkBankNo", checkBankNo, CheckBankNoVo.class, SecurityConstants.FROM_IN); , "/tcheckbankno/inner/checkBankNo", checkBankNo, CheckBankNoVo.class, SecurityConstants.FROM_IN);
String pre = "姓名卡号验证:"; String pre = "姓名+身份证+卡号验证:";
if (checkListR != null && checkListR.getData() != null) { if (checkListR != null && checkListR.getData() != null) {
CheckBankNoVo vo = checkListR.getData(); CheckBankNoVo vo = checkListR.getData();
TCheckBankNo check = (null == vo.getRes()) ? null : vo.getRes().getData(); TCheckBankNo check = (null == vo.getRes()) ? null : vo.getRes().getData();
...@@ -873,6 +876,7 @@ public class TSalaryEmployeeServiceImpl extends ServiceImpl<TSalaryEmployeeMappe ...@@ -873,6 +876,7 @@ public class TSalaryEmployeeServiceImpl extends ServiceImpl<TSalaryEmployeeMappe
checkBankNo = new TCheckBankNo(); checkBankNo = new TCheckBankNo();
checkBankNo.setName(vo.getEmpName()); checkBankNo.setName(vo.getEmpName());
checkBankNo.setBankNo(vo.getBankNo()); checkBankNo.setBankNo(vo.getBankNo());
checkBankNo.setIdNum(vo.getEmpIdcard());
bankList.add(checkBankNo); bankList.add(checkBankNo);
} }
} }
...@@ -1067,6 +1071,7 @@ public class TSalaryEmployeeServiceImpl extends ServiceImpl<TSalaryEmployeeMappe ...@@ -1067,6 +1071,7 @@ public class TSalaryEmployeeServiceImpl extends ServiceImpl<TSalaryEmployeeMappe
TCheckBankNo checkIdCard = new TCheckBankNo(); TCheckBankNo checkIdCard = new TCheckBankNo();
checkIdCard.setName(employee.getEmpName()); checkIdCard.setName(employee.getEmpName());
checkIdCard.setBankNo(employee.getBankNo()); checkIdCard.setBankNo(employee.getBankNo());
checkIdCard.setIdNum(employee.getEmpIdcard());
R<CheckBankNoVo> checkListR = HttpDaprUtil.invokeMethodPost(checkProperties.getAppUrl(), checkProperties.getAppId() R<CheckBankNoVo> checkListR = HttpDaprUtil.invokeMethodPost(checkProperties.getAppUrl(), checkProperties.getAppId()
, "/tcheckbankno/inner/checkBankNo", checkIdCard, CheckBankNoVo.class, SecurityConstants.FROM_IN); , "/tcheckbankno/inner/checkBankNo", checkIdCard, CheckBankNoVo.class, SecurityConstants.FROM_IN);
if (checkListR != null && checkListR.getData() != null) { if (checkListR != null && checkListR.getData() != null) {
...@@ -1096,6 +1101,7 @@ public class TSalaryEmployeeServiceImpl extends ServiceImpl<TSalaryEmployeeMappe ...@@ -1096,6 +1101,7 @@ public class TSalaryEmployeeServiceImpl extends ServiceImpl<TSalaryEmployeeMappe
checkBankNo = new TCheckBankNo(); checkBankNo = new TCheckBankNo();
checkBankNo.setName(employee.getEmpName()); checkBankNo.setName(employee.getEmpName());
checkBankNo.setBankNo(employee.getBankNo()); checkBankNo.setBankNo(employee.getBankNo());
checkBankNo.setIdNum(employee.getEmpIdcard());
bankList.add(checkBankNo); bankList.add(checkBankNo);
} }
} }
...@@ -1172,6 +1178,7 @@ public class TSalaryEmployeeServiceImpl extends ServiceImpl<TSalaryEmployeeMappe ...@@ -1172,6 +1178,7 @@ public class TSalaryEmployeeServiceImpl extends ServiceImpl<TSalaryEmployeeMappe
checkBankNo = new TCheckBankNo(); checkBankNo = new TCheckBankNo();
checkBankNo.setName(emp.getEmpName()); checkBankNo.setName(emp.getEmpName());
checkBankNo.setBankNo(emp.getBankNo()); checkBankNo.setBankNo(emp.getBankNo());
checkBankNo.setIdNum(emp.getEmpIdcard());
bankList.add(checkBankNo); bankList.add(checkBankNo);
} }
} }
...@@ -1558,9 +1565,10 @@ public class TSalaryEmployeeServiceImpl extends ServiceImpl<TSalaryEmployeeMappe ...@@ -1558,9 +1565,10 @@ public class TSalaryEmployeeServiceImpl extends ServiceImpl<TSalaryEmployeeMappe
TCheckBankNo checkBankNo = new TCheckBankNo(); TCheckBankNo checkBankNo = new TCheckBankNo();
checkBankNo.setName(tSalaryEmployee.getEmpName()); checkBankNo.setName(tSalaryEmployee.getEmpName());
checkBankNo.setBankNo(tSalaryEmployee.getBankNo()); checkBankNo.setBankNo(tSalaryEmployee.getBankNo());
checkBankNo.setIdNum(tSalaryEmployee.getEmpIdcard());
R<CheckBankNoVo> checkListR = HttpDaprUtil.invokeMethodPost(checkProperties.getAppUrl(), checkProperties.getAppId() R<CheckBankNoVo> checkListR = HttpDaprUtil.invokeMethodPost(checkProperties.getAppUrl(), checkProperties.getAppId()
, "/tcheckbankno/inner/checkBankNo", checkBankNo, CheckBankNoVo.class, SecurityConstants.FROM_IN); , "/tcheckbankno/inner/checkBankNo", checkBankNo, CheckBankNoVo.class, SecurityConstants.FROM_IN);
String pre = "姓名卡号验证:"; String pre = "姓名+身份证+卡号验证:";
if (checkListR != null && checkListR.getData() != null) { if (checkListR != null && checkListR.getData() != null) {
CheckBankNoVo vo = checkListR.getData(); CheckBankNoVo vo = checkListR.getData();
TCheckBankNo check = (null == vo.getRes()) ? null : vo.getRes().getData(); TCheckBankNo check = (null == vo.getRes()) ? null : vo.getRes().getData();
......
...@@ -2,6 +2,7 @@ package com.yifu.cloud.plus.v1.yifu.social.entity; ...@@ -2,6 +2,7 @@ package com.yifu.cloud.plus.v1.yifu.social.entity;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.yifu.cloud.plus.v1.yifu.common.mybatis.base.BaseEntity; import com.yifu.cloud.plus.v1.yifu.common.mybatis.base.BaseEntity;
...@@ -105,5 +106,8 @@ public class FailReasonConfig extends BaseEntity { ...@@ -105,5 +106,8 @@ public class FailReasonConfig extends BaseEntity {
@Schema(description = "截取标识右") @Schema(description = "截取标识右")
private String replaceRight; private String replaceRight;
// 户ID
@TableField(exist = false)
private String huId;
} }
\ No newline at end of file
...@@ -28,6 +28,8 @@ import io.swagger.v3.oas.annotations.media.Schema; ...@@ -28,6 +28,8 @@ import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import java.util.List;
/** /**
* 社保户公积金户数据 * 社保户公积金户数据
* *
...@@ -168,7 +170,7 @@ public class SysHouseHoldInfo extends BaseEntity { ...@@ -168,7 +170,7 @@ public class SysHouseHoldInfo extends BaseEntity {
private String handleUserName; private String handleUserName;
/** /**
* 类型 0 独立户 1 自 * 类型 0 独立户 1 自
*/ */
@ExcelAttribute(name = "类型" ) @ExcelAttribute(name = "类型" )
@Schema(description ="类型") @Schema(description ="类型")
...@@ -179,7 +181,7 @@ public class SysHouseHoldInfo extends BaseEntity { ...@@ -179,7 +181,7 @@ public class SysHouseHoldInfo extends BaseEntity {
/** /**
* 单位编号 * 单位编号
*/ */
@ExcelAttribute(name = "单位编号" ) @ExcelAttribute(name = "单位编号" , maxLength = 50)
@Schema(description ="单位编号") @Schema(description ="单位编号")
@HeadFontStyle(fontHeightInPoints = 11) @HeadFontStyle(fontHeightInPoints = 11)
@ExcelProperty("单位编号") @ExcelProperty("单位编号")
...@@ -215,7 +217,7 @@ public class SysHouseHoldInfo extends BaseEntity { ...@@ -215,7 +217,7 @@ public class SysHouseHoldInfo extends BaseEntity {
/** /**
* 社保-登录账户 * 社保-登录账户
*/ */
@ExcelAttribute(name = "社保-登录账户" ) @ExcelAttribute(name = "社保-登录账户" , maxLength = 50)
@Schema(description ="社保-登录账户") @Schema(description ="社保-登录账户")
@HeadFontStyle(fontHeightInPoints = 11) @HeadFontStyle(fontHeightInPoints = 11)
@ExcelProperty("社保-登录账户") @ExcelProperty("社保-登录账户")
...@@ -233,7 +235,7 @@ public class SysHouseHoldInfo extends BaseEntity { ...@@ -233,7 +235,7 @@ public class SysHouseHoldInfo extends BaseEntity {
/** /**
* 医保-登录账户 * 医保-登录账户
*/ */
@ExcelAttribute(name = "医保-登录账户" ) @ExcelAttribute(name = "医保-登录账户" , maxLength = 50)
@Schema(description ="医保-登录账户") @Schema(description ="医保-登录账户")
@HeadFontStyle(fontHeightInPoints = 11) @HeadFontStyle(fontHeightInPoints = 11)
@ExcelProperty("医保-登录账户") @ExcelProperty("医保-登录账户")
...@@ -264,29 +266,44 @@ public class SysHouseHoldInfo extends BaseEntity { ...@@ -264,29 +266,44 @@ public class SysHouseHoldInfo extends BaseEntity {
private String areaCode; private String areaCode;
/** /**
* 自动化配置状态 0 启用 1 禁用 * 社保自动化(自动化配置状态) 0 启用 1 禁用 -MVP1.7.15调整为是否社保自动化
*/ */
@Schema(description ="自动化配置状态") @Schema(description ="社保自动化")
private String autoStatus; private String autoStatus;
/**
* 医保自动化(自动化配置状态) 0 启用 1 禁用 -MVP1.7.15新增医保自动化
*/
@Schema(description ="医保自动化")
private String autoStatusYsd;
/** /**
* 医保单位编号 * 医保单位编号
*/ */
@ExcelAttribute(name = "医保-单位编号" ) @ExcelAttribute(name = "医保-单位编号" , maxLength = 50)
@Schema(description ="医保-单位编号") @Schema(description ="医保-单位编号")
@HeadFontStyle(fontHeightInPoints = 11) @HeadFontStyle(fontHeightInPoints = 11)
@ExcelProperty("医保-单位编号") @ExcelProperty("医保-单位编号")
private String customerNoYsd; private String customerNoYsd;
/** /**
* 是否单个接口 0否1是(税友接口走单个还是批量,审核是否立即推送税友) * 社保推送类型(是否单个接口) 0否1是(税友接口走单个还是批量,审核是否立即推送税友) MVP1.7.15 调整为社保推送类型 0批量 1单个
*/ */
@ExcelAttribute(name = "是否单个接口" ) @ExcelAttribute(name = "社保推送类型" )
@Schema(description ="是否单个接口") @Schema(description ="社保推送类型")
@HeadFontStyle(fontHeightInPoints = 11) @HeadFontStyle(fontHeightInPoints = 11)
@ExcelProperty("是否单个接口") @ExcelProperty("社保推送类型")
private String isSingle; private String isSingle;
/**
* 医保推送类型 0否1是 MVP1.7.15 新增医保推送类型 0批量 1单个
*/
@ExcelAttribute(name = "医保推送类型" )
@Schema(description ="医保推送类型")
@HeadFontStyle(fontHeightInPoints = 11)
@ExcelProperty("医保推送类型")
private String isSingleYsd;
/** /**
* 是否自动生成解除劳动合同书 0否1是(是的话,走单个推送,因为税友的减员接口没有批量附件的字段) * 是否自动生成解除劳动合同书 0否1是(是的话,走单个推送,因为税友的减员接口没有批量附件的字段)
*/ */
...@@ -320,4 +337,89 @@ public class SysHouseHoldInfo extends BaseEntity { ...@@ -320,4 +337,89 @@ public class SysHouseHoldInfo extends BaseEntity {
@TableField(exist = false) @TableField(exist = false)
private TAttaInfo atta; private TAttaInfo atta;
/**
* 社保是否自动生成花名册 0否1是
*/
@ExcelAttribute(name = "社保是否自动生成花名册" )
@Schema(description ="社保是否自动生成花名册 0否1是")
@HeadFontStyle(fontHeightInPoints = 11)
@ExcelProperty("社保是否自动生成花名册")
private String rosterAutoFlagYgs;
/**
* 医保是否自动生成花名册 0否1是
*/
@ExcelAttribute(name = "医保是否自动生成花名册" )
@Schema(description ="医保是否自动生成花名册 0否1是")
@HeadFontStyle(fontHeightInPoints = 11)
@ExcelProperty("医保是否自动生成花名册")
private String rosterAutoFlagYsd;
/**
* 社保仅补缴生成材料 0否1是
*/
@ExcelAttribute(name = "社保仅补缴生成材料" )
@Schema(description ="社保仅补缴生成材料 0否1是")
@HeadFontStyle(fontHeightInPoints = 11)
@ExcelProperty("社保仅补缴生成材料")
private String dataFlagYgs;
/**
* 医保仅补缴生成材料 0否1是
*/
@ExcelAttribute(name = "医保仅补缴生成材料" )
@Schema(description ="医保仅补缴生成材料 0否1是")
@HeadFontStyle(fontHeightInPoints = 11)
@ExcelProperty("医保仅补缴生成材料")
private String dataFlagYsd;
/**
* 社保增员花名册模板
*/
@ExcelAttribute(name = "社保增员花名册模板" )
@Schema(description ="社保增员花名册模板")
@HeadFontStyle(fontHeightInPoints = 11)
@ExcelProperty("社保增员花名册模板")
private String addRosterTempYgs;
/**
* 社保减员花名册模板
*/
@ExcelAttribute(name = "社保减员花名册模板" )
@Schema(description ="社保减员花名册模板")
@HeadFontStyle(fontHeightInPoints = 11)
@ExcelProperty("社保减员花名册模板")
private String reduceRosterTempYgs;
/**
* 医保增员花名册模板
*/
@ExcelAttribute(name = "医保增员花名册模板" )
@Schema(description ="医保增员花名册模板")
@HeadFontStyle(fontHeightInPoints = 11)
@ExcelProperty("医保增员花名册模板")
private String addRosterTempYsd;
/**
* 医保减员花名册模板
*/
@ExcelAttribute(name = "医保减员花名册模板" )
@Schema(description ="医保减员花名册模板")
@HeadFontStyle(fontHeightInPoints = 11)
@ExcelProperty("医保减员花名册模板")
private String reduceRosterTempYsd;
/**
* 户与失败原因关联list
*/
@TableField(exist = false)
private List<SysHouseHoldInfoFailRes> resList;
/**
* 模板附件
*/
@TableField(exist = false)
private List<TAttaInfo> tempAttas;
} }
/*
* Copyright (c) 2018-2025, lengleng All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* Neither the name of the yifu4cloud.com developer nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
* Author: lengleng (wangiegie@gmail.com)
*/
package com.yifu.cloud.plus.v1.yifu.social.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* 户与失败原因配置多对多关系表
* @author hgw
* @date 2025-9-5 16:33:22
*/
@Data
@TableName("sys_house_hold_info_fail_res")
@Schema(description = "户与失败原因配置多对多关系表")
public class SysHouseHoldInfoFailRes {
// 户ID
private String id;
// 失败原因ID
private String failId;
// 重新办理动作 1 继续办理 2 中止办理 3 人工办理
private String replay;
// 查询 关键字
@TableField(exist = false)
private String reasonKey;
}
...@@ -57,11 +57,11 @@ public class TAttaInfo extends BaseEntity { ...@@ -57,11 +57,11 @@ public class TAttaInfo extends BaseEntity {
@Schema(description = "资源类型") @Schema(description = "资源类型")
private String attaType; private String attaType;
/** /**
* 1户配置的章;2:派单审核附件,税友单个使用,社保3医保附件 * 1户配置的章;2:派单审核附件,税友单个使用,社保3医保附件;11社保增花名册模板;12社保减花名册模板;13医保增花名册模板;14医保减花名册模板
*/ */
@NotBlank(message = "关系类型不能为空") @NotBlank(message = "关系类型不能为空")
@Length(max = 2, message = "关系类型不能超过2个字符") @Length(max = 2, message = "关系类型不能超过2个字符")
@Schema(description = "关系类型(1户配置的章;2:派单审核附件,税友单个使用,社保;3医保附件)") @Schema(description = "关系类型(1户配置的章;2:派单审核附件,税友单个使用,社保;3医保附件;11社保增花名册模板;12社保减花名册模板;13医保增花名册模板;14医保减花名册模板)")
private String relationType; private String relationType;
/** /**
* 实体id和关系类型共同确定附件所属(9、10、21、22、23、24、25存项目档案id,0、2、26存附属表id) * 实体id和关系类型共同确定附件所属(9、10、21、22、23、24、25存项目档案id,0、2、26存附属表id)
......
...@@ -846,4 +846,55 @@ public class TDispatchInfo extends BaseEntity { ...@@ -846,4 +846,55 @@ public class TDispatchInfo extends BaseEntity {
@ExcelProperty("是否自动生成解除劳动合同书 0否1是") @ExcelProperty("是否自动生成解除劳动合同书 0否1是")
private String isAutoLeaveDoc; private String isAutoLeaveDoc;
/**
* 医保自动化(自动化配置状态) 0 启用 1 禁用 -MVP1.7.15新增医保自动化
*/
@Schema(description ="医保自动化")
private String autoFlagYsd;
/**
* 医保推送类型 0否1是 MVP1.7.15 新增医保推送类型 0批量 1单个
*/
@ExcelAttribute(name = "医保推送类型" )
@Schema(description ="医保推送类型")
@HeadFontStyle(fontHeightInPoints = 11)
@ExcelProperty("医保推送类型")
private String isSingleYsd;
/**
* 社保是否自动生成花名册 0否1是
*/
@ExcelAttribute(name = "社保是否自动生成花名册" )
@Schema(description ="社保是否自动生成花名册 0否1是")
@HeadFontStyle(fontHeightInPoints = 11)
@ExcelProperty("社保是否自动生成花名册")
private String rosterAutoFlagYgs;
/**
* 医保是否自动生成花名册 0否1是
*/
@ExcelAttribute(name = "医保是否自动生成花名册" )
@Schema(description ="医保是否自动生成花名册 0否1是")
@HeadFontStyle(fontHeightInPoints = 11)
@ExcelProperty("医保是否自动生成花名册")
private String rosterAutoFlagYsd;
/**
* 社保仅补缴生成材料 0否1是
*/
@ExcelAttribute(name = "社保仅补缴生成材料" )
@Schema(description ="社保仅补缴生成材料 0否1是")
@HeadFontStyle(fontHeightInPoints = 11)
@ExcelProperty("社保仅补缴生成材料")
private String dataFlagYgs;
/**
* 医保仅补缴生成材料 0否1是
*/
@ExcelAttribute(name = "医保仅补缴生成材料" )
@Schema(description ="医保仅补缴生成材料 0否1是")
@HeadFontStyle(fontHeightInPoints = 11)
@ExcelProperty("医保仅补缴生成材料")
private String dataFlagYsd;
} }
...@@ -66,6 +66,7 @@ public class TSocialFriendBackLog { ...@@ -66,6 +66,7 @@ public class TSocialFriendBackLog {
/** /**
* @Description: 类型1社保增 2社保减 3医保增 4医保减 5推送的日志 6社保图片路径7医保图片路径 * @Description: 类型1社保增 2社保减 3医保增 4医保减 5推送的日志 6社保图片路径7医保图片路径
* 8社保解除劳动合同9医保解除劳动合同11社保增拉取 12社保减拉取 13医保增拉取 14医保减拉取16社保单个图片17医保单个图片 18 反馈附件下载 * 8社保解除劳动合同9医保解除劳动合同11社保增拉取 12社保减拉取 13医保增拉取 14医保减拉取16社保单个图片17医保单个图片 18 反馈附件下载
* 19:花名册附件src 20:税友异常情况记录
* @Author: hgw * @Author: hgw
* @Date: 2025/5/27 10:15 * @Date: 2025/5/27 10:15
**/ **/
......
...@@ -14,6 +14,14 @@ import java.io.Serializable; ...@@ -14,6 +14,14 @@ import java.io.Serializable;
public class AutoFlagVo implements Serializable { public class AutoFlagVo implements Serializable {
// 派单ID // 派单ID
private String dispatchId; private String dispatchId;
// 自动化标识 0 // 社保自动化标识 0
private String autoFlag; private String autoFlagYgs;
// 医保自动化标识 0
private String autoFlagYsd;
private String isSingleYgs;
private String isSingleYsd;
private String rosterAutoFlagYgs;
private String rosterAutoFlagYsd;
private String dataFlagYgs;
private String dataFlagYsd;
} }
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment