浏览代码

Merge remote-tracking branch 'origin/master'

lchao 6 月之前
父节点
当前提交
ce1dffd078
共有 20 个文件被更改,包括 452 次插入106 次删除
  1. 52 43
      qmjszx-admin/src/main/java/beilv/web/controller/bootacourse/bootACourseController.java
  2. 66 0
      qmjszx-admin/src/main/java/beilv/web/controller/carinformation/cardAppController.java
  3. 3 3
      qmjszx-admin/src/main/java/beilv/web/controller/stadium/StadiumController.java
  4. 51 0
      qmjszx-admin/src/main/java/beilv/web/controller/system/AppMemberController.java
  5. 53 23
      qmjszx-admin/src/main/resources/templates/information/add.html
  6. 65 23
      qmjszx-admin/src/main/resources/templates/information/edit.html
  7. 7 7
      qmjszx-business/src/main/java/beilv/cardpurchaserecord/service/impl/CardPurchaseRecordServiceImpl.java
  8. 11 0
      qmjszx-business/src/main/java/beilv/carinformation/domain/CarInformation.java
  9. 16 0
      qmjszx-business/src/main/java/beilv/hk/controller/HKController.java
  10. 8 0
      qmjszx-business/src/main/java/beilv/site/domain/BeilvSite.java
  11. 4 0
      qmjszx-business/src/main/java/beilv/site/mapper/BeilvSiteMapper.java
  12. 4 0
      qmjszx-business/src/main/java/beilv/site/service/IBeilvSiteService.java
  13. 7 4
      qmjszx-business/src/main/java/beilv/site/service/impl/BeilvSiteServiceImpl.java
  14. 46 0
      qmjszx-business/src/main/java/beilv/userbill/controller/AppUserBillController.java
  15. 0 1
      qmjszx-business/src/main/java/beilv/usermembershipcard/service/impl/UserMembershipCardServiceImpl.java
  16. 1 0
      qmjszx-business/src/main/resources/mapper/admissionticket/AdmissionTicketMapper.xml
  17. 5 1
      qmjszx-business/src/main/resources/mapper/card/CarInformationMapper.xml
  18. 11 1
      qmjszx-business/src/main/resources/mapper/site/BeilvSiteMapper.xml
  19. 32 0
      qmjszx-system/src/main/java/beilv/system/domain/SysMember.java
  20. 10 0
      qmjszx-system/src/main/resources/mapper/system/SysMemberMapper.xml

+ 52 - 43
qmjszx-admin/src/main/java/beilv/web/controller/bootacourse/bootACourseController.java

@@ -15,6 +15,7 @@ import beilv.common.utils.DictUtils;
 import beilv.common.utils.uuid.IdUtils;
 import beilv.site.domain.BeilvSite;
 import beilv.site.service.IBeilvSiteService;
+import beilv.system.service.ISysMemberService;
 import beilv.usermembershipcard.domain.MemberStream;
 import beilv.usermembershipcard.domain.UserMembershipCard;
 import beilv.usermembershipcard.service.IUserMembershipCardService;
@@ -27,6 +28,7 @@ import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.servlet.http.HttpServletRequest;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.time.LocalDate;
@@ -53,43 +55,46 @@ public class bootACourseController extends BaseController {
     @Autowired
     private IUserMembershipCardService userMembershipCardService;
 
+    @Autowired
+    private ISysMemberService sysMemberService;
+
     /**
-     * 查询基础信息
+     * 查询球馆列表
      */
-    @PostMapping("/getVenueList")
-    public AjaxResult getVenueList(){
+    /*@PostMapping("/getVenueList")
+    public AjaxResult getVenueList() {
         //获取球场列表
         List<BeilvVenue> resultList = venueService.selectBeilvVenueList(new BeilvVenue());
         return AjaxResult.success(resultList);
-    }
+    }*/
+
+    /**
+     * 根据场馆id查询其具有的场地类型
+     */
+    /*@PostMapping("/getSiteType")
+    public AjaxResult getSiteType(@RequestBody BeilvSite beilvSite) {
+        List<Map<String, String>> siteType = siteService.selectSiteTypeByVenueId(beilvSite);
+
+        siteType.forEach(map -> {
+            map.put("siteTypeLabel", DictUtils.getDictLabel("site_type", map.get("siteType")));
+        });
+        return AjaxResult.success(siteType);
+    }*/
 
     /**
      * 根据场馆id获取下面的球场信息
-     * @param beilvSite venueId(场馆id)
+     *
+     * @param beilvSite venueId(场馆id) 默认值8
      */
     @PostMapping("/getSiteList")
-    public AjaxResult getSiteList(@RequestBody BeilvSite beilvSite){
-        //根据球场id, 获取下面所有的场地信息
+    public AjaxResult getSiteList(@RequestBody BeilvSite beilvSite) {
+        beilvSite.setVenueId(8L);
+        //获取会员卡集合
         List<BeilvSite> beilvSites = siteService.selectBeilvSiteList(beilvSite);
-        Set<String> siteTypeSite = new HashSet<>();
-
-        //遍历场地信息, 获取球场下所有的场地类型
         beilvSites.forEach(site->{
-            siteTypeSite.add(site.getSiteType());
-        });
-
-        List<String> siteTypeList = new ArrayList<>();
-        //遍历场地类型, 获取场地类型的Label
-        siteTypeSite.forEach(siteType->{
-            siteTypeList.add(DictUtils.getDictLabel("site_type",siteType));
+            site.setCoverList(new ArrayList<>(Arrays.asList(site.getCover().split(","))));
         });
-
-        HashMap<String, Object> result = new HashMap<>();
-        //放入LabelList
-        result.put("siteType", siteTypeList);
-        //放入球场List
-        result.put("siteList", beilvSites);
-        return AjaxResult.success(result);
+        return AjaxResult.success(beilvSites);
     }
 
     /**
@@ -98,7 +103,7 @@ public class bootACourseController extends BaseController {
      * 没有返回空集合
      */
     @PostMapping("/hasClubCard")
-    public AjaxResult hasClubCard(@RequestBody BootACourseBO course){
+    public AjaxResult hasClubCard(@RequestBody BootACourseBO course) {
         UserMembershipCard userMembershipCard = new UserMembershipCard();
         userMembershipCard.setUserId(course.getUserId());
         userMembershipCard.setCardType(course.getTicketType());
@@ -109,12 +114,12 @@ public class bootACourseController extends BaseController {
     /**
      * 查询可购票的场次信息
      * 请求参数:
-     *  日期: yyyy-MM-dd
-     *  场地类型: site_type字典
-     *  球场id:
+     * 日期: yyyy-MM-dd
+     * 场地类型: site_type字典
+     * 球场id:
      */
     @PostMapping("/getTicketList")
-    public AjaxResult getTicketList(@RequestBody AdmissionTicket admissionTicket){
+    public AjaxResult getTicketList(@RequestBody AdmissionTicket admissionTicket) {
         //设置查询状态: 可以预定的时段
 //        admissionTicket.setAdmissionTicketStatus("0");
         //查询可用时段
@@ -125,12 +130,13 @@ public class bootACourseController extends BaseController {
     /**
      * 购票接口
      * 用户id, 场次id, 会员卡id
+     *
      * @return
      */
     @PostMapping("/addCourse")
-    public AjaxResult addCourse(@RequestBody BootACourseBO course){
+    public AjaxResult addCourse(@RequestBody BootACourseBO course) {
         //根据场次id 关联球馆表, 获取球馆允许提前多少分钟可以退票
-        Date refund  = calculationTime(ticketService.getThresholdValue(course.getTicketId()));
+        Date refund = calculationTime(ticketService.getThresholdValue(course.getTicketId()));
 
 
         //生成订单编号
@@ -151,12 +157,13 @@ public class bootACourseController extends BaseController {
 
 
         //验证场次是否可用
-        if(courseService.isOk(course)){
+        if (courseService.isOk(course)) {
             //调用会员卡接口减少次数
             MemberStream memberStream = new MemberStream();
             memberStream.setUserCardId(course.getClubCardId());
             memberStream.setType("0");
             memberStream.setOrderId(orderId);
+            memberStream.setCreateBy(course.getUserId());
 
             cardService.addStream(memberStream);
 
@@ -171,8 +178,8 @@ public class bootACourseController extends BaseController {
             ticketService.updateBeilvAdmissionTicket(admissionTicket);
 
             return toAjax(courseService.addCourse(bootACourse));
-        }else{
-           return AjaxResult.error("当前场次已被预订");
+        } else {
+            return AjaxResult.error("当前场次已被预订");
         }
     }
 
@@ -180,7 +187,8 @@ public class bootACourseController extends BaseController {
      * 查询订单
      */
     @PostMapping("/getCourseList")
-    public AjaxResult getCourseList(@RequestBody BootACourseBO courseBO){
+    public AjaxResult getCourseList(@RequestBody BootACourseBO courseBO) {
+        courseBO.setUserId(courseBO.getUserId());
         return AjaxResult.success(courseService.getCourseList(courseBO));
     }
 
@@ -188,17 +196,18 @@ public class bootACourseController extends BaseController {
     /**
      * 退票接口
      * 用户id, 订单编号,
-     * @return
-     * 1: 订单已核销
+     *
+     * @return 1: 订单已核销
      * 2: 退票成功
      */
     @PostMapping("/remofeCourse")
-    public AjaxResult remofeCourse(@RequestBody BootACourseBO courseBo){
+    public AjaxResult remofeCourse(@RequestBody BootACourseBO courseBo) {
+        courseBo.setUserId(courseBo.getUserId());
         //通过orderId查询订单信息
         BootACourse course = courseService.getCourseInfo(courseBo);
 
         //判断最晚退单时间大于当前时间, 并且订单状态为已支付
-        if(course.getRefund().after(new Date()) && "payment_status_have_paid".equals(course.getPaymentStatus())){
+        if (course.getRefund().after(new Date()) && "payment_status_have_paid".equals(course.getPaymentStatus())) {
             //根据订单信息中的会员卡退次数
             //调用会员卡接口减少次数
             MemberStream memberStream = new MemberStream();
@@ -220,10 +229,10 @@ public class bootACourseController extends BaseController {
             course.setRefundInstructions(courseBo.getRefundInstructions());
             course.setPaymentStatus("payment_status_refunded");
             return toAjax(courseService.updateCourse(course));
-        }else{
-            if(course.getRefund().after(new Date())){
+        } else {
+            if (course.getRefund().after(new Date())) {
                 return AjaxResult.error("当前订单超过最晚退单时间, 不允许退单");
-            }else if("payment_status_verification".equals(course.getPaymentStatus())){
+            } else if ("payment_status_verification".equals(course.getPaymentStatus())) {
                 return AjaxResult.error("订单已核销");
             }
             return AjaxResult.error("未知原因退款失败!");
@@ -232,7 +241,7 @@ public class bootACourseController extends BaseController {
     }
 
 
-    private Date calculationTime(Map<String, Object> map){
+    private Date calculationTime(Map<String, Object> map) {
 
         String sessionStr = MapUtils.getString(map, "session").split("-")[0]; //12:15
 

+ 66 - 0
qmjszx-admin/src/main/java/beilv/web/controller/carinformation/cardAppController.java

@@ -0,0 +1,66 @@
+package beilv.web.controller.carinformation;
+
+import beilv.cardpurchaserecord.domain.CardPurchaseRecord;
+import beilv.cardpurchaserecord.service.ICardPurchaseRecordService;
+import beilv.carinformation.domain.CarInformation;
+import beilv.carinformation.service.ICarInformationService;
+import beilv.common.core.controller.BaseController;
+import beilv.common.core.domain.AjaxResult;
+import beilv.system.service.ISysMemberService;
+import beilv.usermembershipcard.domain.UserMembershipCard;
+import beilv.usermembershipcard.service.IUserMembershipCardService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+/**
+ * 会员卡AppController
+ *
+ * @author ruoyi
+ * @date 2025-01-02
+ */
+@Controller
+@RequestMapping("/app-api/cardApp")
+public class cardAppController extends BaseController {
+
+    @Autowired
+    private ICarInformationService carInformationService;
+
+    @Autowired
+    private ICardPurchaseRecordService cardPurchaseRecordService;
+
+    @Autowired
+    private IUserMembershipCardService userMembershipCardService;
+
+    @Autowired
+    private ISysMemberService iSysMemberService;
+    /**
+     * 查询卡种信息列表
+     */
+    @PostMapping("/cardInformationlist")
+    @ResponseBody
+    public AjaxResult cardInformationlist(@RequestBody CarInformation carInformation) {
+        return AjaxResult.success(carInformationService.selectCarInformationList(carInformation));
+    }
+
+    /**
+     * 新增保存购卡记录
+     */
+    @PostMapping("/addCard")
+    @ResponseBody
+    public AjaxResult addCard(@RequestBody CardPurchaseRecord cardPurchaseRecord) {
+        return toAjax(cardPurchaseRecordService.insertCardPurchaseRecord(cardPurchaseRecord));
+    }
+
+    /**
+     * 查询用户会员卡列表
+     */
+    @PostMapping("/getUserCardList")
+    @ResponseBody
+    public AjaxResult getUserCardList(@RequestBody UserMembershipCard userMembershipCard) {
+        return AjaxResult.success(userMembershipCardService.selectUserMembershipCardList(userMembershipCard));
+    }
+}

+ 3 - 3
qmjszx-admin/src/main/java/beilv/web/controller/stadium/StadiumController.java

@@ -19,7 +19,7 @@ import java.util.Date;
 import java.util.List;
 
 @RestController
-@RequestMapping("/stadium")
+@RequestMapping("/app-api/stadium")
 public class StadiumController extends BaseController {
 
     @Autowired
@@ -31,13 +31,13 @@ public class StadiumController extends BaseController {
     /**
      * 查询赛事发布列表
      */
-    @PostMapping("/getCompetitionList")
+    @GetMapping("/getCompetitionList")
     @ResponseBody
     public AjaxResult getCompetitionList(Competition competition) {
         startPage();
         competition.setCompetitionState("competiton_state_2");
         List<Competition> list = competitionService.selectCompetitionList(competition);
-        return AjaxResult.success(list);
+        return AjaxResult.success(getDataTable(list));
     }
 
 

+ 51 - 0
qmjszx-admin/src/main/java/beilv/web/controller/system/AppMemberController.java

@@ -0,0 +1,51 @@
+package beilv.web.controller.system;
+
+import beilv.common.annotation.Log;
+import beilv.common.core.controller.BaseController;
+import beilv.common.core.domain.AjaxResult;
+import beilv.common.core.page.TableDataInfo;
+import beilv.common.enums.BusinessType;
+import beilv.common.utils.poi.ExcelUtil;
+import beilv.system.domain.SysMember;
+import beilv.system.service.ISysMemberService;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 小程序会员用户信息Controller
+ *
+ * @author ruoyi
+ * @date 2025-01-02
+ */
+@RestController
+@RequestMapping("/app-api/member")
+public class AppMemberController extends BaseController {
+
+    @Autowired
+    private ISysMemberService sysMemberService;
+
+
+    /**
+     * app查询会员用户信息
+     */
+    @Log(title = "app查询会员用户信息", businessType = BusinessType.UPDATE)
+    @GetMapping("/getById/{id}")
+    public AjaxResult getById(@PathVariable("id") Long id) {
+        return AjaxResult.success(sysMemberService.selectSysMemberById(id));
+    }
+
+    /**
+     * app修改保存会员用户信息
+     */
+    @Log(title = "app修改保存会员用户信息", businessType = BusinessType.UPDATE)
+    @PostMapping("/edit")
+    @ResponseBody
+    public AjaxResult editSave(@RequestBody SysMember sysMember) {
+        return toAjax(sysMemberService.updateSysMember(sysMember));
+    }
+}

+ 53 - 23
qmjszx-admin/src/main/resources/templates/information/add.html

@@ -3,22 +3,19 @@
 <head>
     <th:block th:include="include :: header('新增卡种信息')" />
     <th:block th:include="include :: datetimepicker-css" />
+    <th:block th:include="include :: bootstrap-fileinput-css"/>
 </head>
 <body class="white-bg">
     <div class="wrapper wrapper-content animated fadeInRight ibox-content">
         <form class="form-horizontal m" id="form-information-add">
             <div class="col-xs-12">
                 <div class="form-group">
-                    <label class="col-sm-3 control-label is-required">名称:</label>
-                    <div class="col-sm-8">
+                    <label class="col-sm-2 control-label is-required">名称:</label>
+                    <div class="col-sm-4">
                         <input name="name" class="form-control" type="text" maxlength="20" required>
                     </div>
-                </div>
-            </div>
-            <div class="col-xs-12">
-                <div class="form-group">
-                    <label class="col-sm-3 control-label is-required">类型:</label>
-                    <div class="col-sm-8">
+                    <label class="col-sm-2 control-label is-required">类型:</label>
+                    <div class="col-sm-4">
                         <select name="type" class="form-control" th:with="type=${@dict.getType('site_type')}" required>
                             <option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
                         </select>
@@ -27,42 +24,45 @@
             </div>
             <div class="col-xs-12">
                 <div class="form-group">
-                    <label class="col-sm-3 control-label is-required">可用次数:</label>
-                    <div class="col-sm-8">
+                    <label class="col-sm-2 control-label is-required">可用次数:</label>
+                    <div class="col-sm-4">
                         <input name="totalNumber" class="form-control" type="number" min="0" step="1" maxlength="8" required>
                     </div>
-                </div>
-            </div>
-            <div class="col-xs-12">
-                <div class="form-group">
-                    <label class="col-sm-3 control-label is-required">原价格:</label>
-                    <div class="col-sm-8">
+                    <label class="col-sm-2 control-label is-required">原价格:</label>
+                    <div class="col-sm-4">
                         <input name="originalPrice" class="form-control" type="number" min="0" step="0.01" maxlength="8" required>
                     </div>
                 </div>
             </div>
             <div class="col-xs-12">
                 <div class="form-group">
-                    <label class="col-sm-3 control-label is-required">会员价格:</label>
-                    <div class="col-sm-8">
+                    <label class="col-sm-2 control-label is-required">会员价格:</label>
+                    <div class="col-sm-4">
                         <input name="memberPrice" class="form-control" type="number" min="0" step="0.01" maxlength="8" required>
                     </div>
+                    <label class="col-sm-2 control-label is-required">单次积分:</label>
+                    <div class="col-sm-4">
+                        <input name="point" class="form-control" type="number" min="0" step="1" maxlength="8" required>
+                    </div>
                 </div>
             </div>
             <div class="col-xs-12">
                 <div class="form-group">
-                    <label class="col-sm-3 control-label is-required">单次积分:</label>
+                    <label class="col-sm-2 control-label">使用规则:</label>
                     <div class="col-sm-8">
-                        <input name="point" class="form-control" type="number" min="0" step="1" maxlength="8" required>
+                        <input name="notes" class="form-control" type="hidden" maxlength="255">
+                        <div class="summernote" id = "notes"></div>
                     </div>
                 </div>
             </div>
             <div class="col-xs-12">
                 <div class="form-group">
-                    <label class="col-sm-3 control-label">使用规则:</label>
+                    <label class="col-sm-2 control-label is-required">图片:</label>
                     <div class="col-sm-8">
-                        <input name="notes" class="form-control" type="hidden" maxlength="255">
-                        <div class="summernote" id = "notes"></div>
+                        <input type="hidden" name="file">
+                        <div class="file-loading">
+                            <input class="form-control file-upload" id="file" name="file" type="file">
+                        </div>
                     </div>
                 </div>
             </div>
@@ -71,6 +71,7 @@
     <th:block th:include="include :: footer" />
     <th:block th:include="include :: datetimepicker-js" />
     <th:block th:include="include :: summernote-js"/>
+    <th:block th:include="include :: bootstrap-fileinput-js"/>
     <th:block th:include="include :: summernote-css"/>
     <script th:inline="javascript">
         var prefix = ctx + "information"
@@ -96,6 +97,35 @@
             autoclose: true
         });
 
+        $(".file-upload").fileinput({
+            uploadUrl: ctx + 'common/upload',
+            maxFileCount: 1,
+            allowedFileExtensions:['jpg','png'],
+            maxFileSize: 10240,
+            multiple: true,
+        }).on('fileuploaded', function (event, data, previewId, index) {
+            var inputName = event.currentTarget.id;
+            var existingValue = $("input[name='" + inputName + "']").val();
+            var newValue = data.response.url;
+
+            // 如果已经存在值,则在后面加上逗号分隔的新值
+            if (existingValue) {
+                $("input[name='" + inputName + "']").val(existingValue + ',' + newValue);
+            } else {
+                $("input[name='" + inputName + "']").val(newValue);
+            }
+        }).on('fileremoved', function (event, id, index) {
+            var inputName = event.currentTarget.id;
+            var existingValue = $("input[name='" + inputName + "']").val();
+            var fileUrls = existingValue.split(',');
+
+            // 移除对应的文件路径
+            fileUrls.splice(index, 1);
+
+            // 重新拼接文件路径
+            $("input[name='" + inputName + "']").val(fileUrls.join(','));
+        });
+
         $(function () {
             $('.summernote').summernote({
                 lang: 'zh-CN',

+ 65 - 23
qmjszx-admin/src/main/resources/templates/information/edit.html

@@ -3,6 +3,7 @@
 <head>
     <th:block th:include="include :: header('修改卡种信息')" />
     <th:block th:include="include :: datetimepicker-css" />
+    <th:block th:include="include :: bootstrap-fileinput-css"/>
 </head>
 <body class="white-bg">
     <div class="wrapper wrapper-content animated fadeInRight ibox-content">
@@ -10,16 +11,12 @@
             <input name="id" th:field="*{id}" type="hidden">
             <div class="col-xs-12">
                 <div class="form-group">
-                    <label class="col-sm-3 control-label is-required">名称:</label>
-                    <div class="col-sm-8">
+                    <label class="col-sm-2 control-label is-required">名称:</label>
+                    <div class="col-sm-4">
                         <input name="name" th:field="*{name}" class="form-control" type="text" maxlength="20">
                     </div>
-                </div>
-            </div>
-            <div class="col-xs-12">
-                <div class="form-group">
-                    <label class="col-sm-3 control-label is-required">类型:</label>
-                    <div class="col-sm-8">
+                    <label class="col-sm-2 control-label is-required">类型:</label>
+                    <div class="col-sm-4">
                         <select name="type" class="form-control" th:with="type=${@dict.getType('site_type')}">
                             <option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}" th:field="*{type}"></option>
                         </select>
@@ -28,42 +25,45 @@
             </div>
             <div class="col-xs-12">
                 <div class="form-group">
-                    <label class="col-sm-3 control-label is-required">可用次数:</label>
-                    <div class="col-sm-8">
+                    <label class="col-sm-2 control-label is-required">可用次数:</label>
+                    <div class="col-sm-4">
                         <input name="totalNumber" th:field="*{totalNumber}" class="form-control" type="number" min="0" step="1" maxlength="8">
                     </div>
-                </div>
-            </div>
-            <div class="col-xs-12">
-                <div class="form-group">
-                    <label class="col-sm-3 control-label is-required">原价格:</label>
-                    <div class="col-sm-8">
+                    <label class="col-sm-2 control-label is-required">原价格:</label>
+                    <div class="col-sm-4">
                         <input name="originalPrice" th:field="*{originalPrice}" class="form-control" type="number" min="0" step="0.01" maxlength="8">
                     </div>
                 </div>
             </div>
             <div class="col-xs-12">
                 <div class="form-group">
-                    <label class="col-sm-3 control-label is-required">会员价格:</label>
-                    <div class="col-sm-8">
+                    <label class="col-sm-2 control-label is-required">会员价格:</label>
+                    <div class="col-sm-4">
                         <input name="memberPrice" th:field="*{memberPrice}" class="form-control" type="number" min="0" step="0.01" maxlength="8">
                     </div>
+                    <label class="col-sm-2 control-label is-required">单次积分:</label>
+                    <div class="col-sm-4">
+                        <input name="point" th:field="*{point}" class="form-control" type="number" min="0" step="1" maxlength="8">
+                    </div>
                 </div>
             </div>
             <div class="col-xs-12">
                 <div class="form-group">
-                    <label class="col-sm-3 control-label is-required">单次积分:</label>
+                    <label class="col-sm-2 control-label is-required">使用规则:</label>
                     <div class="col-sm-8">
-                        <input name="point" th:field="*{point}" class="form-control" type="number" min="0" step="1" maxlength="8">
+                        <input name="notes" th:field="*{notes}" class="form-control" type="hidden" maxlength="255">
+                        <div class="summernote" id="notes"></div>
                     </div>
                 </div>
             </div>
             <div class="col-xs-12">
                 <div class="form-group">
-                    <label class="col-sm-3 control-label is-required">使用规则:</label>
+                    <label class="col-sm-2 control-label">图片:</label>
                     <div class="col-sm-8">
-                        <input name="notes" th:field="*{notes}" class="form-control" type="hidden" maxlength="255">
-                        <div class="summernote" id="notes"></div>
+                        <input type="hidden" name="file" th:field="*{file}">
+                        <div class="file-loading">
+                            <input class="form-control file-upload" id="file" name="file" type="file">
+                        </div>
                     </div>
                 </div>
             </div>
@@ -73,6 +73,7 @@
     <th:block th:include="include :: datetimepicker-js" />
     <th:block th:include="include :: summernote-js"/>
     <th:block th:include="include :: summernote-css"/>
+    <th:block th:include="include :: bootstrap-fileinput-js"/>
     <script th:inline="javascript">
         var prefix = ctx + "information";
         $("#form-information-edit").validate({
@@ -97,6 +98,47 @@
             autoclose: true
         });
 
+        $(".file-upload").each(function (i) {
+            var inputName = this.id;
+            var val = $("input[name='" + inputName + "']").val();
+
+            // 将已上传的图片路径分割成数组
+            var initialPreview = val ? val.split(',') : [];
+
+            $(this).fileinput({
+                'uploadUrl': ctx + 'common/upload',
+                initialPreviewAsData: true,
+                initialPreview: initialPreview,
+                maxFileCount: 1,
+                allowedFileExtensions: ['jpg', 'png'],
+                maxFileSize: 10240,
+                multiple: true,
+            }).on('fileuploaded', function (event, data, previewId, index) {
+                var inputName = event.currentTarget.id;
+                var existingValue = $("input[name='" + inputName + "']").val();
+                var newValue = data.response.url;
+
+                // 如果已经存在值,则在后面加上逗号分隔的新值
+                if (existingValue) {
+                    $("input[name='" + inputName + "']").val(existingValue + ',' + newValue);
+                } else {
+                    $("input[name='" + inputName + "']").val(newValue);
+                }
+            }).on('fileremoved', function (event, id, index) {
+                var inputName = event.currentTarget.id;
+                var existingValue = $("input[name='" + inputName + "']").val();
+                var fileUrls = existingValue.split(',');
+
+                // 移除对应的文件路径
+                fileUrls.splice(index, 1);
+
+                // 重新拼接文件路径
+                $("input[name='" + inputName + "']").val(fileUrls.join(','));
+            });
+
+            $(this).fileinput('_initFileActions');
+        });
+
         $(function() {
             $('.summernote').each(function(i) {
                 console.log($('#' + this.id))

+ 7 - 7
qmjszx-business/src/main/java/beilv/cardpurchaserecord/service/impl/CardPurchaseRecordServiceImpl.java

@@ -6,7 +6,7 @@ import beilv.cardpurchaserecord.service.ICardPurchaseRecordService;
 import beilv.common.core.text.Convert;
 import beilv.common.utils.DateUtils;
 import beilv.common.utils.ShiroUtils;
-import beilv.common.utils.uuid.IdUtils;
+import beilv.common.utils.StringUtils;
 import beilv.system.service.ISysDictDataService;
 import beilv.usermembershipcard.domain.UserMembershipCard;
 import beilv.usermembershipcard.mapper.UserMembershipCardMapper;
@@ -66,12 +66,10 @@ public class CardPurchaseRecordServiceImpl implements ICardPurchaseRecordService
      */
     @Override
     public int insertCardPurchaseRecord(CardPurchaseRecord cardPurchaseRecord) {
-        /*购卡*/
-        //调用支付接口
-
-
         //新增购卡记录
-        cardPurchaseRecord.setCreateBy(ShiroUtils.getUserId().toString());
+        if (StringUtils.isEmpty(cardPurchaseRecord.getCreateBy())) {
+            cardPurchaseRecord.setCreateBy(ShiroUtils.getUserId().toString());
+        }
         cardPurchaseRecord.setCreateTime(DateUtils.getNowDate());
         cardPurchaseRecord.setType("1");
         cardPurchaseRecord.setTime(DateUtils.getNowDate());
@@ -82,7 +80,9 @@ public class CardPurchaseRecordServiceImpl implements ICardPurchaseRecordService
         userMembershipCard.setUserId(cardPurchaseRecord.getUserId());
         userMembershipCard.setRecordId(cardPurchaseRecord.getId().toString());
         userMembershipCard.setRemainingNumber(cardPurchaseRecord.getTotalNumber());
-        userMembershipCard.setCreateBy(ShiroUtils.getUserId().toString());
+        if (StringUtils.isEmpty(cardPurchaseRecord.getCreateBy())) {
+            userMembershipCard.setCreateBy(ShiroUtils.getUserId().toString());
+        }
         userMembershipCard.setCreateTime(DateUtils.getNowDate());
         userMembershipCard.setState("3");
         userMembershipCard.setVersion("0");

+ 11 - 0
qmjszx-business/src/main/java/beilv/carinformation/domain/CarInformation.java

@@ -82,6 +82,17 @@ public class CarInformation extends BaseEntity {
     @Excel(name = "卡种状态")
     private String cardStateLabel;
 
+    //图片
+    private String file;
+
+    public String getFile() {
+        return file;
+    }
+
+    public void setFile(String file) {
+        this.file = file;
+    }
+
     public BigDecimal getOriginalPrice() {
         return originalPrice;
     }

+ 16 - 0
qmjszx-business/src/main/java/beilv/hk/controller/HKController.java

@@ -0,0 +1,16 @@
+package beilv.hk.controller;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class HKController {
+
+
+
+
+
+
+
+
+
+}

+ 8 - 0
qmjszx-business/src/main/java/beilv/site/domain/BeilvSite.java

@@ -1,6 +1,7 @@
 package beilv.site.domain;
 
 import java.math.BigDecimal;
+import java.util.List;
 
 import lombok.Data;
 import org.apache.commons.lang3.builder.ToStringBuilder;
@@ -33,6 +34,7 @@ public class BeilvSite extends BaseEntity
     /** 封面 */
     @Excel(name = "封面")
     private String cover;
+    private List<String> coverList;
 
     /** 简介 */
     @Excel(name = "简介")
@@ -56,6 +58,12 @@ public class BeilvSite extends BaseEntity
 
     private String venueName;
 
+    private String userId;
+
+    private String businessHours;
+    private String address;
+    private String phoneNumber;
+
     public void setId(Long id) 
     {
         this.id = id;

+ 4 - 0
qmjszx-business/src/main/java/beilv/site/mapper/BeilvSiteMapper.java

@@ -1,6 +1,8 @@
 package beilv.site.mapper;
 
 import java.util.List;
+import java.util.Map;
+
 import beilv.site.domain.BeilvSite;
 
 /**
@@ -64,4 +66,6 @@ public interface BeilvSiteMapper
     List<BeilvSite> getAllToList();
 
     int countSiteByVenueId(Long venueId);
+
+    List<Map<String, String>> selectSiteTypeByVenueId(BeilvSite beilvSite);
 }

+ 4 - 0
qmjszx-business/src/main/java/beilv/site/service/IBeilvSiteService.java

@@ -1,6 +1,8 @@
 package beilv.site.service;
 
 import java.util.List;
+import java.util.Map;
+
 import beilv.site.domain.BeilvSite;
 
 /**
@@ -65,4 +67,6 @@ public interface IBeilvSiteService
      * 球场状态修改
      */
     int siteStatus(BeilvSite beilvSite);
+
+    List<Map<String, String>> selectSiteTypeByVenueId(BeilvSite beilvSite);
 }

+ 7 - 4
qmjszx-business/src/main/java/beilv/site/service/impl/BeilvSiteServiceImpl.java

@@ -1,6 +1,7 @@
 package beilv.site.service.impl;
 
 import java.util.List;
+import java.util.Map;
 
 import beilv.shopping.domain.QmjsShoppingMall;
 import beilv.system.domain.SysPost;
@@ -34,7 +35,6 @@ public class BeilvSiteServiceImpl implements IBeilvSiteService {
     }
 
 
-
     /**
      * 查询球场管理列表
      *
@@ -103,14 +103,17 @@ public class BeilvSiteServiceImpl implements IBeilvSiteService {
     public List<BeilvSite> getAllToList() {
         return beilvSiteMapper.getAllToList();
     }
+
     /**
      * 球场状态修改
      */
     @Override
-    public int siteStatus(BeilvSite beilvSite)
-    {
+    public int siteStatus(BeilvSite beilvSite) {
         return beilvSiteMapper.updateBeilvSite(beilvSite);
     }
 
-
+    @Override
+    public List<Map<String, String>> selectSiteTypeByVenueId(BeilvSite beilvSite) {
+        return beilvSiteMapper.selectSiteTypeByVenueId(beilvSite);
+    }
 }

+ 46 - 0
qmjszx-business/src/main/java/beilv/userbill/controller/AppUserBillController.java

@@ -0,0 +1,46 @@
+package beilv.userbill.controller;
+
+import beilv.common.annotation.Log;
+import beilv.common.core.controller.BaseController;
+import beilv.common.core.domain.AjaxResult;
+import beilv.common.core.page.TableDataInfo;
+import beilv.common.enums.BusinessType;
+import beilv.common.utils.poi.ExcelUtil;
+import beilv.system.domain.SysMember;
+import beilv.system.domain.dto.SysMemberDTO;
+import beilv.system.service.ISysMemberService;
+import beilv.userbill.domain.SysUserBill;
+import beilv.userbill.service.ISysUserBillService;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 小程序用户积分流水Controller
+ *
+ * @author ruoyi
+ * @date 2024-12-31
+ */
+@RestController
+@RequestMapping("/app-api/bill")
+public class AppUserBillController extends BaseController {
+
+    @Autowired
+    private ISysUserBillService sysUserBillService;
+
+
+    /**
+     * 根据userId查询用户积分流水列表
+     */
+    @GetMapping("/selectBillListByUserId")
+    @ResponseBody
+    public AjaxResult listByUserId(SysUserBill sysUserBill) {
+        startPage();
+        List<SysUserBill> list = sysUserBillService.listByUserId(sysUserBill.getId());
+        return AjaxResult.success(getDataTable(list));
+    }
+}

+ 0 - 1
qmjszx-business/src/main/java/beilv/usermembershipcard/service/impl/UserMembershipCardServiceImpl.java

@@ -134,7 +134,6 @@ public class UserMembershipCardServiceImpl implements IUserMembershipCardService
         userMembershipCard.setRemainingNumber(Integer.valueOf(memberStream.getType()));
         userMembershipCardMapper.updateRemainingNumber(userMembershipCard);
         //增加流水
-        memberStream.setCreateBy(ShiroUtils.getUserId().toString());
         memberStream.setCreateTime(DateUtils.getNowDate());
         return userMembershipCardMapper.addStream(memberStream);
     }

+ 1 - 0
qmjszx-business/src/main/resources/mapper/admissionticket/AdmissionTicketMapper.xml

@@ -60,6 +60,7 @@
         left join beilv_site bs on ts.site_id = bs.id
         <where>
             <if test="siteName != null and siteName != ''">and bs.name LIKE CONCAT('%', #{siteName}, '%')  </if>
+            <if test="siteId != null and siteId != ''">and bs.id = #{siteId}  </if>
             <if test="siteType != null and siteType != ''">and ts.site_type = #{siteType}</if>
             <if test="ticketDate != null ">and ts.ticket_date = #{ticketDate}</if>
             <if test="admissionTicketStatus != null  and admissionTicketStatus != ''">

+ 5 - 1
qmjszx-business/src/main/resources/mapper/card/CarInformationMapper.xml

@@ -19,10 +19,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="createTime"    column="create_time"    />
         <result property="updateBy"    column="update_by"    />
         <result property="updateTime"    column="update_time"    />
+        <result property="file"    column="file"    />
     </resultMap>
 
     <sql id="selectCarInformationVo">
-        select id, name, type, total_number, original_price,member_price, point, expiration_date, notes, card_state, create_by, create_time, update_by, update_time from card_information
+        select id, name, type, total_number, original_price,member_price, point, expiration_date, notes,file, card_state, create_by, create_time, update_by, update_time from card_information
     </sql>
 
     <select id="selectCarInformationList" parameterType="CarInformation" resultMap="CarInformationResult">
@@ -59,6 +60,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="expirationDate != null">expiration_date,</if>
             <if test="notes != null">notes,</if>
             <if test="cardState != null">card_state,</if>
+            <if test="file != null">file,</if>
             <if test="createBy != null">create_by,</if>
             <if test="createTime != null">create_time,</if>
             <if test="updateBy != null">update_by,</if>
@@ -75,6 +77,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="expirationDate != null">#{expirationDate},</if>
             <if test="notes != null">#{notes},</if>
             <if test="cardState != null">#{cardState},</if>
+            <if test="file != null">#{file},</if>
             <if test="createBy != null">#{createBy},</if>
             <if test="createTime != null">#{createTime},</if>
             <if test="updateBy != null">#{updateBy},</if>
@@ -94,6 +97,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="expirationDate != null">expiration_date = #{expirationDate},</if>
             <if test="notes != null">notes = #{notes},</if>
             <if test="cardState != null">card_state = #{cardState},</if>
+            <if test="file != null">file = #{file},</if>
             <if test="createBy != null">create_by = #{createBy},</if>
             <if test="createTime != null">create_time = #{createTime},</if>
             <if test="updateBy != null">update_by = #{updateBy},</if>

+ 11 - 1
qmjszx-business/src/main/resources/mapper/site/BeilvSiteMapper.xml

@@ -15,6 +15,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="siteStatus"    column="site_status"    />
         <result property="venueId"    column="venue_id"    />
         <result property="venueName"    column="venue_name"    />
+        <result property="businessHours"    column="business_hours"    />
+        <result property="address"    column="address"    />
+        <result property="phoneNumber"    column="phone_number"    />
     </resultMap>
 
     <sql id="selectBeilvSiteVo">
@@ -32,7 +35,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         bs.warm_reminder,
         bs.site_status,
         bs.venue_id,
-        bv.venue_name
+        bv.venue_name,
+        bv.business_hours,
+        bv.address,
+        bv.phone_number
         FROM
         beilv_site bs
         left join beilv_venue bv on bs.venue_id = bv.id
@@ -140,4 +146,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         select count(1) from beilv_site where venue_id = #{venueId}
     </select>
 
+    <select id="selectSiteTypeByVenueId" parameterType="BeilvSite" resultType="map">
+        select site_type as siteType from beilv_site where venue_id = #{venueId} group by site_type
+    </select>
+
 </mapper>

+ 32 - 0
qmjszx-system/src/main/java/beilv/system/domain/SysMember.java

@@ -2,6 +2,7 @@ package beilv.system.domain;
 
 import beilv.common.annotation.Excel;
 import beilv.common.core.domain.BaseEntity;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
 
@@ -66,6 +67,19 @@ public class SysMember extends BaseEntity {
     private BigDecimal integral;
 
     /**
+     * 电子邮箱
+     */
+    @Excel(name = "电子邮箱")
+    private String email;
+
+    /**
+     * 出生日期
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    @Excel(name = "出生日期")
+    private Date birthday;
+
+    /**
      * 删除
      */
     private Integer delFlag;
@@ -143,6 +157,22 @@ public class SysMember extends BaseEntity {
         return openId;
     }
 
+    public String getEmail() {
+        return email;
+    }
+
+    public void setEmail(String email) {
+        this.email = email;
+    }
+
+    public Date getBirthday() {
+        return birthday;
+    }
+
+    public void setBirthday(Date birthday) {
+        this.birthday = birthday;
+    }
+
     @Override
     public String toString() {
         return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
@@ -152,6 +182,8 @@ public class SysMember extends BaseEntity {
                 .append("sex", getSex())
                 .append("address", getAddress())
                 .append("city", getCity())
+                .append("email", getEmail())
+                .append("birthday", getBirthday())
                 .append("createBy", getCreateBy())
                 .append("createTime", getCreateTime())
                 .append("updateBy", getUpdateBy())

+ 10 - 0
qmjszx-system/src/main/resources/mapper/system/SysMemberMapper.xml

@@ -11,6 +11,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="sex"    column="sex"    />
         <result property="address"    column="address"    />
         <result property="city"    column="city"    />
+        <result property="email"    column="email"    />
+        <result property="birthday"    column="birthday"    />
         <result property="createBy"    column="create_by"    />
         <result property="createTime"    column="create_time"    />
         <result property="updateBy"    column="update_by"    />
@@ -27,6 +29,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
                sex,
                address,
                city,
+               email,
+               birthday,
                create_by,
                create_time,
                update_by,
@@ -58,6 +62,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="sex != null">sex,</if>
             <if test="address != null">address,</if>
             <if test="city != null">city,</if>
+            <if test="email != null">email,</if>
+            <if test="birthday != null">birthday,</if>
             <if test="createBy != null">create_by,</if>
             <if test="createTime != null">create_time,</if>
             <if test="updateBy != null">update_by,</if>
@@ -72,6 +78,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="sex != null">#{sex},</if>
             <if test="address != null">addressmobile},</if>
             <if test="city != null">#{city},</if>
+            <if test="email != null">#{email},</if>
+            <if test="birthday != null">#{birthday},</if>
             <if test="createBy != null">#{createBy},</if>
             <if test="createTime != null">#{createTime},</if>
             <if test="updateBy != null">#{updateBy},</if>
@@ -90,6 +98,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="sex != null">sex = #{sex},</if>
             <if test="address != null">address = #{address},</if>
             <if test="city != null">city = #{city},</if>
+            <if test="email != null">email = #{email},</if>
+            <if test="birthday != null">birthday = #{birthday},</if>
             <if test="createBy != null">create_by = #{createBy},</if>
             <if test="createTime != null">create_time = #{createTime},</if>
             <if test="updateBy != null">update_by = #{updateBy},</if>