lisai17@sina.com 2020-10-09 22:52:49 +08:00
parent 64ad813649
commit c2894722ac
7 changed files with 203 additions and 13 deletions

View File

@ -90,7 +90,7 @@ public class Config extends JFinalConfig {
public static DeviceThread deviceThread = new DeviceThread();
public static SocketIOService socketio = null;
private static boolean client_run = true;
public static final String CLINET_VERSION = "20200930";
public static final String CLINET_VERSION = "20201009";
public static String getRootPath() {
return PathKit.getWebRootPath()

View File

@ -6,5 +6,6 @@ import java.util.HashMap;
import java.util.Map;
public class SvrCacheData {
public static Map<Integer, Supermarket> SUP_CACHE = new HashMap<>(); // 砂站基础信息缓存,常用配置数据,避免重复请求数据库
public static Map<Integer, Supermarket> SUP_CACHE = new HashMap<>(); // 砂站基础信息缓存,常用配置数据,避免重复请求数据库
public static Map<Integer, Long> SUP_HEARTBEAT = new HashMap<>(); // 砂站客户端心跳时间戳
}

View File

@ -2,6 +2,8 @@ package com.cowr.service.ssjygl.netty;
import com.alibaba.fastjson.JSONObject;
import com.cowr.common.enums.Enums;
import com.cowr.model.Supermarket;
import com.cowr.service.ssjygl.main.SvrCacheData;
import com.cowr.service.ssjygl.synctask.SyncTaskService;
import com.jfinal.log.Log;
import io.netty.bootstrap.ServerBootstrap;
@ -186,6 +188,17 @@ public class NettyServer {
log.debug("supermarket_id %s 注册成功, client version %s", supermarket_id, json.get("clinet_version"));
} else if (Enums.MsgTarget.HEARTBEAT.name().equals(target)) {
printlog("收到心跳 supermarket " + map.get(ctx.channel()) + ", 已连接客户端总数: " + map.size());
if(map.containsKey(ctx.channel())){
Integer supermarket_id = map.get(ctx.channel());
if(SvrCacheData.SUP_CACHE.containsKey(supermarket_id)){
Supermarket supermarket = SvrCacheData.SUP_CACHE.get(supermarket_id);
// 只保存有效 supermarket_id
SvrCacheData.SUP_HEARTBEAT.put(supermarket.getId(), System.currentTimeMillis());
}
}
} else if (Enums.MsgTarget.SYNCTASK.name().equals(target)) {
JSONObject data = json.getJSONObject("data");
boolean ret = SyncTaskService.me.recv(data, map.get(ctx.channel()));

View File

@ -0,0 +1,165 @@
package com.cowr.service.ssjygl.order.ordertemp;
import com.cowr.common.enums.Enums;
import com.cowr.common.enums.OrderStateEnum;
import com.cowr.common.view.Result;
import com.cowr.model.*;
import com.cowr.service.ssjygl.synctask.SyncTaskService;
import com.cowr.service.ssjygl.system.sysuser.SysuserSyncService;
import com.cowr.ssjygl.modifylog.ModifyLogService;
import com.cowr.ssjygl.prepay.prepaycustomer.PrepayCustomerService;
import com.jfinal.log.Log;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.IAtom;
import com.jfinal.plugin.activerecord.Record;
import java.util.Date;
public class OrderTempSyncService {
public static OrderTempSyncService me = new OrderTempSyncService();
private static Log log = Log.getLog(OrderTempSyncService.class);
public Result cancel(String sn, String invalid_memo, Sysuser sysuser, String password) {
// TODO: 判断权限
OrderTemp order = OrderTemp.dao.findById(sn);
if (order == null) {
return Result.failedstr("按订单号【%s】未找到记录", sn);
}
int orderstate = order.getState();
// 订单已经完成
if (orderstate == OrderStateEnum.RECEIVED.getStateid()) {
// 已完成订单,再删除时需要重新验证密码
Sysuser chkuser = SysuserSyncService.me.getUserByWhere(null, sysuser.getPhone(), password);
if (chkuser == null) {
log.debug("用户输入密码错误");
return Result.permissionDenied();
}
}
if (orderstate == OrderStateEnum.INVALID.getStateid()) {
return Result.failed("订单已经取消");
}
order.setState(OrderStateEnum.INVALID.getStateid()); // 将订单状态置为 9
Record logrecord = new Record();
logrecord.set("sn", sn);
logrecord.set("state", OrderStateEnum.INVALID.getStateid());
boolean ret = Db.tx(new IAtom() {
@Override
public boolean run() {
try {
SyncTask synctask = new SyncTask();
synctask.addUpdateData(order);
boolean ret = order.update();
if (!ret) {
return false;
}
// if(oldstate == OrderStateEnum.LEAVE.getStateid() ){
// Bocomm bocomm = Bocomm.dao.findFirst(
// "select * from bocomm t where t.order_sn = ? and t.state <= ? limit 0,1",
// sn,
// OrderStateEnum.RECEIVED.getStateid()
// );
//
// if(bocomm != null){
// ret = BocommService.me.closeTran(bocomm);
// }
// }
// 是集团客户订单
// if (order.getOrderclusterId() != null) {
// Ordercluster ordercluster = Ordercluster.dao.findById(order.getOrderclusterId());
//
// if (ordercluster == null) {
// log.error("关联集团订单信息未找到ordercluster_id:【%s】", order.getOrderclusterId());
// return false;
// }
// }
// 已开具发票
if (order.getInvoiceCode() != null) {
InvoiceLog invoiceLog = InvoiceLog.dao.findFirst(
"select * from invoice_log t where invoice_number = ? and code = ? limit 1 ",
order.getInvoiceNumber(), order.getInvoiceCode());
if (invoiceLog != null) {
invoiceLog.setInvalidUserId(sysuser.getId());
invoiceLog.setInvalidUserName(sysuser.getName());
invoiceLog.setInvalidTime(new Date());
invoiceLog.setInvalidMemo(invalid_memo);
invoiceLog.setState(OrderStateEnum.INVALID.getStateid());
ret = invoiceLog.update();
if (!ret) {
return false;
}
synctask.addUpdateData(invoiceLog);
} else {
log.error("订单[%s]没有找到开票记录", order.getSn());
}
}
// 是预付费订单
if (order.getIsprepaid() == 1) {
Customer customer = Customer.dao.findById(order.getCustomerId());
if (customer == null) {
log.error("关联预付费客户信息未找到customer_id:【%s】", order.getCustomerId());
return false;
}
PrepayCustomer prepayCustomer = PrepayCustomerService.me.getPrepayCustomer(customer.getId());
if (prepayCustomer != null) {
if (prepayCustomer.getSurplus() == null) {
prepayCustomer.setSurplus(order.getTotalPrice());
} else {
prepayCustomer.setSurplus(prepayCustomer.getSurplus().add(order.getTotalPrice()));
}
synctask.addUpdateData(prepayCustomer);
ret = prepayCustomer.update();
}
}
if (!ret) {
return false;
}
Stock stock = Stock.dao.findByIds(order.getSupermarketId(), order.getProductId());
if (stock == null) {
log.error("未找到库存信息 %s, %s", order.getSupermarketId(), order.getProductId());
return false;
}
stock.setStockWeight(stock.getStockWeight().add(order.getWeight())); // 取消销售加库存
ret = stock.update();
synctask.addUpdateData(stock);
return ret && SyncTaskService.me.save(synctask)
&& ModifyLogService.me.save(order.tablename, "sn", logrecord.toJson(), Enums.DataOpType.UPDATE.getId(), sysuser);
} catch (Exception e) {
log.error(e.getMessage(), e);
return false;
}
}
});
return ret ? Result.success(order) : Result.failed("取消失败");
}
}

View File

@ -66,12 +66,13 @@ public class SysuserController extends Controller {
Sysuser model = getModel(Sysuser.class, "", true); // 忽略不在model中的字段
String texpayer_name = get("texpayer_name");
String receiver_name = get("receiver_name");
String receiver_phone = get("receiver_phone");
String receiver_address = get("receiver_address");
String texpayer_name = get("texpayer_name");
String receiver_name = get("receiver_name");
String receiver_phone = get("receiver_phone");
String receiver_address = get("receiver_address");
Integer invoice_type = getInt("invoice_type", 1);
renderJson(SysuserSyncService.me.saveCustomer(model, texpayer_name, receiver_name, receiver_phone, receiver_address, tokenuser));
renderJson(SysuserSyncService.me.saveCustomer(model, texpayer_name, receiver_name, receiver_phone, receiver_address, invoice_type, tokenuser));
}
/**
@ -131,13 +132,14 @@ public class SysuserController extends Controller {
return;
}
String texpayer_name = get("texpayer_name");
String receiver_name = get("receiver_name");
String receiver_phone = get("receiver_phone");
String receiver_address = get("receiver_address");
String texpayer_name = get("texpayer_name");
String receiver_name = get("receiver_name");
String receiver_phone = get("receiver_phone");
String receiver_address = get("receiver_address");
Integer invoice_type = getInt("invoice_type", 1);
Sysuser model = getModel(Sysuser.class, "", true); // 忽略不在model中的字段
renderJson(SysuserSyncService.me.updateCustomer(model, texpayer_name, receiver_name, receiver_phone, receiver_address, tokenuser));
renderJson(SysuserSyncService.me.updateCustomer(model, texpayer_name, receiver_name, receiver_phone, receiver_address, invoice_type, tokenuser));
}
/**
@ -152,8 +154,9 @@ public class SysuserController extends Controller {
Integer entity_id = getInt("entity_id");
renderJson(Result.object(SysuserSyncService.me.find(pp, name, phone, del, type, entity_id)));
}
/**
* sysuser
* sysuser
*/
public void list() {
PageParam pp = getBean(PageParam.class, "", true);

View File

@ -19,6 +19,10 @@ public class SysuserCustomerValidator extends CrudParamValidator {
if (StrKit.notBlank(c.get("receiver_phone"))) {
validateRegex("receiver_phone", StrUtil.regphone, "receiver_phone", "receiver_phone 必须为手机号格式");
}
if (StrKit.notBlank(c.get("invoice_type"))) {
validateInteger("invoice_type", 1, 2, "invoice_type", "invoice_type 范围 1~2");
}
}
protected void handleError(Controller c) {

View File

@ -356,6 +356,7 @@ public class SysuserSyncService extends BaseSyncService {
String receiver_name,
String receiver_phone,
String receiver_address,
Integer invoice_type,
Sysuser tokenuser
) {
try {
@ -371,6 +372,7 @@ public class SysuserSyncService extends BaseSyncService {
Customer customer = new Customer();
customer.setName(texpayer_name);
customer.setTexpayerName(texpayer_name);
customer.setInvoiceType(invoice_type);
if (customer.checkDuplicate("name")) {
return Result.failed(false, "名称已存在");
@ -448,6 +450,7 @@ public class SysuserSyncService extends BaseSyncService {
String receiver_name,
String receiver_phone,
String receiver_address,
Integer invoice_type,
Sysuser tokenuser
) {
try {
@ -485,6 +488,7 @@ public class SysuserSyncService extends BaseSyncService {
customer.setName(texpayer_name);
customer.setTexpayerName(texpayer_name);
customer.setInvoiceType(invoice_type);
chkobj.setName(model.getName());
chkobj.setPhone(model.getPhone());