修复:1>导入问题;2>算税
This commit is contained in:
@ -0,0 +1,24 @@
|
||||
package org.dromara.map.api;
|
||||
|
||||
import org.dromara.map.api.model.LoginMpUser;
|
||||
|
||||
/**
|
||||
* @author sunzexing
|
||||
* @version 1.0
|
||||
* @title RemoteUserWokerService
|
||||
* @description
|
||||
* @create 2024-03-29 10:55
|
||||
*/
|
||||
public interface RemoteSignJZQService {
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* @Param
|
||||
* @Return
|
||||
* @Author sunzexing
|
||||
* @Date 2024-04-01 11:33
|
||||
* 说明:根据手机号、租户ID,查询自雇者
|
||||
**/
|
||||
String signProJzq(Long id,String domain,String signType)throws Exception;
|
||||
}
|
||||
@ -1,5 +1,6 @@
|
||||
package org.dromara.mp.controller;
|
||||
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.log.annotation.Log;
|
||||
import org.dromara.common.log.enums.BusinessType;
|
||||
@ -7,16 +8,14 @@ import org.dromara.common.log.enums.OperatorType;
|
||||
import org.dromara.common.mybatis.core.page.PageQuery;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.web.core.BaseController;
|
||||
import org.dromara.map.api.RemoteSignJZQService;
|
||||
import org.dromara.mp.domain.MerTaskEnroll;
|
||||
import org.dromara.mp.domain.vo.MerTaskEnrollVo;
|
||||
import org.dromara.mp.domain.vo.MyTaskVo;
|
||||
import org.dromara.mp.domain.vo.TaskVo;
|
||||
import org.dromara.mp.domain.vo.UserWorkerBus;
|
||||
import org.dromara.mp.service.IMyTaskService;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
@ -33,7 +32,8 @@ import java.util.List;
|
||||
public class MyTaskController extends BaseController {
|
||||
|
||||
@Resource
|
||||
public IMyTaskService taskService;
|
||||
private IMyTaskService taskService;
|
||||
private RemoteSignJZQService remoteSignJZQService;
|
||||
|
||||
|
||||
/***
|
||||
@ -177,6 +177,7 @@ public class MyTaskController extends BaseController {
|
||||
// @GetMapping("/getSignUrl")
|
||||
@Log(title = "获取签约信息", businessType = BusinessType.SELECT,operatorType= OperatorType.MOBILE)
|
||||
public R<String> getSignUrl(Long id,String domain)throws Exception{
|
||||
// return R.ok("",this.taskService.signPro(id,domain));
|
||||
return R.ok("",this.taskService.signPro(id,domain));
|
||||
}
|
||||
|
||||
@ -205,8 +206,8 @@ public class MyTaskController extends BaseController {
|
||||
// @GetMapping("/getJzqSignUrl")
|
||||
@GetMapping("/getSignUrl")
|
||||
@Log(title = "获取签约信息", businessType = BusinessType.SELECT,operatorType= OperatorType.MOBILE)
|
||||
public R<String> getJzqSignUrl(Long id,String domain)throws Exception{
|
||||
return R.ok("",this.taskService.signProJzq(id,domain));
|
||||
public R<String> getJzqSignUrl(Long id, String domain, @RequestParam(defaultValue = "1") String signType)throws Exception{
|
||||
return R.ok("",this.remoteSignJZQService.signProJzq(id,domain,signType));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,223 @@
|
||||
package org.dromara.mp.dubbo;
|
||||
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.dubbo.config.annotation.DubboReference;
|
||||
import org.apache.dubbo.config.annotation.DubboService;
|
||||
import org.dromara.common.core.enums.SignType;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.map.api.RemoteSignJZQService;
|
||||
import org.dromara.mp.domain.MerTaskSure;
|
||||
import org.dromara.mp.domain.UserWorkerBiz;
|
||||
import org.dromara.mp.mapper.MerTaskEnrollMapper;
|
||||
import org.dromara.mp.mapper.MyTaskMapper;
|
||||
import org.dromara.mp.mapper.UserWorkCheckinMapper;
|
||||
import org.dromara.mp.service.IUserWorkCheckinService;
|
||||
import org.dromara.resource.api.RemoteDhqService;
|
||||
import org.dromara.resource.api.RemoteJzqService;
|
||||
import org.dromara.resource.api.domain.RemoteDhq;
|
||||
import org.dromara.resource.api.domain.RemoteJzq;
|
||||
import org.dromara.resource.api.domain.SignatoryReq;
|
||||
import org.dromara.system.api.RemoteConfigService;
|
||||
import org.dromara.system.api.domain.RemoteSysUnitDomainVo;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.ObjectUtils;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.InputStream;
|
||||
import java.net.URL;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
@Service
|
||||
@DubboService
|
||||
public class RemoteSignJZQServiceImpl implements RemoteSignJZQService {
|
||||
@Resource
|
||||
public MyTaskMapper myTaskMapper;
|
||||
|
||||
@Resource
|
||||
public MerTaskEnrollMapper merTaskEnrollMapper;
|
||||
|
||||
@Resource
|
||||
public UserWorkCheckinMapper checkinMapper;
|
||||
|
||||
@Resource
|
||||
public IUserWorkCheckinService userWorkerCheckinService;
|
||||
|
||||
|
||||
@DubboReference
|
||||
public RemoteDhqService remoteDhqService;
|
||||
|
||||
@DubboReference
|
||||
public RemoteJzqService remoteJzqService;
|
||||
|
||||
|
||||
|
||||
@DubboReference
|
||||
private RemoteConfigService remoteConfigService;
|
||||
|
||||
/**
|
||||
*
|
||||
* @param id userWorkBussiness ID
|
||||
* @param domain 域名,微信公众号域名
|
||||
* @param signType 签约类型,1:自动签无感,0:有感
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
@Override
|
||||
public String signProJzq(Long id,String domain,String signType)throws Exception{
|
||||
|
||||
RemoteSysUnitDomainVo site = remoteConfigService.queryByDomainName(domain);
|
||||
|
||||
if(site == null || StringUtils.isEmpty(site.getSignConfig())){
|
||||
throw new Exception("未找到该域名的签约配置信息");
|
||||
}
|
||||
|
||||
JSONObject signConfig = JSONObject.parseObject(site.getSignConfig());
|
||||
JSONObject workerSignConfig = signConfig.getJSONObject("user_worker_pro");
|
||||
|
||||
|
||||
// log.info(id+"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
|
||||
|
||||
UserWorkerBiz uwb = this.myTaskMapper.selectHtInfoByUwbId(id);
|
||||
|
||||
if(uwb == null){
|
||||
throw new Exception("参数无效");
|
||||
}
|
||||
|
||||
if(StringUtils.isNotEmpty(uwb.getSignUrl())){
|
||||
return uwb.getSignUrl();
|
||||
}
|
||||
|
||||
if(!"1".equals(signType) &&( ObjectUtils.isEmpty(uwb.getIsCA()) || uwb.getIsCA()==0)){
|
||||
String name = uwb.getName();
|
||||
String identityCard = uwb.getCardId();
|
||||
String cardPositive = uwb.getCardPositive();
|
||||
String cardBack = uwb.getCardBack();
|
||||
// 保存文件的目录(使用临时目录)
|
||||
String saveDir = "/www/wwwroot";
|
||||
// 保存的文件名
|
||||
String fileName = "downloaded_image.jpeg";
|
||||
String fileName1 = "downloaded_image1.jpeg";
|
||||
File file = createFileFromURL(cardPositive, saveDir, fileName);
|
||||
File file1 = createFileFromURL(cardBack, saveDir, fileName1);
|
||||
|
||||
|
||||
String s = remoteJzqService.cloudCertiPerInfo(name, identityCard, file, file1);
|
||||
JSONObject parse = JSONObject.parseObject(s);
|
||||
if (parse.getString("success").equals("false")){
|
||||
throw new Exception(parse.getString("msg"));
|
||||
}
|
||||
|
||||
this.myTaskMapper.updateCAStatus(name);
|
||||
}
|
||||
|
||||
|
||||
|
||||
RemoteJzq remoteJzq = new RemoteJzq();
|
||||
remoteJzq.setContractName("用工签约"); //合同名称
|
||||
// String originaNumber = "3B1EF1A9BD8B47E7A9E23BBE16408658";
|
||||
remoteJzq.setTemplateNo(workerSignConfig.getString("tempCode"));
|
||||
remoteJzq.setServerCa(1);
|
||||
remoteJzq.setDealType(5);
|
||||
remoteJzq.setFileType(4);
|
||||
// remoteJzq.setNotifyUrl("http://116.255.147.51/prod-api/resource/sign/accept");
|
||||
remoteJzq.setNotifyUrl(workerSignConfig.getString("notifyUrl"));
|
||||
Map<String, String> mapList = new HashMap<>();
|
||||
mapList.put("corporatename", "薪资社");
|
||||
String jsonString = JSONObject.toJSONString(mapList);
|
||||
remoteJzq.setTemplateParams(jsonString);
|
||||
|
||||
|
||||
List<SignatoryReq> signatoryReqs = new ArrayList<>();
|
||||
SignatoryReq signatoriesReq ;
|
||||
if("1".equals(signType)){
|
||||
signatoriesReq = new SignatoryReq();
|
||||
signatoriesReq.setFullName(uwb.getGsmc());
|
||||
signatoriesReq.setIdentityType(11);
|
||||
signatoriesReq.setIdentityCard(uwb.getNsrSbh());
|
||||
signatoriesReq.setEmail(uwb.getConEmail());
|
||||
signatoriesReq.setServerCaAuto(1);
|
||||
signatoriesReq.setChapteJson("[{\"page\":4,\"chaptes\":[{\"offsetX\":0.121,\"offsetY\":0.3941}]}]");//坐标(X Y)定位签字位置
|
||||
signatoriesReq.setSignLevel(0);
|
||||
signatoriesReq.setNoNeedVerify(1);
|
||||
signatoryReqs.add(signatoriesReq);
|
||||
|
||||
}else{
|
||||
signatoriesReq = new SignatoryReq();
|
||||
signatoriesReq.setFullName(uwb.getName());
|
||||
signatoriesReq.setIdentityType(1);
|
||||
signatoriesReq.setIdentityCard(uwb.getCardId());
|
||||
signatoriesReq.setMobile(uwb.getVPhone());
|
||||
signatoriesReq.setChapteJson("[{\"page\":0,\"chaptes\":[{\"offsetX\":0.3047,\"offsetY\":0.2677}]},{\"page\":4,\"chaptes\":[{\"offsetX\":0.2378,\"offsetY\":0.1681}]}]");//坐标(X Y)定位签字位置
|
||||
signatoriesReq.setNoNeedVerify(1); //取消签约前短信校验
|
||||
signatoriesReq.setServerCaAuto(0);//是否使用自动签署完成,0或null不使用,1自动(当且只当合同处理方式为部份自动或收集批量签时有效)
|
||||
signatoriesReq.setSignLevel(1);//签字类型,标准图形章或公章:0标准图形章,1公章或手写,2公章手写或手写,3个人方形标准章(用户类型是个人且姓名2-4个字符生效,其他情况默认使用系统标准图形章)
|
||||
|
||||
signatoryReqs.add(signatoriesReq);
|
||||
|
||||
}
|
||||
|
||||
remoteJzq.setSignatories(signatoryReqs);
|
||||
|
||||
|
||||
String result = this.remoteJzqService.becomeSign(remoteJzq,domain, SignType.USER_WORKER_PROTOCOL);
|
||||
JSONObject jsonObject = JSONObject.parseObject(result);
|
||||
|
||||
if(jsonObject.getString("success").equals("false")){
|
||||
throw new Exception(jsonObject.getString("msg"));
|
||||
}
|
||||
|
||||
String code = jsonObject.getString("data");
|
||||
String resultStr = code;
|
||||
if(!"1".equals(signType)){
|
||||
String data = this.remoteJzqService.link(code,uwb.getName(),uwb.getCardId(),1);
|
||||
|
||||
JSONObject resultObj = JSONObject.parseObject(data);
|
||||
|
||||
if (resultObj.getString("success").equals("false")){
|
||||
throw new Exception("获取签约连接失败");
|
||||
}
|
||||
|
||||
String signWebUrl = resultObj.getString("data");
|
||||
|
||||
UserWorkerBiz uwBiz = new UserWorkerBiz();
|
||||
uwBiz.setId(id);
|
||||
uwBiz.setSignUrl(signWebUrl);
|
||||
uwBiz.setHtCode(code);
|
||||
this.myTaskMapper.updateUserWorkerHtInfoByBizId(uwBiz);
|
||||
resultStr = signWebUrl;
|
||||
}
|
||||
|
||||
return resultStr;
|
||||
}
|
||||
private File createFileFromURL(String fileUrl, String saveDir, String fileName) throws Exception {
|
||||
// 确保保存目录存在
|
||||
File savePath = new File(saveDir);
|
||||
if (!savePath.exists()) {
|
||||
savePath.mkdirs();
|
||||
}
|
||||
|
||||
// 创建目标文件
|
||||
File file = new File(saveDir, fileName);
|
||||
|
||||
// 从URL下载文件并保存到本地
|
||||
try (InputStream inputStream = new URL(fileUrl).openStream();
|
||||
FileOutputStream outputStream = new FileOutputStream(file)) {
|
||||
byte[] buffer = new byte[4096];
|
||||
int bytesRead;
|
||||
while ((bytesRead = inputStream.read(buffer)) != -1) {
|
||||
outputStream.write(buffer, 0, bytesRead);
|
||||
}
|
||||
}
|
||||
|
||||
return file;
|
||||
}
|
||||
}
|
||||
@ -107,7 +107,7 @@ public interface IMyTaskService {
|
||||
* @return
|
||||
* @throws Exception
|
||||
*/
|
||||
String signProJzq(Long id,String domain)throws Exception;
|
||||
String signProJzq(Long id,String domain,String signType)throws Exception;
|
||||
|
||||
|
||||
|
||||
|
||||
@ -523,7 +523,7 @@ public class MyTaskServiceImpl extends BaseService implements IMyTaskService {
|
||||
* @throws Exception
|
||||
*/
|
||||
@Override
|
||||
public String signProJzq(Long id,String domain)throws Exception{
|
||||
public String signProJzq(Long id,String domain,String signType)throws Exception{
|
||||
|
||||
RemoteSysUnitDomainVo site = remoteConfigService.queryByDomainName(domain);
|
||||
|
||||
@ -574,13 +574,13 @@ public class MyTaskServiceImpl extends BaseService implements IMyTaskService {
|
||||
|
||||
RemoteJzq remoteJzq = new RemoteJzq();
|
||||
remoteJzq.setContractName("用工签约"); //合同名称
|
||||
// String originaNumber = "3B1EF1A9BD8B47E7A9E23BBE16408658";
|
||||
remoteJzq.setTemplateNo(workerSignConfig.getString("tempCode"));
|
||||
remoteJzq.setServerCa(1);
|
||||
remoteJzq.setDealType(5);
|
||||
remoteJzq.setFileType(4);
|
||||
String originaNumber = "3B1EF1A9BD8B47E7A9E23BBE16408658";
|
||||
remoteJzq.setTemplateNo(originaNumber);
|
||||
remoteJzq.setNotifyUrl("http://116.255.147.51/prod-api/resource/sign/accept");
|
||||
// remoteJzq.setNotifyUrl("http://116.255.147.51/prod-api/resource/sign/accept");
|
||||
remoteJzq.setNotifyUrl(workerSignConfig.getString("notifyUrl"));
|
||||
Map<String, String> mapList = new HashMap<>();
|
||||
mapList.put("corporatename", "薪资社");
|
||||
String jsonString = JSONObject.toJSONString(mapList);
|
||||
@ -591,33 +591,33 @@ public class MyTaskServiceImpl extends BaseService implements IMyTaskService {
|
||||
|
||||
|
||||
List<SignatoryReq> signatoryReqs = new ArrayList<>();
|
||||
SignatoryReq signatoriesReq ;
|
||||
if("1".equals(signType)){
|
||||
signatoriesReq = new SignatoryReq();
|
||||
signatoriesReq.setFullName(uwb.getGsmc());
|
||||
signatoriesReq.setIdentityType(11);
|
||||
signatoriesReq.setIdentityCard(uwb.getNsrSbh());
|
||||
signatoriesReq.setEmail(uwb.getConEmail());
|
||||
signatoriesReq.setServerCaAuto(1);
|
||||
signatoriesReq.setChapteJson("[{\"page\":4,\"chaptes\":[{\"offsetX\":0.121,\"offsetY\":0.3941}]}]");//坐标(X Y)定位签字位置
|
||||
signatoriesReq.setSignLevel(0);
|
||||
signatoriesReq.setNoNeedVerify(1);
|
||||
signatoryReqs.add(signatoriesReq);
|
||||
|
||||
SignatoryReq signatoriesReq = new SignatoryReq();
|
||||
signatoriesReq.setFullName(uwb.getGsmc());
|
||||
signatoriesReq.setIdentityType(11);
|
||||
signatoriesReq.setIdentityCard(uwb.getNsrSbh());
|
||||
signatoriesReq.setEmail(uwb.getConEmail());
|
||||
signatoriesReq.setServerCaAuto(1);
|
||||
signatoriesReq.setChapteJson("[{\"page\":4,\"chaptes\":[{\"offsetX\":0.121,\"offsetY\":0.3941}]}]");//坐标(X Y)定位签字位置
|
||||
signatoriesReq.setSignLevel(0);
|
||||
signatoriesReq.setNoNeedVerify(1);
|
||||
signatoryReqs.add(signatoriesReq);
|
||||
}else{
|
||||
signatoriesReq = new SignatoryReq();
|
||||
signatoriesReq.setFullName(uwb.getName());
|
||||
signatoriesReq.setIdentityType(1);
|
||||
signatoriesReq.setIdentityCard(uwb.getCardId());
|
||||
signatoriesReq.setMobile(uwb.getVPhone());
|
||||
signatoriesReq.setChapteJson("[{\"page\":0,\"chaptes\":[{\"offsetX\":0.3047,\"offsetY\":0.2677}]},{\"page\":4,\"chaptes\":[{\"offsetX\":0.2378,\"offsetY\":0.1681}]}]");//坐标(X Y)定位签字位置
|
||||
signatoriesReq.setNoNeedVerify(1); //取消签约前短信校验
|
||||
signatoriesReq.setServerCaAuto(0);//是否使用自动签署完成,0或null不使用,1自动(当且只当合同处理方式为部份自动或收集批量签时有效)
|
||||
signatoriesReq.setSignLevel(1);//签字类型,标准图形章或公章:0标准图形章,1公章或手写,2公章手写或手写,3个人方形标准章(用户类型是个人且姓名2-4个字符生效,其他情况默认使用系统标准图形章)
|
||||
|
||||
signatoryReqs.add(signatoriesReq);
|
||||
|
||||
signatoriesReq = new SignatoryReq();
|
||||
signatoriesReq.setFullName(uwb.getName());
|
||||
signatoriesReq.setIdentityType(1);
|
||||
signatoriesReq.setIdentityCard(uwb.getCardId());
|
||||
signatoriesReq.setMobile(uwb.getVPhone());
|
||||
signatoriesReq.setServerCaAuto(0);
|
||||
signatoriesReq.setChapteJson("[{\"page\":0,\"chaptes\":[{\"offsetX\":0.3047,\"offsetY\":0.2677}]},{\"page\":4,\"chaptes\":[{\"offsetX\":0.2378,\"offsetY\":0.1681}]}]");//坐标(X Y)定位签字位置
|
||||
signatoriesReq.setNoNeedVerify(1); //取消签约前短信校验
|
||||
signatoriesReq.setServerCaAuto(0);//是否使用自动签署完成,0或null不使用,1自动(当且只当合同处理方式为部份自动或收集批量签时有效)
|
||||
signatoriesReq.setSignLevel(1);//签字类型,标准图形章或公章:0标准图形章,1公章或手写,2公章手写或手写,3个人方形标准章(用户类型是个人且姓名2-4个字符生效,其他情况默认使用系统标准图形章)
|
||||
|
||||
|
||||
signatoryReqs.add(signatoriesReq);
|
||||
|
||||
}
|
||||
|
||||
remoteJzq.setSignatories(signatoryReqs);
|
||||
|
||||
|
||||
@ -316,7 +316,6 @@ public class MerBillController extends BaseController {
|
||||
public R<ExcelResult<MerBillDetailBo>> importBillData(@RequestPart("file") MultipartFile file,AddBillBo bo) throws Exception {
|
||||
this.merBillService.validateSysSyd(bo);
|
||||
ExcelResult<MerBillDetailBo> result = ExcelUtil.importExcel(file.getInputStream(),new BillImportListener(bo));
|
||||
ExcelUtil.importExcel(file.getInputStream(),new BillImportListener(bo));
|
||||
|
||||
for (MerBillDetailBo merBillDetailBo : result.getList()) {
|
||||
|
||||
@ -341,7 +340,7 @@ public class MerBillController extends BaseController {
|
||||
.mapToLong(MerBillDetailVo::getMoney)
|
||||
.sum());
|
||||
|
||||
BigDecimal accumulatedIncome = totalMoney.add(merBillDetailBo.getMoneyDecimal());
|
||||
BigDecimal accumulatedIncome = totalMoney.add(new BigDecimal(merBillDetailBo.getMoney()));
|
||||
|
||||
String billNo = merBillDetailBo.getBillNo();
|
||||
String year = billNo.substring(0, 4);
|
||||
@ -377,8 +376,8 @@ public class MerBillController extends BaseController {
|
||||
personalIncomeTax = TaxCalculatorUtils.calculateMonthlyWithholdingTax(accumulatedIncome,size+1,totalRaise);
|
||||
}
|
||||
|
||||
Long amount = (merBillDetailBo.getMoneyDecimal().subtract(personalIncomeTax)).multiply(new BigDecimal("100")).longValue();
|
||||
merBillDetailBo.setRaise(personalIncomeTax.multiply(new BigDecimal("100")).longValue());
|
||||
Long amount = (new BigDecimal(merBillDetailBo.getMoney()).subtract(personalIncomeTax)).longValue();
|
||||
merBillDetailBo.setRaise(personalIncomeTax.longValue());
|
||||
merBillDetailBo.setAmount(amount);
|
||||
|
||||
}
|
||||
|
||||
@ -56,10 +56,12 @@ public class BillImportListener extends AnalysisEventListener<Map<Integer, Strin
|
||||
throw new ServiceException("单批次最大支持500条订单");
|
||||
}
|
||||
MerBillDetailBo detail = new MerBillDetailBo();
|
||||
detail.setBillNo(bo.getNo());
|
||||
detail.setWorkerName(data.get(0));
|
||||
detail.setCardId(data.get(1));
|
||||
detail.setPassage(this.bo.getPassage());
|
||||
detail.setMoneyDecimal(new BigDecimal(data.get(2)));
|
||||
detail.setMoney(new BigDecimal(data.get(2)).longValue());
|
||||
if(size > 3){
|
||||
detail.setBankCard(data.get(3));
|
||||
}
|
||||
|
||||
@ -13,6 +13,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.dubbo.config.annotation.DubboReference;
|
||||
import org.apache.dubbo.config.annotation.DubboService;
|
||||
import org.dromara.common.core.constant.Constants;
|
||||
import org.dromara.common.core.constant.GlobalConstants;
|
||||
import org.dromara.common.core.enums.BusRole;
|
||||
@ -217,6 +218,8 @@ public class MerBillServiceImpl extends BaseService implements IMerBillService {
|
||||
|
||||
@Autowired
|
||||
private SysThirdPlatformMapper sysThirdPlatformMapper;
|
||||
|
||||
@DubboService
|
||||
/**
|
||||
* 查询账单
|
||||
*/
|
||||
@ -439,7 +442,6 @@ public class MerBillServiceImpl extends BaseService implements IMerBillService {
|
||||
|
||||
if(merchantConfig.getIsNothing() != null && 1 == merchantConfig.getIsNothing()){
|
||||
|
||||
|
||||
//不认证,不签约
|
||||
try{
|
||||
this.tencentIdCardAndOtherService.cardId2(detail.getWorkerName(),detail.getCardId(),bo.getDomain());
|
||||
@ -460,6 +462,7 @@ public class MerBillServiceImpl extends BaseService implements IMerBillService {
|
||||
vo.setIsSign(0L);
|
||||
cardIdMap.put(detail.getCardId(),vo);
|
||||
|
||||
|
||||
}catch(BaseException e ){
|
||||
rtn.getList().add(detail);
|
||||
detail.setErrorMsg("身份证校验不通过");
|
||||
@ -484,6 +487,7 @@ public class MerBillServiceImpl extends BaseService implements IMerBillService {
|
||||
|
||||
}else{
|
||||
detail.setWorkerId(cardIdMap.get(detail.getCardId()).getId());
|
||||
detail.setBankType(cardIdMap.get(detail.getCardId()).getBankType());
|
||||
}
|
||||
|
||||
|
||||
@ -553,7 +557,7 @@ public class MerBillServiceImpl extends BaseService implements IMerBillService {
|
||||
continue;
|
||||
}
|
||||
|
||||
if(StringUtils.isEmpty(detail.getBankType())){
|
||||
if(1 != merchantConfig.getIsNothing() && StringUtils.isEmpty(detail.getBankType())){
|
||||
rtn.getList().add(detail);
|
||||
detail.setErrorMsg("所属银行不能为空");
|
||||
rtn.getErrorList().add("所属银行不能为空");
|
||||
|
||||
@ -6,6 +6,7 @@ import lombok.RequiredArgsConstructor;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import jakarta.validation.constraints.*;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import org.dromara.payment.merchant.domain.bo.BusMerchantConfigSignTypeBo;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.dromara.common.idempotent.annotation.RepeatSubmit;
|
||||
@ -90,6 +91,18 @@ public class BusMerchantConfigController extends BaseController {
|
||||
public R<Void> edit(@Validated(EditGroup.class) @RequestBody BusMerchantConfigBo bo) {
|
||||
return toAjax(busMerchantConfigService.updateByBo(bo));
|
||||
}
|
||||
/**
|
||||
* 修改商户配置
|
||||
*/
|
||||
@SaCheckPermission("payment:merchantConfig:edit")
|
||||
@Log(title = "商户配置", businessType = BusinessType.UPDATE)
|
||||
@RepeatSubmit()
|
||||
@PostMapping("/setSignType")
|
||||
public R<Void> setSignType(@Validated(EditGroup.class) @RequestBody BusMerchantConfigSignTypeBo bo) {
|
||||
|
||||
return toAjax(busMerchantConfigService.setSignType(bo));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 删除商户配置
|
||||
|
||||
@ -44,5 +44,6 @@ public class BusMerchantConfigBo extends BaseEntity {
|
||||
@NotNull(message = "是否验证用工签约(0:否 1:是)不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private Integer valiWorker;
|
||||
|
||||
private Integer isNothing;
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,32 @@
|
||||
package org.dromara.payment.merchant.domain.bo;
|
||||
|
||||
import io.github.linpeilie.annotations.AutoMapper;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.dromara.common.core.validate.AddGroup;
|
||||
import org.dromara.common.core.validate.EditGroup;
|
||||
import org.dromara.common.mybatis.core.domain.BaseEntity;
|
||||
import org.dromara.payment.merchant.domain.BusMerchantConfig;
|
||||
|
||||
/**
|
||||
* 商户配置业务对象 bus_merchant_config
|
||||
*
|
||||
* @author LionLi
|
||||
* @date 2024-04-03
|
||||
*/
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@AutoMapper(target = BusMerchantConfig.class, reverseConvertGenerate = false)
|
||||
public class BusMerchantConfigSignTypeBo extends BaseEntity {
|
||||
|
||||
/**
|
||||
* 主键
|
||||
*/
|
||||
@NotNull(message = "主键不能为空", groups = { EditGroup.class })
|
||||
private Long id;
|
||||
|
||||
|
||||
private Integer isNothing;
|
||||
|
||||
}
|
||||
@ -36,6 +36,8 @@ public class BusMerchantVo implements Serializable {
|
||||
*/
|
||||
@ExcelProperty(value = "主键")
|
||||
private Long id;
|
||||
private Long configId;
|
||||
private Integer isNothing;
|
||||
|
||||
/**
|
||||
* 商户编号
|
||||
|
||||
@ -34,5 +34,6 @@ public class BusOperAndAgentAndMer implements Serializable {
|
||||
private Long merId;
|
||||
|
||||
private String merNo;
|
||||
private String isNothing;
|
||||
|
||||
}
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
package org.dromara.payment.merchant.service;
|
||||
|
||||
import org.dromara.payment.merchant.domain.BusMerchantConfig;
|
||||
import org.dromara.payment.merchant.domain.bo.BusMerchantConfigSignTypeBo;
|
||||
import org.dromara.payment.merchant.domain.vo.BusMerchantConfigVo;
|
||||
import org.dromara.payment.merchant.domain.bo.BusMerchantConfigBo;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
@ -46,4 +47,6 @@ public interface IBusMerchantConfigService {
|
||||
* 校验并批量删除商户配置信息
|
||||
*/
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
|
||||
int setSignType(BusMerchantConfigSignTypeBo bo);
|
||||
}
|
||||
|
||||
@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.payment.merchant.domain.bo.BusMerchantConfigSignTypeBo;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.dromara.payment.merchant.domain.bo.BusMerchantConfigBo;
|
||||
import org.dromara.payment.merchant.domain.vo.BusMerchantConfigVo;
|
||||
@ -108,4 +109,11 @@ public class BusMerchantConfigServiceImpl implements IBusMerchantConfigService {
|
||||
}
|
||||
return baseMapper.deleteBatchIds(ids) > 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int setSignType(BusMerchantConfigSignTypeBo bo) {
|
||||
BusMerchantConfig busMerchantConfig = baseMapper.selectById(bo.getId());
|
||||
busMerchantConfig.setIsNothing(bo.getIsNothing());
|
||||
return baseMapper.updateById(busMerchantConfig);
|
||||
}
|
||||
}
|
||||
|
||||
@ -45,7 +45,9 @@ public class TaxCalculatorUtils {
|
||||
validateParams(cumulativeIncome, taxMonth, cumulativePrepaidTax);
|
||||
|
||||
// 2. 计算累计减除费用:5000 * n(n为第几个月)
|
||||
BigDecimal cumulativeDeduction = MONTHLY_DEDUCTION.multiply(new BigDecimal(taxMonth));
|
||||
BigDecimal cumulativeDeduction = new BigDecimal(0);
|
||||
if(taxMonth <= 12)
|
||||
cumulativeDeduction = MONTHLY_DEDUCTION.multiply(new BigDecimal(100)).multiply(new BigDecimal(taxMonth));
|
||||
|
||||
// 3. 计算应纳税所得额:累计收入 × (1 - 20%) - 累计减除费用
|
||||
BigDecimal taxableIncome = cumulativeIncome
|
||||
@ -59,14 +61,14 @@ public class TaxCalculatorUtils {
|
||||
}
|
||||
|
||||
// 5. 匹配税率和速算扣除数
|
||||
TaxRate matchedRate = matchTaxRate(taxableIncome);
|
||||
TaxRate matchedRate = matchTaxRate(taxableIncome.divide(new BigDecimal("100"), 2, RoundingMode.HALF_UP));
|
||||
|
||||
// 6. 计算当月应预扣税额:应纳税所得额 × 税率 - 速算扣除数 - 已预缴税额
|
||||
BigDecimal withholdingTax = taxableIncome
|
||||
.multiply(matchedRate.rate)
|
||||
.subtract(matchedRate.quickDeduction)
|
||||
.multiply(matchedRate.rate)
|
||||
.subtract(cumulativePrepaidTax)
|
||||
.setScale(2, RoundingMode.HALF_UP); // 保留2位小数
|
||||
.setScale(2, RoundingMode.HALF_UP); // 保留2位小数;;
|
||||
|
||||
// 7. 确保税额≥0(避免出现负数)
|
||||
return withholdingTax.max(BigDecimal.ZERO);
|
||||
@ -105,9 +107,9 @@ public class TaxCalculatorUtils {
|
||||
if (cumulativeIncome == null || cumulativeIncome.compareTo(BigDecimal.ZERO) < 0) {
|
||||
throw new IllegalArgumentException("累计收入不能为负数或空!");
|
||||
}
|
||||
if (taxMonth < 1 || taxMonth > 12) {
|
||||
/* if (taxMonth < 1 || taxMonth > 12) {
|
||||
throw new IllegalArgumentException("月份必须在1-12之间!");
|
||||
}
|
||||
}*/
|
||||
if (cumulativePrepaidTax == null || cumulativePrepaidTax.compareTo(BigDecimal.ZERO) < 0) {
|
||||
throw new IllegalArgumentException("累计已预缴税额不能为负数或空!");
|
||||
}
|
||||
|
||||
@ -6,14 +6,11 @@ import cn.hutool.core.lang.UUID;
|
||||
import cn.hutool.core.util.IdUtil;
|
||||
import cn.hutool.core.util.IdcardUtil;
|
||||
import cn.hutool.core.util.PhoneUtil;
|
||||
import cn.hutool.core.util.RandomUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.alibaba.excel.EasyExcel;
|
||||
import com.alibaba.excel.context.AnalysisContext;
|
||||
import com.alibaba.excel.event.AnalysisEventListener;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import org.apache.dubbo.config.annotation.DubboReference;
|
||||
import org.dromara.common.core.constant.Constants;
|
||||
import org.dromara.common.core.constant.GlobalConstants;
|
||||
import org.dromara.common.core.enums.BusRole;
|
||||
import org.dromara.common.core.exception.base.BaseException;
|
||||
@ -28,13 +25,11 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.common.redis.utils.RedisUtils;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.dromara.map.api.RemoteSignJZQService;
|
||||
import org.dromara.payment.api.worker.RemoteUserWokerService;
|
||||
import org.dromara.payment.api.worker.domain.RemoteUserWorkerZipVo;
|
||||
import org.dromara.payment.channel.domain.BusChannel;
|
||||
import org.dromara.payment.channel.mapper.BusChannelMapper;
|
||||
import org.dromara.payment.common.domain.CommonSelConditionEntity;
|
||||
import org.dromara.payment.merchant.domain.bo.BusMerchantBo;
|
||||
import org.dromara.payment.merchant.domain.vo.BusMerchantVo;
|
||||
import org.dromara.payment.merchant.domain.vo.BusOperAndAgentAndMer;
|
||||
import org.dromara.payment.merchant.mapper.BusMerchantMapper;
|
||||
import org.dromara.payment.sys.domain.vo.SysSydVo;
|
||||
@ -43,7 +38,6 @@ import org.dromara.payment.taxRecords.service.impl.AsyncTaxRecordsService;
|
||||
import org.dromara.payment.worker.domain.UserWorker;
|
||||
import org.dromara.payment.worker.domain.UserWorkerAccount;
|
||||
import org.dromara.payment.worker.domain.bo.UserWokerOperBo;
|
||||
import org.dromara.payment.worker.domain.bo.UserWorkerAccountBo;
|
||||
import org.dromara.payment.worker.domain.bo.UserWorkerBo;
|
||||
import org.dromara.payment.worker.domain.vo.*;
|
||||
import org.dromara.payment.worker.mapper.UserWorkerAccountMapper;
|
||||
@ -63,7 +57,6 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.io.File;
|
||||
import java.time.Duration;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
@ -80,7 +73,8 @@ public class UserWorkerBusinessServiceImpl extends BaseService implements IUserW
|
||||
|
||||
private final UserWorkerBusinessMapper baseMapper;
|
||||
|
||||
|
||||
@DubboReference
|
||||
private RemoteSignJZQService remoteSignJZQService;
|
||||
@DubboReference
|
||||
private RemoteDictService remoteDictService;
|
||||
|
||||
@ -416,8 +410,18 @@ public class UserWorkerBusinessServiceImpl extends BaseService implements IUserW
|
||||
}
|
||||
|
||||
if(!passlist.isEmpty()){
|
||||
this.isSign(passlist,sydId,busType);
|
||||
this.isSign(passlist,sydId,busType,busOperAndAgentAndMer.getIsNothing());
|
||||
this.baseMapper.insertBatch(passlist);
|
||||
//TODO无感签约
|
||||
if("1".equals(busOperAndAgentAndMer.getIsNothing())){
|
||||
for(UserWorkerBusiness pass : passlist){
|
||||
String contractCode = remoteSignJZQService.signProJzq(pass.getId(), "http://open.xinzishe.com", "1");
|
||||
pass.setSignStatus(1);
|
||||
pass.setNo(contractCode);
|
||||
//更新签约状态及合同编号
|
||||
this.baseMapper.updateById(pass);
|
||||
}
|
||||
}
|
||||
}
|
||||
if(!userWorkerList.isEmpty()){
|
||||
this.userWorkerMapper.insertBatch(userWorkerList);
|
||||
@ -665,7 +669,7 @@ public class UserWorkerBusinessServiceImpl extends BaseService implements IUserW
|
||||
return true;
|
||||
}
|
||||
|
||||
private void isSign(List<UserWorkerBusiness> list,Long sydId,Integer busType){
|
||||
private void isSign(List<UserWorkerBusiness> list, Long sydId, Integer busType, String isNothing) throws Exception {
|
||||
|
||||
|
||||
Map paraMap = new HashMap();
|
||||
@ -682,8 +686,16 @@ public class UserWorkerBusinessServiceImpl extends BaseService implements IUserW
|
||||
vo.setSignStatus(1);
|
||||
vo.setNo(uwbvo.getNo());
|
||||
vo.setSignFileUrl(uwbvo.getSignFileUrl());
|
||||
}else if("1".equals(isNothing)){//TODO无感签约,
|
||||
String code = remoteSignJZQService.signProJzq(vo.getId(), "http://open.xinzishe.com", "1");
|
||||
vo.setSignStatus(1);
|
||||
vo.setNo(code);
|
||||
}
|
||||
}
|
||||
}else{
|
||||
for(UserWorkerBusiness vo : list){
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -31,9 +31,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
o.NAME operatorName,
|
||||
t.verify_status,
|
||||
s.NO scale_no,
|
||||
t.create_unit_id
|
||||
t.create_unit_id,
|
||||
bmc.is_nothing,
|
||||
bmc.id as config_id,
|
||||
bmc.is_nothing as isNothing
|
||||
FROM
|
||||
bus_merchant t
|
||||
LEFT JOIN bus_merchant_config bmc ON bmc.mer_id = t.id
|
||||
LEFT JOIN bus_channel_salesman s ON t.salesman_id = s.id
|
||||
LEFT JOIN bus_channel c ON t.agent_no = c.NO
|
||||
LEFT JOIN bus_operator o ON t.operator_no = o.NO
|
||||
@ -57,9 +61,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
<select id="selOpAndAgentInfosByMerInfo" parameterType="org.dromara.payment.merchant.domain.bo.BusMerchantBo"
|
||||
resultType="org.dromara.payment.merchant.domain.vo.BusOperAndAgentAndMer">
|
||||
|
||||
select t.id merId, t.no merNo, c.id channelId,c.no channelNo,c.level_code levelCode,o.id opId,o.no opNo
|
||||
select t.id merId, t.no merNo, c.id channelId,c.no channelNo,c.level_code levelCode,o.id opId,o.no opNo,
|
||||
bmc.is_nothing
|
||||
from bus_merchant t left join bus_channel c on t.agent_no = c.no
|
||||
left join bus_operator o on t.operator_no = o.no
|
||||
LEFT JOIN bus_merchant_config bmc ON bmc.mer_id = t.id
|
||||
<where>
|
||||
<if test="no != null and no != ''">
|
||||
and t.no = #{no}
|
||||
|
||||
@ -455,7 +455,7 @@ public class JzqUtils {
|
||||
|
||||
JSONArray jsonArray = new JSONArray();
|
||||
jsonArray.add(request.getSignatories().get(0));
|
||||
jsonArray.add(request.getSignatories().get(1));
|
||||
// jsonArray.add(request.getSignatories().get(1));
|
||||
|
||||
params.put("signatories", jsonArray.toString());
|
||||
params.put("serverCa", request.getServerCa());
|
||||
|
||||
Reference in New Issue
Block a user