|
|
@@ -0,0 +1,164 @@
|
|
|
+package com.java110.order.smo.impl;
|
|
|
+
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.java110.core.client.RestTemplate;
|
|
|
+import com.java110.dto.businessTableHis.BusinessTableHisDto;
|
|
|
+import com.java110.dto.order.OrderItemDto;
|
|
|
+import com.java110.order.smo.IAsynNotifySubService;
|
|
|
+import org.slf4j.Logger;
|
|
|
+import org.slf4j.LoggerFactory;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.http.HttpEntity;
|
|
|
+import org.springframework.http.HttpHeaders;
|
|
|
+import org.springframework.http.HttpMethod;
|
|
|
+import org.springframework.scheduling.annotation.Async;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+@Service
|
|
|
+public class AsynNotifySubServiceImpl implements IAsynNotifySubService {
|
|
|
+ private static Logger logger = LoggerFactory.getLogger(AsynNotifySubServiceImpl.class);
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private RestTemplate restTemplate;
|
|
|
+
|
|
|
+ public static final String FALLBACK_URL = "http://SERVICE_NAME/businessApi/fallBack";
|
|
|
+
|
|
|
+ public static final String SERVICE_NAME = "SERVICE_NAME";
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Async
|
|
|
+ public void notifySubService(OrderItemDto orderItemDto, BusinessTableHisDto businessTableHisDto) {
|
|
|
+ HttpEntity<String> httpEntity = null;
|
|
|
+ HttpHeaders header = new HttpHeaders();
|
|
|
+ try {
|
|
|
+ JSONArray params = generateBusinessParam(orderItemDto, businessTableHisDto);
|
|
|
+ httpEntity = new HttpEntity<String>(params.toJSONString(), header);
|
|
|
+ //通过fallBack 的方式生成Business
|
|
|
+ restTemplate.exchange(FALLBACK_URL.replace(SERVICE_NAME, orderItemDto.getServiceName()), HttpMethod.POST, httpEntity, String.class);
|
|
|
+ } catch (Exception e) {
|
|
|
+ logger.error("生成business失败", e);
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生成回滚sql
|
|
|
+ *
|
|
|
+ * @param orderItemDto
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private JSONArray generateBusinessParam(OrderItemDto orderItemDto, BusinessTableHisDto businessTableHisDto) {
|
|
|
+ JSONArray params = null;
|
|
|
+ switch (orderItemDto.getAction()) {
|
|
|
+ case "ADD":
|
|
|
+ params = generateBusinessInsertInsertSql(orderItemDto, businessTableHisDto);
|
|
|
+ break;
|
|
|
+ case "MOD":
|
|
|
+ params = generateBusinessDelInsertSql(orderItemDto, businessTableHisDto);
|
|
|
+ JSONArray paramAdds = generateBusinessInsertInsertSql(orderItemDto, businessTableHisDto);
|
|
|
+ params.add(paramAdds);
|
|
|
+ break;
|
|
|
+ case "DEL":
|
|
|
+ params = generateBusinessDelInsertSql(orderItemDto, businessTableHisDto);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ return params;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生成添加的insert语句
|
|
|
+ *
|
|
|
+ * @param orderItemDto
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private JSONArray generateBusinessInsertInsertSql(OrderItemDto orderItemDto, BusinessTableHisDto businessTableHisDto) {
|
|
|
+ JSONArray params = new JSONArray();
|
|
|
+ JSONObject param = null;
|
|
|
+ String sql = "";
|
|
|
+ String logText = orderItemDto.getLogText();
|
|
|
+
|
|
|
+ JSONObject logTextObj = JSONObject.parseObject(logText);
|
|
|
+ JSONArray afterValues = logTextObj.getJSONArray("afterValue");
|
|
|
+ for (int afterValueIndex = 0; afterValueIndex < afterValues.size(); afterValueIndex++) {
|
|
|
+ sql = "insert into " + businessTableHisDto.getActionObjHis() + " ";
|
|
|
+ param = new JSONObject();
|
|
|
+ JSONObject keyValue = afterValues.getJSONObject(afterValueIndex);
|
|
|
+ if (keyValue.isEmpty()) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ String keySql = "( ";
|
|
|
+ String valueSql = " values (";
|
|
|
+ for (String key : keyValue.keySet()) {
|
|
|
+ if ("status_cd".equals(key) || "create_time".equals(key)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ keySql += (key + ",");
|
|
|
+ valueSql += (keyValue.getString(key) + ",");
|
|
|
+ }
|
|
|
+ keySql += "operate,b_id";
|
|
|
+ valueSql += "'ADD','" + orderItemDto.getbId() + "'";
|
|
|
+ if (keySql.endsWith(",")) {
|
|
|
+ keySql = keySql.substring(0, keySql.length() - 1);
|
|
|
+ }
|
|
|
+ if (valueSql.endsWith(",")) {
|
|
|
+ valueSql = valueSql.substring(0, valueSql.length() - 1);
|
|
|
+ }
|
|
|
+ sql = sql + keySql + ") " + valueSql + ") ";
|
|
|
+ param.put("fallBackSql", sql);
|
|
|
+ params.add(param);
|
|
|
+ }
|
|
|
+
|
|
|
+ return params;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生成删除的insert语句
|
|
|
+ *
|
|
|
+ * @param orderItemDto
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private JSONArray generateBusinessDelInsertSql(OrderItemDto orderItemDto, BusinessTableHisDto businessTableHisDto) {
|
|
|
+ JSONArray params = new JSONArray();
|
|
|
+ JSONObject param = null;
|
|
|
+ String sql = "";
|
|
|
+ String logText = orderItemDto.getLogText();
|
|
|
+
|
|
|
+ JSONObject logTextObj = JSONObject.parseObject(logText);
|
|
|
+ JSONArray preValues = logTextObj.getJSONArray("preValue");
|
|
|
+ for (int preValueIndex = 0; preValueIndex < preValues.size(); preValueIndex++) {
|
|
|
+ sql = "insert into " + businessTableHisDto.getActionObjHis() + " ";
|
|
|
+ param = new JSONObject();
|
|
|
+ JSONObject keyValue = preValues.getJSONObject(preValueIndex);
|
|
|
+ if (keyValue.isEmpty()) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ String keySql = "( ";
|
|
|
+ String valueSql = " values (";
|
|
|
+ for (String key : keyValue.keySet()) {
|
|
|
+ if ("status_cd".equals(key) || "create_time".equals(key)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ keySql += (key + ",");
|
|
|
+ valueSql += (keyValue.getString(key) + ",");
|
|
|
+ }
|
|
|
+ keySql += "operate,b_id";
|
|
|
+ valueSql += "'DEL','" + orderItemDto.getbId() + "'";
|
|
|
+ if (keySql.endsWith(",")) {
|
|
|
+ keySql = keySql.substring(0, keySql.length() - 1);
|
|
|
+ }
|
|
|
+ if (valueSql.endsWith(",")) {
|
|
|
+ valueSql = valueSql.substring(0, valueSql.length() - 1);
|
|
|
+ }
|
|
|
+ sql = sql + keySql + ") " + valueSql + ") ";
|
|
|
+ param.put("fallBackSql", sql);
|
|
|
+ params.add(param);
|
|
|
+ }
|
|
|
+
|
|
|
+ return params;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|