wuxw
2020-07-08 a578d5d18c09cfe8b045bf95f3907620ffd1221d
事务问题处理完成
4个文件已修改
55 ■■■■ 已修改文件
java110-bean/src/main/java/com/java110/dto/order/OrderDto.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-db/src/main/resources/mapper/center/CenterServiceDAOImplMapper.xml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-common/src/main/java/com/java110/common/service/appraise/SaveAppraiseServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
service-order/src/main/java/com/java110/order/smo/impl/OIdServiceSMOImpl.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
java110-bean/src/main/java/com/java110/dto/order/OrderDto.java
@@ -28,6 +28,7 @@
    private String oId;
    private String bId;
    private String statusCd;
    private String businessTypeCd;
@@ -121,4 +122,12 @@
    public void setRemark(String remark) {
        this.remark = remark;
    }
    public String getStatusCd() {
        return statusCd;
    }
    public void setStatusCd(String statusCd) {
        this.statusCd = statusCd;
    }
}
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>
service-common/src/main/java/com/java110/common/service/appraise/SaveAppraiseServiceImpl.java
@@ -40,7 +40,7 @@
    @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));
        }
service-order/src/main/java/com/java110/order/smo/impl/OIdServiceSMOImpl.java
@@ -101,24 +101,26 @@
                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 @@
        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 @@
        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 @@
        centerServiceDAOImpl.updateOrderItem(info);
        //删除 事务日志
        centerServiceDAOImpl.deleteUnItemLog(info);
        //centerServiceDAOImpl.deleteUnItemLog(info);
        //完成订单
        info = new HashMap();