Explorar el Código

事务问题处理完成

wuxw hace 5 años
padre
commit
a578d5d18c

+ 9 - 0
java110-bean/src/main/java/com/java110/dto/order/OrderDto.java

@@ -28,6 +28,7 @@ public class OrderDto extends PageDto implements Serializable {
     private String oId;
 
     private String bId;
+    private String statusCd;
 
     private String businessTypeCd;
 
@@ -121,4 +122,12 @@ public class OrderDto extends PageDto implements Serializable {
     public void setRemark(String remark) {
         this.remark = remark;
     }
+
+    public String getStatusCd() {
+        return statusCd;
+    }
+
+    public void setStatusCd(String statusCd) {
+        this.statusCd = statusCd;
+    }
 }

+ 7 - 1
java110-db/src/main/resources/mapper/center/CenterServiceDAOImplMapper.xml

@@ -9,7 +9,7 @@
     <select id="getOrder" resultType="Map" parameterType="Map">
         SELECT `o_id` oId, `app_id` appId, `ext_transaction_id` extTransactionId, `user_id` userId, `request_time`
         requestTime,
-        `create_time` createTime,`order_type_cd` orderTypeCd, `finish_time` finishTime, `remark`
+        `create_time` createTime,`order_type_cd` orderTypeCd, `finish_time` finishTime, `remark`,t.status_cd statusCd
         from c_orders t
         where 1=1
         <if test="oId != null and oId != ''">
@@ -73,11 +73,17 @@
         set t.finish_time = #{finishTime},
              t.status_cd = #{statusCd}
         where t.o_id = #{oId}
+        <if test="bId !=null and bId != ''">
+            and t.b_id = #{bId}
+        </if>
     </update>
 
     <!-- 删除事务日志 -->
     <update id="deleteUnItemLog" parameterType="Map">
         delete from unitem_log where o_id = #{oId}
+        <if test="bId !=null and bId != ''">
+            and t.b_id = #{bId}
+        </if>
     </update>
 
 

+ 1 - 1
service-common/src/main/java/com/java110/common/service/appraise/SaveAppraiseServiceImpl.java

@@ -40,7 +40,7 @@ public class SaveAppraiseServiceImpl implements ISaveAppraiseService {
     @Java110Transactional
     public AppraiseDto saveAppraise(@RequestBody AppraiseDto appraiseDto) {
         validate(appraiseDto);
-        if (appraiseDto.getAppraiseId().startsWith("-")) {
+        if (StringUtil.isEmpty(appraiseDto.getAppraiseId())|| appraiseDto.getAppraiseId().startsWith("-")) {
             appraiseDto.setAppraiseId(GenerateCodeFactory.getGeneratorId(GenerateCodeFactory.CODE_PREFIX_appraiseId));
         }
 

+ 22 - 14
service-order/src/main/java/com/java110/order/smo/impl/OIdServiceSMOImpl.java

@@ -101,24 +101,26 @@ public class OIdServiceSMOImpl implements IOIdServiceSMO {
                 JSONArray params = generateParam(orderItemDto);
                 httpEntity = new HttpEntity<String>(params.toJSONString(), header);
                 restTemplate.exchange(FALLBACK_URL.replace(SERVICE_NAME, orderItemDto.getServiceName()), HttpMethod.POST, httpEntity, String.class);
+
+                //标记为订单项失败
+                Map info = new HashMap();
+                info.put("finishTime", DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
+                info.put("statusCd", "E");
+                info.put("bId", orderItemDto.getbId());
+                info.put("oId", orderDto.getoId());
+                centerServiceDAOImpl.updateOrderItem(info);
+
+                //删除 事务日志
+                //centerServiceDAOImpl.deleteUnItemLog(info);
             } catch (Exception e) {
                 logger.error("回退事务失败", e);
                 errorOrderItemDtos.add(orderItemDto);
             }
         }
 
-        //标记为订单项失败
-        Map info = new HashMap();
-        info.put("finishTime", DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
-        info.put("statusCd", "E");
-        info.put("oId", orderDto.getoId());
-        centerServiceDAOImpl.updateOrderItem(info);
-
-        //删除 事务日志
-        centerServiceDAOImpl.deleteUnItemLog(info);
 
         //标记为订单失败
-        info = new HashMap();
+        Map info = new HashMap();
         info.put("finishTime", DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
         info.put("statusCd", "E");
         info.put("oId", orderDto.getoId());
@@ -237,11 +239,11 @@ public class OIdServiceSMOImpl implements IOIdServiceSMO {
         String logText = orderItemDto.getLogText();
 
         JSONObject logTextObj = JSONObject.parseObject(logText);
-        JSONArray preValues = logTextObj.getJSONArray("preValue");
-        for (int preValueIndex = 0; preValueIndex < preValues.size(); preValueIndex++) {
+        JSONArray afterValues = logTextObj.getJSONArray("afterValue");
+        for (int preValueIndex = 0; preValueIndex < afterValues.size(); preValueIndex++) {
             sql = "delete from " + orderItemDto.getActionObj() + " where 1=1 ";
             param = new JSONObject();
-            JSONObject keyValue = preValues.getJSONObject(preValueIndex);
+            JSONObject keyValue = afterValues.getJSONObject(preValueIndex);
             for (String key : keyValue.keySet()) {
                 sql += (" and " + key + "=" + keyValue.getString(key));
             }
@@ -276,6 +278,12 @@ public class OIdServiceSMOImpl implements IOIdServiceSMO {
         if (StringUtil.isEmpty(orderItemDto.getbId()) || orderItemDto.getbId().startsWith("-")) {
             orderItemDto.setbId(GenerateCodeFactory.getBId());
         }
+        //判断OID是否存在
+        OrderDto orderDto = BeanConvertUtil.covertBean(centerServiceDAOImpl.getOrder(BeanConvertUtil.beanCovertMap(orderItemDto)), OrderDto.class);
+
+        if (orderDto == null || "E".equals(orderDto.getStatusCd())) {
+            return new ResponseEntity<String>("当前没有事务或者事务已经回滚", HttpStatus.NOT_FOUND);
+        }
         centerServiceDAOImpl.saveOrderItem(BeanConvertUtil.beanCovertMap(orderItemDto));
 
         return ResultVo.createResponseEntity(ResultVo.CODE_OK, ResultVo.MSG_OK);
@@ -301,7 +309,7 @@ public class OIdServiceSMOImpl implements IOIdServiceSMO {
         centerServiceDAOImpl.updateOrderItem(info);
 
         //删除 事务日志
-        centerServiceDAOImpl.deleteUnItemLog(info);
+        //centerServiceDAOImpl.deleteUnItemLog(info);
 
         //完成订单
         info = new HashMap();