diff --git a/admin-hanhai-vue/.env.development b/admin-hanhai-vue/.env.development index 5de5257..ce445d0 100644 --- a/admin-hanhai-vue/.env.development +++ b/admin-hanhai-vue/.env.development @@ -1,5 +1,5 @@ NODE_ENV=development -VUE_APP_API_BASE_URL=http://localhost:8001/employ-api/ +VUE_APP_API_BASE_URL=http://localhost:8002/employ-api/ //VUE_APP_API_BASE_URL=http://localhost:8000/employ-api/ VUE_APP_CAS_BASE_URL=http://cas.example.org:8443/cas VUE_APP_ONLINE_BASE_URL=http://fileview.jeecg.com/onlinePreview diff --git a/han-hai-module-pay/src/main/java/org/jeecg/modules/pay/MpWxPayService.java b/han-hai-module-pay/src/main/java/org/jeecg/modules/pay/MpWxPayService.java index 392339f..09cb8ae 100644 --- a/han-hai-module-pay/src/main/java/org/jeecg/modules/pay/MpWxPayService.java +++ b/han-hai-module-pay/src/main/java/org/jeecg/modules/pay/MpWxPayService.java @@ -8,13 +8,15 @@ import com.github.binarywang.wxpay.constant.WxPayConstants; import com.github.binarywang.wxpay.exception.WxPayException; import com.github.binarywang.wxpay.service.WxPayService; import org.jeecg.modules.pay.config.WxPay; +import org.springframework.beans.factory.annotation.Value; import java.io.File; @SuppressWarnings("all") public class MpWxPayService { - public boolean dev = false; + @Value("${MpWxPayService.dev}") + public boolean dev; public WxPay wxPay; public WxPayService wxPayService; @@ -89,7 +91,7 @@ public class MpWxPayService { */ public Object createOrder(String productName, String clientIp, String productId, Integer price, String orderNo, - String openId, String body){ + String openId, String body, String notifyUrl){ WxPayUnifiedOrderRequest request = new WxPayUnifiedOrderRequest(); request.setDeviceInfo("WEB"); //设备号 request.setTradeType("JSAPI"); //交易类型 @@ -98,14 +100,12 @@ public class MpWxPayService { request.setDetail(productName); //商品详情 request.setTotalFee(price); //总金额|分计 request.setSpbillCreateIp(clientIp); //终端IP -// request.setNotifyUrl(wxPay.notifyUrl);//设置回调路径 - request.setNotifyUrl("http://h5.xzaiyp.top/employ-api/employ/amount/payNotify");//设置回调路径 + request.setNotifyUrl(wxPay.notifyUrl + notifyUrl);//设置回调路径 request.setProductId(productId); //商品id request.setOpenid(openId); //JSAPI OPENID if (dev){ request.setTotalFee(price); -// request.setNotifyUrl(wxPay.notifyUrlDev); - request.setNotifyUrl("http://h5.xzaiyp.top/employ-api/employ/amount/payNotify");//设置回调路径 + request.setNotifyUrl(wxPay.notifyUrlDev + notifyUrl); } try { Object order = wxPayService.createOrder(request); diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/employAuthenticationCompany/entity/EmployAuthenticationCompany.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/employAuthenticationCompany/entity/EmployAuthenticationCompany.java index b6de139..7a2e66d 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/employAuthenticationCompany/entity/EmployAuthenticationCompany.java +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/employAuthenticationCompany/entity/EmployAuthenticationCompany.java @@ -95,4 +95,13 @@ public class EmployAuthenticationCompany implements Serializable { @Dict(dictTable = "han_hai_member", dicText = "nick_name", dicCode = "id") @ApiModelProperty(value = "关联用户id") private java.lang.String userId; + + /**经度*/ + @Excel(name = "经度", width = 15) + @ApiModelProperty(value = "经度") + private BigDecimal latitude; + /**纬度*/ + @Excel(name = "纬度", width = 15) + @ApiModelProperty(value = "纬度") + private BigDecimal longitude; } diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/employJob/entity/EmployJob.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/employJob/entity/EmployJob.java index 6ef2357..d9f7932 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/employJob/entity/EmployJob.java +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/employJob/entity/EmployJob.java @@ -4,6 +4,8 @@ import java.io.Serializable; import java.io.UnsupportedEncodingException; import java.util.Date; import java.math.BigDecimal; +import java.util.List; + import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; @@ -138,5 +140,5 @@ public class EmployJob implements Serializable { private HanHaiMember hanHaiMember; @TableField(exist = false) - private EmployOrder employOrder; + private List employOrder; } diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/employOrder/entity/EmployOrder.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/employOrder/entity/EmployOrder.java index 1bfbe1a..d60788f 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/employOrder/entity/EmployOrder.java +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/employOrder/entity/EmployOrder.java @@ -183,6 +183,17 @@ public class EmployOrder implements Serializable { @ApiModelProperty(value = "企业支付状态") private java.lang.String orderStatus; + @Excel(name = "求职者支付微信订单号", width = 15) + @ApiModelProperty(value = "求职者支付微信订单号") + private java.lang.String orderNoSeek; + @Excel(name = "求职者支付状态", width = 15) + @ApiModelProperty(value = "求职者支付状态") + private java.lang.String orderStatusSeek; + + @Excel(name = "交通费", width = 15) + @ApiModelProperty(value = "交通费") + private BigDecimal fare; + @TableField (exist = false) private EmployJob employJob; diff --git a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/employSeek/entity/EmploySeek.java b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/employSeek/entity/EmploySeek.java index dad918a..1e1e4f2 100644 --- a/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/employSeek/entity/EmploySeek.java +++ b/jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/employSeek/entity/EmploySeek.java @@ -58,7 +58,7 @@ public class EmploySeek implements Serializable { /**求职日薪*/ @Excel(name = "求职日薪", width = 15) @ApiModelProperty(value = "求职日薪") - private java.lang.String dayMoney; + private BigDecimal dayMoney; /**求职行业*/ @Excel(name = "求职行业", width = 15, dictTable = "employ_category", dicText = "name", dicCode = "id") @Dict(dictTable = "employ_category", dicText = "name", dicCode = "id") @@ -72,11 +72,11 @@ public class EmploySeek implements Serializable { /**经度*/ @Excel(name = "经度", width = 15) @ApiModelProperty(value = "经度") - private java.lang.String latitude; + private BigDecimal latitude; /**纬度*/ @Excel(name = "纬度", width = 15) @ApiModelProperty(value = "纬度") - private java.lang.String longitude; + private BigDecimal longitude; /**求职最大薪资*/ @Excel(name = "求职最大薪资", width = 15) @ApiModelProperty(value = "求职最大薪资") @@ -108,6 +108,10 @@ public class EmploySeek implements Serializable { @Excel(name = "出行方式", width = 15) @ApiModelProperty(value = "出行方式") private java.lang.String selectGo; + /**出行方式*/ + @Excel(name = "求职状态", width = 15) + @ApiModelProperty(value = "求职状态(0待聘用,1已聘用,2已完成)") + private java.lang.Integer seekStatus; @TableField(exist = false) private HanHaiMember hanHaiMember; diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/employController/OrderController.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/employController/OrderController.java index ca6980e..7b8f19f 100644 --- a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/employController/OrderController.java +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/employController/OrderController.java @@ -8,12 +8,10 @@ import org.jeecg.modules.apiBean.PageBean; import org.jeecg.modules.apiService.NewsService; import org.jeecg.modules.apiService.OrderService; import org.jeecg.modules.employOrder.entity.EmployOrder; -import org.springframework.web.bind.annotation.RequestHeader; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; +import java.math.BigDecimal; @Api(tags="订单-订单相关接口") @RestController @@ -40,7 +38,7 @@ public class OrderController { return orderService.queryOrderById(token, orderId); } - //订单信息-简历信息-立即聘用 + //订单信息-简历信息-立即应聘 @ApiOperation(value="订单信息-简历信息-立即应聘", notes="订单信息-简历信息-立即应聘") @RequestMapping(value = "/addOrderWork", method = {RequestMethod.POST}) public Result addOrderWork(@RequestHeader("X-Access-Token")String token, String id){ @@ -77,14 +75,14 @@ public class OrderController { return orderService.deleteOrder(token, orderId); } - //订单信息-企业确认订单 - @ApiOperation(value="订单信息-企业确认订单", notes="订单信息-企业确认订单") + //订单信息-企业确认订单/求职者确认订单 + @ApiOperation(value="订单信息-企业确认订单/求职者确认订单", notes="订单信息-企业确认订单") @RequestMapping(value = "/confirmOrder", method = {RequestMethod.POST}) public Result confirmOrder(@RequestHeader("X-Access-Token")String token, String orderId){ return orderService.confirmOrder(token, orderId); } - //订单信息-确认试工完成 + //订单信息-求职者确认试工完成 @ApiOperation(value="订单信息-确认试工完成", notes="订单信息-确认试工完成") @RequestMapping(value = "/confirmOrderTry", method = {RequestMethod.POST}) public Result confirmOrderTry(@RequestHeader("X-Access-Token")String token, String orderId){ @@ -101,11 +99,11 @@ public class OrderController { //企业支付 @ApiOperation(value="订单信息-企业支付", notes="订单信息-企业支付") @RequestMapping(value = "/payOrderCompany", method = {RequestMethod.POST}) - public Result payOrderCompany(@RequestHeader("X-Access-Token")String token, String orderId,Integer payType){ - return orderService.payOrderCompany(token, orderId,payType); + public Result payOrderCompany(@RequestHeader("X-Access-Token")String token, String orderId,Integer payType, BigDecimal fare){ + return orderService.payOrderCompany(token, orderId,payType, fare); } - //确认企业已结款 + //求职者确认企业已结款 @ApiOperation(value="订单信息-确认企业已结款", notes="订单信息-确认企业已结款") @RequestMapping(value = "/confirmOrderTryCompanyOk", method = {RequestMethod.POST}) public Result confirmOrderTryCompanyOk(@RequestHeader("X-Access-Token")String token, String orderId){ @@ -113,4 +111,15 @@ public class OrderController { } + //求职者支付保险回调 + @PostMapping("/payNotify") + public Object payNotify(@RequestBody String requestBody){ + return orderService.payNotify(requestBody); + } + + //企业支付试工日新回调 + @PostMapping("/payNotifyCompany") + public Object payNotifyCompany(@RequestBody String requestBody){ + return orderService.payNotifyCompany(requestBody); + } } diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/OrderService.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/OrderService.java index f10e1b4..aea6a62 100644 --- a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/OrderService.java +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/OrderService.java @@ -8,6 +8,8 @@ import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; +import java.math.BigDecimal; + public interface OrderService { //订单信息-查看订单列表 @@ -49,11 +51,15 @@ public interface OrderService { //企业支付 - public Result payOrderCompany(String token, String orderId,Integer payType); + public Result payOrderCompany(String token, String orderId,Integer payType, BigDecimal fare); //确认企业已结款 public Result confirmOrderTryCompanyOk(String token, String orderId); + //求职者支付保险回调 + Object payNotify(String requestBody); + //企业支付试工日新回调 + Object payNotifyCompany(String requestBody); } diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/impl/AmountServiceImpl.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/impl/AmountServiceImpl.java index a4ec0c6..dded799 100644 --- a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/impl/AmountServiceImpl.java +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/impl/AmountServiceImpl.java @@ -123,7 +123,9 @@ public class AmountServiceImpl implements AmountService { i1, employTrade.getId(), hanHaiMember.getAppletOpenid(), - employTrade.toString()); + employTrade.toString(), + "/employ/amount/payNotify" + ); return Result.OK("支付成功",appOrder); }catch (Exception e){ @@ -133,7 +135,7 @@ public class AmountServiceImpl implements AmountService { } //开通vip-支付回调 - public Result payNotify(String requestBody){ + public Object payNotify(String requestBody){ WxPayOrderNotifyResult notify = mpWxPayService.notify(requestBody); String outTradeNo = notify.getOutTradeNo(); log.info("支付回调订单号码:"+outTradeNo); @@ -168,7 +170,10 @@ public class AmountServiceImpl implements AmountService { e.printStackTrace(); } - return null; + return "" + + " " + + " " + + " "; } //我的钱包-金额明细 diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/impl/JobServiceImpl.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/impl/JobServiceImpl.java index 11d3d7b..a2dea76 100644 --- a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/impl/JobServiceImpl.java +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/impl/JobServiceImpl.java @@ -17,9 +17,12 @@ import org.jeecg.modules.employJob.service.IEmployJobService; import org.jeecg.modules.employOrder.entity.EmployOrder; import org.jeecg.modules.employOrder.service.IEmployOrderService; import org.jeecg.modules.employResume.entity.EmployResume; +import org.jeecg.modules.employResume.service.IEmployResumeService; import org.jeecg.modules.employSeek.entity.EmploySeek; import org.jeecg.modules.hanHaiMember.entity.HanHaiMember; import org.jeecg.modules.hanHaiMember.service.IHanHaiMemberService; +import org.jeecg.modules.system.service.ISysDictService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; @@ -52,6 +55,10 @@ public class JobServiceImpl implements JobService { private IHanHaiMemberService hanHaiMemberService; @Resource private IEmployOrderService employOrderService; + + @Autowired + private IEmployResumeService employResumeService; + /******************************************************************************************************************/ //工作信息-查询工作信息列表 @@ -120,6 +127,7 @@ public class JobServiceImpl implements JobService { } } + //工作信息-根据Id查看工作详情 @Override public Result queryJobById(String token, String jobId) { @@ -143,18 +151,16 @@ public class JobServiceImpl implements JobService { EmployCategory categoryTwo = employCategoryService.getById(job.getCategoryTwo()); job.setCategoryTwo(categoryTwo.getName()); + //结算方式 - switch (job.getPayType()){ - case "0": - job.setPayType("微信支付"); - break; - case "1": - job.setPayType("支付宝支付"); - break; - case "2": - job.setPayType("线下结算"); - break; - } +// switch (job.getPayType()){ +// case "0": +// job.setPayType("提前支付"); +// break; +// case "1": +// job.setPayType("试用后支付"); +// break; +// } //2、获取用户实名信息 @@ -175,6 +181,8 @@ public class JobServiceImpl implements JobService { job.setEmployAuthenticationCompany(company); } + setJobOrder(job); + //3、用户信息 HanHaiMember hanHaiMember = hanHaiMemberService.getById(job.getUserId()); job.setHanHaiMember(hanHaiMember); @@ -186,6 +194,17 @@ public class JobServiceImpl implements JobService { } } + private void setJobOrder(EmployJob job){ + List list = employOrderService.lambdaQuery().eq(EmployOrder::getJobId, job.getId()).list(); + + for (EmployOrder employOrder : list) { + employOrder.setEmployResume(employResumeService.getById(employOrder.getResumeId())); + } + + job.setEmployOrder(list); + } + + //工作信息-我的发布 @Override public Result queryJobListByUserId(String token, PageBean pageBean) { @@ -198,18 +217,13 @@ public class JobServiceImpl implements JobService { Page pageList = employJobService .lambdaQuery() .eq(EmployJob::getUserId, hanHaiMember.getId()) + .orderByDesc(EmployJob::getCreateTime) .page(page); - //循环替换数据 - List records = pageList.getRecords(); //创建一个新的集合 - List list = new ArrayList<>(); - for (Object record : records) { - EmployJob job = (EmployJob) record; - EmployOrder one = employOrderService.lambdaQuery().eq(EmployOrder::getJobId, job.getId()).one(); - job.setEmployOrder(one); - list.add(job); + for (EmployJob job : pageList.getRecords()) { + List list = employOrderService.lambdaQuery().eq(EmployOrder::getJobId, job.getId()).list(); + job.setEmployOrder(list); } - pageList.setRecords(list); return Result.OK("我的招工", pageList); }catch (Exception e){ diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/impl/OrderServiceImpl.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/impl/OrderServiceImpl.java index 53c0acb..34b8a19 100644 --- a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/impl/OrderServiceImpl.java +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/impl/OrderServiceImpl.java @@ -1,7 +1,10 @@ package org.jeecg.modules.apiService.impl; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.github.binarywang.wxpay.bean.notify.WxPayOrderNotifyResult; +import lombok.extern.log4j.Log4j2; import org.apache.commons.lang.StringUtils; import org.jeecg.common.api.vo.Result; import org.jeecg.config.shiro.ShiroRealm; @@ -15,6 +18,8 @@ import org.jeecg.modules.employAuthenticationPerson.entity.EmployAuthenticationP import org.jeecg.modules.employAuthenticationPerson.service.IEmployAuthenticationPersonService; import org.jeecg.modules.employCategory.entity.EmployCategory; import org.jeecg.modules.employCategory.service.IEmployCategoryService; +import org.jeecg.modules.employConfig.entity.EmployConfig; +import org.jeecg.modules.employConfig.service.IEmployConfigService; import org.jeecg.modules.employJob.entity.EmployJob; import org.jeecg.modules.employJob.service.IEmployJobService; import org.jeecg.modules.employOrder.entity.EmployOrder; @@ -36,6 +41,7 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; +@Log4j2 @Service public class OrderServiceImpl implements OrderService { @@ -73,6 +79,10 @@ public class OrderServiceImpl implements OrderService { private IEmploySeekService employSeekService; + @Autowired + private IEmployConfigService employConfigService; + + //支付接口 @Autowired private MpWxPayService mpWxPayService; @@ -198,9 +208,10 @@ public class OrderServiceImpl implements OrderService { } + //创建订单信息 EmployOrder employOrder = new EmployOrder(); - employOrder.setType(0);//订单类型 招聘订单 + employOrder.setType(0);//订单类型 企业发布招聘的订单 employOrder.setStatus(0);//订单状态 employOrder.setJobId(workId); employOrder.setTitle(employJob.getTitle()); @@ -210,6 +221,7 @@ public class OrderServiceImpl implements OrderService { employOrder.setJobPhone(resume.getPhone()); employOrder.setJobAddress(resume.getAddress()); employOrder.setPayType(employJob.getPayType()); + employOrder.setPayMoney(employJob.getSalaryDay());//试工日薪 //招聘方信息 employOrder.setWorkHeadImg(company.getHeadImg()); @@ -226,6 +238,21 @@ public class OrderServiceImpl implements OrderService { employOrder.setPersonId(person.getId()); employOrder.setJobId(workId); + + //保险费用 + List list = employConfigService.lambdaQuery() + .eq(EmployConfig::getParamCode, "order_premium_price") + .list(); + + if (list.size() > 0 && StringUtils.isNotBlank(list.get(0).getParamValueText())){ + try { + String price = list.get(0).getParamValueText(); + employOrder.setPremium(BigDecimal.valueOf(Double.parseDouble(price))); + }catch (Exception e){ + log.error(e); + } + } + employOrderService.save(employOrder); @@ -234,13 +261,18 @@ public class OrderServiceImpl implements OrderService { - //订单信息-立即支付 + //订单信息-求职者支付保险 @Override public Result payOrder(String token, String orderId,Integer payType){ HanHaiMember hanHaiMember = shiroRealm.checkUserTokenIsEffectHanHaiOpenId(token); //根据订单标识查询订单信息 EmployOrder order = employOrderService.getById(orderId); - BigDecimal payPrice = order.getPayMoney(); + + if (order == null){ + return Result.error("订单不存在"); + } + + BigDecimal payPrice = order.getPremium(); if(payType == 1){ @@ -248,29 +280,29 @@ public class OrderServiceImpl implements OrderService { if(hanHaiMember.getPrice().compareTo(payPrice)==-1){ return Result.error("余额不足"); } - hanHaiMember.setPrice(hanHaiMember.getPrice().subtract(payPrice)); - hanHaiMemberService.updateById(hanHaiMember); - //增加金额明细 - EmployAmountLog amountLog = new EmployAmountLog(); - amountLog.setTitle(order.getTitle()); - amountLog.setAmount(payPrice); - amountLog.setType("0"); - amountLog.setUserId(hanHaiMember.getId()); - employAmountLogService.save(amountLog); + subtractMemberAmount(hanHaiMember, payPrice, "支付保险费:" + order.getTitle()); + return Result.OK("余额支付成功",order); }else{ + + String idStr = IdWorker.getIdStr(); + + order.setOrderNoSeek(idStr); + + employOrderService.updateById(order); + //吊起微信支付 - String s = payPrice.multiply(new BigDecimal(100)).toString(); - int i1 = Double.valueOf(s).intValue(); Object appOrder = mpWxPayService.createOrder( "购买"+order.getTitle(), "127.0.0.1", - System.currentTimeMillis()+"", - i1, - System.currentTimeMillis()+"", + idStr, + payPrice.multiply(new BigDecimal(100)).intValue(), + idStr, hanHaiMember.getAppletOpenid(), - order.toString()); + order.toString(), + "/employ/order/payNotify" + ); return Result.OK("微信支付成功",appOrder); } @@ -280,8 +312,6 @@ public class OrderServiceImpl implements OrderService { - - //订单信息-求职信息-立即聘用 @Override public Result addOrderJob(String token, String jobId){ @@ -336,7 +366,7 @@ public class OrderServiceImpl implements OrderService { //创建订单信息 EmployOrder employOrder = new EmployOrder(); - employOrder.setType(1);//订单类型 招聘订单 + employOrder.setType(1);//订单类型 求职者发布的求职订单 employOrder.setStatus(0);//订单状态 employOrder.setSeekId(jobId); employOrder.setTitle("求职:"+employCategoryService.getById(employSeek.getCategoryOne()).getName() +"-"+employCategoryService.getById(employSeek.getCategoryTwo()).getName()); @@ -347,6 +377,7 @@ public class OrderServiceImpl implements OrderService { employOrder.setJobAddress(resume.getAddress()); employOrder.setJobHeadImg(person.getImage()); employOrder.setPayType(employSeek.getPayType()); + employOrder.setPayMoney(employSeek.getDayMoney());//试工日薪 //招聘方信息 employOrder.setWorkHeadImg(company.getHeadImg()); @@ -365,6 +396,20 @@ public class OrderServiceImpl implements OrderService { employOrder.setSeekId(jobId); + //保险费用 + List list = employConfigService.lambdaQuery() + .eq(EmployConfig::getParamCode, "order_premium_price") + .list(); + + if (list.size() > 0 && StringUtils.isNotBlank(list.get(0).getParamValueText())){ + try { + String price = list.get(0).getParamValueText(); + employOrder.setPremium(BigDecimal.valueOf(Double.parseDouble(price))); + }catch (Exception e){ + log.error(e); + } + } + employOrderService.save(employOrder); @@ -389,6 +434,14 @@ public class OrderServiceImpl implements OrderService { if(order.getStatus()==6){ return Result.error("订单已经取消,不能取消"); } + + + EmploySeek seek = employSeekService.getById(order.getSeekId()); + if (seek != null){ + seek.setSeekStatus(0); + employSeekService.updateById(seek); + } + //修改订单状态为已取消 order.setStatus(6); employOrderService.updateById(order); @@ -429,6 +482,13 @@ public class OrderServiceImpl implements OrderService { if(order.getStatus()==6){ return Result.error("订单已经取消,不能确认"); } + + EmploySeek seek = employSeekService.getById(order.getSeekId()); + if (seek != null){ + seek.setSeekStatus(1); + employSeekService.updateById(seek); + } + order.setStatus(1); employOrderService.updateById(order); return Result.OK("确认成功", order); @@ -468,27 +528,46 @@ public class OrderServiceImpl implements OrderService { //企业支付 @Override - public Result payOrderCompany(String token, String orderId,Integer payType){ + public Result payOrderCompany(String token, String orderId, Integer payType, BigDecimal fare){//fare交通费 HanHaiMember hanHaiMember = shiroRealm.checkUserTokenIsEffectHanHaiOpenId(token); //根据订单标识查询订单信息 EmployOrder order = employOrderService.getById(orderId); - BigDecimal payPrice = order.getPayMoney(); + if(order==null){ + return Result.error("订单不存在", null); + } + + // type 0企业发布招聘,企业不需要支付保险、交通费,由个人承担 + // type 1个人发布求职,企业承担保险费、交通费用 + order.setFare(fare); + + order.setOrderNoMoney(order.getPayMoney().add(fare)); + + if (order.getType() == 1){//企业招聘求职者,需要企业支付保险费用 + order.setOrderNoMoney(order.getOrderNoMoney().add(order.getPremium())); + } + + BigDecimal payPrice = order.getOrderNoMoney(); + if(payType == 1){ //余额支付 if(hanHaiMember.getPrice().compareTo(payPrice)==-1){ return Result.error("余额不足"); } - hanHaiMember.setPrice(hanHaiMember.getPrice().subtract(payPrice)); - hanHaiMemberService.updateById(hanHaiMember); - //增加金额明细 - EmployAmountLog amountLog = new EmployAmountLog(); - amountLog.setTitle(order.getTitle()); - amountLog.setAmount(payPrice); - amountLog.setType("0"); - amountLog.setUserId(hanHaiMember.getId()); - employAmountLogService.save(amountLog); + + subtractMemberAmount(hanHaiMember, payPrice, "企业支付:" + order.getTitle()); + + //给求职者钱包加钱 + try { + EmployResume resume = employResumeService.getById(order.getResumeId()); + + HanHaiMember member = hanHaiMemberService.getById(resume.getUserId()); + + addMemberAmount(member, order.getPayMoney(), "试工费用到账:" + order.getTitle()); + }catch (Exception e){ + log.error("求职者数据丢失,金额:{}无法到账,订单号:{}", order.getPayMoney(), order.getId()); + } //修改订单状态 order.setStatus(4); @@ -496,17 +575,25 @@ public class OrderServiceImpl implements OrderService { return Result.OK("余额支付成功",order); }else{ + + String idStr = IdWorker.getIdStr(); + + order.setOrderNo(idStr); + + employOrderService.updateById(order); + //吊起微信支付 - String s = payPrice.multiply(new BigDecimal(100)).toString(); - int i1 = Double.valueOf(s).intValue(); Object appOrder = mpWxPayService.createOrder( "支付"+order.getTitle(), "127.0.0.1", - System.currentTimeMillis()+"", - i1, - System.currentTimeMillis()+"", + idStr, + payPrice.multiply(new BigDecimal(100)).intValue(), + idStr, hanHaiMember.getAppletOpenid(), - order.toString()); + order.toString(), + "/employ/order/payNotifyCompany" + ); + return Result.OK("微信支付成功",appOrder); } } @@ -520,7 +607,104 @@ public class OrderServiceImpl implements OrderService { //修改订单状态 order.setStatus(5); employOrderService.updateById(order); + + EmploySeek seek = employSeekService.getById(order.getSeekId()); + if (seek != null){ + seek.setSeekStatus(2); + employSeekService.updateById(seek); + } + return Result.ok("确认成功"); } + + + public void addMemberAmount(HanHaiMember hanHaiMember, BigDecimal payPrice, String title){ + hanHaiMember.setPrice(hanHaiMember.getPrice().add(payPrice)); + hanHaiMemberService.updateById(hanHaiMember); + //增加金额明细 + EmployAmountLog amountLog = new EmployAmountLog(); + amountLog.setTitle(title); + amountLog.setAmount(payPrice); + amountLog.setType("1"); + amountLog.setUserId(hanHaiMember.getId()); + employAmountLogService.save(amountLog); + } + + public void subtractMemberAmount(HanHaiMember hanHaiMember, BigDecimal payPrice, String title){ + hanHaiMember.setPrice(hanHaiMember.getPrice().subtract(payPrice)); + hanHaiMemberService.updateById(hanHaiMember); + //增加金额明细 + EmployAmountLog amountLog = new EmployAmountLog(); + amountLog.setTitle(title); + amountLog.setAmount(payPrice); + amountLog.setType("0"); + amountLog.setUserId(hanHaiMember.getId()); + employAmountLogService.save(amountLog); + } + + //求职者支付保险回调 + @Override + public Object payNotify(String requestBody) { + WxPayOrderNotifyResult notify = mpWxPayService.notify(requestBody); + String outTradeNo = notify.getOutTradeNo(); + log.info("支付回调订单号码:"+outTradeNo); + + EmployOrder order = employOrderService.lambdaQuery() + .eq(EmployOrder::getOrderNoSeek, outTradeNo) + .one(); + + order.setOrderStatusSeek("Y"); + employOrderService.updateById(order); + + return "" + + " " + + " " + + " "; + } + + //企业支付试工日新回调 + @Override + public Object payNotifyCompany(String requestBody) { + WxPayOrderNotifyResult notify = mpWxPayService.notify(requestBody); + String outTradeNo = notify.getOutTradeNo(); + log.info("支付回调订单号码:"+outTradeNo); + + EmployOrder order = employOrderService.lambdaQuery() + .eq(EmployOrder::getOrderNo, outTradeNo) + .one(); + + if ("Y".equals(order.getOrderStatus())){ + log.warn("订单已经被支付了,订单信息:{}", order); + return "" + + " " + + " " + + " "; + } + + + //给求职者钱包加钱 + try { + EmployResume resume = employResumeService.getById(order.getResumeId()); + + HanHaiMember member = hanHaiMemberService.getById(resume.getUserId()); + + addMemberAmount(member, order.getPayMoney(), "企业支付到账:" + order.getTitle()); + }catch (Exception e){ + log.error("求职者数据丢失,金额:{}无法到账,订单号:{}", order.getPayMoney(), order.getId()); + } + + + //修改订单状态 + order.setStatus(4); + + order.setOrderStatus("Y"); + employOrderService.updateById(order); + + return "" + + " " + + " " + + " "; + } + } diff --git a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/impl/SeekServiceImpl.java b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/impl/SeekServiceImpl.java index 12dc422..ad6af53 100644 --- a/jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/impl/SeekServiceImpl.java +++ b/jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/impl/SeekServiceImpl.java @@ -53,21 +53,16 @@ public class SeekServiceImpl implements SeekService { //求职信息-查询求职信息列表 @Override public Result querySeekList(EmploySeek employSeek, PageBean pageBean){ - Page page = new Page(pageBean.getPageNo(), pageBean.getPageSize()); - Page pageList = employSeekService.lambdaQuery() + Page page = new Page(pageBean.getPageNo(), pageBean.getPageSize()); + Page pageList = employSeekService.lambdaQuery() .like(employSeek.getAddress() != null, EmploySeek::getAddress, employSeek.getAddress()) + .orderByDesc(EmploySeek::getCreateTime) .page(page); - //循环替换数据 - List records = pageList.getRecords(); //创建一个新的集合 - List list = new ArrayList<>(); - for (Object record : records) { - EmploySeek seek = (EmploySeek) record; + for (EmploySeek seek : pageList.getRecords()) { seek.setHanHaiMember(hanHaiMemberService.getById(seek.getUserId())); seek.setEmployResume(employResumeService.getById(seek.getResumeId())); - list.add(seek); } - pageList.setRecords(list); return Result.OK("求职信息查询成功", pageList); } @@ -109,6 +104,7 @@ public class SeekServiceImpl implements SeekService { //根据用户标识查询是否存在求职信息 EmploySeek one = employSeekService.lambdaQuery() .eq(EmploySeek::getUserId, hanHaiMember.getId()) + .eq(EmploySeek::getSeekStatus, 1) .one(); if(null != one){ return Result.error("您有求职订单未结束"); @@ -116,7 +112,8 @@ public class SeekServiceImpl implements SeekService { employSeek.setUserId(hanHaiMember.getId()); employSeek.setResumeId(resume.getId()); employSeek.setCreateTime(new Date()); - employSeekService.save(employSeek); + employSeek.setSeekStatus(0); + employSeekService.saveOrUpdate(employSeek); } return Result.OK("求职信息添加成功", employSeek); } @@ -129,24 +126,19 @@ public class SeekServiceImpl implements SeekService { @Override public Result queryMySeekList(String token, EmploySeek employSeek, PageBean pageBean){ HanHaiMember hanHaiMember = shiroRealm.checkUserTokenIsEffectHanHaiOpenId(token); - Page page = new Page(pageBean.getPageNo(), pageBean.getPageSize()); - Page pageList = employSeekService.lambdaQuery() + Page page = new Page(pageBean.getPageNo(), pageBean.getPageSize()); + Page pageList = employSeekService.lambdaQuery() .eq(EmploySeek::getUserId, hanHaiMember.getId()) + .orderByDesc(EmploySeek::getCreateTime) .page(page); - //循环替换数据 - List records = pageList.getRecords(); //创建一个新的集合 - List list = new ArrayList<>(); - for (Object record : records) { - EmploySeek seek = (EmploySeek) record; + for (EmploySeek seek : pageList.getRecords()) { seek.setHanHaiMember(hanHaiMemberService.getById(seek.getUserId())); seek.setEmployResume(employResumeService.getById(seek.getResumeId())); EmployOrder one = employOrderService.lambdaQuery().eq(EmployOrder::getSeekId, seek.getId()).one(); seek.setEmployOrder(one); - list.add(seek); } - pageList.setRecords(list); return Result.OK("求职信息查询成功", pageList); } @@ -154,7 +146,7 @@ public class SeekServiceImpl implements SeekService { public Result deleteSeek(String token, String seekId){ HanHaiMember member = shiroRealm.checkUserTokenIsEffectHanHaiOpenId(token); if(StringUtils.isBlank(seekId)){ - return Result.error("求职订单不能为空"); + return Result.error("求职ID不能为空"); } employSeekService.removeById(seekId); return Result.OK("删除成功"); diff --git a/jeecg-boot-module-system/src/main/resources/application-dev.yml b/jeecg-boot-module-system/src/main/resources/application-dev.yml index 8e0ae6d..a9f05b3 100644 --- a/jeecg-boot-module-system/src/main/resources/application-dev.yml +++ b/jeecg-boot-module-system/src/main/resources/application-dev.yml @@ -1,5 +1,5 @@ server: - port: 8001 + port: 8002 tomcat: max-swallow-size: -1 error: @@ -329,3 +329,6 @@ third-app: client-secret: ?? agent-id: ?? + +MpWxPayService: + dev: true \ No newline at end of file diff --git a/jeecg-boot-module-system/src/main/resources/pay_weixin.properties b/jeecg-boot-module-system/src/main/resources/pay_weixin.properties index 1799351..0d97106 100644 --- a/jeecg-boot-module-system/src/main/resources/pay_weixin.properties +++ b/jeecg-boot-module-system/src/main/resources/pay_weixin.properties @@ -2,7 +2,5 @@ pay.mchId=1704045304 pay.appId=wx6931d85f7371b032 pay.mchKey=0fdb77429ffdf206c151af76a663041c pay.keyPath=classpath:apiclient_cert.pem -pay.notifyUrl=https://admin.augcl.com/employ-api/employ/amount/payNotify -pay.notifyUrlDev=http://augcl.natapp1.cc/employ-api/employ/amount/payNotify - - +pay.notifyUrl=https://admin.zhixuanlietou.com/employ-api +pay.notifyUrlDev=http://h5.xzaiyp.top/employ-api