/* * Copyright (c) 2021-2031, 河北计全科技有限公司 (https://www.jeequan.com & jeequan@126.com). *

* Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0; * you may not use this file except in compliance with the License. * You may obtain a copy of the License at *

* http://www.gnu.org/licenses/lgpl.html *

* Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.jeequan.jeepay.mgr.ctrl.merchant; import cn.hutool.core.codec.Base64; import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.jeequan.jeepay.core.aop.MethodLog; import com.jeequan.jeepay.core.constants.ApiCodeEnum; import com.jeequan.jeepay.core.constants.CS; import com.jeequan.jeepay.core.entity.MchInfo; import com.jeequan.jeepay.core.entity.SysUser; import com.jeequan.jeepay.core.model.ApiRes; import com.jeequan.jeepay.mgr.ctrl.CommonCtrl; import com.jeequan.jeepay.mgr.mq.queue.MqQueue4ModifyMchUserRemove; import com.jeequan.jeepay.mgr.mq.topic.MqTopic4ModifyMchInfo; import com.jeequan.jeepay.service.impl.MchInfoService; import com.jeequan.jeepay.service.impl.SysUserAuthService; import com.jeequan.jeepay.service.impl.SysUserService; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import java.util.*; /** * 商户管理类 * * @author pangxiaoyu * @site https://www.jeepay.vip * @date 2021-06-07 07:15 */ @RestController @RequestMapping("/api/mchInfo") public class MchInfoController extends CommonCtrl { @Autowired private MchInfoService mchInfoService; @Autowired private SysUserService sysUserService; @Autowired private MqTopic4ModifyMchInfo mqTopic4ModifyMchInfo; @Autowired private MqQueue4ModifyMchUserRemove mqQueue4ModifyMchUserRemove; @Autowired private SysUserAuthService sysUserAuthService; /** * @author: pangxiaoyu * @date: 2021/6/7 16:14 * @describe: 商户信息列表 */ @PreAuthorize("hasAuthority('ENT_MCH_LIST')") @RequestMapping(value="", method = RequestMethod.GET) public ApiRes list() { MchInfo mchInfo = getObject(MchInfo.class); LambdaQueryWrapper wrapper = MchInfo.gw(); if (StringUtils.isNotEmpty(mchInfo.getMchNo())) wrapper.eq(MchInfo::getMchNo, mchInfo.getMchNo()); if (StringUtils.isNotEmpty(mchInfo.getIsvNo())) wrapper.eq(MchInfo::getIsvNo, mchInfo.getIsvNo()); if (StringUtils.isNotEmpty(mchInfo.getMchName())) wrapper.eq(MchInfo::getMchName, mchInfo.getMchName()); if (mchInfo.getType() != null) wrapper.eq(MchInfo::getType, mchInfo.getType()); if (mchInfo.getState() != null) wrapper.eq(MchInfo::getState, mchInfo.getState()); wrapper.orderByDesc(MchInfo::getCreatedAt); IPage pages = mchInfoService.page(getIPage(), wrapper); return ApiRes.page(pages); } /** * @author: pangxiaoyu * @date: 2021/6/7 16:14 * @describe: 新增商户信息 */ @PreAuthorize("hasAuthority('ENT_MCH_INFO_ADD')") @MethodLog(remark = "新增商户") @RequestMapping(value="", method = RequestMethod.POST) public ApiRes add() { MchInfo mchInfo = getObject(MchInfo.class); // 获取传入的商户登录名 String loginUserName = getValStringRequired("loginUserName"); mchInfo.setMchNo("M" + DateUtil.currentSeconds()); // 当前登录用户信息 SysUser sysUser = getCurrentUser().getSysUser(); mchInfo.setCreatedUid(sysUser.getSysUserId()); mchInfo.setCreatedBy(sysUser.getRealname()); mchInfoService.addMch(mchInfo, loginUserName); return ApiRes.ok(); } /** * @author: pangxiaoyu * @date: 2021/6/7 16:14 * @describe: 删除商户信息 */ @PreAuthorize("hasAuthority('ENT_MCH_INFO_DEL')") @MethodLog(remark = "删除商户") @RequestMapping(value="/{mchNo}", method = RequestMethod.DELETE) public ApiRes delete(@PathVariable("mchNo") String mchNo) { List userIdList = mchInfoService.removeByMchNo(mchNo); // 推送mq删除redis用户缓存 mqQueue4ModifyMchUserRemove.push(userIdList); // 推送mq到目前节点进行更新数据 mqTopic4ModifyMchInfo.push(mchNo); return ApiRes.ok(); } /** * @author: pangxiaoyu * @date: 2021/6/7 16:14 * @describe: 更新商户信息 */ @PreAuthorize("hasAuthority('ENT_MCH_INFO_EDIT')") @MethodLog(remark = "更新商户信息") @RequestMapping(value="/{mchNo}", method = RequestMethod.PUT) public ApiRes update(@PathVariable("mchNo") String mchNo) { //获取查询条件 MchInfo mchInfo = getObject(MchInfo.class); mchInfo.setMchNo(mchNo); //设置商户号主键 mchInfo.setType(null); //防止变更商户类型 mchInfo.setIsvNo(null); // 待删除用户登录信息的ID list Set removeCacheUserIdList = new HashSet<>(); // 如果商户状态为禁用状态,清除该商户用户登录信息 if (mchInfo.getState() == CS.NO) { sysUserService.list( SysUser.gw().select(SysUser::getSysUserId).eq(SysUser::getBelongInfoId, mchNo).eq(SysUser::getSysType, CS.SYS_TYPE.MCH) ) .stream().forEach(u -> removeCacheUserIdList.add(u.getSysUserId())); } //判断是否重置密码 if (getReqParamJSON().getBooleanValue("resetPass")) { // 待更新的密码 String updatePwd = getReqParamJSON().getBoolean("defaultPass") ? CS.DEFAULT_PWD : Base64.decodeStr(getValStringRequired("confirmPwd")) ; // 获取商户超管 Long mchAdminUserId = sysUserService.findMchAdminUserId(mchNo); //重置超管密码 sysUserAuthService.resetAuthInfo(mchAdminUserId, null, null, updatePwd, CS.SYS_TYPE.MCH); //删除超管登录信息 removeCacheUserIdList.add(mchAdminUserId); } // 推送mq删除redis用户认证信息 if (!removeCacheUserIdList.isEmpty()) { mqQueue4ModifyMchUserRemove.push(removeCacheUserIdList); } //更新商户信息 if (!mchInfoService.updateById(mchInfo)) { return ApiRes.fail(ApiCodeEnum.SYS_OPERATION_FAIL_UPDATE); } // 推送mq到目前节点进行更新数据 mqTopic4ModifyMchInfo.push(mchNo); return ApiRes.ok(); } /** * @author: pangxiaoyu * @date: 2021/6/7 16:14 * @describe: 查询商户信息 */ @PreAuthorize("hasAnyAuthority('ENT_MCH_INFO_VIEW', 'ENT_MCH_INFO_EDIT')") @RequestMapping(value="/{mchNo}", method = RequestMethod.GET) public ApiRes detail(@PathVariable("mchNo") String mchNo) { MchInfo mchInfo = mchInfoService.getById(mchNo); if (mchInfo == null) return ApiRes.fail(ApiCodeEnum.SYS_OPERATION_FAIL_SELETE); SysUser sysUser = sysUserService.getById(mchInfo.getInitUserId()); if (sysUser != null) mchInfo.addExt("loginUserName", sysUser.getLoginUsername()); return ApiRes.ok(mchInfo); } }