ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/dto/AppMemberBindingDto.java
@@ -19,6 +19,9 @@ @ApiModelProperty(value = "商户id") private Long shopId; @ApiModelProperty(value = "绑定类型1商城订单2活动订单3线下订单4核销优惠券5核销奖品6商户创建会员7平台变动") private Integer bindingType; @ApiModelProperty(value = "商户名称") private String shopName; } ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/member/Member.java
@@ -166,6 +166,11 @@ @TableField("frozen_flag") private Integer frozenFlag; /** * 绑定类型1商城订单2活动订单3线下订单4核销优惠券5核销奖品6商户创建7平台变动 */ @TableField("binding_type") private Integer bindingType; @Override protected Serializable pkVal() { ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/domain/poji/sys/SysDept.java
@@ -66,6 +66,9 @@ /** 菜单组 */ private Long[] staffMenuIds; /** 微信部门id */ private Long wxDeptId; public Long getDeptId() { return deptId; @@ -216,6 +219,14 @@ this.staffMenuIds = staffMenuIds; } public Long getWxDeptId() { return wxDeptId; } public void setWxDeptId(Long wxDeptId) { this.wxDeptId = wxDeptId; } @Override public String toString() { return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) @@ -234,6 +245,7 @@ .append("updateBy", getUpdateBy()) .append("updateTime", getUpdateTime()) .append("dataScope", getDataScope()) .append("wxDeptId", getWxDeptId()) .toString(); } } ruoyi-modules/ruoyi-file/src/main/resources/bootstrap.yml
@@ -21,10 +21,18 @@ # 服务注册地址 server-addr: 47.109.78.184:5000 #server-addr: 127.0.0.1:8848 #pro #namespace: 9591ef9f-a49a-4900-be35-d77258bdd639 #dev namespace: d39a744d-116f-4280-8445-0502dd1a3116 config: # 配置中心地址 server-addr: 47.109.78.184:5000 #server-addr: 127.0.0.1:8848 #pro #namespace: 9591ef9f-a49a-4900-be35-d77258bdd639 #dev namespace: d39a744d-116f-4280-8445-0502dd1a3116 # 配置文件格式 file-extension: yml # 共享配置 ruoyi-modules/ruoyi-member/src/main/java/com/ruoyi/member/service/impl/member/MemberServiceImpl.java
@@ -527,6 +527,7 @@ member.setBindingFlag(appMemberBindingDto.getBindingFlag()); member.setRelationShopId(appMemberBindingDto.getShopId()); member.setRelationShopName(appMemberBindingDto.getShopName()); member.setBindingType(appMemberBindingDto.getBindingType()); this.saveOrUpdate(member); } @@ -659,6 +660,7 @@ member.setMiniOpenid(null); member.setBindingFlag(1); member.setBindingTime(new Date()); member.setBindingType(6); // Get shop information and set it to the member Shop shop = remoteShopService.getShop(merMemberAddDto.getShopId()).getData(); member.setRelationShopName(shop.getShopName()); @@ -971,6 +973,7 @@ member.setRelationShopId(shop.getShopId()); member.setRelationShopName(shop.getShopName()); member.setBindingFlag(1); member.setBindingType(7); member.setBindingTime(new Date()); member.setUpdateTime(new Date()); member.setUpdateUserId(mgtMemberRelEditDto.getUserId()); ruoyi-modules/ruoyi-order/pom.xml
@@ -102,20 +102,17 @@ <version>2.3.3</version> </dependency> <!-- 微信支付分提供的工具包,用于生成公用的http-client客户端 --> <dependency> <groupId>com.github.wechatpay-apiv3</groupId> <artifactId>wechatpay-apache-httpclient</artifactId> <version>0.4.9</version> </dependency> <dependency> <groupId>com.github.wechatpay-apiv3</groupId> <artifactId>wechatpay-java</artifactId> <version>0.2.10</version> </dependency> <dependency> <groupId>com.github.binarywang</groupId> <artifactId>weixin-java-miniapp</artifactId> @@ -126,12 +123,26 @@ <artifactId>weixin-java-pay</artifactId> <version>4.5.0</version> </dependency> <!-- 阿里云 --> <dependency> <groupId>com.aliyun</groupId> <artifactId>alibabacloud-dysmsapi20170525</artifactId> <version>2.0.24</version> </dependency> <!-- 测试类 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <version>2.7.7</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13.1</version> <scope>test</scope> </dependency> </dependencies> <build> ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/config/WxPayConfiguration.java
@@ -42,6 +42,7 @@ payConfig.setApiV3Key(StringUtils.trimToNull(this.properties.getApiV3Key())); payConfig.setPrivateKeyPath(StringUtils.trimToNull(this.properties.getPrivateKeyPath())); payConfig.setPrivateCertPath(StringUtils.trimToNull(this.properties.getPrivateCertPath())); payConfig.setNotifyUrl("https://wxapp.hhhrt.cn/order/app/notify/payNotify"); // 平台特约商户号 PLATFORM_TY_MAC_ID = this.properties.getPlatformTyMacId(); ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/business/MerOrderController.java
@@ -64,6 +64,16 @@ return R.ok(merVerifyCodeVo); } @RequestMapping(value = "/verifyOrder", method = RequestMethod.POST) @ApiOperation(value = "核销code") public R<MerVerifyOrderVo> verifyOrder(@RequestBody MerVerifyCodeDto merVerifyCodeDto) { Long userId = SecurityUtils.getUserId(); merVerifyCodeDto.setUserId(userId); String verifyCode = merVerifyCodeDto.getVerifyCode(); MerVerifyOrderVo merVerifyOrderVo = orderService.verifyOrder(verifyCode,merVerifyCodeDto.getShopId()); return R.ok(merVerifyOrderVo); } @RequestMapping(value = "/sureVerifyOrder", method = RequestMethod.POST) @ApiOperation(value = "核销订单") public R<MerVerifyOrderVo> sureVerifyOrder(@RequestBody MerVerifyOrderDto merVerifyOrderDto) { ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/miniapp/AppOrderController.java
@@ -107,6 +107,7 @@ appMemberBindingDto.setShopId(appPlaceOrderDto.getShopId()); appMemberBindingDto.setUserId(userId); appMemberBindingDto.setBindingFlag(1); appMemberBindingDto.setBindingType(1); memberService.updateMemberBinding(appMemberBindingDto); } } @@ -131,6 +132,7 @@ appMemberBindingDto.setShopId(appPlaceActivityDto.getShopId()); appMemberBindingDto.setUserId(userId); appMemberBindingDto.setBindingFlag(1); appMemberBindingDto.setBindingType(2); memberService.updateMemberBinding(appMemberBindingDto); } } ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/controller/miniapp/NotifyController.java
@@ -51,7 +51,7 @@ @Resource private OrderService orderService; @Autowired @Resource private WxPayService wxService; @Resource private BackMessageService backMessageService; ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/impl/order/OrderServiceImpl.java
@@ -5,9 +5,17 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.binarywang.wxpay.bean.ecommerce.PartnerTransactionsRequest; import com.github.binarywang.wxpay.bean.ecommerce.PartnerTransactionsResult; import com.github.binarywang.wxpay.bean.ecommerce.RefundNotifyResult; import com.github.binarywang.wxpay.bean.ecommerce.TransactionsResult; import com.github.binarywang.wxpay.bean.ecommerce.enums.TradeTypeEnum; import com.github.binarywang.wxpay.bean.profitsharingV3.ProfitSharingNotifyResult; import com.github.binarywang.wxpay.config.WxPayConfig; import com.github.binarywang.wxpay.exception.WxPayException; import com.github.binarywang.wxpay.service.WxPayService; import com.google.common.base.Joiner; import com.google.gson.Gson; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.common.core.utils.StringUtils; @@ -52,7 +60,6 @@ import lombok.extern.slf4j.Slf4j; import org.redisson.api.RLock; import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -119,11 +126,11 @@ @Resource private PayRecordService payRecordService; @Autowired @Resource private RedissonClient redissonClient; /*@Autowired private WxPayService wxService;*/ @Resource private WxPayService wxService; @Resource private PaymentMessageService paymentMessageService; @@ -740,8 +747,8 @@ appPlaceOrderVo.setOrderNo(orderNo); String goodsName = ""; if (null != goods) { goodsName = goods.getGoodsName(); if (null != goodsNameList) { goodsName = String.join(",", goodsNameList); } // 小程序微信下单支付 @@ -784,14 +791,14 @@ * @param payerClientIp * @param goodsNameList */ /*private void createWxPayInfo(AppPlaceOrderVo appPlaceOrderVo, Long userId, Long shopId, public void createWxPayInfo(AppPlaceOrderVo appPlaceOrderVo, Long userId, Long shopId, String goodsName, String orderNo, String orderId, BigDecimal payMoney, String openid, String payerClientIp, List<String> goodsNameList){ try { // 创建支付订单 R<String> resultMch = remoteShopService.getShopSubMchId(shopId); String subMchId = resultMch.getData(); //R<String> resultMch = remoteShopService.getShopSubMchId(shopId); String subMchId = "1650744551"; if (StringUtils.isEmpty(subMchId)) { throw new ServiceException("获取微信商户号失败"); } @@ -859,7 +866,7 @@ } catch (WxPayException e) { throw new ServiceException(e.getMessage()); } }*/ } /** @@ -1712,6 +1719,7 @@ if (member.getBindingFlag() != 1) { AppMemberBindingDto appMemberBindingDto = new AppMemberBindingDto(); appMemberBindingDto.setBindingFlag(1); appMemberBindingDto.setBindingType(4); appMemberBindingDto.setShopId(shop.getShopId()); appMemberBindingDto.setShopName(shop.getShopName()); appMemberBindingDto.setUserId(memberCoupon.getUserId()); @@ -1828,6 +1836,7 @@ if (member.getBindingFlag() != 1) { AppMemberBindingDto appMemberBindingDto = new AppMemberBindingDto(); appMemberBindingDto.setBindingFlag(1); appMemberBindingDto.setBindingType(5); appMemberBindingDto.setShopId(shop.getShopId()); appMemberBindingDto.setShopName(shop.getShopName()); appMemberBindingDto.setUserId(memberGiftRecord.getUserId()); @@ -1920,7 +1929,6 @@ sysUser.setAvatar("https://hongruitang.oss-cn-beijing.aliyuncs.com/default.png"); String password = "hongruitang"; sysUser.setPassword(SecurityUtils.encryptPassword(password)); log.debug("sysUser" + sysUser.toString()); sysUser = remoteUserService.registerUser(sysUser).getData(); member = new Member(); member.setMemberId(memberId); @@ -1929,6 +1937,7 @@ member.setRealName(name); member.setNickName(name); member.setBindingFlag(1); member.setBindingType(3); member.setRelationShopId(shopId); member.setRelationShopName(shop.getShopName()); remoteMemberService.createNewMember(member); @@ -2188,6 +2197,7 @@ appMemberBindingDto.setShopName(shop.getShopName()); appMemberBindingDto.setUserId(userId); appMemberBindingDto.setBindingFlag(1); appMemberBindingDto.setBindingType(3); remoteMemberService.updateMemberBinding(appMemberBindingDto); } //更新商户统计 @@ -2217,10 +2227,12 @@ @Override public List<MerOrderPageVo> pageMerOrder(Page page, MerOrderPageDto merOrderPageDto) { if (StringUtils.isNotBlank(merOrderPageDto.getKeyword())) { // 获取关键字对应的用户ID MgtUserIdByKeywordDto userIdByKeywordDto = new MgtUserIdByKeywordDto(); userIdByKeywordDto.setKeyword(merOrderPageDto.getKeyword()); MgtUserIdByKeywordVo userIdByKeywordVo = remoteMemberService.getUserIdByKeyword(userIdByKeywordDto).getData(); if (StringUtils.isNotBlank(userIdByKeywordVo.getUserIds())) { // 将用户ID转换成List<Long>类型 List<Long> userIdList = Arrays.stream(userIdByKeywordVo.getUserIds().split(",")) .map(Long::parseLong) .collect(Collectors.toList()); @@ -2228,6 +2240,8 @@ merOrderPageDto.setMemberUserId(null); } } // 获取订单列表 List<MerOrderPageVo> merOrderPageVoList = orderMapper.pageMerOrder(page, merOrderPageDto); if (merOrderPageVoList != null && !merOrderPageVoList.isEmpty()) { Long userId; @@ -2236,15 +2250,17 @@ String orderFromDesc; BigDecimal zeroBig = new BigDecimal("0.00"); StringJoiner userIdSj = new StringJoiner(","); // 遍历订单列表 for (MerOrderPageVo merOrderPageVo : merOrderPageVoList) { userId = merOrderPageVo.getUserId(); userIdSj.add(userId.toString()); orderFrom = merOrderPageVo.getOrderFrom(); // 根据订单来源设置订单来源描述 if (orderFrom != null) { if (orderFrom == 1) { orderFromDesc = "商城订单"; } else if(orderFrom == 2){ orderFromDesc = "店铺砍价活动("+merOrderPageVo.getActivityName()+")"; } else if (orderFrom == 2) { orderFromDesc = "店铺砍价活动(" + merOrderPageVo.getActivityName() + ")"; } else { orderFromDesc = "线下创建"; } @@ -2252,18 +2268,22 @@ orderFromDesc = "商城订单"; } merOrderPageVo.setOrderFromDesc(orderFromDesc); // 设置未支付金额为0.00,如果未支付金额小于0,则设置为0.00 if (merOrderPageVo.getUnPaidMoney() == null) { merOrderPageVo.setUnPaidMoney(zeroBig); } if(merOrderPageVo.getUnPaidMoney().compareTo(zeroBig)<0){ if (merOrderPageVo.getUnPaidMoney().compareTo(zeroBig) < 0) { merOrderPageVo.setUnPaidMoney(zeroBig); } } // 根据用户ID列表获取用户信息 MgtBaseBathDto mgtBaseBathDto = new MgtBaseBathDto(); mgtBaseBathDto.setIds(userIdSj.toString()); List<MgtSimpleMemberVo> simpleMemberVoList = remoteMemberService.listSimpleVoByIds(mgtBaseBathDto).getData(); Map<Long, MgtSimpleMemberVo> userMap = simpleMemberVoList.stream() .collect(Collectors.toMap(MgtSimpleMemberVo::getUserId, Function.identity())); // 遍历订单列表,设置用户信息 for (MerOrderPageVo merOrderPageVo : merOrderPageVoList) { if (merOrderPageVo.getUserId() != null && userMap.get(merOrderPageVo.getUserId()) != null) { merOrderPageVo.setUserName(userMap.get(merOrderPageVo.getUserId()).getRealName()); ruoyi-modules/ruoyi-order/src/main/java/com/ruoyi/order/service/order/OrderService.java
@@ -521,4 +521,10 @@ * @return */ List<MerOrderPageVo> pageMerMemberPayOrder(Page page,MerMemberNoClearOrderDto merOrderPageDto); void createWxPayInfo(AppPlaceOrderVo appPlaceOrderVo, Long userId, Long shopId, String goodsName, String orderNo, String orderId, BigDecimal payMoney, String openid, String payerClientIp, List<String> goodsNameList); } ruoyi-modules/ruoyi-order/src/main/resources/bootstrap.yml
@@ -16,10 +16,18 @@ # 服务注册地址 server-addr: 47.109.78.184:5000 #server-addr: 127.0.0.1:8848 #pro #namespace: 9591ef9f-a49a-4900-be35-d77258bdd639 #dev namespace: d39a744d-116f-4280-8445-0502dd1a3116 config: # 配置中心地址 server-addr: 47.109.78.184:5000 #server-addr: 127.0.0.1:8848 #pro #namespace: 9591ef9f-a49a-4900-be35-d77258bdd639 #dev namespace: d39a744d-116f-4280-8445-0502dd1a3116 # 配置文件格式 file-extension: yml # 共享配置 ruoyi-modules/ruoyi-order/src/main/resources/mapper/order/OrderMapper.xml
@@ -1719,7 +1719,7 @@ <if test="param.goodsType !=null and param.goodsType != ''"> AND tog.goods_type = #{param.goodsType} </if> GROUP BY toc.create_time GROUP BY mapKey </select> <select id="getStaffActivityMemberTotal" resultType="com.ruoyi.system.api.domain.vo.MgtMapIntTotalVo"> @@ -1735,7 +1735,7 @@ <if test="param.goodsType !=null and param.goodsType != ''"> AND tog.goods_type = #{param.goodsType} </if> GROUP BY toc.create_time GROUP BY mapKey </select> <select id="countUserBuyGoodsNum" resultType="java.lang.Integer"> ruoyi-modules/ruoyi-order/src/test/java/com/ruoyi/order/orderTest.java
New file @@ -0,0 +1,38 @@ package com.ruoyi.order; import com.ruoyi.order.service.order.OrderService; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import javax.annotation.Resource; /** * @ClassName orderTest * @Description TODO * @Author jqs * @Date 2023/8/18 11:12 * @Version 1.0 */ @RunWith(SpringJUnit4ClassRunner.class) @SpringBootTest(classes = RuoYiOrderApplication.class) public class orderTest { @Resource private OrderService orderService; /*@Test public void main() { AppPlaceOrderVo appPlaceOrderVo = new AppPlaceOrderVo(); orderService.createWxPayInfo( appPlaceOrderVo, 280L, 50L, "测试支付商品", "SC202308160046", "0fa36ad3edcc40bebc2795cc505b5272", new BigDecimal("0.1"), "oL-gp5GG6-KRVSIAE_qYLMULPFjw", "127.0.0.1", Arrays.asList("测试支付商品")); System.out.println(appPlaceOrderVo.toString()); }*/ } ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/pojo/shop/ShopAuthentication.java
@@ -61,6 +61,7 @@ */ @TableField("audit_status") private Integer auditStatus; /** * 主题类型1个人2企业 */ @@ -86,6 +87,9 @@ */ @TableField("bl_registered_address") private String blRegisteredAddress; @TableField("bl_business_start_time") private String blBusinessStartTime; /** * 营业执照期限 */ @@ -106,6 +110,10 @@ */ @TableField("lp_id_card") private String lpIdCard; @TableField("lp_id_address") private String lpIdAddress; /** * 法人身份证开始日期 */ ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/MerAgencyPageVo.java
@@ -22,6 +22,9 @@ @ApiModelProperty(value="商户状态0冻结1正常2终止合作") private Integer shopStatus; @ApiModelProperty(value = "商户图片") private String shopPicture; @ApiModelProperty(value = "商户名称") private String shopName; @@ -38,5 +41,6 @@ @JsonFormat(pattern = "yyyy-MM-dd") private Date cooperationEndTime; @ApiModelProperty(value="合作状态0终止1开启") private Integer cooperativeFlag; } ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/domain/vo/MgtShopAuthPageVo.java
@@ -32,9 +32,18 @@ @ApiModelProperty(value="认证类型") private String mainType; @ApiModelProperty(value="审核状态") @ApiModelProperty(value="审核状态0待进件1资料校验中2待账户验证3审核中4已驳回5待签约6完成7已冻结8已作废") private Integer auditStatus; @ApiModelProperty(value="审核状态描述") private String auditStatusDesc; @ApiModelProperty(value = "签约状态1待签约2已签约3无法签约") private Integer signState; @ApiModelProperty(value = "签约链接") private String signUrl; } ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/service/impl/shop/ShopServiceImpl.java
@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.binarywang.wxpay.bean.ecommerce.ApplymentsResult; import com.github.binarywang.wxpay.bean.ecommerce.ApplymentsStatusResult; import com.github.binarywang.wxpay.exception.WxPayException; import com.ruoyi.common.core.constant.CacheConstants; @@ -352,6 +353,8 @@ shopAuthentication.setAuthId(authId); shopAuthentication.setDelFlag(0); shopAuthentication.setShopId(shop.getShopId()); shopAuthentication.setAuditStatus(0); shopAuthentication.setSignState(1); shopAuthenticationService.save(shopAuthentication); //商户分成信息初始化 ShopProportion shopProportion = new ShopProportion(); @@ -593,13 +596,19 @@ } mgtShopInfoVo.setShopTagIds(shopTagJs.toString()); } //归属员工 if(mgtShopInfoVo.getBelongUserId()!=null){ SysUser sysUser = sysUserService.getSysUser(mgtShopInfoVo.getBelongUserId()).getData(); mgtShopInfoVo.setBelongUserName(sysUser.getNickName()); if(sysUser!=null){ mgtShopInfoVo.setBelongUserName(sysUser.getNickName()); } } //归属商户 if(mgtShopInfoVo.getBelongShopId()!=null){ Shop belongShop = this.getByShopId(mgtShopInfoVo.getBelongShopId()); mgtShopInfoVo.setBelongShopName(belongShop.getShopName()); if(belongShop!=null){ mgtShopInfoVo.setBelongShopName(belongShop.getShopName()); } } //商户关联用户 List<ShopRelUser> shopRelUserList = shopRelUserService.listByShopId(shopId); @@ -994,16 +1003,22 @@ Shop shop = this.getByShopId(shopAuthentication.getShopId()); String applyNumber = IdUtils.simpleUUID(); if(mgtShopAuthDto.getBlBusinessFoeverFlag()!=null&&mgtShopAuthDto.getBlBusinessFoeverFlag()==1){ mgtShopAuthDto.setBlBusinessDeanline("长期"); mgtShopAuthDto.setBlBusinessDeanline(mgtShopAuthDto.getBlBusinessStartTime()+",长期"); } if(mgtShopAuthDto.getLpIcForeverFlag()!=null&&mgtShopAuthDto.getLpIcForeverFlag()==1){ mgtShopAuthDto.setLpIcEndDate("长期"); } BeanUtils.copyProperties(mgtShopAuthDto , shopAuthentication); shopAuthentication.setApplyNumber(applyNumber); ApplymentsResult applymentsResult; try { applymentsResult = wechatPayUtils.ecommerceApply(shopAuthentication,applyNumber,shop); } catch (Exception e) { log.debug("-----"+shop.getShopId()+":进件异常-----"); throw new RuntimeException(e); } shopAuthentication.setAuditStatus(3); shopAuthenticationService.saveOrUpdate(shopAuthentication); //wechatPayUtils.ecommerceApply(shopAuthentication,applyNumber,shop); } /** ruoyi-modules/ruoyi-shop/src/main/java/com/ruoyi/shop/util/WechatPayUtils.java
@@ -1,5 +1,6 @@ package com.ruoyi.shop.util; import com.alibaba.fastjson.JSONObject; import com.github.binarywang.wxpay.bean.ecommerce.ApplymentsRequest; import com.github.binarywang.wxpay.bean.ecommerce.ApplymentsResult; import com.github.binarywang.wxpay.bean.ecommerce.ApplymentsStatusResult; @@ -56,7 +57,13 @@ business_license_info.setMerchantName(shopAuthentication.getBlShopName()); business_license_info.setLegalPerson(shopAuthentication.getBlCorporateName()); business_license_info.setCompanyAddress(shopAuthentication.getBlRegisteredAddress()); business_license_info.setBusinessTime("[\"2023-05-08\",\"长期\"]"); List<String> businessTimeList = new ArrayList<>(); businessTimeList.add(0,shopAuthentication.getBlBusinessStartTime()); businessTimeList.add(1,shopAuthentication.getBlBusinessDeanline()); if(businessTimeList!=null&&businessTimeList.size()>1){ String businessTime = JSONObject.toJSONString(businessTimeList); business_license_info.setBusinessTime(businessTime); } request.setBusinessLicenseInfo(business_license_info); //法人证件 request.setIdDocType("IDENTIFICATION_TYPE_MAINLAND_IDCARD"); @@ -71,7 +78,7 @@ lpIcBackIO.close(); id_card_info.setIdCardName(shopAuthentication.getLpCorporateName()); id_card_info.setIdCardNumber(shopAuthentication.getLpIdCard()); id_card_info.setIdCardAddress("四川省泸州市江阳区桃园路1号2号楼4单元1号"); id_card_info.setIdCardAddress(shopAuthentication.getLpIdAddress()); id_card_info.setIdCardValidTimeBegin(shopAuthentication.getLpIcStartDate()); id_card_info.setIdCardValidTime(shopAuthentication.getLpIcEndDate()); request.setIdCardInfo(id_card_info); @@ -118,8 +125,8 @@ contactInfo.setContactType("65"); contactInfo.setContactName(shopAuthentication.getLpCorporateName()); contactInfo.setContactIdCardNumber(shopAuthentication.getLpIdCard()); contactInfo.setMobilePhone("13882237106"); contactInfo.setContactEmail("343695869@qq.com"); contactInfo.setMobilePhone(shopAuthentication.getLpMobilePhone()); contactInfo.setContactEmail(shopAuthentication.getLpContactEmail()); request.setContactInfo(contactInfo); //店铺信息 ApplymentsRequest.SalesSceneInfo salesSceneInfo = new ApplymentsRequest.SalesSceneInfo(); @@ -127,6 +134,7 @@ InputStream storeQrCodeIO = OBSUploadUtils.getOSSInputStream(shop.getShopCode().replace("https://hongruitang.oss-cn-beijing.aliyuncs.com/","")); ImageUploadResult storeQrCodeIR = merchantMediaService.imageUploadV3(storeQrCodeIO,applyNumber+"storeQrCode.jpg"); salesSceneInfo.setStoreQrCode(storeQrCodeIR.getMediaId()); storeQrCodeIO.close(); request.setSalesSceneInfo(salesSceneInfo); request.setMerchantShortname(shop.getShopName()); request.setBusinessAdditionPics(shopAuthentication.getBaPics()); ruoyi-modules/ruoyi-shop/src/main/resources/mapper/shop/ShopMapper.xml
@@ -404,8 +404,11 @@ CONCAT(ts.shop_area_name,ts.shop_address) shopAddress, ts.shopowner_name shopownerName, ts.shopowner_phone shopownerPhone, ts.cooperation_end_time cooperationEndTime ts.cooperation_end_time cooperationEndTime, ts.cooperative_flag cooperativeFlag, tsf.file_uel shopPicture FROM t_shop ts LEFT JOIN t_shop_file tsf ON tsf.shop_id = ts.shop_id AND tsf.del_flag = 0 AND tsf.file_type = 1 WHERE ts.del_flag = 0 AND ts.belong_shop_id = #{param.shopId} <if test="param.shopStatus!=null and param.shopStatus==1"> AND ts.shop_status = 1 @@ -530,6 +533,8 @@ WHEN 2 THEN '企业' END mainType, tsa.audit_status auditStatus, tsa.sign_state signState, tsa.sign_url signUrl, CASE tsa.audit_status WHEN 0 THEN '待审核' WHEN 1 THEN '审核中' ruoyi-modules/ruoyi-system/pom.xml
@@ -102,6 +102,7 @@ <version>2.3.3</version> </dependency> <!-- 测试类 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/config/WxCpConfiguration.java
New file @@ -0,0 +1,51 @@ package com.ruoyi.system.config; import lombok.AllArgsConstructor; import me.chanjar.weixin.common.util.crypto.WxCryptUtil; import me.chanjar.weixin.cp.api.WxCpService; import me.chanjar.weixin.cp.api.impl.WxCpServiceImpl; import me.chanjar.weixin.cp.config.impl.WxCpDefaultConfigImpl; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * @ClassName WxCpConfiguration * @Description TODO * @Author jqs * @Date 2023/8/17 12:42 * @Version 1.0 */ @Configuration @ConditionalOnClass(WxCpService.class) @EnableConfigurationProperties(WxCpProperties.class) @AllArgsConstructor public class WxCpConfiguration { private WxCpProperties properties; @Bean @ConditionalOnMissingBean public WxCpService wxService() { WxCpDefaultConfigImpl wxCpConfigStorage = new WxCpDefaultConfigImpl(); wxCpConfigStorage.setCorpId(properties.getCorpId()); wxCpConfigStorage.setAgentId(properties.getAgentId()); wxCpConfigStorage.setCorpSecret(properties.getAgentSecret()); WxCpService wxService = new WxCpServiceImpl(); wxService.setWxCpConfigStorage(wxCpConfigStorage); return wxService; } @Bean public WxCryptUtil wxCryptUtil() { WxCryptUtil wxCryptUtil = new WxCryptUtil("", "", properties.getCorpId()); return wxCryptUtil; } } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/config/WxCpProperties.java
New file @@ -0,0 +1,36 @@ package com.ruoyi.system.config; import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; /** * @ClassName WxCpProperties * @Description TODO * @Author jqs * @Date 2023/8/17 12:43 * @Version 1.0 */ @Data @ConfigurationProperties(prefix = "wx.cp") public class WxCpProperties { /** * */ private String corpId; /** * */ private Integer agentId; /** * */ private String agentSecret; /** * */ private String authorizeState; } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/conslole/QYWXCallBackController.java
@@ -1,10 +1,16 @@ package com.ruoyi.system.controller.conslole; import com.esotericsoftware.minlog.Log; import com.ruoyi.common.core.utils.StringUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.log4j.Log4j2; import me.chanjar.weixin.common.util.crypto.WxCryptUtil; import org.apache.commons.io.IOUtils; import org.springframework.web.bind.annotation.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -19,13 +25,15 @@ @Api(value = "企业微信通知控制", tags = "企业微信通知控制", description = "企业微信通知控制") @RestController @RequestMapping("/qywx") @Log4j2 public class QYWXCallBackController { @Autowired private WxCryptUtil wxCryptUtil; @ApiOperation(value = "消息与事件接收配置") @RequestMapping(value = "/qywxNotify", method = RequestMethod.POST,consumes = "text/xml",produces = "text/xml;charset=utf-8") public String wechatPlatformEvent(@PathVariable String APPID, @RequestMapping(value = "/qywxNotify", method = {RequestMethod.GET,RequestMethod.POST}) public String wechatPlatformEvent(@RequestBody(required = false) String body, HttpServletRequest request, HttpServletResponse response ) throws Exception { @@ -35,7 +43,16 @@ String msgSignature = request.getParameter("msg_signature"); String encType = request.getParameter("encrypt_type"); String xml = IOUtils.toString(request.getReader()); Log.info("企业微信回调"+xml); log.info("企业微信回调参数nonce"+nonce); log.info("企业微信回调参数timestamp"+timestamp); log.info("企业微信回调参数signature"+signature); log.info("企业微信回调参数msgSignature"+msgSignature); log.info("企业微信回调参数encType"+encType); log.info("企业微信回调参数xml"+xml); if(StringUtils.isNotBlank(msgSignature)&&StringUtils.isNotBlank(timestamp)&&StringUtils.isNotBlank(nonce)&&StringUtils.isNotBlank(xml)){ String reponseStr = wxCryptUtil.decryptXml(msgSignature,timestamp,nonce,xml); log.info("企业微信回调参数xml解析"+reponseStr); } return "SUCCESS"; } } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/management/MgtStaffController.java
@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.poi.ExcelUtil; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.log.annotation.Log; import com.ruoyi.common.log.enums.BusinessType; import com.ruoyi.common.security.utils.SecurityUtils; @@ -17,14 +18,14 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RequestBody; 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 org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.util.List; import static com.ruoyi.common.core.web.domain.AjaxResult.success; /** * @author jqs34 @@ -150,4 +151,14 @@ sysStaffService.mgtDeleteStaff(mgtBaseGetDto); return R.ok(); } @ApiOperation(value = "导入员工数据") @PostMapping("/importSysStaff") public AjaxResult importSysStaff(@RequestPart("file") MultipartFile file) throws Exception { ExcelUtil<MgtSysStaffImportDto> util = new ExcelUtil<MgtSysStaffImportDto>(MgtSysStaffImportDto.class); List<MgtSysStaffImportDto> sysStaffImportDtoList = util.importExcel(file.getInputStream()); String message = sysStaffService.importSysStaff(sysStaffImportDtoList); return success(message); } } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/staff/StaffSysController.java
@@ -2,10 +2,12 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.utils.poi.ExcelUtil; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.security.utils.SecurityUtils; import com.ruoyi.system.api.domain.dto.MerPageDto; import com.ruoyi.system.api.domain.dto.StaffPageDto; import com.ruoyi.system.api.domain.poji.sys.SysUser; import com.ruoyi.system.domain.dto.MgtSysStaffImportDto; import com.ruoyi.system.domain.dto.StaffUseSuggestDto; import com.ruoyi.system.domain.pojo.staff.SysStaff; import com.ruoyi.system.domain.vo.StaffSuggestPageVo; @@ -15,13 +17,13 @@ import com.ruoyi.system.service.sys.ISysUserService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.RequestBody; 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 org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.util.List; import static com.ruoyi.common.core.web.domain.AjaxResult.success; /** * @author jqs34 @@ -80,4 +82,6 @@ List<StaffSuggestPageVo> staffSuggestPageVoList = staffSuggestService.pageStaffShopSuggest(page,staffPageDto); return R.ok(page.setRecords(staffSuggestPageVoList)); } } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/MgtSysStaffImportDto.java
New file @@ -0,0 +1,42 @@ package com.ruoyi.system.domain.dto; import com.ruoyi.common.core.annotation.Excel; import lombok.Data; /** * @ClassName MgtSysStaffImportDto * @Description TODO * @Author jqs * @Date 2023/8/18 15:56 * @Version 1.0 */ @Data public class MgtSysStaffImportDto { @Excel(name = "姓名") private String staffName; @Excel(name = "账号") private String userName; @Excel(name = "昵称") private String nickName; @Excel(name = "职务") private String post; @Excel(name = "部门") private String department; @Excel(name = "性别") private String gender; @Excel(name = "手机") private String mobile; @Excel(name = "座机") private String phone; @Excel(name = "邮箱") private String email; } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/pojo/staff/SysStaff.java
@@ -72,6 +72,9 @@ @TableField("head_flag") private String headFlag; /** * 企业微信userId */ @TableField("wx_user_id") private String wxUserId; ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/sys/SysDeptMapper.java
@@ -1,8 +1,9 @@ package com.ruoyi.system.mapper.sys; import java.util.List; import org.apache.ibatis.annotations.Param; import com.ruoyi.system.api.domain.poji.sys.SysDept; import org.apache.ibatis.annotations.Param; import java.util.List; /** * 部门管理 数据层 @@ -36,6 +37,16 @@ */ public SysDept selectDeptById(Long deptId); /** * @description 通过微信部门id获取部门 * @author jqs * @date 2023/8/17 16:21 * @param wxDeptId * @return SysDept */ SysDept getByWxDeptId(Long wxDeptId); /** * 根据ID查询所有子部门 * ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/scheduler/SystemScheduler.java
@@ -1,8 +1,10 @@ package com.ruoyi.system.scheduler; import com.ruoyi.system.service.staff.SysWxCpService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -14,7 +16,20 @@ @Autowired private SchedulerUtils schedulerUtils; @Autowired private SysWxCpService sysWxCpService; /** * 定时同步企业微信部门 */ @Scheduled(cron="0 0 2 * * ?") private void timingCheckMemberCoupon(){ if(schedulerUtils.getSchedulerRun()) { log.info("定时同步企业微信部门任务开始执行"); sysWxCpService.syncDepartment(); } } } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/staff/SysStaffServiceImpl.java
@@ -18,6 +18,7 @@ import com.ruoyi.system.api.service.RemoteShopService; import com.ruoyi.system.domain.dto.MgtStaffEditDto; import com.ruoyi.system.domain.dto.MgtStaffPageDto; import com.ruoyi.system.domain.dto.MgtSysStaffImportDto; import com.ruoyi.system.domain.pojo.staff.SysStaff; import com.ruoyi.system.domain.vo.MgtDeptStaffListVo; import com.ruoyi.system.domain.vo.MgtStaffPageVo; @@ -28,6 +29,7 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.Date; import java.util.List; import java.util.concurrent.TimeUnit; @@ -218,19 +220,7 @@ } /** * @description 同步组织架构 * @author jqs * @date 2023/7/18 19:06 * @param * @return void */ @Override public void synchronizeOrganizationalStructure(){ String accessToken = getQYToken(); } /** @@ -291,4 +281,63 @@ } this.saveOrUpdate(sysStaff); } /** * @description 导入员工 * @author jqs * @date 2023/8/18 16:04 * @param * @return void */ @Override public String importSysStaff(List<MgtSysStaffImportDto> staffImportDtoList){ if (StringUtils.isNull(staffImportDtoList) || staffImportDtoList.size() == 0) { throw new ServiceException("导入数据不能为空!"); } int successNum = 0; int failureNum = 0; StringBuilder successMsg = new StringBuilder(); StringBuilder failureMsg = new StringBuilder(); SysStaff sysStaff; Date nowTime = new Date(); for (MgtSysStaffImportDto entity : staffImportDtoList) { try { /*tagName = entity.getTagName(); sysTagSame = null; // 验证是否存在这个用户 queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(SysTag::getDelFlag, 0) // 查询条件:delFlag=0 .eq(SysTag::getTagType, tagType) // 查询条件:tagType=mgtTagEditDto的tagType属性 .eq(SysTag::getTagName, tagName); // 查询条件:tagName=mgtTagEditDto的tagName属性 // 执行查询,获取与查询条件匹配的SysTag对象 sysTagSame = this.getOne(queryWrapper); if (sysTagSame == null) { sysTagNew = new SysTag(); sysTagNew.setDelFlag(0); sysTagNew.setTagType(tagType); sysTagNew.setTagName(tagName); sysTagNew.setCreateTime(nowTime); sysTagNew.setSynFlag(0); this.save(sysTagNew); successNum++; successMsg.append("<br/>" + successNum + "、标签 " + sysTagNew.getTagName() + " 导入成功"); } else { failureNum++; failureMsg.append("<br/>" + failureNum + "、标签 " + sysTagSame.getTagName() + " 已存在"); }*/ } catch (Exception e) { failureNum++; String msg = "<br/>" + failureNum + "、标签 " + entity.getStaffName() + " 导入失败:"; failureMsg.append(msg + e.getMessage()); log.error(msg, e); } } if (failureNum > 0) { failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); throw new ServiceException(failureMsg.toString()); } else { successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:"); } return successMsg.toString(); } } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/staff/SysWxCpServiceImpl.java
New file @@ -0,0 +1,97 @@ package com.ruoyi.system.service.impl.staff; import com.ruoyi.system.api.domain.poji.sys.SysDept; import com.ruoyi.system.service.staff.SysWxCpService; import com.ruoyi.system.service.sys.ISysDeptService; import lombok.extern.log4j.Log4j2; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.cp.api.WxCpDepartmentService; import me.chanjar.weixin.cp.api.WxCpService; import me.chanjar.weixin.cp.bean.WxCpDepart; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; /** * @ClassName WxCpServiceImpl * @Description TODO * @Author jqs * @Date 2023/8/17 15:25 * @Version 1.0 */ @Service @Log4j2 public class SysWxCpServiceImpl implements SysWxCpService { @Resource private WxCpService wxCpService; @Resource private ISysDeptService sysDeptService; /** * @description * @author jqs * @date 2023/8/17 15:26 * @param * @return String */ @Override public String getToken(){ String accessToken = null; try { accessToken = wxCpService.getAccessToken(); } catch (WxErrorException e) { throw new RuntimeException(e); } return accessToken; } /** * @description 同步部门 * @author jqs * @date 2023/8/17 15:42 * @param * @return void */ @Override public void syncDepartment(){ WxCpDepartmentService wxCpDepartmentService = wxCpService.getDepartmentService(); try { //从企业微信拉去部门名单 List<WxCpDepart> wxCpDepartList = wxCpDepartmentService.list(null); if(wxCpDepartList!=null&&wxCpDepartList.size()>0){ for(WxCpDepart wxCpDepart : wxCpDepartList){ if(wxCpDepart.getParentId().compareTo(24L)<0){ //获取系统内对应部门 SysDept sysDept = sysDeptService.getByWxDeptId(wxCpDepart.getId()); //判断是否有该部门,没有则新建 if(sysDept!=null){ //判断是否有变化 if(!sysDept.getDeptName().equals(wxCpDepart.getName())||sysDept.getOrderNum()!=wxCpDepart.getOrder().intValue()){ sysDept.setDeptName(wxCpDepart.getName()); sysDept.setOrderNum(wxCpDepart.getOrder().intValue()); sysDept.setUpdateBy("企业微信同步"); sysDeptService.updateDept(sysDept); log.info("企业微信同步更新部门:"+wxCpDepart.getName()); } }else{ sysDept = new SysDept(); sysDept.setDelFlag("0"); sysDept.setStatus("0"); sysDept.setParentId(100L); sysDept.setOrderNum(wxCpDepart.getOrder().intValue()); sysDept.setCreateBy("企业微信同步"); sysDept.setDeptName(wxCpDepart.getName()); sysDept.setWxDeptId(wxCpDepart.getId()); sysDeptService.insertDept(sysDept); log.info("企业微信同步新增部门:"+wxCpDepart.getName()); } } } } } catch (WxErrorException e) { throw new RuntimeException(e); } } } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/sys/SysDeptServiceImpl.java
@@ -383,4 +383,17 @@ { return getChildList(list, t).size() > 0 ? true : false; } /** * @description 通过微信部门id获取部门 * @author jqs * @date 2023/8/17 16:21 * @param wxDeptId * @return SysDept */ @Override public SysDept getByWxDeptId(Long wxDeptId){ return deptMapper.getByWxDeptId(wxDeptId); } } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/staff/SysStaffService.java
@@ -5,6 +5,7 @@ import com.ruoyi.system.api.domain.dto.MgtBaseGetDto; import com.ruoyi.system.domain.dto.MgtStaffEditDto; import com.ruoyi.system.domain.dto.MgtStaffPageDto; import com.ruoyi.system.domain.dto.MgtSysStaffImportDto; import com.ruoyi.system.domain.pojo.staff.SysStaff; import com.baomidou.mybatisplus.extension.service.IService; import com.ruoyi.system.domain.vo.MgtDeptStaffListVo; @@ -86,14 +87,7 @@ */ SysStaff getByMobile(String mobile); /** * @description 同步组织架构 * @author jqs * @date 2023/7/18 19:06 * @param * @return void */ void synchronizeOrganizationalStructure(); /** * @description 编辑商户员工 @@ -103,4 +97,13 @@ * @return void */ void editSysStaffInfo(MerEditUserDto merEditUserDto); /** * @description 导入员工 * @author jqs * @date 2023/8/18 16:04 * @param * @return void */ String importSysStaff(List<MgtSysStaffImportDto> staffImportDtoList); } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/staff/SysWxCpService.java
New file @@ -0,0 +1,29 @@ package com.ruoyi.system.service.staff; /** * @ClassName WxCpService * @Description TODO * @Author jqs * @Date 2023/8/17 15:22 * @Version 1.0 */ public interface SysWxCpService { /** * @description 获取token * @author jqs * @date 2023/8/17 15:26 * @param * @return String */ String getToken(); /** * @description 同步部门 * @author jqs * @date 2023/8/17 15:42 * @param * @return void */ void syncDepartment(); } ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/sys/ISysDeptService.java
@@ -1,8 +1,9 @@ package com.ruoyi.system.service.sys; import java.util.List; import com.ruoyi.system.api.domain.poji.sys.SysDept; import com.ruoyi.system.domain.vo.TreeSelect; import java.util.List; /** * 部门管理 服务层 @@ -121,4 +122,13 @@ * @return 结果 */ public int deleteDeptById(Long deptId); /** * @description 通过微信部门id获取部门 * @author jqs * @date 2023/8/17 16:21 * @param wxDeptId * @return SysDept */ SysDept getByWxDeptId(Long wxDeptId); } ruoyi-modules/ruoyi-system/src/main/resources/bootstrap.yml
@@ -35,3 +35,14 @@ max-request-size: 200MB location: /home/temp wx: cp: corpId: ww11400938eb1b91bc agentId: 1000024 agentSecret: -wuQ2EBxNT9BJa40LdpFqyxI_8RqrZTCUNiabzBasi8 authorizeState: HONGRUITANG suiteSecret: "" token: "" encodingAESKey: "" ruoyi-modules/ruoyi-system/src/main/resources/mapper/sys/SysDeptMapper.xml
@@ -21,10 +21,11 @@ <result property="updateBy" column="update_by" /> <result property="updateTime" column="update_time" /> <result property="dataScope" column="data_scope" /> <result property="wxDeptId" column="wx_dept_id" /> </resultMap> <sql id="selectDeptVo"> select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status, d.del_flag, d.create_by, d.create_time ,d.data_scope select d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.phone, d.email, d.status, d.del_flag, d.create_by, d.create_time ,d.data_scope,d.wx_dept_id from sys_dept d </sql> @@ -63,6 +64,11 @@ <include refid="selectDeptVo"/> where dept_id = #{deptId} </select> <select id="getByWxDeptId" parameterType="Long" resultMap="SysDeptResult"> <include refid="selectDeptVo"/> where wx_dept_id = #{wxDeptId} </select> <select id="checkDeptExistUser" parameterType="Long" resultType="int"> select count(1) from sys_user where dept_id = #{deptId} and del_flag = '0' @@ -99,6 +105,7 @@ <if test="status != null">status,</if> <if test="createBy != null and createBy != ''">create_by,</if> <if test="dataScope != null and dataScope != ''">data_scope,</if> <if test="wxDeptId != null and wxDeptId != ''">wx_dept_id,</if> create_time )values( <if test="deptId != null and deptId != 0">#{deptId},</if> @@ -112,6 +119,7 @@ <if test="status != null">#{status},</if> <if test="createBy != null and createBy != ''">#{createBy},</if> <if test="dataScope != null and dataScope != ''">#{dataScope},</if> <if test="wxDeptId != null and wxDeptId != ''">#{wxDeptId},</if> sysdate() ) </insert> ruoyi-modules/ruoyi-system/src/test/java/com/ruoyi/system/systemTest.java
@@ -1,9 +1,13 @@ package com.ruoyi.system; import com.ruoyi.system.service.staff.SysWxCpService; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import javax.annotation.Resource; /** * @ClassName systemTest @@ -16,7 +20,11 @@ @SpringBootTest(classes = RuoYiSystemApplication.class) public class systemTest { @Resource private SysWxCpService sysWxCpService; @Test public void main() { sysWxCpService.syncDepartment(); } }