dev
parent
c2894722ac
commit
32fc38e6de
|
|
@ -27,12 +27,12 @@ public class OSSPlugin implements IPlugin {
|
|||
}
|
||||
|
||||
OSSKit.setCli(this._ossClient, bucketName);
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return false;
|
||||
}
|
||||
|
||||
// 不论是否发生异常,都要返回 true,否则 jfinal 启动不起来
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ public class SyncTask extends BaseSyncTask<SyncTask> {
|
|||
private JSONObject _save_data = new JSONObject();
|
||||
private JSONObject _update_data = new JSONObject();
|
||||
private JSONObject _delete_data = new JSONObject();
|
||||
private JSONObject _increment_data = new JSONObject();
|
||||
|
||||
private SyncTask add(JSONObject obj, BaseModel model){
|
||||
String key = model.getTablename();
|
||||
|
|
@ -49,6 +50,26 @@ public class SyncTask extends BaseSyncTask<SyncTask> {
|
|||
return add(_delete_data, model);
|
||||
}
|
||||
|
||||
public SyncTask addIncrementData(String tablename, String pks, Object pkv, JSONObject obj){
|
||||
JSONObject data = new JSONObject();
|
||||
data.put("pks", pks);
|
||||
data.put("pkv", new JSONArray().add(pkv));
|
||||
data.put("increment", obj);
|
||||
_increment_data.put(tablename, data);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
public SyncTask addIncrementData(String tablename, String pks, JSONObject pkv, JSONObject obj){
|
||||
JSONObject data = new JSONObject();
|
||||
data.put("pks", pks);
|
||||
data.put("pkv", pkv);
|
||||
data.put("increment", obj);
|
||||
_increment_data.put(tablename, data);
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
public void setJson(){
|
||||
if(!_save_data.isEmpty() && this.getSaveData() == null){
|
||||
this.setSaveData(JSONObject.toJSONString(_save_data, SerializerFeature.WriteDateUseDateFormat)); // 新增的数据,就不要发送 null 值了
|
||||
|
|
@ -59,5 +80,8 @@ public class SyncTask extends BaseSyncTask<SyncTask> {
|
|||
if(!_delete_data.isEmpty() && this.getDeleteData() == null){
|
||||
this.setDeleteData(JSONObject.toJSONString(_delete_data, SerializerFeature.WriteDateUseDateFormat));
|
||||
}
|
||||
if(!_increment_data.isEmpty() && this.getIncrementData() == null){
|
||||
this.setIncrementData(JSONObject.toJSONString(_increment_data));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ import com.jfinal.plugin.activerecord.IBean;
|
|||
import com.alibaba.fastjson.annotation.JSONField;
|
||||
|
||||
/**
|
||||
* Generated by COWR Sun May 17 22:38:13 CST 2020
|
||||
* Generated by COWR Sat Oct 10 22:02:10 CST 2020
|
||||
* TableName: sync_task
|
||||
* Remarks: 日志相关 - 数据同步
|
||||
* PrimaryKey: id
|
||||
|
|
@ -92,7 +92,7 @@ public abstract class BaseSyncTask<M extends BaseSyncTask<M>> extends BaseModel<
|
|||
* isNullable: NO
|
||||
* isPrimaryKey: NO
|
||||
* defaultValue:
|
||||
* @param supermarketId 砂站id
|
||||
* @param supermarketId 超市id
|
||||
*/
|
||||
@JSONField(name="supermarket_id")
|
||||
public void setSupermarketId(Integer supermarketId) {
|
||||
|
|
@ -101,7 +101,7 @@ public abstract class BaseSyncTask<M extends BaseSyncTask<M>> extends BaseModel<
|
|||
|
||||
|
||||
/**
|
||||
* @return supermarket_id 砂站id
|
||||
* @return supermarket_id 超市id
|
||||
*/
|
||||
@JSONField(name="supermarket_id")
|
||||
public Integer getSupermarketId() {
|
||||
|
|
@ -138,7 +138,7 @@ public abstract class BaseSyncTask<M extends BaseSyncTask<M>> extends BaseModel<
|
|||
* defaultValue:
|
||||
* @param saveData 需要新增的数据
|
||||
{
|
||||
tablename: [{数据体}]
|
||||
tablename: { pks: '多个主键逗号分隔', data: [{数据体}] }
|
||||
}
|
||||
*/
|
||||
@JSONField(name="save_data")
|
||||
|
|
@ -150,7 +150,7 @@ public abstract class BaseSyncTask<M extends BaseSyncTask<M>> extends BaseModel<
|
|||
/**
|
||||
* @return save_data 需要新增的数据
|
||||
{
|
||||
tablename: [{数据体}]
|
||||
tablename: { pks: '多个主键逗号分隔', data: [{数据体}] }
|
||||
}
|
||||
*/
|
||||
@JSONField(name="save_data")
|
||||
|
|
@ -164,9 +164,9 @@ public abstract class BaseSyncTask<M extends BaseSyncTask<M>> extends BaseModel<
|
|||
* isNullable: YES
|
||||
* isPrimaryKey: NO
|
||||
* defaultValue:
|
||||
* @param updateData 需要修改的数据
|
||||
* @param updateData 需要新增的数据
|
||||
{
|
||||
tablename: [{数据体}]
|
||||
tablename: { pks: '多个主键逗号分隔', data: [{数据体}] }
|
||||
}
|
||||
*/
|
||||
@JSONField(name="update_data")
|
||||
|
|
@ -176,9 +176,9 @@ public abstract class BaseSyncTask<M extends BaseSyncTask<M>> extends BaseModel<
|
|||
|
||||
|
||||
/**
|
||||
* @return update_data 需要修改的数据
|
||||
* @return update_data 需要新增的数据
|
||||
{
|
||||
tablename: [{数据体}]
|
||||
tablename: { pks: '多个主键逗号分隔', data: [{数据体}] }
|
||||
}
|
||||
*/
|
||||
@JSONField(name="update_data")
|
||||
|
|
@ -194,7 +194,7 @@ public abstract class BaseSyncTask<M extends BaseSyncTask<M>> extends BaseModel<
|
|||
* defaultValue:
|
||||
* @param deleteData 需要删除的数据
|
||||
{
|
||||
tablename: [{数据体,主要是主键}]
|
||||
tablename: { pks: '多个主键逗号分隔', data: [{数据体}] }
|
||||
}
|
||||
*/
|
||||
@JSONField(name="delete_data")
|
||||
|
|
@ -206,11 +206,51 @@ public abstract class BaseSyncTask<M extends BaseSyncTask<M>> extends BaseModel<
|
|||
/**
|
||||
* @return delete_data 需要删除的数据
|
||||
{
|
||||
tablename: [{数据体,主要是主键}]
|
||||
tablename: { pks: '多个主键逗号分隔', data: [{数据体}] }
|
||||
}
|
||||
*/
|
||||
@JSONField(name="delete_data")
|
||||
public String getDeleteData() {
|
||||
return getStr("delete_data");
|
||||
}
|
||||
|
||||
/**
|
||||
* name: increment_data
|
||||
* type: JSON(1073741824)
|
||||
* isNullable: YES
|
||||
* isPrimaryKey: NO
|
||||
* defaultValue:
|
||||
* @param incrementData 需要修改的数据
|
||||
{
|
||||
tablename: {
|
||||
pks: '',
|
||||
increment: {
|
||||
key: value
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
@JSONField(name="increment_data")
|
||||
public void setIncrementData(String incrementData) {
|
||||
set("increment_data", incrementData);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return increment_data 需要修改的数据
|
||||
{
|
||||
tablename: {
|
||||
pks: '',
|
||||
increment: {
|
||||
key: value
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
@JSONField(name="increment_data")
|
||||
public String getIncrementData() {
|
||||
return getStr("increment_data");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -159,7 +159,9 @@ public class LEDThread extends Device implements Runnable {
|
|||
} catch (Exception e) {
|
||||
if (e.getMessage().contains("Socket is not connected")) {
|
||||
log.error("LED %s %s 连接已断开", getId(), getIp());
|
||||
} else {
|
||||
} if(e.getMessage().contains("Read timed out")){
|
||||
log.error("LED %s %s 连接超时", getId(), getIp());
|
||||
}else {
|
||||
log.error(e.getMessage(), e);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -242,7 +242,13 @@ public class Config extends JFinalConfig {
|
|||
SqlReporter.setLog(devMode);
|
||||
|
||||
{
|
||||
DruidPlugin druidPlugin = new DruidPlugin(dbprop.get("jdbcUrl"), dbprop.get("user"), dbprop.get("password").trim());
|
||||
String jdbcUrl = dbprop.get("jdbcUrl");
|
||||
|
||||
if (isDev() && jdbcUrl.contains("aliyuncs.com")) {
|
||||
jdbcUrl = jdbcUrl.replace("/ssjy_xsx_dev?", "/ssjy_xsx_dev_" + configprop.get("current.supermarket_id") + "?");
|
||||
}
|
||||
|
||||
DruidPlugin druidPlugin = new DruidPlugin(jdbcUrl, dbprop.get("user"), dbprop.get("password").trim());
|
||||
wallFilter = new WallFilter(); // 加强数据库安全
|
||||
wallFilter.setDbType("mysql");
|
||||
druidPlugin.addFilter(wallFilter);
|
||||
|
|
@ -276,6 +282,7 @@ public class Config extends JFinalConfig {
|
|||
));
|
||||
}
|
||||
|
||||
// 没有外网时,oss 连接失败会导致系统启动失败
|
||||
me.add(new OSSPlugin(configprop.get("endpoint"), configprop.get("bucketName")));
|
||||
}
|
||||
|
||||
|
|
@ -377,6 +384,10 @@ public class Config extends JFinalConfig {
|
|||
}
|
||||
}
|
||||
|
||||
public static boolean isDev() {
|
||||
return "dev".equals(ENV);
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断当前是 开发 环境,还是 生产 环境
|
||||
* 根据不同的环境变量读取不同数据库连接
|
||||
|
|
|
|||
|
|
@ -110,25 +110,6 @@ public class OrderTempController extends BaseController {
|
|||
renderJson(OrderTempSyncService.me.prepay(uuid, transport_id, ordercluster_id, invoice_number, invoice_code, product_id, memo, printer, tokenuser, req_receipt));
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单取消
|
||||
*/
|
||||
@Before(OrderCancelValidator.class)
|
||||
public void cancel() {
|
||||
Sysuser tokenuser = SysuserSyncService.me.getSysuserByToken(get("token"));
|
||||
|
||||
if (tokenuser == null) {
|
||||
renderJson(Result.noauth());
|
||||
return;
|
||||
}
|
||||
|
||||
String sn = get("sn");
|
||||
String invalid_memo = get("invalid_memo");
|
||||
String password = get("password");
|
||||
|
||||
renderJson(OrderTempSyncService.me.cancel(sn, invalid_memo, tokenuser, password));
|
||||
}
|
||||
|
||||
@Before(SnValidator.class)
|
||||
public void invoice() {
|
||||
Sysuser tokenuser = SysuserSyncService.me.getSysuserByToken(get("token"));
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.cowr.local.ssjygl.order.ordertemp;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.cowr.common.enums.Enums;
|
||||
import com.cowr.common.enums.OrderStateEnum;
|
||||
import com.cowr.common.enums.OrderTypeEnum;
|
||||
|
|
@ -680,15 +681,20 @@ public class OrderTempSyncService {
|
|||
order.setIsprepaid(1);
|
||||
order.setPaid(new BigDecimal(0)); // 预付费的实际支付为 0
|
||||
order.setPrepayCustomerId(prepayCustomer.getId());
|
||||
prepayCustomer.setSpendTime(now);
|
||||
|
||||
if (prepayCustomer.getSurplus().compareTo(order.getTotalPrice()) < 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
prepayCustomer.setSurplus(prepayCustomer.getSurplus().subtract(order.getTotalPrice()));
|
||||
synctask.addIncrementData(
|
||||
prepayCustomer.getTablename(),
|
||||
"id",
|
||||
prepayCustomer.getId(),
|
||||
new JSONObject().fluentPut("surplus", new BigDecimal(0).subtract(order.getTotalPrice())) // 结算完成,在原余额上加上一个负数
|
||||
);
|
||||
|
||||
synctask.addUpdateData(prepayCustomer);
|
||||
// 只更新本地 prepayCustomer 的 surplus
|
||||
prepayCustomer.setSurplus(prepayCustomer.getSurplus().subtract(order.getTotalPrice()));
|
||||
|
||||
ret = prepayCustomer.update();
|
||||
|
||||
|
|
@ -779,6 +785,14 @@ public class OrderTempSyncService {
|
|||
return LocalOrderService.me.orderPayComplete(ret, order.toRecord(), transport, printerId);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
* @param sn
|
||||
* @param invalid_memo
|
||||
* @param sysuser
|
||||
* @param password
|
||||
* @return
|
||||
*/
|
||||
public Result cancel(String sn, String invalid_memo, Sysuser sysuser, String password) {
|
||||
// TODO: 判断权限
|
||||
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ import com.cowr.common.view.Result;
|
|||
import com.cowr.local.ssjygl.main.CliCacheData;
|
||||
import com.cowr.local.ssjygl.main.Config;
|
||||
import com.cowr.model.AuthLicense;
|
||||
import com.cowr.model.Supermarket;
|
||||
import com.cowr.model.SyncTask;
|
||||
import com.cowr.ssjygl.CacheData;
|
||||
import com.jfinal.kit.StrKit;
|
||||
|
|
@ -15,6 +16,7 @@ import com.jfinal.plugin.activerecord.Db;
|
|||
import com.jfinal.plugin.activerecord.IAtom;
|
||||
import com.jfinal.plugin.activerecord.Record;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.sql.SQLException;
|
||||
import java.util.*;
|
||||
|
||||
|
|
@ -46,9 +48,10 @@ public class SyncTaskService {
|
|||
|
||||
boolean ret = synctask.save();
|
||||
|
||||
if(ret){
|
||||
send(synctask);
|
||||
}
|
||||
// 2020-10-10 创建的任务不能立马就发出,要事务完成后发出,避免事务回滚
|
||||
// if(ret){
|
||||
// send(synctask);
|
||||
// }
|
||||
|
||||
return ret; // 有插入的,还是需要返回插入状态
|
||||
}
|
||||
|
|
@ -109,10 +112,10 @@ public class SyncTaskService {
|
|||
* <p>
|
||||
* 多个表的操作,放到一个 synctask 里面,在接收时,也就可以放在一个事务里面处理了
|
||||
*
|
||||
* @param data
|
||||
* @param recvdata
|
||||
* @return
|
||||
*/
|
||||
public Result recv(JSONObject data) {
|
||||
public Result recv(JSONObject recvdata) {
|
||||
if(!isEnable()){
|
||||
return Result.success();
|
||||
}
|
||||
|
|
@ -120,18 +123,20 @@ public class SyncTaskService {
|
|||
long st = System.currentTimeMillis();
|
||||
|
||||
try {
|
||||
JSONObject save_data = JSONObject.parseObject(data.getString("save_data"));
|
||||
JSONObject update_data = JSONObject.parseObject(data.getString("update_data"));
|
||||
JSONObject delete_data = JSONObject.parseObject(data.getString("delete_data"));
|
||||
JSONObject save_data = JSONObject.parseObject(recvdata.getString("save_data"));
|
||||
JSONObject update_data = JSONObject.parseObject(recvdata.getString("update_data"));
|
||||
JSONObject delete_data = JSONObject.parseObject(recvdata.getString("delete_data"));
|
||||
JSONObject increment_data = JSONObject.parseObject(recvdata.getString("increment_data"));
|
||||
|
||||
if (
|
||||
(save_data == null || save_data.isEmpty())
|
||||
&& (update_data == null || update_data.isEmpty())
|
||||
&& (delete_data == null || delete_data.isEmpty())
|
||||
&& (increment_data == null || increment_data.isEmpty())
|
||||
) {
|
||||
log.error("同步的数据是空的 %s", data.toJSONString());
|
||||
log.error("同步的数据是空的 %s", recvdata.toJSONString());
|
||||
log.debug("recv 1 time: %s", System.currentTimeMillis() - st);
|
||||
return Result.failedstr("同步的数据是空的 %s", data.toJSONString());
|
||||
return Result.failedstr("同步的数据是空的 %s", recvdata.toJSONString());
|
||||
}
|
||||
|
||||
final String[] err = {null};
|
||||
|
|
@ -213,6 +218,55 @@ public class SyncTaskService {
|
|||
}
|
||||
}
|
||||
|
||||
// 增量更新
|
||||
// 对指定表的固定字段进行 增加或者减少
|
||||
// 2020-10-10 只在修改 PrepayCustomer 中的余额时需要用到
|
||||
if (increment_data != null && !increment_data.isEmpty()) {
|
||||
for (String tablename : increment_data.keySet()) {
|
||||
JSONObject data = increment_data.getJSONObject(tablename);
|
||||
String pks = data.getString("pks");
|
||||
JSONArray pkv = data.getJSONArray("pkv");
|
||||
JSONObject increment_data = data.getJSONObject("increment_data");
|
||||
|
||||
Record record = Db.findByIds(tablename, pks, pkv.toArray());
|
||||
boolean change = false;
|
||||
|
||||
if (record == null) {
|
||||
log.error("未找到记录 %s,%s,%s", tablename, pks, pkv);
|
||||
return false;
|
||||
}
|
||||
|
||||
for (String key : increment_data.keySet()) {
|
||||
Map<String, Object> columns = record.getColumns();
|
||||
if (!columns.containsKey(key)) {
|
||||
log.error("未找到属性 %s,%s", tablename, key);
|
||||
return false;
|
||||
}
|
||||
|
||||
try {
|
||||
BigDecimal old = record.getBigDecimal(key);
|
||||
|
||||
record.set(key, old.add(new BigDecimal(increment_data.getString(key))));
|
||||
|
||||
change = true;
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage(), e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (change) {
|
||||
boolean ret = Db.update(tablename, pks, record);
|
||||
|
||||
if (!ret) {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
log.debug("没有变化 %s", tablename);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!saveauthlics.isEmpty() && !deleteauthlics.isEmpty()) {
|
||||
return recvAuthLicense(saveauthlics, deleteauthlics);
|
||||
}
|
||||
|
|
@ -220,11 +274,11 @@ public class SyncTaskService {
|
|||
return true;
|
||||
} catch (Exception e) {
|
||||
if (e.getMessage().contains("PRIMARY")) {
|
||||
log.error("主键冲突 %s", data.toJSONString());
|
||||
err[0] = String.format("主键冲突 %s", data.toJSONString());
|
||||
log.error("主键冲突 %s", recvdata.toJSONString());
|
||||
err[0] = String.format("主键冲突 %s", recvdata.toJSONString());
|
||||
} else if (e.getMessage().contains("Duplicate entry")) {
|
||||
log.error("重复数据 %s", data.toJSONString());
|
||||
err[0] = String.format("重复数据 %s", data.toJSONString());
|
||||
log.error("重复数据 %s", recvdata.toJSONString());
|
||||
err[0] = String.format("重复数据 %s", recvdata.toJSONString());
|
||||
} else {
|
||||
log.error(e.getMessage(), e);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -756,6 +756,7 @@ public class TransportSyncService {
|
|||
|
||||
Record logrecord = new Record();
|
||||
logrecord.set("id", transport_id);
|
||||
logrecord.set("modify_content", "manualWeight");
|
||||
|
||||
if (which.startsWith(Enums.CtrlFlowEnum.R.name())) { // 入场重量
|
||||
transport.setFirstWeight(new BigDecimal(weight));
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package com.cowr.service.ssjygl.cache;
|
|||
|
||||
import com.cowr.common.view.Result;
|
||||
import com.cowr.service.ssjygl.main.AuthInterceptor;
|
||||
import com.cowr.service.ssjygl.main.SvrCacheData;
|
||||
import com.cowr.service.ssjygl.supermarket.SupermarketSyncService;
|
||||
import com.cowr.ssjygl.transportcompany.TransportCompanyService;
|
||||
import com.cowr.ssjygl.transprice.TransPriceService;
|
||||
|
|
@ -23,4 +24,8 @@ public class CacheController extends Controller {
|
|||
|
||||
renderJson(Result.success("重新加载完成"));
|
||||
}
|
||||
|
||||
public void last(){
|
||||
renderJson(SvrCacheData.SUP_HEARTBEAT);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -51,15 +51,16 @@ public class OrderclusterController extends BaseController {
|
|||
return;
|
||||
}
|
||||
|
||||
String customer_name = get("customer_name");
|
||||
String customer_texpayer_num = get("customer_texpayer_num");
|
||||
Integer req_receipt = getInt("req_receipt");
|
||||
double total_weight = getParaToDouble("total_weight");
|
||||
Date cutoff_time = getDate("cutoff_time");
|
||||
int supermarket_id = getInt("supermarket_id");
|
||||
String trucks = get("trucks");
|
||||
String customer_name = get("customer_name");
|
||||
String customer_texpayer_num = get("customer_texpayer_num");
|
||||
String customer_texpayer_name = get("customer_texpayer_name");
|
||||
Integer req_receipt = getInt("req_receipt");
|
||||
double total_weight = getParaToDouble("total_weight");
|
||||
Date cutoff_time = getDate("cutoff_time");
|
||||
int supermarket_id = getInt("supermarket_id");
|
||||
String trucks = get("trucks");
|
||||
|
||||
renderJson(OrderclusterSyncService.me.save(customer_name, customer_texpayer_num, req_receipt, total_weight, cutoff_time, supermarket_id, trucks, tokenuser));
|
||||
renderJson(OrderclusterSyncService.me.save(customer_name, customer_texpayer_name, customer_texpayer_num, req_receipt, total_weight, cutoff_time, supermarket_id, trucks, tokenuser));
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -216,6 +216,7 @@ public class OrderclusterSyncService extends BaseSyncService {
|
|||
|
||||
public Result save(
|
||||
String customer_name,
|
||||
String customer_texpayer_name,
|
||||
String customer_texpayer_num,
|
||||
Integer req_receipt,
|
||||
double total_weight,
|
||||
|
|
@ -310,6 +311,7 @@ public class OrderclusterSyncService extends BaseSyncService {
|
|||
|
||||
// 判断是否需要开具发票
|
||||
// if (req_receipt == 1) {
|
||||
model.setCustomerTexpayerName(customer_texpayer_name);
|
||||
model.setCustomerTexpayerNum(customer_texpayer_num);
|
||||
// }
|
||||
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import com.cowr.common.view.PageParam;
|
|||
import com.cowr.common.view.Result;
|
||||
import com.cowr.model.Sysuser;
|
||||
import com.cowr.service.ssjygl.system.sysuser.SysuserSyncService;
|
||||
import com.cowr.ssjygl.order.OrderCancelValidator;
|
||||
import com.cowr.ssjygl.order.ordertemp.OrderTempPKValidator;
|
||||
import com.cowr.ssjygl.order.ordertemp.OrderTempService;
|
||||
import com.jfinal.aop.Before;
|
||||
|
|
@ -55,4 +56,23 @@ public class OrderTempController extends BaseController {
|
|||
|
||||
renderJson(Result.object(OrderTempService.me.find(pp, sn, truck_license, supermarket_id, customer_id, customer_name, stm, etm, isprepaid, state, invoice_code, invoice_type, product_id, invoice_code_is_null)));
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单取消
|
||||
*/
|
||||
@Before(OrderCancelValidator.class)
|
||||
public void cancel() {
|
||||
Sysuser tokenuser = SysuserSyncService.me.getSysuserByToken(get("token"));
|
||||
|
||||
if (tokenuser == null) {
|
||||
renderJson(Result.noauth());
|
||||
return;
|
||||
}
|
||||
|
||||
String sn = get("sn");
|
||||
String invalid_memo = get("invalid_memo");
|
||||
String password = get("password");
|
||||
|
||||
renderJson(OrderTempSyncService.me.cancel(sn, invalid_memo, tokenuser, password));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.cowr.service.ssjygl.order.ordertemp;
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.cowr.common.enums.Enums;
|
||||
import com.cowr.common.enums.OrderStateEnum;
|
||||
import com.cowr.common.view.Result;
|
||||
|
|
@ -130,7 +131,13 @@ public class OrderTempSyncService {
|
|||
prepayCustomer.setSurplus(prepayCustomer.getSurplus().add(order.getTotalPrice()));
|
||||
}
|
||||
|
||||
synctask.addUpdateData(prepayCustomer);
|
||||
// 余额变化需要广播
|
||||
SyncTaskService.me.save(new SyncTask().addIncrementData(
|
||||
prepayCustomer.getTablename(),
|
||||
"id",
|
||||
prepayCustomer.getId(),
|
||||
new JSONObject().fluentPut("surplus", order.getTotalPrice()) // 取消订单,在原余额上加上一个数
|
||||
));
|
||||
|
||||
ret = prepayCustomer.update();
|
||||
}
|
||||
|
|
@ -151,7 +158,7 @@ public class OrderTempSyncService {
|
|||
|
||||
synctask.addUpdateData(stock);
|
||||
|
||||
return ret && SyncTaskService.me.save(synctask)
|
||||
return ret && SyncTaskService.me.save(synctask, order.getSupermarketId())
|
||||
&& ModifyLogService.me.save(order.tablename, "sn", logrecord.toJson(), Enums.DataOpType.UPDATE.getId(), sysuser);
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage(), e);
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ import com.jfinal.plugin.activerecord.Db;
|
|||
import com.jfinal.plugin.activerecord.IAtom;
|
||||
import com.jfinal.plugin.activerecord.Record;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.sql.SQLException;
|
||||
import java.util.*;
|
||||
|
||||
|
|
@ -89,11 +90,12 @@ public class SyncTaskService {
|
|||
}
|
||||
});
|
||||
|
||||
if (ret) {
|
||||
for (SyncTask obj : list) {
|
||||
send(obj);
|
||||
}
|
||||
}
|
||||
// 2020-10-10 创建的任务不能立马就发出,要事务完成后发出,避免事务回滚
|
||||
// if (ret) {
|
||||
// for (SyncTask obj : list) {
|
||||
// send(obj);
|
||||
// }
|
||||
// }
|
||||
|
||||
return ret; // 有插入的,还是需要返回插入状态
|
||||
}
|
||||
|
|
@ -189,11 +191,11 @@ public class SyncTaskService {
|
|||
* <p>
|
||||
* 多个表的操作,放到一个 synctask 里面,在接收时,也就可以放在一个事务里面处理了
|
||||
*
|
||||
* @param data
|
||||
* @param recvdata
|
||||
* @param current_supermarket_id 发送数据的 supermarket
|
||||
* @return
|
||||
*/
|
||||
public boolean recv(JSONObject data, int current_supermarket_id) {
|
||||
public boolean recv(JSONObject recvdata, int current_supermarket_id) {
|
||||
if (!isEnable()) {
|
||||
return true;
|
||||
}
|
||||
|
|
@ -201,16 +203,18 @@ public class SyncTaskService {
|
|||
long st = System.currentTimeMillis();
|
||||
|
||||
try {
|
||||
JSONObject save_data = JSONObject.parseObject(data.getString("save_data"));
|
||||
JSONObject update_data = JSONObject.parseObject(data.getString("update_data"));
|
||||
JSONObject delete_data = JSONObject.parseObject(data.getString("delete_data"));
|
||||
JSONObject save_data = JSONObject.parseObject(recvdata.getString("save_data"));
|
||||
JSONObject update_data = JSONObject.parseObject(recvdata.getString("update_data"));
|
||||
JSONObject delete_data = JSONObject.parseObject(recvdata.getString("delete_data"));
|
||||
JSONObject increment_data = JSONObject.parseObject(recvdata.getString("increment_data"));
|
||||
|
||||
if (
|
||||
(save_data == null || save_data.isEmpty())
|
||||
&& (update_data == null || update_data.isEmpty())
|
||||
&& (delete_data == null || delete_data.isEmpty())
|
||||
&& (increment_data == null || increment_data.isEmpty())
|
||||
) {
|
||||
log.error("同步的数据是空的 %s", data.toJSONString());
|
||||
log.error("同步的数据是空的 %s", recvdata.toJSONString());
|
||||
log.debug("recv 1 time: %s", System.currentTimeMillis() - st);
|
||||
return true;
|
||||
}
|
||||
|
|
@ -292,6 +296,84 @@ public class SyncTaskService {
|
|||
}
|
||||
}
|
||||
|
||||
// 增量更新
|
||||
// 对指定表的固定字段进行 增加或者减少
|
||||
// 2020-10-10 只在修改 PrepayCustomer 中的余额时需要用到
|
||||
if (increment_data != null && !increment_data.isEmpty()) {
|
||||
List<SyncTask> sts = new ArrayList<>();
|
||||
Date now = new Date();
|
||||
|
||||
for (String tablename : increment_data.keySet()) {
|
||||
JSONObject data = increment_data.getJSONObject(tablename);
|
||||
String pks = data.getString("pks");
|
||||
JSONArray pkv = data.getJSONArray("pkv");
|
||||
JSONObject increment_data = data.getJSONObject("increment_data");
|
||||
|
||||
Record record = Db.findByIds(tablename, pks, pkv.toArray());
|
||||
boolean change = false;
|
||||
|
||||
if (record == null) {
|
||||
log.error("未找到记录 %s,%s,%s", tablename, pks, pkv);
|
||||
return false;
|
||||
}
|
||||
|
||||
for (String key : increment_data.keySet()) {
|
||||
Map<String, Object> columns = record.getColumns();
|
||||
if (!columns.containsKey(key)) {
|
||||
log.error("未找到属性 %s,%s", tablename, key);
|
||||
return false;
|
||||
}
|
||||
|
||||
try {
|
||||
BigDecimal old = record.getBigDecimal(key);
|
||||
|
||||
record.set(key, old.add(new BigDecimal(increment_data.getString(key))));
|
||||
|
||||
change = true;
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage(), e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (change) {
|
||||
boolean ret = Db.update(tablename, pks, record);
|
||||
|
||||
if (!ret) {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
log.debug("没有变化 %s", tablename);
|
||||
}
|
||||
}
|
||||
|
||||
for (Map.Entry<Integer, Supermarket> entry : SvrCacheData.SUP_CACHE.entrySet()) {
|
||||
Supermarket supermarket = entry.getValue();
|
||||
|
||||
// 只对已经部署了客户端的砂站同步数据
|
||||
// 从下面上报的数据,再广播出去
|
||||
if (supermarket.getIsdeploy() == 0 || supermarket.getId() == current_supermarket_id) {
|
||||
continue;
|
||||
}
|
||||
|
||||
SyncTask synctask = new SyncTask();
|
||||
synctask.setId(StrKit.getRandomUUID());
|
||||
synctask.setIncrementData(recvdata.getString("increment_data"));
|
||||
synctask.setSupermarketId(supermarket.getId());
|
||||
synctask.setCreateTime(now);
|
||||
|
||||
sts.add(synctask);
|
||||
}
|
||||
|
||||
if (!sts.isEmpty()) {
|
||||
int[] ret = Db.batchSave(sts, sts.size());
|
||||
|
||||
if (ret.length != sts.size()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!saveauthlics.isEmpty() && !deleteauthlics.isEmpty()) {
|
||||
return recvAuthLicense(saveauthlics, deleteauthlics, current_supermarket_id);
|
||||
}
|
||||
|
|
@ -299,9 +381,9 @@ public class SyncTaskService {
|
|||
return true;
|
||||
} catch (Exception e) {
|
||||
if (e.getMessage().contains("PRIMARY")) {
|
||||
log.error("主键冲突 %s", data.toJSONString());
|
||||
log.error("主键冲突 %s", recvdata.toJSONString());
|
||||
} else if (e.getMessage().contains("Duplicate entry")) {
|
||||
log.error("重复数据 %s", data.toJSONString());
|
||||
log.error("重复数据 %s", recvdata.toJSONString());
|
||||
} else {
|
||||
log.error(e.getMessage(), e);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue