diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/req/InspectSaveReq.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/req/InspectSaveReq.java
new file mode 100644
index 0000000000000000000000000000000000000000..1dc1e3bdc790f57875a1dd6fab0acc67ecc8743a
--- /dev/null
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/req/InspectSaveReq.java
@@ -0,0 +1,49 @@
+package com.mortals.xhx.busiz.req;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.mortals.xhx.busiz.BaseReq;
+import lombok.Data;
+
+import java.util.Date;
+
+
+@Data
+public class InspectSaveReq extends BaseReq {
+    /**
+     * 鎵€灞炶€冨嫟缁処D
+     */
+    private Long attendanceGroupId;
+    /**
+     * 鎵€灞炶€冨嫟缁勫悕绉�
+     */
+    private String attendanceGroupName;
+    /**
+     * 鑰冨嫟鏃堕棿
+     */
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date attendanceDate;
+
+    /**
+     * 寮傚父鏃堕棿
+     */
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date errorTime;
+    /**
+     * 涓婁笅鐝椂闂�
+     */
+    private String goOffTimeStr;
+    /**
+     * 瀹為檯鎵撳崱鏃堕棿
+     */
+    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date actualAttendTime;
+    /**
+     * 寮傚父澶勭悊缁撴灉
+     */
+    private String errorResult;
+
+
+
+
+
+}
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/web/ApiWebPerformController.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/web/ApiWebPerformController.java
index 0a58140307f7b110183ab9cc3d5005359dd7e49a..c59ed755a22305f3bec996f6c75bf90d9373029a 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/web/ApiWebPerformController.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/web/ApiWebPerformController.java
@@ -31,7 +31,7 @@ import java.util.Date;
 @RestController
 @Slf4j
 @RequestMapping("/api/v1/web/")
-public class ApiWebPerformController extends AbstractBaseController<PerformReq> {
+public class                ApiWebPerformController extends AbstractBaseController<PerformReq> {
 
     @Autowired
     private PerformAttendRecordService attendRecordService;
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/web/InspectApiController.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/web/InspectApiController.java
new file mode 100644
index 0000000000000000000000000000000000000000..b5c3155e18713c0a566cc46024baef967c2560bb
--- /dev/null
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/web/InspectApiController.java
@@ -0,0 +1,188 @@
+package com.mortals.xhx.busiz.web;
+
+import cn.hutool.core.date.DateUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.mortals.framework.common.Rest;
+import com.mortals.framework.exception.AppException;
+import com.mortals.framework.model.Context;
+import com.mortals.framework.model.PageInfo;
+import com.mortals.framework.model.Result;
+import com.mortals.xhx.busiz.req.AppealReq;
+import com.mortals.xhx.busiz.req.PerformReq;
+import com.mortals.xhx.busiz.rsp.AppealStatInfo;
+import com.mortals.xhx.common.code.PerformTypeEnum;
+import com.mortals.xhx.common.code.ProcessStatusEnum;
+import com.mortals.xhx.common.utils.BeanUtil;
+import com.mortals.xhx.module.check.model.*;
+import com.mortals.xhx.module.check.service.*;
+import com.mortals.xhx.module.perform.model.PerformAttendAppealEntity;
+import com.mortals.xhx.module.perform.model.PerformAttendAppealQuery;
+import com.mortals.xhx.module.perform.service.PerformAttendAppealService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.ObjectUtils;
+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.RestController;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+import static com.mortals.framework.ap.SysConstains.*;
+import static com.mortals.xhx.common.key.ErrorCode.ERROR_TOKEN_EXPIRED;
+import static com.mortals.xhx.common.key.ErrorCode.ERROR_TOKEN_EXPIRED_CONTENT;
+
+/**
+ * h5 宸℃煡
+ *
+ * @author: zxfei
+ * @date: 2023/7/7 15:08
+ */
+@RestController
+@Slf4j
+@RequestMapping("/api/v1/inspect")
+public class InspectApiController extends AbstractBaseController<PerformReq> {
+
+    @Autowired
+    private CheckAttendRecordService checkAttendRecordService;
+    @Autowired
+    private CheckReviewRecordService checkReviewRecordService;
+    @Autowired
+    private CheckComplainRecordService checkComplainRecordService;
+    @Autowired
+    private CheckEffectRecordService checkEffectRecordService;
+    @Autowired
+    private CheckGoworkRecordService checkGoworkRecordService;
+    @Autowired
+    private CheckOtherRecordService checkOtherRecordService;
+
+
+    @Autowired
+    private PerformAttendAppealService appealService;
+
+
+    /**
+     * 涓汉鐢宠瘔缁╂晥缁熻
+     */
+    @PostMapping(value = "stat")
+    public Rest<AppealStatInfo> appealStat() {
+        String busiDesc = "H5涓汉鐢宠瘔缁╂晥缁熻";
+        Rest<AppealStatInfo> rest = Rest.ok(busiDesc + " 銆愭垚鍔熴€�");
+        Context context = this.getContext();
+        if (ObjectUtils.isEmpty(context) || ObjectUtils.isEmpty(context.getUser())) {
+            throw new AppException(ERROR_TOKEN_EXPIRED, ERROR_TOKEN_EXPIRED_CONTENT);
+        }
+        log.info("銆恵}銆戙€愯姹備綋銆�--> 鐢ㄦ埛:{}", busiDesc, context.getUser().getRealName());
+        try {
+            //todo 鏌ヨ褰撳墠鐧诲綍浜虹殑缁╂晥鍒嗘暟
+            AppealStatInfo appealStatInfo = new AppealStatInfo();
+            appealStatInfo.setTotalScore(new BigDecimal("10.52"));
+            appealStatInfo.setTotalTimes(12);
+            appealStatInfo.setTodayScore(new BigDecimal("2.5"));
+            appealStatInfo.setTodayTimes(3);
+            rest.setData(appealStatInfo);
+            recordSysLog(request, busiDesc + " 銆愭垚鍔熴€�");
+        } catch (Exception e) {
+            log.error(busiDesc, e);
+            rest = Rest.fail(super.convertException(e));
+        }
+        return rest;
+    }
+
+
+    /**
+     * 宸℃煡鏂板
+     */
+    @PostMapping(value = "save")
+    public Rest<PerformAttendAppealEntity> appealSave(@RequestBody AppealReq req) {
+        String busiDesc = "涓汉鐢宠瘔鏂板";
+        log.info("銆恵}銆戙€愯姹備綋銆�--> {}", busiDesc, JSONObject.toJSONString(req));
+        Rest<PerformAttendAppealEntity> rest = Rest.ok(busiDesc + " 銆愭垚鍔熴€�");
+        Context context = this.getContext();
+        try {
+            //鏍规嵁鐘舵€� 鏌ヨ 褰撳墠鏄惁宸茬粡瀛樺湪姝e湪杩涜鐨勭敵璇�
+            if (ObjectUtils.isEmpty(req.getId())) throw new AppException("鏍告煡璁板綍Id涓嶈兘涓虹┖锛�");
+            if (ObjectUtils.isEmpty(req.getPerformType())) throw new AppException("缁╂晥绫诲瀷涓嶈兘涓虹┖锛�");
+            //鏌ヨ褰撳墠鏍告煡鏄惁宸插瓨鍦ㄨ繘琛屼腑鐨勭敵璇夎褰�
+            PerformAttendAppealEntity appealEntity = appealService.selectOne(new PerformAttendAppealQuery().checkRecordId(req.getId()));
+            if (!ObjectUtils.isEmpty(appealEntity) && appealEntity.getProcessStatus() == ProcessStatusEnum.鏈鐞�.getValue()) {
+                throw new AppException("褰撳墠缁╂晥鏍告煡宸茬粡瀛樺湪姝e湪杩涜涓殑鐢宠瘔璁板綍锛�");
+            }
+            PerformAttendAppealEntity entity = new PerformAttendAppealEntity();
+            entity.initAttrValue();
+
+            if (PerformTypeEnum.鑰冨嫟缁╂晥.getValue().equals(req.getPerformType())) {
+                CheckAttendRecordEntity checkEntity = checkAttendRecordService.get(req.getId(), context);
+                BeanUtils.copyProperties(checkEntity, entity, BeanUtil.getNullPropertyNames(checkEntity));
+
+            } else if (PerformTypeEnum.璇勪环宸瘎缁╂晥.getValue().equals(req.getPerformType())) {
+                CheckReviewRecordEntity checkEntity = checkReviewRecordService.get(req.getId(), context);
+                BeanUtils.copyProperties(checkEntity, entity, BeanUtil.getNullPropertyNames(checkEntity));
+
+            } else if (PerformTypeEnum.璇勪环鎶曡瘔缁╂晥.getValue().equals(req.getPerformType())) {
+                CheckComplainRecordEntity checkEntity = checkComplainRecordService.get(req.getId(), context);
+                BeanUtils.copyProperties(checkEntity, entity, BeanUtil.getNullPropertyNames(checkEntity));
+
+            } else if (PerformTypeEnum.鍔炰欢缁╂晥.getValue().equals(req.getPerformType())) {
+                CheckGoworkRecordEntity checkEntity = checkGoworkRecordService.get(req.getId(), context);
+                BeanUtils.copyProperties(checkEntity, entity, BeanUtil.getNullPropertyNames(checkEntity));
+
+            } else if (PerformTypeEnum.鏁堣兘缁╂晥.getValue().equals(req.getPerformType())) {
+                CheckEffectRecordEntity checkEntity = checkEffectRecordService.get(req.getId(), context);
+                BeanUtils.copyProperties(checkEntity, entity, BeanUtil.getNullPropertyNames(checkEntity));
+
+            } else if (PerformTypeEnum.鍏跺畠缁╂晥.getValue().equals(req.getPerformType())) {
+                CheckOtherRecordEntity checkEntity = checkOtherRecordService.get(req.getId(), context);
+                BeanUtils.copyProperties(checkEntity, entity, BeanUtil.getNullPropertyNames(checkEntity));
+
+            } else {
+                throw new AppException("涓嶆敮鎸佸綋鍓嶇哗鏁堢被鍨�");
+            }
+            entity.setPerformType(req.getPerformType());
+            entity.setPerformAttendAppealFilesList(req.getPerformAttendAppealFilesList());
+            entity.setProcessStatus(1);
+            entity.setAppealDesc(req.getAppealDesc());
+            PerformAttendAppealEntity saveEntity = appealService.save(entity, context);
+            rest.setData(saveEntity);
+            recordSysLog(request, busiDesc + " 銆愭垚鍔熴€�");
+        } catch (Exception e) {
+            log.error(busiDesc, e);
+            rest = Rest.fail(super.convertException(e));
+        }
+        log.info("銆恵}銆戙€愬搷搴斾綋銆�--> {}", busiDesc, JSONObject.toJSONString(req));
+        return rest;
+    }
+
+
+    protected PageInfo buildPageInfo(AppealReq query) {
+        PageInfo pageInfo = new PageInfo();
+        if (!ObjectUtils.isEmpty(query) && !ObjectUtils.isEmpty(query.getPage())) {
+            pageInfo.setCurrPage(query.getPage());
+        }
+
+        if (!ObjectUtils.isEmpty(query) && !ObjectUtils.isEmpty(query.getSize())) {
+            pageInfo.setPrePageResult(query.getSize());
+        }
+
+        return pageInfo;
+    }
+
+
+    protected void parsePageInfo(Map<String, Object> model, PageInfo pageInfo) {
+        model.put(TOTAL, pageInfo.getTotalResult());
+        model.put(PER_PAGE, pageInfo.getPrePageResult());
+        model.put(CURRENT_PAGE, pageInfo.getCurrPage());
+        model.put(LAST_PAGE, pageInfo.getTotalPage());
+        model.put(PAGEINFO_KEY, pageInfo);
+    }
+
+
+    public static void main(String[] args) {
+
+    }
+
+}
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/web/PerformApiController.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/web/PerformApiController.java
index 32191222d62d2bf072013725dfecb64ee02fc745..457026d7f191756c56e5a3ca15218e5d0f9394b2 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/web/PerformApiController.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/busiz/web/PerformApiController.java
@@ -98,7 +98,8 @@ public class PerformApiController extends AbstractBaseController<PerformReq> {
             performStatInfo.setTotalScore(new BigDecimal("15.9"));
             performStatInfo.setTotalTimes(12);
             performStatInfo.setTodayScore(new BigDecimal("12.6"));
-            performStatInfo.setTodayTimes(11);
+            performStatInfo.setTodayTimes(4);
+            rest.setData(performStatInfo);
             recordSysLog(request, busiDesc + " 銆愭垚鍔熴€�");
         } catch (Exception e) {
             log.error(busiDesc, e);