From 3dd3b9a79d7b0add5c6ed291b0c63875b56a5812 Mon Sep 17 00:00:00 2001 From: liu <1085918938@qq.com> Date: Sun, 20 Jul 2025 02:08:58 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9A1>=E5=AF=BC=E5=85=A5?= =?UTF-8?q?=E9=97=AE=E9=A2=98=EF=BC=9B2>=E7=AE=97=E7=A8=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/map/api/RemoteSignJZQService.java | 24 ++ .../mp/controller/MyTaskController.java | 15 +- .../mp/dubbo/RemoteSignJZQServiceImpl.java | 223 ++++++++++++++++++ .../dromara/mp/service/IMyTaskService.java | 2 +- .../mp/service/impl/MyTaskServiceImpl.java | 56 ++--- .../bill/controller/MerBillController.java | 7 +- .../bill/listener/BillImportListener.java | 2 + .../bill/service/impl/MerBillServiceImpl.java | 8 +- .../BusMerchantConfigController.java | 13 + .../domain/bo/BusMerchantConfigBo.java | 1 + .../bo/BusMerchantConfigSignTypeBo.java | 32 +++ .../merchant/domain/vo/BusMerchantVo.java | 2 + .../domain/vo/BusOperAndAgentAndMer.java | 1 + .../service/IBusMerchantConfigService.java | 3 + .../impl/BusMerchantConfigServiceImpl.java | 8 + .../payment/util/TaxCalculatorUtils.java | 14 +- .../impl/UserWorkerBusinessServiceImpl.java | 34 ++- .../payment/merchant/BusMerchantMapper.xml | 10 +- .../resource/junziqian/common/JzqUtils.java | 2 +- 19 files changed, 395 insertions(+), 62 deletions(-) create mode 100644 ruoyi-api/ruoyi-api-mp/src/main/java/org/dromara/map/api/RemoteSignJZQService.java create mode 100644 ruoyi-modules/ruoyi-mp/src/main/java/org/dromara/mp/dubbo/RemoteSignJZQServiceImpl.java create mode 100644 ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/merchant/domain/bo/BusMerchantConfigSignTypeBo.java diff --git a/ruoyi-api/ruoyi-api-mp/src/main/java/org/dromara/map/api/RemoteSignJZQService.java b/ruoyi-api/ruoyi-api-mp/src/main/java/org/dromara/map/api/RemoteSignJZQService.java new file mode 100644 index 0000000..114ff91 --- /dev/null +++ b/ruoyi-api/ruoyi-api-mp/src/main/java/org/dromara/map/api/RemoteSignJZQService.java @@ -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; +} diff --git a/ruoyi-modules/ruoyi-mp/src/main/java/org/dromara/mp/controller/MyTaskController.java b/ruoyi-modules/ruoyi-mp/src/main/java/org/dromara/mp/controller/MyTaskController.java index 5adba88..289a0ba 100644 --- a/ruoyi-modules/ruoyi-mp/src/main/java/org/dromara/mp/controller/MyTaskController.java +++ b/ruoyi-modules/ruoyi-mp/src/main/java/org/dromara/mp/controller/MyTaskController.java @@ -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 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 getJzqSignUrl(Long id,String domain)throws Exception{ - return R.ok("",this.taskService.signProJzq(id,domain)); + public R getJzqSignUrl(Long id, String domain, @RequestParam(defaultValue = "1") String signType)throws Exception{ + return R.ok("",this.remoteSignJZQService.signProJzq(id,domain,signType)); } diff --git a/ruoyi-modules/ruoyi-mp/src/main/java/org/dromara/mp/dubbo/RemoteSignJZQServiceImpl.java b/ruoyi-modules/ruoyi-mp/src/main/java/org/dromara/mp/dubbo/RemoteSignJZQServiceImpl.java new file mode 100644 index 0000000..cae3cdc --- /dev/null +++ b/ruoyi-modules/ruoyi-mp/src/main/java/org/dromara/mp/dubbo/RemoteSignJZQServiceImpl.java @@ -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 mapList = new HashMap<>(); + mapList.put("corporatename", "薪资社"); + String jsonString = JSONObject.toJSONString(mapList); + remoteJzq.setTemplateParams(jsonString); + + + List 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; + } +} diff --git a/ruoyi-modules/ruoyi-mp/src/main/java/org/dromara/mp/service/IMyTaskService.java b/ruoyi-modules/ruoyi-mp/src/main/java/org/dromara/mp/service/IMyTaskService.java index 9c84aa7..d08ebbf 100644 --- a/ruoyi-modules/ruoyi-mp/src/main/java/org/dromara/mp/service/IMyTaskService.java +++ b/ruoyi-modules/ruoyi-mp/src/main/java/org/dromara/mp/service/IMyTaskService.java @@ -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; diff --git a/ruoyi-modules/ruoyi-mp/src/main/java/org/dromara/mp/service/impl/MyTaskServiceImpl.java b/ruoyi-modules/ruoyi-mp/src/main/java/org/dromara/mp/service/impl/MyTaskServiceImpl.java index a400835..cb908a8 100644 --- a/ruoyi-modules/ruoyi-mp/src/main/java/org/dromara/mp/service/impl/MyTaskServiceImpl.java +++ b/ruoyi-modules/ruoyi-mp/src/main/java/org/dromara/mp/service/impl/MyTaskServiceImpl.java @@ -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 mapList = new HashMap<>(); mapList.put("corporatename", "薪资社"); String jsonString = JSONObject.toJSONString(mapList); @@ -591,33 +591,33 @@ public class MyTaskServiceImpl extends BaseService implements IMyTaskService { List 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); diff --git a/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/bill/controller/MerBillController.java b/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/bill/controller/MerBillController.java index 94c5a50..af58db5 100644 --- a/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/bill/controller/MerBillController.java +++ b/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/bill/controller/MerBillController.java @@ -316,7 +316,6 @@ public class MerBillController extends BaseController { public R> importBillData(@RequestPart("file") MultipartFile file,AddBillBo bo) throws Exception { this.merBillService.validateSysSyd(bo); ExcelResult 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); } diff --git a/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/bill/listener/BillImportListener.java b/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/bill/listener/BillImportListener.java index e3e4601..c7d744b 100644 --- a/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/bill/listener/BillImportListener.java +++ b/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/bill/listener/BillImportListener.java @@ -56,10 +56,12 @@ public class BillImportListener extends AnalysisEventListener 3){ detail.setBankCard(data.get(3)); } diff --git a/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/bill/service/impl/MerBillServiceImpl.java b/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/bill/service/impl/MerBillServiceImpl.java index 28244f4..3d1addd 100644 --- a/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/bill/service/impl/MerBillServiceImpl.java +++ b/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/bill/service/impl/MerBillServiceImpl.java @@ -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("所属银行不能为空"); diff --git a/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/merchant/controller/BusMerchantConfigController.java b/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/merchant/controller/BusMerchantConfigController.java index bb18769..4fa7ea9 100644 --- a/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/merchant/controller/BusMerchantConfigController.java +++ b/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/merchant/controller/BusMerchantConfigController.java @@ -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 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 setSignType(@Validated(EditGroup.class) @RequestBody BusMerchantConfigSignTypeBo bo) { + + return toAjax(busMerchantConfigService.setSignType(bo)); + } + /** * 删除商户配置 diff --git a/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/merchant/domain/bo/BusMerchantConfigBo.java b/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/merchant/domain/bo/BusMerchantConfigBo.java index ae52bef..1bca67a 100644 --- a/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/merchant/domain/bo/BusMerchantConfigBo.java +++ b/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/merchant/domain/bo/BusMerchantConfigBo.java @@ -44,5 +44,6 @@ public class BusMerchantConfigBo extends BaseEntity { @NotNull(message = "是否验证用工签约(0:否 1:是)不能为空", groups = { AddGroup.class, EditGroup.class }) private Integer valiWorker; + private Integer isNothing; } diff --git a/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/merchant/domain/bo/BusMerchantConfigSignTypeBo.java b/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/merchant/domain/bo/BusMerchantConfigSignTypeBo.java new file mode 100644 index 0000000..e27ed1c --- /dev/null +++ b/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/merchant/domain/bo/BusMerchantConfigSignTypeBo.java @@ -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; + +} diff --git a/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/merchant/domain/vo/BusMerchantVo.java b/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/merchant/domain/vo/BusMerchantVo.java index eeacdf0..0edb123 100644 --- a/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/merchant/domain/vo/BusMerchantVo.java +++ b/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/merchant/domain/vo/BusMerchantVo.java @@ -36,6 +36,8 @@ public class BusMerchantVo implements Serializable { */ @ExcelProperty(value = "主键") private Long id; + private Long configId; + private Integer isNothing; /** * 商户编号 diff --git a/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/merchant/domain/vo/BusOperAndAgentAndMer.java b/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/merchant/domain/vo/BusOperAndAgentAndMer.java index 46af21f..845e39f 100644 --- a/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/merchant/domain/vo/BusOperAndAgentAndMer.java +++ b/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/merchant/domain/vo/BusOperAndAgentAndMer.java @@ -34,5 +34,6 @@ public class BusOperAndAgentAndMer implements Serializable { private Long merId; private String merNo; + private String isNothing; } diff --git a/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/merchant/service/IBusMerchantConfigService.java b/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/merchant/service/IBusMerchantConfigService.java index a18e8dd..d4d6905 100644 --- a/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/merchant/service/IBusMerchantConfigService.java +++ b/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/merchant/service/IBusMerchantConfigService.java @@ -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 ids, Boolean isValid); + + int setSignType(BusMerchantConfigSignTypeBo bo); } diff --git a/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/merchant/service/impl/BusMerchantConfigServiceImpl.java b/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/merchant/service/impl/BusMerchantConfigServiceImpl.java index 2332a48..85bfabe 100644 --- a/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/merchant/service/impl/BusMerchantConfigServiceImpl.java +++ b/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/merchant/service/impl/BusMerchantConfigServiceImpl.java @@ -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); + } } diff --git a/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/util/TaxCalculatorUtils.java b/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/util/TaxCalculatorUtils.java index f2d9124..bc7f7ad 100644 --- a/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/util/TaxCalculatorUtils.java +++ b/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/util/TaxCalculatorUtils.java @@ -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("累计已预缴税额不能为负数或空!"); } diff --git a/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/worker/service/impl/UserWorkerBusinessServiceImpl.java b/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/worker/service/impl/UserWorkerBusinessServiceImpl.java index be8556f..7ca54b3 100644 --- a/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/worker/service/impl/UserWorkerBusinessServiceImpl.java +++ b/ruoyi-modules/ruoyi-payment/src/main/java/org/dromara/payment/worker/service/impl/UserWorkerBusinessServiceImpl.java @@ -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 list,Long sydId,Integer busType){ + private void isSign(List 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){ + + } } } diff --git a/ruoyi-modules/ruoyi-payment/src/main/resources/mapper/payment/merchant/BusMerchantMapper.xml b/ruoyi-modules/ruoyi-payment/src/main/resources/mapper/payment/merchant/BusMerchantMapper.xml index 65c8657..3f19fd9 100644 --- a/ruoyi-modules/ruoyi-payment/src/main/resources/mapper/payment/merchant/BusMerchantMapper.xml +++ b/ruoyi-modules/ruoyi-payment/src/main/resources/mapper/payment/merchant/BusMerchantMapper.xml @@ -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"