修复:1>导入问题;2>算税

This commit is contained in:
liu
2025-07-20 02:08:58 +08:00
parent f6edadcd8b
commit 3dd3b9a79d
19 changed files with 395 additions and 62 deletions

View File

@ -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;
}

View File

@ -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));
}

View File

@ -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;
}
}

View 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;

View File

@ -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);

View File

@ -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);
}

View File

@ -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));
}

View File

@ -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("所属银行不能为空");

View File

@ -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));
}
/**
* 删除商户配置

View File

@ -44,5 +44,6 @@ public class BusMerchantConfigBo extends BaseEntity {
@NotNull(message = "是否验证用工签约0否 1不能为空", groups = { AddGroup.class, EditGroup.class })
private Integer valiWorker;
private Integer isNothing;
}

View File

@ -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;
}

View File

@ -36,6 +36,8 @@ public class BusMerchantVo implements Serializable {
*/
@ExcelProperty(value = "主键")
private Long id;
private Long configId;
private Integer isNothing;
/**
* 商户编号

View File

@ -34,5 +34,6 @@ public class BusOperAndAgentAndMer implements Serializable {
private Long merId;
private String merNo;
private String isNothing;
}

View File

@ -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);
}

View File

@ -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);
}
}

View File

@ -45,7 +45,9 @@ public class TaxCalculatorUtils {
validateParams(cumulativeIncome, taxMonth, cumulativePrepaidTax);
// 2. 计算累计减除费用5000 * nn为第几个月
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("累计已预缴税额不能为负数或空!");
}

View File

@ -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){
}
}
}

View File

@ -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}

View File

@ -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());