Forráskód Böngészése

Merge remote-tracking branch 'origin/master' into matser

吴树波 1 napja
szülő
commit
3cf176bcc8

+ 3 - 3
fs-admin/src/main/java/com/fs/his/controller/FsUserController.java

@@ -106,7 +106,7 @@ public class FsUserController extends BaseController
         SysRole sysRole = isCheckPermission();
         for (FsUserVO fsUserVO : list) {
             if(fsUserVO.getPhone() != null&&fsUserVO.getPhone()!=""){
-                if (!(sysRole.getIsCheckPhone()==1)){
+                if (!(sysRole.getIsCheckPhone()==1) || CloudHostUtils.hasCloudHostName("叮当国医")){
                     if (fsUserVO.getPhone().length()>11){
                         fsUserVO.setPhone(decryptPhoneMk(fsUserVO.getPhone()));
                     }else {
@@ -203,7 +203,7 @@ public class FsUserController extends BaseController
         SysRole sysRole = isCheckPermission();
         for (FsUserVO fsUserVO : list) {
             if(fsUserVO.getPhone() != null&&fsUserVO.getPhone()!=""){
-                if (!(sysRole.getIsCheckPhone()==1)){
+                if (!(sysRole.getIsCheckPhone()==1) || CloudHostUtils.hasCloudHostName("叮当国医")){
                     if (fsUserVO.getPhone().length()>11){
                         fsUserVO.setPhone(decryptPhoneMk(fsUserVO.getPhone()));
                     }else {
@@ -219,7 +219,7 @@ public class FsUserController extends BaseController
         return getDataTable(list);
     }
 
-    @PreAuthorize("@ss.hasPermi('his:user:export')")
+    @PreAuthorize("@ss.hasPermi('his:user:exportProject')")
     @GetMapping("/exportListProject")
     public AjaxResult exportListProject(FsUser fsUser)
     {

+ 2 - 1
fs-service/src/main/java/com/fs/his/mapper/FsIntegralOrderMapper.java

@@ -106,7 +106,8 @@ public interface FsIntegralOrderMapper extends BaseMapper<FsIntegralOrder>
             " order by o.order_id desc "+
             "</script>"})
     List<FsIntegralOrderListUVO> selectFsIntegralOrderListUVO(@Param("maps")FsIntegralOrderListUParam param);
-    @Select("select *from fs_integral_order where order_code=#{orderCode}")
+
+    @Select("select * from fs_integral_order where order_code=#{orderCode}")
     FsIntegralOrder selectFsIntegralOrderByOrderCode(String orderCode);
 
     @Select("UPDATE fs_integral_order SET `status`=3 WHERE `status`=2 and DATE(delivery_time) < DATE_SUB(CURDATE(), INTERVAL 15 DAY)")

+ 57 - 0
fs-service/src/main/java/com/fs/his/service/impl/FsIntegralOrderServiceImpl.java

@@ -34,6 +34,9 @@ import com.fs.erp.domain.ErpOrderItem;
 import com.fs.erp.domain.ErpOrderPayment;
 import com.fs.erp.dto.ErpOrderResponse;
 import com.fs.erp.service.IErpOrderService;
+import com.fs.event.TemplateBean;
+import com.fs.event.TemplateEvent;
+import com.fs.event.TemplateListenEnum;
 import com.fs.his.config.FsSysConfig;
 import com.fs.his.domain.*;
 import com.fs.his.dto.ErpRemarkDTO;
@@ -45,6 +48,9 @@ import com.fs.his.utils.ConfigUtil;
 import com.fs.his.utils.PhoneUtil;
 import com.fs.his.utils.RedisCacheUtil;
 import com.fs.his.vo.*;
+import com.fs.huifuPay.domain.HuiFuRefundResult;
+import com.fs.huifuPay.sdk.opps.core.request.V2TradePaymentScanpayRefundRequest;
+import com.fs.huifuPay.service.HuiFuService;
 import com.fs.qw.domain.QwUser;
 import com.fs.qw.mapper.QwUserMapper;
 import com.fs.tzBankPay.doman.PayType;
@@ -57,6 +63,7 @@ import org.redisson.api.RObjectAsync;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.interceptor.TransactionAspectSupport;
@@ -95,12 +102,22 @@ public class FsIntegralOrderServiceImpl implements IFsIntegralOrderService
 
     @Autowired
     private FsIntegralGoodsMapper fsIntegralGoodsMapper;
+
+    @Autowired
+    private  FsStorePaymentMapper storePaymentMapper;
+
     @Autowired
     private FsUserIntegralLogsMapper fsUserIntegralLogsMapper;
 
     @Autowired
     private QwUserMapper qwUserMapper;
 
+    @Autowired
+    HuiFuService huiFuService;
+
+    @Autowired
+    private ApplicationEventPublisher publisher;
+
     @Autowired
     private CompanyUserMapper companyUserMapper;
     @Autowired
@@ -870,6 +887,46 @@ public class FsIntegralOrderServiceImpl implements IFsIntegralOrderService
             fsUserIntegralLogs.setStatus(0);
             fsUserIntegralLogs.setCreateTime(new Date());
             i = fsUserIntegralLogsMapper.insertFsUserIntegralLogs(fsUserIntegralLogs);
+
+            //还原库存
+            if (fsIntegralOrder.getItemJson().startsWith("[") && fsIntegralOrder.getItemJson().endsWith("]")){
+                List<FsIntegralGoods> goodsItem = JSONUtil.toBean(fsIntegralOrder.getItemJson(), new TypeReference<List<FsIntegralGoods>>(){}, true);
+                goodsItem.forEach(goods -> fsIntegralGoodsMapper.addStock(goods.getGoodsId(), Objects.isNull(goods.getNum()) ? 1 : goods.getNum()));
+            } else {
+                FsIntegralGoods integralGoods = JSONUtil.toBean(fsIntegralOrder.getItemJson(), FsIntegralGoods.class);
+                fsIntegralGoodsMapper.addStock(integralGoods.getGoodsId(), Objects.isNull(integralGoods.getNum()) ? 1 : integralGoods.getNum());
+            }
+
+            //还原金额
+            List<FsStorePayment> payments = storePaymentMapper.selectFsStorePaymentByPay(6,fsIntegralOrder.getOrderId());
+            if(payments!=null&&payments.size()==1){
+                FsStorePayment payment=payments.get(0);
+                V2TradePaymentScanpayRefundRequest request = new V2TradePaymentScanpayRefundRequest();
+                request.setOrdAmt(payment.getPayMoney().toString());
+                request.setOrgReqDate(new SimpleDateFormat("yyyyMMdd").format(payment.getCreateTime()));
+                request.setReqSeqId("refund-"+payment.getPayCode());
+                Map<String, Object> extendInfoMap = new HashMap<>();
+                extendInfoMap.put("org_req_seq_id", "integral-"+payment.getPayCode());
+                request.setExtendInfo(extendInfoMap);
+                HuiFuRefundResult refund = huiFuService.refund(request);
+                log.info("积分退款返回结果:积分订单id:"+fsIntegralOrder.getOrderId()+refund);
+                if((refund.getResp_code().equals("00000000")||refund.getResp_code().equals("00000100"))&&(refund.getTrans_stat().equals("S")||refund.getTrans_stat().equals("P"))){
+                    FsStorePayment paymentMap=new FsStorePayment();
+                    paymentMap.setPaymentId(payment.getPaymentId());
+                    paymentMap.setStatus(-1);
+                    paymentMap.setRefundTime(DateUtils.getNowDate());
+                    paymentMap.setRefundMoney(payment.getPayMoney());
+                    storePaymentMapper.updateFsStorePayment(paymentMap);
+                    TemplateBean templateBean = TemplateBean.builder()
+                            .orderId(fsIntegralOrder.getOrderId().toString())
+                            .title("订单已取消")
+                            .remark("您的订单已取消")
+                            .uid(fsIntegralOrder.getUserId())
+                            .templateType(TemplateListenEnum.TYPE_1.getValue())
+                            .build();
+                    publisher.publishEvent(new TemplateEvent(this, templateBean));
+                }
+            }
         }
         return i;
     }

+ 1 - 0
fs-service/src/main/resources/application-config-druid-ddgy.yml

@@ -97,6 +97,7 @@ ipad:
   aiApi: http://49.232.181.28:3000/api
   voiceApi:
   commonApi:
+  wxIpadUrl:
 wx_miniapp_temp:
   pay_order_temp_id:
   inquiry_temp_id:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-gzzdy.yml

@@ -93,6 +93,7 @@ ipad:
   aiApi: http://
   voiceApi: http://123.207.48.104:8009
   commonApi: http://123.207.48.104:7771
+  wxIpadUrl:
 wx_miniapp_temp:
   pay_order_temp_id:
   inquiry_temp_id:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-hst.yml

@@ -96,6 +96,7 @@ ipad:
   aiApi: http://49.232.181.28:3000/api
   voiceApi: http://123.207.48.104:8009
   commonApi: http://123.207.48.104:7771
+  wxIpadUrl:
 wx_miniapp_temp:
   pay_order_temp_id:
   inquiry_temp_id:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-kyt.yml

@@ -93,6 +93,7 @@ ipad:
   aiApi:
   voiceApi:
   commonApi:
+  wxIpadUrl:
 wx_miniapp_temp:
   pay_order_temp_id:
   inquiry_temp_id:

+ 1 - 0
fs-service/src/main/resources/application-config-druid-sxjz.yml

@@ -95,6 +95,7 @@ headerImg:
 ipad:
   ipadUrl: http://ipad.xintaihl.cn
   aiApi: http://49.232.181.28:3000/api
+  wxIpadUrl:
   voiceApi:
   commonApi:
 wx_miniapp_temp:

+ 45 - 0
fs-user-app/src/main/java/com/fs/app/controller/UserController.java

@@ -1,16 +1,21 @@
 package com.fs.app.controller;
 
 
+import cn.binarywang.wx.miniapp.api.WxMaService;
+import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
+import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
 import cn.hutool.core.lang.Validator;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.fs.app.annotation.Login;
 import com.fs.app.param.FsDoctorRegisterParam;
 import com.fs.app.param.FsUserEditParam;
+import com.fs.app.param.FsUserPhoneUpdateParam;
 import com.fs.common.core.domain.R;
 import com.fs.common.core.page.TableDataInfo;
 import com.fs.common.exception.CustomException;
 import com.fs.common.utils.StringUtils;
 import com.fs.common.utils.sign.Md5Utils;
+import com.fs.core.config.WxMaConfiguration;
 import com.fs.course.service.IFsUserCourseVideoService;
 import com.fs.his.domain.FsDoctor;
 import com.fs.his.domain.FsUser;
@@ -35,6 +40,7 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import lombok.extern.slf4j.Slf4j;
+import me.chanjar.weixin.common.error.WxErrorException;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -365,4 +371,43 @@ public class UserController extends  AppBaseController {
     public R removeUser(){
         return userService.removeUser(Long.parseLong(getUserId()));
     }
+
+//    @Login
+    @ApiOperation("小程序用户单独授权手机号,然后将手机号更新")
+    @PostMapping("/ma/authUserPhone")
+    public R updateUserPhone(@RequestBody @Valid FsUserPhoneUpdateParam param){
+        log.info("【小程序用户单独授权手机号】:{}",param);
+
+        if (StringUtils.isEmpty(param.getCode())) {
+            return R.error("code不存在");
+        }
+        if (StringUtils.isEmpty(param.getAppId())) {
+            return R.error("appId不能为空");
+        }
+        if (StringUtils.isEmpty(param.getUserId())) {
+            return R.error("appId不能为空");
+        }
+        final WxMaService wxService = WxMaConfiguration.getMaService(param.getAppId());
+        try {
+            WxMaJscode2SessionResult session = wxService.getUserService().getSessionInfo(param.getCode());
+            log.info(session.getSessionKey());
+            // 解密
+            WxMaPhoneNumberInfo phoneNoInfo = wxService.getUserService().getPhoneNoInfo(session.getSessionKey(), param.getEncryptedData(), param.getIv());
+            String phoneNumber = phoneNoInfo.getPhoneNumber();
+
+            // 修改用户
+            FsUser user = fsUserService.selectFsUserById(Long.parseLong(param.getUserId()));
+            if(user != null){
+                user.setPhone(phoneNumber);
+                if(userService.updateFsUser(user)>0) {
+                    return R.ok("授权更新成功").put("user",user);
+                } else {
+                    return R.error("授权更新失败");
+                }
+            }
+        } catch (WxErrorException e) {
+            return R.error("授权失败,"+e.getMessage());
+        }
+        return R.error("授权失败,请联系管理员");
+    }
 }

+ 35 - 0
fs-user-app/src/main/java/com/fs/app/param/FsUserPhoneUpdateParam.java

@@ -0,0 +1,35 @@
+package com.fs.app.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * @author caolq
+ * 小程序用户单独授权手机号参数
+ */
+@Data
+public class FsUserPhoneUpdateParam implements Serializable {
+
+    @NotBlank(message = "code不能为空")
+    @ApiModelProperty(value = "小程序登陆code")
+    private String code;
+
+    @ApiModelProperty(value = "小程序完整用户信息的加密数据")
+    private String encryptedData;
+
+    @ApiModelProperty(value = "小程序加密算法的初始向量")
+    private String iv;
+
+    @NotBlank(message = "小程序appid不能为空")
+    @ApiModelProperty(value = "小程序appid")
+    private String appId;
+
+    @NotBlank(message = "userId不能为空")
+    @ApiModelProperty(value = "当前用户id")
+    private String userId;
+
+}