diff --git a/yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/context/TenantContextHolder.java b/yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/context/TenantContextHolder.java index 93a17b376..c16336992 100644 --- a/yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/context/TenantContextHolder.java +++ b/yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/context/TenantContextHolder.java @@ -37,8 +37,8 @@ public class TenantContextHolder { public static Long getRequiredTenantId() { Long tenantId = getTenantId(); if (tenantId == null) { - throw new NullPointerException("TenantContextHolder 不存在租户编号!可参考文档:" - + DocumentEnum.TENANT.getUrl()); + throw new NullPointerException("商户id不存在" + ); } return tenantId; } diff --git a/yudao-module-mall/yudao-module-shop-biz/src/main/java/cn/iocoder/yudao/module/shop/service/order/impl/StoreOrderServiceImpl.java b/yudao-module-mall/yudao-module-shop-biz/src/main/java/cn/iocoder/yudao/module/shop/service/order/impl/StoreOrderServiceImpl.java index ecccfd747..42eca6e55 100644 --- a/yudao-module-mall/yudao-module-shop-biz/src/main/java/cn/iocoder/yudao/module/shop/service/order/impl/StoreOrderServiceImpl.java +++ b/yudao-module-mall/yudao-module-shop-biz/src/main/java/cn/iocoder/yudao/module/shop/service/order/impl/StoreOrderServiceImpl.java @@ -1262,11 +1262,11 @@ public class StoreOrderServiceImpl extends ServiceImpl recordDOS = phoneRecordMapper.selectList(Wrappers.lambdaQuery().eq(PhoneRecordDO::getRechargeOrderId, orderId)); - log.info("-------------------------recordDOS{},{}",recordDOS,recordDOS.size()); if (!CollectionUtils.isEmpty(recordDOS)) { - recordDOS.forEach(e->{ - e.setDeleted(Boolean.TRUE); - int i = phoneRecordMapper.updateById(e); - log.info("-------------------------i{}---------------------",i); - }); + Set ids = recordDOS.stream().map(PhoneRecordDO::getId).collect(Collectors.toSet()); + phoneRecordMapper.deleteBatchIds(ids); } return null; } diff --git a/yudao-module-mall/yudao-module-shop-biz/src/main/resources/mapper/express/ShippingTemplatesFreeMapper.xml b/yudao-module-mall/yudao-module-shop-biz/src/main/resources/mapper/express/ShippingTemplatesFreeMapper.xml index e6be679e1..818c5057c 100644 --- a/yudao-module-mall/yudao-module-shop-biz/src/main/resources/mapper/express/ShippingTemplatesFreeMapper.xml +++ b/yudao-module-mall/yudao-module-shop-biz/src/main/resources/mapper/express/ShippingTemplatesFreeMapper.xml @@ -14,7 +14,7 @@ FROM eb_shipping_templates_free where - temp_id = #{tempId, jdbcType=INTEGER} AND `status` = true + temp_id = #{tempId, jdbcType=INTEGER} AND `status` = 1 GROUP BY `uniqid` ORDER BY id ASC diff --git a/yudao-module-mall/yudao-module-shop-biz/src/main/resources/mapper/express/ShippingTemplatesNoDeliveryMapper.xml b/yudao-module-mall/yudao-module-shop-biz/src/main/resources/mapper/express/ShippingTemplatesNoDeliveryMapper.xml index f44c5a622..6b042f88e 100644 --- a/yudao-module-mall/yudao-module-shop-biz/src/main/resources/mapper/express/ShippingTemplatesNoDeliveryMapper.xml +++ b/yudao-module-mall/yudao-module-shop-biz/src/main/resources/mapper/express/ShippingTemplatesNoDeliveryMapper.xml @@ -14,7 +14,7 @@ FROM eb_shipping_templates_no_delivery where - temp_id = #{tempId, jdbcType=INTEGER} AND `status` = true + temp_id = #{tempId, jdbcType=INTEGER} GROUP BY `uniqid` ORDER BY id ASC diff --git a/yudao-module-mall/yudao-module-shop-biz/src/main/resources/mapper/express/ShippingTemplatesRegionMapper.xml b/yudao-module-mall/yudao-module-shop-biz/src/main/resources/mapper/express/ShippingTemplatesRegionMapper.xml index ff7e60eb3..c984f8d77 100644 --- a/yudao-module-mall/yudao-module-shop-biz/src/main/resources/mapper/express/ShippingTemplatesRegionMapper.xml +++ b/yudao-module-mall/yudao-module-shop-biz/src/main/resources/mapper/express/ShippingTemplatesRegionMapper.xml @@ -14,7 +14,7 @@ FROM eb_shipping_templates_region where - temp_id = #{tempId, jdbcType=INTEGER} AND `status` = true + temp_id = #{tempId, jdbcType=INTEGER} AND `status` = 1 GROUP BY `uniqid` ORDER BY id ASC diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java index c5243d4ff..df8bb4bff 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java @@ -5,6 +5,7 @@ import cn.hutool.core.util.IdUtil; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore; +import cn.iocoder.yudao.framework.tenant.core.context.TenantContextHolder; import cn.iocoder.yudao.module.infra.api.file.FileApi; import cn.iocoder.yudao.module.member.controller.admin.user.dto.AdminUserQueryDTO; import cn.iocoder.yudao.module.member.controller.app.user.vo.AppUserUpdateMobileReqVO; @@ -104,6 +105,7 @@ public class MemberUserServiceImpl implements MemberUserService { user.setPassword(encodePassword("123456")); // 加密密码 user.setRegisterIp(registerIp); user.setPromoterId(promoterId); + user.setTenantId(TenantContextHolder.getRequiredTenantId()); memberUserMapper.insert(user); return user; } diff --git a/yudao-server/src/main/resources/application-prod.yaml b/yudao-server/src/main/resources/application-prod.yaml index 9729d700c..87f3a7fa6 100644 --- a/yudao-server/src/main/resources/application-prod.yaml +++ b/yudao-server/src/main/resources/application-prod.yaml @@ -240,5 +240,5 @@ wx: database: 16 # 数据库索引 password: 20221122@dev # 密码,建议生产环境开启 phone: - query-url: http://phone.cyywl.top/cyywl-phone-query-api/ + query-url: http://cy-phone-bill-inquiry-server:4006/cyywl-phone-query-api/ token: eyIwLnR5cCI6IkpXVCIsImFsZyI6IkhTNTEyIn0 \ No newline at end of file diff --git a/yudao-server/src/main/resources/application-test.yaml b/yudao-server/src/main/resources/application-test.yaml index 1383eea5b..cf4165e83 100644 --- a/yudao-server/src/main/resources/application-test.yaml +++ b/yudao-server/src/main/resources/application-test.yaml @@ -222,3 +222,7 @@ wx: port: 6369 # 端口 database: 16 # 数据库索引 password: 20221122@dev # 密码,建议生产环境开启 + +phone: + query-url: https://cmx.bskies.cc:8000/cyywl-phone-query-api/ + token: eyIwLnR5cCI6IkpXVCIsImFsZyI6IkhTNTEyIn0 diff --git a/yudao-ui-admin/src/views/login.vue b/yudao-ui-admin/src/views/login.vue index 15288db4d..6a428cdab 100644 --- a/yudao-ui-admin/src/views/login.vue +++ b/yudao-ui-admin/src/views/login.vue @@ -75,14 +75,14 @@ - - - + + + + + + + + @@ -132,8 +132,8 @@ export default { mobileCodeTimer: 0, loginForm: { loginType: "uname", - username: "admin", - password: "admin123", + username: "", + password: "", captchaVerification: "", mobile: "", mobileCode: "", diff --git a/yudao-ui-admin/src/views/mall/market/banner/index.vue b/yudao-ui-admin/src/views/mall/market/banner/index.vue index 8d9d688d2..32b464357 100644 --- a/yudao-ui-admin/src/views/mall/market/banner/index.vue +++ b/yudao-ui-admin/src/views/mall/market/banner/index.vue @@ -58,7 +58,7 @@ - + diff --git a/yudao-ui-admin/src/views/member/user/index.vue b/yudao-ui-admin/src/views/member/user/index.vue index b125f2c6d..771c43762 100644 --- a/yudao-ui-admin/src/views/member/user/index.vue +++ b/yudao-ui-admin/src/views/member/user/index.vue @@ -65,10 +65,10 @@ diff --git a/yudao-ui-app/components/paymentMember/index.vue b/yudao-ui-app/components/paymentMember/index.vue index a55247b9c..615bf0643 100644 --- a/yudao-ui-app/components/paymentMember/index.vue +++ b/yudao-ui-app/components/paymentMember/index.vue @@ -20,8 +20,7 @@ - @@ -38,6 +37,7 @@ wechatOrderPay, wechatQueryPayResult } from '@/api/order.js'; + import uniPay from '@/libs/pay.js' import { memberTopUp } from '@/api/member.js'; @@ -82,126 +82,32 @@ this.alipayShow = false window.location.reload() }, - // 复制操作 - _copy(context) { - // 创建输入框元素 - let oInput = document.createElement('input'); - // 将想要复制的值 - oInput.value = context; - // 页面底部追加输入框 - document.body.appendChild(oInput); - // 选中输入框 - oInput.select(); - // 执行浏览器复制命令 - document.execCommand('Copy'); - // 弹出复制成功信息 - this.$util.Tips({ - title: '复制链接成功' - }) - this.alipayShow = true - // 复制后移除输入框 - oInput.remove(); - }, close: function() { this.$emit('onChangeFun', { action: 'payClose' }); }, // 微信支付JSAPI调起 - wxPayJSAPI(payData) { - function onBridgeReady() { - WeixinJSBridge.invoke('getBrandWCPayRequest', { - "appId": payData.appId, //公众号ID,由商户传入 - "timeStamp": payData.timeStamp, //时间戳,自1970年以来的秒数 - "nonceStr": payData.nonceStr, //随机串 - "package": payData.packageValue, - "signType": payData.signType, //微信签名方式: - "paySign": payData.paySign //微信签名 - }, - function(res) { - if (res.err_msg == "get_brand_wcpay_request:ok") { - window.location.reload() - // uni.switchTab({ - // url: '/pages/member_application/index' - // }) - } - }) - } - if (typeof WeixinJSBridge == "undefined") { - if (document.addEventListener) { - document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false) - } else if (document.attachEvent) { - document.attachEvent('WeixinJSBridgeReady', onBridgeReady) - document.attachEvent('onWeixinJSBridgeReady', onBridgeReady) - } - } else { - onBridgeReady() - } - }, + goPay: function(paytype) { let that = this; if (that.payInfo.orderInfos.length === 0) return that.$util.Tips({ title: '请选择要支付的订单' }); - uni.showLoading({ - title: '支付中', - mask: true - }); - if(paytype === 'WXPAY' && that.openId) { - that.payInfo.openid = that.openId - - } else if(paytype === 'WXPAY' && !that.openId){ - return that.$util.Tips({ - title: '请在微信客户端进行支付操作' - }); - } - memberTopUp({ - ...that.payInfo, - payType: paytype - }).then(res => { - let jsConfig = res.data - switch (paytype) { - case 'WXPAY': - uni.hideLoading(); - that.wxPayJSAPI(jsConfig.jsapiResult) - break; - case 'ALIPAY': - uni.hideLoading(); - this.alipayLink = jsConfig.body - // this._copy(jsConfig.body) - setTimeout(()=>{ - document.querySelector(".clipboard").click(); - this.alipayShow = true - }, 500) - // const div = document.createElement('div') - // /* 下面的data.content就是后台返回接收到的数据 */ - // div.innerHTML = jsConfig.body - // document.body.appendChild(div) - // document.forms[0].submit() - break; - case 'weixinh5': - uni.hideLoading(); - location.replace(jsConfig.mwebUrl + '&redirect_url=' + window.location.protocol + - '//' + window.location.host + goPages + '&status=1'); - return that.$util.Tips({ - title: "支付中", - icon: 'success' - }, () => { - that.$emit('onChangeFun', { - action: 'pay_complete' - }); - }); - break; + uniPay({ + payInfo: that.payInfo, + payType: paytype, + createOrderFun: memberTopUp, + wxPaySuccess: () => { + window.location.reload() + }, + aliPaySuccess: (link) => { + that.alipayLink = link + setTimeout(() => { + document.querySelector(".clipboard").click(); + that.alipayShow = true + }, 500) } - }).catch(err => { - uni.hideLoading(); - return that.$util.Tips({ - title: err - }, () => { - that.$emit('onChangeFun', { - action: 'pay_fail' - }); - }); }) } } diff --git a/yudao-ui-app/libs/pay.js b/yudao-ui-app/libs/pay.js new file mode 100644 index 000000000..9b9554783 --- /dev/null +++ b/yudao-ui-app/libs/pay.js @@ -0,0 +1,91 @@ +import util from 'utils/util' +import store from '@/store' + +const payTypes = ['WXPAY', 'ALIPAY'] +/** + * 统一支付处理方法 + * @param payInfo // 支付下单信息 + * @param payType // 支付类型 + * @param createOrderFun // 预下单方法 + * @param wxPaySuccess // 微信支付成功回调 + * @param aliPaySuccess // 支付宝支付成功回调 + */ +const unityPay = (options) => { + let _options = { + payInfo: {}, + payType: '', + createOrderFun: () => {}, + wxPaySuccess: () => {}, + aliPaySuccess: () => {} + } + Object.assign(_options, options) + if (!_options.payType) { + return util.Tips({ + title: '请选择支付方式' + }) + } + if (!payTypes.includes(_options.payType)) { + throw new Error('支付方式参数值为 WXPAY、ALIPAY') + } + // 目前微信只支持JSAPI,h5支付开通后取消该验证 + const openId = store.state.app.openId || '' + if (_options.payType === 'WXPAY' && !openId) { + return util.Tips({ + title: '请在微信客户端进行支付操作' + }) + } + _options.payInfo.openid = openId + uni.showLoading({ + title: '支付中', + mask: true + }) + _options.createOrderFun({ + ..._options.payInfo, + payType: _options.payType + }).then(res => { + const payConfig = res.data + switch (_options.payType) { + // 微信JSAPI支付 + case 'WXPAY': + wxPayJSAPI(payConfig.jsapiResult) + break + case 'ALIPAY': + _options.aliPaySuccess(payConfig.body) + break + } + }).catch(() => { + util.Tips({ + title: '预下单失败' + }) + }).finally(uni.hideLoading) +} + +const wxPayJSAPI = (payData) => { + function onBridgeReady() { + WeixinJSBridge.invoke('getBrandWCPayRequest', { + "appId": payData.appId, //公众号ID,由商户传入 + "timeStamp": payData.timeStamp, //时间戳,自1970年以来的秒数 + "nonceStr": payData.nonceStr, //随机串 + "package": payData.packageValue, + "signType": payData.signType, //微信签名方式: + "paySign": payData.paySign //微信签名 + }, + function(res) { + if (res.err_msg == "get_brand_wcpay_request:ok") { + _options.wxPaySuccess() + } + }) + } + if (typeof WeixinJSBridge == "undefined") { + if (document.addEventListener) { + document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false) + } else if (document.attachEvent) { + document.attachEvent('WeixinJSBridgeReady', onBridgeReady) + document.attachEvent('onWeixinJSBridgeReady', onBridgeReady) + } + } else { + onBridgeReady() + } +} + +export default unityPay diff --git a/yudao-ui-app/static/images/mallLogo.png b/yudao-ui-app/static/images/mallLogo.png index 65c18a6ef..303ffdf7d 100644 Binary files a/yudao-ui-app/static/images/mallLogo.png and b/yudao-ui-app/static/images/mallLogo.png differ