diff --git a/coolstore-partner-common/src/main/java/com/cool/store/annotation/DictField.java b/coolstore-partner-common/src/main/java/com/cool/store/annotation/DictField.java
new file mode 100644
index 000000000..6559cb527
--- /dev/null
+++ b/coolstore-partner-common/src/main/java/com/cool/store/annotation/DictField.java
@@ -0,0 +1,15 @@
+package com.cool.store.annotation;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 字典表填充字段
+ */
+@Target(ElementType.FIELD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface DictField {
+ String sourceField() default "";
+}
diff --git a/coolstore-partner-common/src/main/java/com/cool/store/utils/TpHelper.java b/coolstore-partner-common/src/main/java/com/cool/store/utils/TpHelper.java
new file mode 100644
index 000000000..d8e5ab2f4
--- /dev/null
+++ b/coolstore-partner-common/src/main/java/com/cool/store/utils/TpHelper.java
@@ -0,0 +1,35 @@
+package com.cool.store.utils;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+/**
+ *
+ * 十二分制 辅助工具类
+ *
+ *
+ * @author wangff
+ * @since 2025/11/4
+ */
+public class TpHelper {
+ private final static DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyMMddHHmmssSSS");
+
+ /**
+ * 生成惩处单号
+ */
+ public static String generatePenaltyRuleCode() {
+ return "CC" + generateCode();
+ }
+ /**
+ * 生成加分单号
+ */
+ public static String generateRewardRuleCode() {
+ return "JF" + generateCode();
+ }
+
+ private static String generateCode() {
+ return LocalDateTime.now().format(dtf) + (int) (Math.random() * 900) + 100;
+ }
+
+
+}
diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/dict/SysDictColumnDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/dict/SysDictColumnDAO.java
index ab991bda6..e08265c78 100644
--- a/coolstore-partner-dao/src/main/java/com/cool/store/dao/dict/SysDictColumnDAO.java
+++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/dict/SysDictColumnDAO.java
@@ -128,6 +128,19 @@ public class SysDictColumnDAO {
return "";
}
+ /**
+ * 根据字典列编码查询已启用字典项名称映射
+ * @param columnCodes 字典列编码列表
+ * @return <字典列编码, 字典项名称>
+ */
+ public Map getNameMapByCodes(List columnCodes) {
+ if (CollectionUtils.isEmpty(columnCodes)) {
+ return Collections.emptyMap();
+ }
+ List list = sysDictColumnMapper.selectOpenColumnByCodes(columnCodes);
+ return CollStreamUtil.toMap(list, SysDictColumnDO::getColumnCode, SysDictColumnDO::getColumnName);
+ }
+
/**
* 根据字典表编码查询启用状态的字典项
* @param tableCodes 字典表编码列表
diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/dao/tp/TpRuleDAO.java b/coolstore-partner-dao/src/main/java/com/cool/store/dao/tp/TpRuleDAO.java
new file mode 100644
index 000000000..b84d59fde
--- /dev/null
+++ b/coolstore-partner-dao/src/main/java/com/cool/store/dao/tp/TpRuleDAO.java
@@ -0,0 +1,95 @@
+package com.cool.store.dao.tp;
+
+import com.cool.store.entity.tp.TpRuleDO;
+import com.cool.store.mapper.tp.TpRuleMapper;
+import com.cool.store.request.tp.TpRuleQueryRequest;
+import lombok.RequiredArgsConstructor;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Repository;
+import tk.mybatis.mapper.entity.Example;
+
+import java.util.List;
+import java.util.Objects;
+
+/**
+ *
+ * 十二分制-奖惩规则DAO
+ *
+ *
+ * @author wangff
+ * @since 2025/11/4
+ */
+@Repository
+@RequiredArgsConstructor
+public class TpRuleDAO {
+ private final TpRuleMapper tpRuleMapper;
+
+ /**
+ * 新增
+ */
+ public boolean insertSelective(TpRuleDO tpRuleDO) {
+ return tpRuleMapper.insertSelective(tpRuleDO) > 0;
+ }
+
+ /**
+ * 编辑
+ */
+ public boolean updateSelective(TpRuleDO tpRuleDO) {
+ return tpRuleMapper.updateByPrimaryKeySelective(tpRuleDO) > 0;
+ }
+
+ /**
+ * 删除
+ */
+ public boolean deleteByIds(List ids) {
+ if (CollectionUtils.isEmpty(ids)) {
+ return false;
+ }
+ Example example = new Example(TpRuleDO.class);
+ example.createCriteria().andIn("id", ids);
+ return tpRuleMapper.updateByExampleSelective(TpRuleDO.builder().deleted(1).build(), example) > 0;
+ }
+
+ /**
+ * 根据id查询
+ */
+ public TpRuleDO getById(Long id) {
+ return tpRuleMapper.selectByPrimaryKey(id);
+ }
+
+ public List getList(TpRuleQueryRequest request) {
+ Example example = new Example(TpRuleDO.class);
+ Example.Criteria criteria = example.createCriteria();
+ if (StringUtils.isNotBlank(request.getProblemClassification())) {
+ criteria.andEqualTo("problemClassification", request.getProblemClassification());
+ }
+ if (StringUtils.isNotBlank(request.getProjectCategory())) {
+ criteria.andEqualTo("projectCategory", request.getProjectCategory());
+ }
+ if (StringUtils.isNotBlank(request.getProjectName())) {
+ criteria.andLike("projectName", request.getProjectName());
+ }
+ if (Objects.nonNull(request.getStatus())) {
+ criteria.andEqualTo("status", request.getStatus());
+ }
+ example.setOrderByClause("create_time DESC");
+ return tpRuleMapper.selectByExample(example);
+ }
+
+ /**
+ * 修改启用状态
+ * @param ids id列表
+ * @param status 启用状态
+ * @return boolean
+ */
+ public boolean updateStatus(List ids, Integer status) {
+ if (CollectionUtils.isEmpty(ids)) {
+ return false;
+ }
+ Example example = new Example(TpRuleDO.class);
+ example.createCriteria()
+ .andIn("id", ids);
+ return tpRuleMapper.updateByExampleSelective(TpRuleDO.builder().status(status).build(), example) > 0;
+ }
+}
diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/dict/SysDictColumnMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/dict/SysDictColumnMapper.java
index 8f4fda280..71b9ed08e 100644
--- a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/dict/SysDictColumnMapper.java
+++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/dict/SysDictColumnMapper.java
@@ -95,6 +95,13 @@ public interface SysDictColumnMapper {
*/
SysDictColumnDO selectOpenColumnByCode(@Param("columnCode") String columnCode);
+ /**
+ * 根据字典项编码查询字典项映射
+ * @param columnCodes 字典项编码列表
+ * @return 字典项列表
+ */
+ List selectOpenColumnByCodes(@Param("columnCodes") List columnCodes);
+
/**
* 根据字典表id查询
* @param tableIds 字典表id列表
diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/tp/TpAppealFormMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/tp/TpAppealFormMapper.java
new file mode 100644
index 000000000..6104bef94
--- /dev/null
+++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/tp/TpAppealFormMapper.java
@@ -0,0 +1,7 @@
+package com.cool.store.mapper.tp;
+
+import com.cool.store.entity.tp.TpAppealFormDO;
+import tk.mybatis.mapper.common.Mapper;
+
+public interface TpAppealFormMapper extends Mapper {
+}
\ No newline at end of file
diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/tp/TpApplyFormMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/tp/TpApplyFormMapper.java
new file mode 100644
index 000000000..94f82f2d6
--- /dev/null
+++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/tp/TpApplyFormMapper.java
@@ -0,0 +1,7 @@
+package com.cool.store.mapper.tp;
+
+import com.cool.store.entity.tp.TpApplyFormDO;
+import tk.mybatis.mapper.common.Mapper;
+
+public interface TpApplyFormMapper extends Mapper {
+}
\ No newline at end of file
diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/tp/TpAuditRecordMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/tp/TpAuditRecordMapper.java
new file mode 100644
index 000000000..53a87894f
--- /dev/null
+++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/tp/TpAuditRecordMapper.java
@@ -0,0 +1,7 @@
+package com.cool.store.mapper.tp;
+
+import com.cool.store.entity.tp.TpAuditRecordDO;
+import tk.mybatis.mapper.common.Mapper;
+
+public interface TpAuditRecordMapper extends Mapper {
+}
\ No newline at end of file
diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/tp/TpRuleMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/tp/TpRuleMapper.java
new file mode 100644
index 000000000..a76ed7cae
--- /dev/null
+++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/tp/TpRuleMapper.java
@@ -0,0 +1,7 @@
+package com.cool.store.mapper.tp;
+
+import com.cool.store.entity.tp.TpRuleDO;
+import tk.mybatis.mapper.common.Mapper;
+
+public interface TpRuleMapper extends Mapper {
+}
\ No newline at end of file
diff --git a/coolstore-partner-dao/src/main/java/com/cool/store/mapper/tp/TpScoreJournalMapper.java b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/tp/TpScoreJournalMapper.java
new file mode 100644
index 000000000..0b746cdd9
--- /dev/null
+++ b/coolstore-partner-dao/src/main/java/com/cool/store/mapper/tp/TpScoreJournalMapper.java
@@ -0,0 +1,7 @@
+package com.cool.store.mapper.tp;
+
+import com.cool.store.entity.tp.TpScoreJournalDO;
+import tk.mybatis.mapper.common.Mapper;
+
+public interface TpScoreJournalMapper extends Mapper {
+}
\ No newline at end of file
diff --git a/coolstore-partner-dao/src/main/resources/dict/SysDictColumnMapper.xml b/coolstore-partner-dao/src/main/resources/dict/SysDictColumnMapper.xml
index 59975c23e..156cf57ab 100644
--- a/coolstore-partner-dao/src/main/resources/dict/SysDictColumnMapper.xml
+++ b/coolstore-partner-dao/src/main/resources/dict/SysDictColumnMapper.xml
@@ -247,6 +247,16 @@
WHERE column_code = #{columnCode} AND deleted = 0 AND open_status = 1 LIMIT 1
+
+