zoujiajian 2 weeks ago
parent
commit
79b2d1c831

+ 2 - 2
netflix-dao/src/main/java/com/cyksj/mapper/order/OrderDonTicketQueryMapper.java

@@ -10,7 +10,7 @@ public interface OrderDonTicketQueryMapper {
 
     @Select({
             "<script>",
-            "select r.item_index as itemIndex, coalesce(r.active_relation_id, r.relation_id) as relationId,",
+            "select r.item_index as itemIndex, r.relation_id as relationId,",
             "r.status as deliveryStatus, gr.status as relationStatus,",
             "gr.start_time as startTime, gr.expiry_time as expiryTime,",
             "<choose>",
@@ -25,7 +25,7 @@ public interface OrderDonTicketQueryMapper {
             "<otherwise>null as account, null as password</otherwise>",
             "</choose>",
             "from order_don_ticket_record r",
-            "left join groups_relation gr on gr.id = coalesce(r.active_relation_id, r.relation_id)",
+            "left join groups_relation gr on gr.id = r.relation_id",
             "left join groups_trips gt on gt.id = gr.groups_id",
             "left join account a on a.id = gt.account_id",
             "where r.order_id = #{orderId}",

+ 9 - 9
netflix-dao/src/main/java/com/cyksj/mapper/order/OrderDonTicketRecordMapper.java

@@ -63,7 +63,7 @@ public interface OrderDonTicketRecordMapper extends BaseMapper<OrderDonTicketRec
     OrderDonTicketRecord lockClaim(@Param("id") Long id,
                                    @Param("workerToken") String workerToken);
 
-    @Update("update order_don_ticket_record set status = 'success', relation_id = #{relationId}, active_relation_id = #{relationId}, worker_token = null, processing_time = null, error_msg = null, update_time = now() where id = #{id} and status = 'processing' and worker_token = #{workerToken}")
+    @Update("update order_don_ticket_record set status = 'success', relation_id = #{relationId}, worker_token = null, processing_time = null, error_msg = null, update_time = now() where id = #{id} and status = 'processing' and worker_token = #{workerToken}")
     int markSuccess(@Param("id") Long id, @Param("relationId") Long relationId, @Param("workerToken") String workerToken);
 
     @Update("update order_don_ticket_record set status = 'failed', worker_token = null, processing_time = null, error_msg = #{errorMsg}, update_time = now() where id = #{id} and status = 'processing' and worker_token = #{workerToken}")
@@ -107,33 +107,33 @@ public interface OrderDonTicketRecordMapper extends BaseMapper<OrderDonTicketRec
     int countAvailable(@Param("orderId") Long orderId);
 
     @Update("update order_don_ticket_record r " +
-            "inner join groups_relation old_gr on old_gr.id = coalesce(r.active_relation_id, r.relation_id) " +
+            "inner join groups_relation old_gr on old_gr.id = r.active_relation_id " +
             "inner join groups_trips old_gt on old_gt.id = old_gr.groups_id " +
             "inner join groups_relation new_gr on new_gr.id = #{newRelationId} " +
             "inner join groups_trips new_gt on new_gt.id = new_gr.groups_id " +
-            "set r.active_relation_id = #{newRelationId}, r.update_time = now() " +
-            "where coalesce(r.active_relation_id, r.relation_id) = #{oldRelationId} and r.status = 'success' " +
+            "set r.relation_id = #{newRelationId}, r.update_time = now() " +
+            "where r.active_relation_id = #{oldRelationId} and r.status = 'success' " +
             "and old_gt.sku_id = new_gt.sku_id")
     int replaceActiveRelation(@Param("oldRelationId") Long oldRelationId,
                               @Param("newRelationId") Long newRelationId);
 
-    @Select("select r.* from order_don_ticket_record r inner join groups_relation gr on gr.id = coalesce(r.active_relation_id, r.relation_id) where gr.groups_id = #{groupsId} and r.status = 'success' order by r.item_index")
+    @Select("select r.* from order_don_ticket_record r inner join groups_relation gr on gr.id = r.relation_id where gr.groups_id = #{groupsId} and r.status = 'success' order by r.item_index")
     List<OrderDonTicketRecord> selectSuccessfulByGroupsId(@Param("groupsId") Long groupsId);
 
     @Select("select distinct r.order_id from order_don_ticket_record r " +
             "inner join order_don o on o.id = r.order_id " +
-            "inner join groups_relation gr on gr.id = coalesce(r.active_relation_id, r.relation_id) " +
+            "inner join groups_relation gr on gr.id = r.relation_id " +
             "where gr.groups_id = #{groupsId} and r.status = 'success' " +
             "and o.status in ('hasPayment', 'complete') order by r.order_id")
     List<Long> selectSuccessfulOrderIdsByGroupsId(@Param("groupsId") Long groupsId);
 
-    @Update("update order_don_ticket_record set status = 'cleared', worker_token = null, processing_time = null, error_msg = null, update_time = now() where coalesce(active_relation_id, relation_id) = #{relationId} and status = 'success'")
+    @Update("update order_don_ticket_record set status = 'cleared', worker_token = null, processing_time = null, error_msg = null, update_time = now() where active_relation_id = #{relationId} and status = 'success'")
     int clearActiveRelation(@Param("relationId") Long relationId);
 
-    @Select("select * from order_don_ticket_record where coalesce(active_relation_id, relation_id) = #{relationId} limit 1")
+    @Select("select * from order_don_ticket_record where active_relation_id = #{relationId} limit 1")
     OrderDonTicketRecord selectActiveByRelationId(@Param("relationId") Long relationId);
 
-    @Select("select * from order_don_ticket_record where coalesce(active_relation_id, relation_id) = #{relationId} limit 1 for update")
+    @Select("select * from order_don_ticket_record where active_relation_id = #{relationId} limit 1 for update")
     OrderDonTicketRecord selectActiveByRelationIdForUpdate(@Param("relationId") Long relationId);
 
     @Select("select count(*) from order_don_ticket_record where order_id = #{orderId} and status = #{status}")

+ 7 - 1
netflix-dao/src/main/java/com/cyksj/model/entity/OrderDonTicketRecord.java

@@ -1,5 +1,7 @@
 package com.cyksj.model.entity;
 
+import com.baomidou.mybatisplus.annotation.FieldStrategy;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Getter;
 import lombok.Setter;
@@ -21,7 +23,11 @@ public class OrderDonTicketRecord extends BaseEntity {
 
     private Long relationId;
 
-    /** Current ticket relation; changes when customer service replaces a ticket. */
+    /**
+     * Database-generated active relation used by the unique active-ticket constraint.
+     * It must never be inserted or updated by the application.
+     */
+    @TableField(insertStrategy = FieldStrategy.NEVER, updateStrategy = FieldStrategy.NEVER)
     private Long activeRelationId;
 
     private Status status;

+ 1 - 3
netflix-service/src/main/java/com/cyksj/service/mange/group/CmsGroupServiceImpl.java

@@ -244,9 +244,7 @@ public class CmsGroupServiceImpl extends ServiceImpl<GroupsMapper,GroupsTrips> i
         Boolean isPrdEnv = envCommonService.isPrdEnv();
         java.util.Map<Long, OrderDonTicketRecord> multiTicketByRelationId =
                 orderDonTicketRecordService.listSuccessfulByGroupsId(groupsTrips.getId()).stream()
-                        .collect(Collectors.toMap(record -> record.getActiveRelationId() == null
-                                        ? record.getRelationId() : record.getActiveRelationId(),
-                                record -> record));
+                        .collect(Collectors.toMap(OrderDonTicketRecord::getRelationId, record -> record));
         for (int i = 0; i < groupsRelations.size(); i++) {
             GroupsRelation relation = groupsRelations.get(i);
             if (relation.getExpiryTime() == null) {

+ 1 - 1
netflix-service/src/main/java/com/cyksj/service/mange/impl/CmsOrderDonServiceImpl.java

@@ -852,7 +852,7 @@ public class CmsOrderDonServiceImpl extends ServiceImpl<OrderDonMapper,OrderDon>
     }
 
     private Long currentTicketRelationId(OrderDonTicketRecord record) {
-        return record.getActiveRelationId() == null ? record.getRelationId() : record.getActiveRelationId();
+        return record.getRelationId();
     }
 
     static boolean isMultiQuantityTicketOwner(OrderDon orderDon, GroupsRelation relation) {