he2802 4 年 前
コミット
ff0e1473b9

+ 12 - 0
zhongzheng-api/pom.xml

@@ -121,6 +121,18 @@
                     <warName>${project.artifactId}</warName>
                 </configuration>
             </plugin>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-resources-plugin</artifactId>
+                <configuration>
+                    <encoding>UTF-8</encoding>
+                    <nonFilteredFileExtensions>
+                        <nonFilteredFileExtension>pem</nonFilteredFileExtension>
+                        <nonFilteredFileExtension>pfx</nonFilteredFileExtension>
+                        <nonFilteredFileExtension>p12</nonFilteredFileExtension>
+                    </nonFilteredFileExtensions>
+                </configuration>
+            </plugin>
         </plugins>
         <finalName>${project.artifactId}</finalName>
     </build>

+ 9 - 0
zhongzheng-api/src/main/java/com/zhongzheng/controller/bank/ExamController.java

@@ -73,4 +73,13 @@ public class ExamController extends BaseController {
         return AjaxResult.success(list);
     }
 
+    /**
+     * 获取试卷详细信息
+     */
+    @ApiOperation("获取本章的下一张试卷")
+    @GetMapping("/nextExam")
+    public AjaxResult<ExamVo> getNextExam(QuestionChapterExamQueryBo bo) {
+        return AjaxResult.success(iExamService.getNextExam(bo));
+    }
+
 }

+ 8 - 9
zhongzheng-api/src/main/java/com/zhongzheng/controller/cmmon/CommonController.java

@@ -28,10 +28,17 @@ import com.zhongzheng.modules.user.entity.ClientLoginUser;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
+import org.apache.commons.compress.utils.IOUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.util.ResourceUtils;
 import org.springframework.web.bind.annotation.*;
 
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.security.KeyStore;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.List;
@@ -79,15 +86,7 @@ public class CommonController extends BaseController {
     @ApiOperation("查询用户拥有的商品")
     @GetMapping("/test")
     public AjaxResult<Integer> test(CourseQueryBo bo) throws InterruptedException, ParseException {
-        Long times = 1641312000L*1000;//时间戳
-        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
-        String dateString = formatter.format(times);
-        System.out.println(dateString);
-        String dateForma =null;
-        dateForma = dateString+" "+"13-06".replace("-", ":");
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
-        Long time = sdf.parse(dateForma).getTime() / 1000;
-        System.out.println(time);
+
         return AjaxResult.success(Printer.num);
     }
 

+ 2 - 3
zhongzheng-api/src/main/java/com/zhongzheng/controller/order/OrderGoodsRefundController.java

@@ -51,13 +51,12 @@ public class OrderGoodsRefundController extends BaseController {
      * 新增订单商品退款
      */
     @ApiOperation("新增订单商品退款")
-    @PreAuthorize("@ss.hasPermi('system:refund:add')")
     @Log(title = "订单商品退款", businessType = BusinessType.INSERT)
     @PostMapping()
-    public AjaxResult<Void> add(@RequestBody OrderGoodsRefundAddBo bo) {
+    public AjaxResult add(@RequestBody OrderGoodsRefundAddBo bo) {
         ClientLoginUser loginUser = wxTokenService.getLoginUser(ServletUtils.getRequest());
         bo.setUserId(loginUser.getUser().getUserId());
-        return toAjax(iOrderGoodsRefundService.insertByAddBo(bo) ? 1 : 0);
+        return AjaxResult.success(iOrderGoodsRefundService.placeRefundSmallOrder(bo));
     }
 
 

BIN
zhongzheng-api/src/main/resources/config/apiclient_cert.p12


+ 1 - 1
zhongzheng-common/src/main/java/com/zhongzheng/common/utils/wxpay/WXPayRequest.java

@@ -48,13 +48,13 @@ public class WXPayRequest {
      */
     private String requestOnce(final String domain, String urlSuffix, String uuid, String data, int connectTimeoutMs, int readTimeoutMs, boolean useCert) throws Exception {
         BasicHttpClientConnectionManager connManager;
+
         if (useCert) {
             // 证书
             char[] password = config.getMchID().toCharArray();
             InputStream certStream = config.getCertStream();
             KeyStore ks = KeyStore.getInstance("PKCS12");
             ks.load(certStream, password);
-
             // 实例化密钥库 & 初始化密钥工厂
             KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
             kmf.init(ks, password);

BIN
zhongzheng-common/src/main/resources/config/apiclient_cert.p12


+ 2 - 0
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/PermissionService.java

@@ -57,6 +57,8 @@ public class PermissionService
             {
                 return false;
             }
+            System.out.println(loginUser.getPermissions());
+            System.out.println(permission);
             return hasPermissions(loginUser.getPermissions(), permission);
         }else{
             TopLoginUser topLoginUser = topTokenService.getLoginUser(ServletUtils.getRequest());

+ 4 - 0
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/UserServiceImpl.java

@@ -634,6 +634,10 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         if(Validator.isEmpty(bo.getRealname())){
             throw new CustomException("数据缺失");
         }
+        User userBak = getOne(new LambdaQueryWrapper<User>().eq(User::getIdCard,bo.getIdCard()).last("limit 1"));
+        if(!Validator.isEmpty(userBak)){
+            throw new CustomException("该身份证已使用");
+        }
         User user = this.baseMapper.selectById(bo.getUserId());
         user.setRealname(bo.getRealname());
         user.setIdCard(bo.getIdCard());

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/IExamService.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.zhongzheng.modules.bank.bo.ExamAddBo;
 import com.zhongzheng.modules.bank.bo.ExamEditBo;
 import com.zhongzheng.modules.bank.bo.ExamQueryBo;
+import com.zhongzheng.modules.bank.bo.QuestionChapterExamQueryBo;
 import com.zhongzheng.modules.bank.domain.Exam;
 import com.zhongzheng.modules.bank.vo.ExamVo;
 
@@ -50,4 +51,6 @@ public interface IExamService extends IService<Exam> {
 	 * @return
 	 */
 	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+
+	ExamVo getNextExam(QuestionChapterExamQueryBo bo);
 }

+ 46 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/bank/service/impl/ExamServiceImpl.java

@@ -1,6 +1,7 @@
 package com.zhongzheng.modules.bank.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.StrUtil;
 import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.utils.DateUtils;
@@ -13,11 +14,14 @@ import com.zhongzheng.modules.bank.service.IExamService;
 import com.zhongzheng.modules.bank.service.IQuestionBusinessService;
 import com.zhongzheng.modules.bank.service.IQuestionChapterExamService;
 import com.zhongzheng.modules.bank.vo.ExamVo;
+import com.zhongzheng.modules.bank.vo.QuestionChapterExamVo;
 import com.zhongzheng.modules.course.bo.CourseChapterSectionListAddBo;
 import com.zhongzheng.modules.course.domain.CourseChapterSection;
 import com.zhongzheng.modules.course.service.ICourseChapterBusinessService;
+import com.zhongzheng.modules.goods.bo.GoodsAttachedQueryBo;
 import com.zhongzheng.modules.goods.domain.GoodsAttached;
 import com.zhongzheng.modules.goods.service.IGoodsAttachedService;
+import com.zhongzheng.modules.goods.vo.GoodsAttachedVo;
 import com.zhongzheng.modules.user.domain.User;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -204,4 +208,46 @@ public class ExamServiceImpl extends ServiceImpl<ExamMapper, Exam> implements IE
         }
         return this.removeByIds(ids);
     }
+
+    @Override
+    public ExamVo getNextExam(QuestionChapterExamQueryBo bo) {
+        ExamVo nextExam = null;
+        //有章卷ID
+        if(Validator.isNotEmpty(bo.getChapterExamId())){
+            QuestionChapterExamQueryBo bo1 = new QuestionChapterExamQueryBo();
+            bo1.setChapterExamId(bo.getChapterExamId());
+            List<QuestionChapterExamVo>  list = iQuestionChapterExamService.queryList(bo1);
+            for (int i=0;i<list.size();i++){
+                QuestionChapterExamVo vo = list.get(i);
+                if(vo.getExamId().longValue()==bo.getExamId().longValue()){
+                    if(i<(list.size()-1)){
+                        QuestionChapterExamVo questionChapterExamVo = list.get(i+1);
+                        nextExam = this.queryById(questionChapterExamVo.getExamId());
+                        return nextExam;
+                    }
+                }
+            }
+
+        }else{
+            //无则是顶层目录
+            GoodsAttachedQueryBo bo1 = new GoodsAttachedQueryBo();
+            bo1.setGoodsId(bo.getGoodsId());
+            bo1.setType(3);
+            List<GoodsAttachedVo> list = iGoodsAttachedService.queryList(bo1);
+            for (int i=0;i<list.size();i++){
+                GoodsAttachedVo vo = list.get(i);
+                if(vo.getMajorId().longValue()==bo.getExamId().longValue()){
+                    if(i<(list.size()-1)){
+                        GoodsAttachedVo goodsAttachedVo = list.get(i+1);
+                        nextExam = this.queryById(goodsAttachedVo.getMajorId());
+                        return nextExam;
+                    }
+                }
+            }
+        }
+        if(nextExam==null){
+            throw new CustomException("没有下一张试卷了");
+        }
+        return null;
+    }
 }

+ 3 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/domain/Order.java

@@ -30,6 +30,8 @@ private static final long serialVersionUID=1L;
     public static final Integer PAY_NO =0;  //0未收费
     public static final Integer PAY_PART =1;  //1部分收费
     public static final Integer PAY_FULL =2;  //2完全收费
+    public static final Integer REFUND_PART =3;  //1部分收费
+    public static final Integer REFUND_FULL =4;  //2完全收费
 
 
     public static final Integer FROM_PLAT =1;  //业务员录单
@@ -46,7 +48,7 @@ private static final long serialVersionUID=1L;
     private BigDecimal orderPrice;
     /** 支付订单号 */
     private String orderGeneral;
-    /** 订单状态 -2 超时关闭,-1手动关闭,0普通状态,1为已付款,3为成功 */
+    /** 订单状态 -2 超时关闭,-1手动关闭,0普通状态,1部分付款  2完全付款 3部分退款 4完全退款 */
     private Integer orderStatus;
     /** 创建时间 */
     @TableField(fill = FieldFill.INSERT)

+ 1 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/IOrderGoodsRefundService.java

@@ -37,7 +37,7 @@ public interface IOrderGoodsRefundService extends IService<OrderGoodsRefund> {
 	 */
 	Boolean insertByAddBo(OrderGoodsRefundAddBo bo);
 
-	Map<String, String> placeRefundSmallOrder(OrderGoodsRefundAddBo bo);
+	Boolean placeRefundSmallOrder(OrderGoodsRefundAddBo bo);
 
 	/**
 	 * 根据编辑业务对象修改订单商品退款

+ 52 - 3
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderGoodsRefundServiceImpl.java

@@ -7,6 +7,7 @@ import com.zhongzheng.common.exception.CustomException;
 import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.modules.goods.domain.Goods;
 import com.zhongzheng.modules.goods.service.IGoodsService;
+import com.zhongzheng.modules.order.bo.OrderGoodsQueryBo;
 import com.zhongzheng.modules.order.bo.OrderGoodsRefundAddBo;
 import com.zhongzheng.modules.order.bo.OrderGoodsRefundEditBo;
 import com.zhongzheng.modules.order.bo.OrderGoodsRefundQueryBo;
@@ -18,6 +19,7 @@ import com.zhongzheng.modules.order.service.IOrderGoodsRefundService;
 import com.zhongzheng.modules.order.service.IOrderGoodsService;
 import com.zhongzheng.modules.order.service.IOrderService;
 import com.zhongzheng.modules.order.vo.OrderGoodsRefundVo;
+import com.zhongzheng.modules.order.vo.OrderGoodsVo;
 import com.zhongzheng.modules.user.domain.User;
 import com.zhongzheng.modules.wx.service.IWxPayService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -100,7 +102,7 @@ public class OrderGoodsRefundServiceImpl extends ServiceImpl<OrderGoodsRefundMap
     }
 
     @Override
-    public Map<String, String> placeRefundSmallOrder(OrderGoodsRefundAddBo bo) {
+    public Boolean placeRefundSmallOrder(OrderGoodsRefundAddBo bo) {
         OrderGoods orderGoods = iOrderGoodsService.getOne(new LambdaQueryWrapper<OrderGoods>().eq(OrderGoods::getOrderSn,bo.getOrderSn())
                 .eq(OrderGoods::getGoodsId, bo.getGoodsId()));
         if(Validator.isEmpty(orderGoods)){
@@ -127,6 +129,11 @@ public class OrderGoodsRefundServiceImpl extends ServiceImpl<OrderGoodsRefundMap
         Goods goods = iGoodsService.getOne(new LambdaQueryWrapper<Goods>().eq(Goods::getGoodsId,bo.getGoodsId()));
         if(goods.getGoodsType()==1){
             //视频商品
+
+        }
+        if(goods.getGoodsType()==2){
+            //题库商品
+
         }
         OrderGoodsRefund add = BeanUtil.toBean(bo, OrderGoodsRefund.class);
         validEntityBeforeSave(add);
@@ -137,8 +144,50 @@ public class OrderGoodsRefundServiceImpl extends ServiceImpl<OrderGoodsRefundMap
         add.setRefundSn(out_trade_no);
         add.setRefundFee(orderGoods.getGoodsReceived());
         add.setUserId(order.getUserId());
-        Map<String, String> payResult =  iWxPayService.refund(out_trade_no,order.getTransid(),order.getPayPrice().toString(),"1");
-        return null;
+        if(this.save(add)){
+            Map<String, String> payResult =  iWxPayService.refund(out_trade_no,order.getTransid(),order.getPayPrice().toString(),"1");
+            if("OK".equals(payResult.get("return_msg"))){
+                return refundCall(payResult.get("refund_id"),add.getRefundId(),orderGoods.getOrderGoodsId(),order);
+            }
+        }
+        return false;
+    }
+
+    public Boolean refundCall(String WxpayRefundId,Long refundId,Long orderGoodsId,Order order){
+        OrderGoodsRefund update = new OrderGoodsRefund();
+        update.setRefundId(refundId);
+        update.setUpdateTime(DateUtils.getNowTime());
+        update.setWxpayRefundId(WxpayRefundId);
+        this.updateById(update);
+        //修改订单商品退款状态
+        OrderGoods orderGoods = new OrderGoods();
+        orderGoods.setOrderGoodsId(orderGoodsId);
+        orderGoods.setRefundStatus(2); //已退款
+        orderGoods.setPayStatus(1); //未收费
+        orderGoods.setUpdateTime(DateUtils.getNowTime());
+        iOrderGoodsService.updateById(orderGoods);
+
+        OrderGoodsQueryBo bo = new OrderGoodsQueryBo();
+        bo.setOrderSn(order.getOrderSn());
+        List<OrderGoodsVo> orderGoodsVoList = iOrderGoodsService.selectList(bo);
+        boolean allRefund = true;
+        for (OrderGoodsVo g : orderGoodsVoList) {
+            if(g.getRefundStatus()!=2){
+                allRefund = false;
+            }
+        }
+        //都退款
+        if(allRefund){
+            order.setStatus(0);
+            order.setUpdateTime(DateUtils.getNowTime());
+            order.setOrderStatus(Order.REFUND_FULL);
+        }else {
+            //部分退款
+            order.setUpdateTime(DateUtils.getNowTime());
+            order.setOrderStatus(Order.REFUND_PART);
+        }
+        iOrderService.updateById(order);
+        return true;
     }
 
     @Override

+ 0 - 4
zhongzheng-system/src/main/java/com/zhongzheng/modules/wx/service/impl/WxPayServiceImpl.java

@@ -429,16 +429,12 @@ public class WxPayServiceImpl  implements IWxPayService {
             data.put("fee_type", "CNY");
             data.put("refund_fee", "1");
             data.put("total_fee", "1");
-    //        Map<String, String> resp = wxpay.unifiedOrder(data);
-
             Map<String, String> result = new HashMap<>();
-            //         result.put("provider","wxpay");
             result.put("appId",appid);
             result.put("nonceStr",WXPayUtil.generateNonceStr());
             result.put("signType","MD5");
             result.put("sign", WXPayUtil.generateSignature(result, key, WXPayConstants.SignType.MD5));
             Map rMap = wxpay.refund(data);
-            System.out.println(rMap);
             return rMap;
         } catch (Exception e) {
             e.printStackTrace();