ソースを参照

refactor(app): 优化课程信息查询和合同签署功能

- 在课程信息查询中添加背景图片字段和年度销售数量计算
-优化合同签署回调逻辑,增加对签署人身份的验证
- 修改
SheepHy 3 週間 前
コミット
92b4254751

+ 12 - 1
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/dto/SignCallbackDTO.java

@@ -17,10 +17,21 @@ public class SignCallbackDTO {
     private Integer signResult;
     private String resultDescription;
     private OrganizationDTO organization;
-
+    private Operator operator;
     @Data
     public static class OrganizationDTO {
         private String orgId;
         private String orgName;
     }
+
+    @Data
+    public static class Operator {
+        private String psnId;
+        private PsnAccount psnAccount;
+
+        @Data
+        public static class PsnAccount {
+            private String accountMobile;
+        }
+    }
 }

+ 17 - 2
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/impl/DetailServiceImpl.java

@@ -188,10 +188,10 @@ public class DetailServiceImpl implements IDetailService {
         for (AppOrder appOrder : appOrders) {
             AppCourses appCours = appCoursesMapper.selectById(appOrder.getProductIds());
             if (appCours.getCategoryId().equals(categoryId)) {
-                return Boolean.TRUE;
+                return Boolean.FALSE;
             }
         }
-        return Boolean.FALSE;
+        return Boolean.TRUE;
     }
 
     @Override
@@ -329,6 +329,8 @@ public class DetailServiceImpl implements IDetailService {
         courseInfoVOIPage.getRecords().forEach(courseResponseVo -> {
             String string = courseResponseVo.getCover().split(",")[0];
             courseResponseVo.setCover(string);
+//            courseResponseVo.setAnnualSalesNum(string);
+//            courseResponseVo.setSaleNum(getCourseSalesCount());
         });
         return courseInfoVOIPage;
     }
@@ -371,6 +373,19 @@ public class DetailServiceImpl implements IDetailService {
         ));
     }
 
+    private int getCourseSalesCountYear(String id) {
+        LocalDate now = LocalDate.now();
+        LocalDateTime startOfYear = now.withDayOfYear(1).atStartOfDay(); // 当前年份第一天
+        LocalDateTime endOfYear = startOfYear.plusYears(1); // 下一年第一天
+
+        return Math.toIntExact(appOrderProInfoMapper.selectCount(
+                Wrappers.<AppOrderProInfo>lambdaQuery()
+                        .eq(AppOrderProInfo::getProductId, id)
+                        .ge(AppOrderProInfo::getCreateTime, Date.from(startOfYear.atZone(ZoneId.systemDefault()).toInstant())) // >= 当年第一天
+                        .lt(AppOrderProInfo::getCreateTime, Date.from(endOfYear.atZone(ZoneId.systemDefault()).toInstant())) // < 下一年第一天
+        ));
+    }
+
     /**
      * @Author SheepHy
      * @Description 查询用户是否为第一次购买

+ 8 - 6
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/service/impl/ESignServiceImpl.java

@@ -672,12 +672,14 @@ public class ESignServiceImpl implements IESignService {
     @Override
     public Boolean signCallback(SignCallbackDTO jsonObject) {
         try {
-            if(jsonObject.getSignResult().equals(2)){
-                AppContractSign appContractSign = appContractSignMapper.selectOne(Wrappers.<AppContractSign>lambdaQuery()
-                        .eq(AppContractSign::getSignFlowId, jsonObject.getSignFlowId()));
-                if(null != appContractSign){
-                    appContractSign.setIsSign(1).setSignTime(new Date());
-                    return appContractSignMapper.updateById(appContractSign) > 0;
+            if(jsonObject.getAction().equals("SIGN_MISSON_COMPLETE")){
+                if(jsonObject.getSignResult().equals(2) && jsonObject.getResultDescription().equals("签署完成")){
+                    AppContractSign appContractSign = appContractSignMapper.selectOne(Wrappers.<AppContractSign>lambdaQuery()
+                            .eq(AppContractSign::getSignFlowId, jsonObject.getSignFlowId()));
+                    if(null != appContractSign && familyMembersMapper.selectById(appContractSign.getFamilyId()).getPsnId().equals(jsonObject.getOperator().getPsnId())){
+                        appContractSign.setIsSign(1).setSignTime(new Date());
+                        return appContractSignMapper.updateById(appContractSign) > 0;
+                    }
                 }
             }
         } catch (Exception e) {

+ 1 - 0
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/app/vo/CourseInfoVO.java

@@ -61,6 +61,7 @@ public class CourseInfoVO {
     private String instructorName;
     @Schema(description = "教练头像")
     private String instructorAvatar;
+    private String backgroundImage;
     @Schema(description ="经度")
     private BigDecimal longitude;
     @Schema(description ="纬度")

+ 1 - 1
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/hikiot/HikiotTool.java

@@ -282,7 +282,7 @@ public class HikiotTool {
      * @Description 人员信息查询
      * @Date 15:08 2025/8/15
      **/
-    public static String queryUserInfo() throws IOException, InterruptedException {
+    public static String queryUserInfo(String deviceSerial) throws IOException, InterruptedException {
         Map<String, String> queryUserInfo = new HashMap<>();
         queryUserInfo.put("deviceSerial", "FX0889961");
         queryUserInfo.put("keyword", "0012");

+ 5 - 4
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/system/app/mapper/xml/AppCoursesMapper.xml

@@ -60,7 +60,8 @@
             d.realname AS instructorName,
             d.avatar AS instructorAvatar,
             b.longitude,
-            b.latitude
+            b.latitude,
+            a.background_image
         FROM
             nm_courses a
                 LEFT JOIN nm_site b ON a.site_id = b.id
@@ -87,7 +88,7 @@
             instructorAvatar;
     </select>
     <select id="findByCourseList" resultType="org.jeecg.modules.app.vo.course.CourseResponseVo">
-        select b.`name`,e.address,b.original_price,b.selling_price,b.cover
+        select b.`name`,e.address,b.original_price,b.selling_price,b.cover,b.start_time,b.end_time
              ,b.id,b.price_type,b.good_rate,e.latitude,e.longitude,count(c.courses_id) as coursesNum,b.start_time,b.end_time
         FROM nm_courses b
         LEFT JOIN nm_courses_price_rules c on b.id= c.courses_id
@@ -105,7 +106,7 @@
         GROUP BY b.id
     </select>
     <select id="findByLaLoList" resultType="org.jeecg.modules.app.vo.course.CourseResponseVo">
-        select b.`name`,e.address,b.original_price,b.selling_price,b.cover
+        select b.`name`,e.address,b.original_price,b.selling_price,b.cover,b.start_time,b.end_time
              ,b.id,b.price_type,ROUND(b.good_rate * 100)  as  good_rate ,e.latitude,e.longitude,count(c.courses_id) as coursesNum,
                ST_Distance_Sphere(
                        POINT(#{courseRequestVo.longitude}, #{courseRequestVo.latitude}),
@@ -139,7 +140,7 @@
         </if>
     </select>
     <select id="findByList" resultType="org.jeecg.modules.app.vo.course.CourseResponseVo">
-        select b.`name`,e.address,b.original_price,b.selling_price
+        select b.`name`,e.address,b.original_price,b.selling_price,b.start_time,b.end_time
         ,b.id,b.price_type,b.good_rate,e.latitude,e.longitude,count(c.courses_id) as coursesNum
         FROM nm_courses b
         LEFT JOIN nm_courses_price_rules c on b.id= c.courses_id