From 46eed722cd0431aa433bea2470b23015b8d83b3e Mon Sep 17 00:00:00 2001
From: java110 <928255095@qq.com>
Date: 星期一, 21 二月 2022 10:03:25 +0800
Subject: [PATCH] 优化三亚物业 临时收费问题
---
service-order/src/main/java/com/java110/order/smo/impl/OIdServiceSMOImpl.java | 312 ++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 300 insertions(+), 12 deletions(-)
diff --git a/service-order/src/main/java/com/java110/order/smo/impl/OIdServiceSMOImpl.java b/service-order/src/main/java/com/java110/order/smo/impl/OIdServiceSMOImpl.java
old mode 100644
new mode 100755
index cb76e9f..58c0e32
--- a/service-order/src/main/java/com/java110/order/smo/impl/OIdServiceSMOImpl.java
+++ b/service-order/src/main/java/com/java110/order/smo/impl/OIdServiceSMOImpl.java
@@ -3,21 +3,25 @@
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.java110.core.client.RestTemplate;
+import com.java110.core.context.SecureInvocation;
import com.java110.core.factory.GenerateCodeFactory;
+import com.java110.dto.app.AppDto;
+import com.java110.dto.businessTableHis.BusinessTableHisDto;
import com.java110.dto.order.OrderDto;
import com.java110.dto.order.OrderItemDto;
import com.java110.order.dao.ICenterServiceDAO;
+import com.java110.order.smo.IAsynNotifySubService;
import com.java110.order.smo.IOIdServiceSMO;
+import com.java110.utils.cache.BusinessTableHisCache;
+import com.java110.utils.constant.StatusConstant;
import com.java110.utils.util.BeanConvertUtil;
+import com.java110.utils.util.DateUtil;
import com.java110.utils.util.StringUtil;
+import com.java110.vo.ResultVo;
import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import com.java110.core.log.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.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
+import org.springframework.http.*;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
@@ -36,7 +40,7 @@
private static Logger logger = LoggerFactory.getLogger(OIdServiceSMOImpl.class);
- public static final String FALLBACK_URL = "http://SERVICE_NAME/fallBack";
+ public static final String FALLBACK_URL = "http://SERVICE_NAME/businessApi/fallBack";
public static final String SERVICE_NAME = "SERVICE_NAME";
@@ -47,25 +51,33 @@
@Autowired
private RestTemplate restTemplate;
+ @Autowired
+ private IAsynNotifySubService asynNotifySubServiceImpl;
+
@Override
public ResponseEntity<String> createOId(OrderDto orderDto) {
orderDto.setoId(GenerateCodeFactory.getOId());
if (StringUtil.isEmpty(orderDto.getAppId())) {
- throw new IllegalArgumentException("鏈寘鍚玜ppId");
+ orderDto.setAppId(AppDto.WEB_APP_ID);
}
if (StringUtil.isEmpty(orderDto.getExtTransactionId())) {
- throw new IllegalArgumentException("鏈寘鍚氦浜掓棩蹇�");
+ orderDto.setExtTransactionId(GenerateCodeFactory.getTransactionId());
}
if (StringUtil.isEmpty(orderDto.getRequestTime())) {
- throw new IllegalArgumentException("鏈寘鍚姹傛椂闂�");
+ orderDto.setRequestTime(DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_DEFAULT));
+ }
+
+ if (StringUtil.isEmpty(orderDto.getUserId())) {
+ orderDto.setUserId("-1");
}
//淇濆瓨璁㈠崟淇℃伅
- centerServiceDAOImpl.saveOrder(BeanConvertUtil.beanCovertMap(orderDto));
+ centerServiceDAOImpl.saveOrder(BeanConvertUtil.beanCovertMap(orderDto));
+
return new ResponseEntity<String>(JSONObject.toJSONString(orderDto), HttpStatus.OK);
}
@@ -96,17 +108,293 @@
List<OrderItemDto> errorOrderItemDtos = new ArrayList<>();
for (OrderItemDto orderItemDto : orderItemDtos) {
try {
- httpEntity = new HttpEntity<String>(JSONObject.toJSONString(orderItemDto), header);
+ 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.updateOrder(info);
+
if (errorOrderItemDtos.size() > 0) {
return new ResponseEntity<String>(JSONArray.toJSONString(errorOrderItemDtos), HttpStatus.BAD_REQUEST);
} else {
return new ResponseEntity<String>("", HttpStatus.OK);
}
}
+
+ /**
+ * 鐢熸垚鍥炴粴sql
+ *
+ * @param orderItemDto
+ * @return
+ */
+ private JSONArray generateParam(OrderItemDto orderItemDto) {
+ JSONArray params = null;
+ switch (orderItemDto.getAction()) {
+ case "ADD":
+ params = generateDeleteSql(orderItemDto);
+ break;
+ case "MOD":
+ params = generateUpdateSql(orderItemDto);
+ break;
+ case "DEL":
+ params = generateInsertSql(orderItemDto);
+ break;
+ }
+
+ return params;
+ }
+
+
+ /**
+ * 鐢熸垚insert璇彞
+ *
+ * @param orderItemDto
+ * @return
+ */
+ private JSONArray generateInsertSql(OrderItemDto orderItemDto) {
+ 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 " + orderItemDto.getActionObj() + " ";
+ param = new JSONObject();
+ JSONObject keyValue = preValues.getJSONObject(preValueIndex);
+ if (keyValue.isEmpty()) {
+ continue;
+ }
+ String keySql = "( ";
+ String valueSql = " values (";
+ for (String key : keyValue.keySet()) {
+ keySql += (key + ",");
+ valueSql += (keyValue.getString(key) + ",");
+ }
+ 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;
+ }
+
+ private JSONArray generateUpdateSql(OrderItemDto orderItemDto) {
+ JSONArray params = new JSONArray();
+ JSONObject param = null;
+ String sql = "";
+ String logText = orderItemDto.getLogText();
+
+ JSONObject logTextObj = JSONObject.parseObject(logText);
+ JSONArray preValues = logTextObj.getJSONArray("preValue");
+ JSONArray afterValues = logTextObj.getJSONArray("afterValue");
+
+ for (int preValueIndex = 0; preValueIndex < preValues.size(); preValueIndex++) {
+ sql = "update " + orderItemDto.getActionObj() + " set ";
+ param = new JSONObject();
+ JSONObject keyValue = preValues.getJSONObject(preValueIndex);
+ JSONObject afterKeyValue = afterValues.getJSONObject(preValueIndex);
+ if (keyValue.isEmpty() || afterKeyValue.isEmpty()) {
+ continue;
+ }
+ String whereSql = " where 1=1 ";
+ for (String key : keyValue.keySet()) {
+ sql += (key + "=" + keyValue.getString(key) + ",");
+ if ("''".equals(afterKeyValue.getString(key))) { //鏉′欢涓笉鎷煎啓 涓虹┖鐨勭粨鏋�
+ continue;
+ }
+ whereSql += (" and " + key + " = " + afterKeyValue.getString(key));
+ }
+ if (sql.endsWith(",")) {
+ sql = sql.substring(0, sql.length() - 1);
+ }
+
+ if (sql.endsWith(whereSql)) { // 璇存槑娌℃湁鏉′欢 涓嶅仛鍥為�� 鍥為��鏁翠釜琛ㄦ槸鏈夐棶棰樼殑
+ continue;
+ }
+
+ sql += whereSql;
+
+ param.put("fallBackSql", sql);
+ params.add(param);
+ }
+
+ return params;
+ }
+
+ /**
+ * 鐢熸垚鍒犻櫎璇彞
+ *
+ * @param orderItemDto
+ */
+ private JSONArray generateDeleteSql(OrderItemDto orderItemDto) {
+ JSONArray params = new JSONArray();
+ JSONObject param = null;
+ String sql = "";
+ String logText = orderItemDto.getLogText();
+
+ JSONObject logTextObj = JSONObject.parseObject(logText);
+ JSONArray afterValues = logTextObj.getJSONArray("afterValue");
+ String whereSql = " where 1=1 ";
+ for (int preValueIndex = 0; preValueIndex < afterValues.size(); preValueIndex++) {
+ sql = "delete from " + orderItemDto.getActionObj() + whereSql;
+ param = new JSONObject();
+ JSONObject keyValue = afterValues.getJSONObject(preValueIndex);
+ if (keyValue.isEmpty()) {
+ continue;
+ }
+ for (String key : keyValue.keySet()) {
+ if (!StringUtil.isEmpty(keyValue.getString(key))) {
+ sql += (" and " + key + "=" + keyValue.getString(key));
+ }
+ }
+ if (sql.endsWith(whereSql)) { // 璇存槑娌℃湁鏉′欢 涓嶅仛鍥為�� 鍥為��鏁翠釜琛ㄦ槸鏈夐棶棰樼殑
+ continue;
+ }
+ sql += " limit 1";//闃叉绋嬪簭寮傚父鍒犻櫎 灏村艾 鏍规嵁涓氬姟鍦烘櫙 娌℃湁闇�瑕佸垹闄ゅ浣� 1鏉$殑鍦烘櫙
+ param.put("fallBackSql", sql);
+ params.add(param);
+ }
+
+ return params;
+ }
+
+ @Override
+ public ResponseEntity<String> createOrderItem(OrderItemDto orderItemDto) {
+
+ if (StringUtil.isEmpty(orderItemDto.getoId())) {
+ return new ResponseEntity<String>("璇锋眰鎶ユ枃涓湭鍖呭惈浜嬪姟ID", HttpStatus.NOT_FOUND);
+ }
+
+ if (StringUtil.isEmpty(orderItemDto.getAction())) {
+ return new ResponseEntity<String>("璇锋眰鎶ユ枃涓湭鍖呭惈鍔ㄤ綔", HttpStatus.NOT_FOUND);
+ }
+
+ if (StringUtil.isEmpty(orderItemDto.getActionObj())) {
+ return new ResponseEntity<String>("璇锋眰鎶ユ枃涓湭鍖呭惈鍔ㄤ綔瀵硅薄", HttpStatus.NOT_FOUND);
+ }
+
+ if (StringUtil.isEmpty(orderItemDto.getServiceName())) {
+ return new ResponseEntity<String>("璇锋眰鎶ユ枃涓湭鍖呭惈鏈嶅姟", HttpStatus.NOT_FOUND);
+ }
+ if (StringUtil.isEmpty(orderItemDto.getLogText())) {
+ return new ResponseEntity<String>("璇锋眰鎶ユ枃涓湭鍖呭惈鍥炴粴鏃ュ織", HttpStatus.NOT_FOUND);
+ }
+ 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));
+
+ //鍒ゆ柇鏄惁閰嶇疆浜� 杞ㄨ抗
+ BusinessTableHisDto businessTableHisDto = BusinessTableHisCache.getBusinessTableHisDto(orderItemDto.getAction(), orderItemDto.getActionObj());
+ if (businessTableHisDto == null) {
+ return ResultVo.createResponseEntity(ResultVo.CODE_OK, ResultVo.MSG_OK);
+ }
+
+ //琛ュ厖 c_business #{bId},#{oId},#{businessTypeCd},#{remark},#{statusCd}
+ Map business = new HashMap();
+ business.put("oId", orderItemDto.getoId());
+ business.put("businessTypeCd", businessTableHisDto.getBusinessTypeCd());
+ business.put("remark", "");
+ business.put("statusCd", StatusConstant.STATUS_CD_SAVE);
+ business.put("bId", orderItemDto.getbId());
+ centerServiceDAOImpl.saveBusiness(business);
+
+ //閫氱煡瀛愭湇鍔$敓鎴� business 鏁版嵁,濡傛灉閰嶇疆NO 涓嶉�氱煡鐢熸垚 business 鏁版嵁
+ if (BusinessTableHisDto.ACTION_OBJ_HIS_NO.equals(businessTableHisDto.getActionObjHis())) {
+ return ResultVo.createResponseEntity(ResultVo.CODE_OK, ResultVo.MSG_OK);
+ }
+
+ doNoticeServiceGeneratorBusiness(orderItemDto, businessTableHisDto);
+ return ResultVo.createResponseEntity(ResultVo.CODE_OK, ResultVo.MSG_OK);
+ }
+
+ private void doNoticeServiceGeneratorBusiness(OrderItemDto orderItemDto, BusinessTableHisDto businessTableHisDto) {
+ asynNotifySubServiceImpl.notifySubService(orderItemDto, businessTableHisDto);
+ }
+
+ /**
+ * 瀹屾垚浜嬪姟
+ *
+ * @param orderDto
+ * @return
+ */
+ @Override
+ public ResponseEntity<String> finishOrder(OrderDto orderDto) {
+ if (StringUtil.isEmpty(orderDto.getoId())) {
+ return new ResponseEntity<String>("璇锋眰鎶ユ枃涓湭鍖呭惈浜嬪姟ID", HttpStatus.NOT_FOUND);
+ }
+
+ //瀹屾垚璁㈠崟椤�
+ Map info = new HashMap();
+ info.put("finishTime", DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
+ info.put("statusCd", "C");
+ info.put("oId", orderDto.getoId());
+ centerServiceDAOImpl.updateOrderItem(info);
+
+ //瀹屾垚璁㈠崟
+ info = new HashMap();
+ info.put("finishTime", DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
+ info.put("statusCd", "C");
+ info.put("oId", orderDto.getoId());
+ centerServiceDAOImpl.updateOrder(info);
+
+ //灏哻_business 淇敼涓哄畬鎴�
+ //瀹屾垚璁㈠崟椤�
+ info = new HashMap();
+ info.put("finishTime", DateUtil.getNow(DateUtil.DATE_FORMATE_STRING_A));
+ info.put("statusCd", "C");
+ info.put("oId", orderDto.getoId());
+ centerServiceDAOImpl.updateBusiness(info);
+
+ //瑙﹀彂databug
+ //鏌ヨ 浜嬪姟椤�
+ Map orderItem = new HashMap();
+ orderItem.put("oId", orderDto.getoId());
+ List<Map> orderItemMaps = centerServiceDAOImpl.getOrderItems(orderItem);
+
+ //鍒犻櫎 浜嬪姟鏃ュ織
+ //centerServiceDAOImpl.deleteUnItemLog(info);
+
+ asynNotifySubServiceImpl.notifyDatabus(orderItemMaps, orderDto);
+
+ return ResultVo.createResponseEntity(ResultVo.CODE_OK, ResultVo.MSG_OK);
+ }
+
+
}
--
Gitblit v1.8.0