From c2894722ac0d2cf821f92108a3e5249054b5143d Mon Sep 17 00:00:00 2001 From: "lisai17@sina.com" Date: Fri, 9 Oct 2020 22:52:49 +0800 Subject: [PATCH] . --- .../com/cowr/local/ssjygl/main/Config.java | 2 +- .../service/ssjygl/main/SvrCacheData.java | 3 +- .../service/ssjygl/netty/NettyServer.java | 13 ++ .../order/ordertemp/OrderTempSyncService.java | 165 ++++++++++++++++++ .../system/sysuser/SysuserController.java | 25 +-- .../sysuser/SysuserCustomerValidator.java | 4 + .../system/sysuser/SysuserSyncService.java | 4 + 7 files changed, 203 insertions(+), 13 deletions(-) create mode 100644 ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/order/ordertemp/OrderTempSyncService.java diff --git a/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/main/Config.java b/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/main/Config.java index 5f60fef..e680f23 100644 --- a/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/main/Config.java +++ b/ssjygl-xsx-local/src/main/java/com/cowr/local/ssjygl/main/Config.java @@ -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() diff --git a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/main/SvrCacheData.java b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/main/SvrCacheData.java index 2846376..26a4852 100644 --- a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/main/SvrCacheData.java +++ b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/main/SvrCacheData.java @@ -6,5 +6,6 @@ import java.util.HashMap; import java.util.Map; public class SvrCacheData { - public static Map SUP_CACHE = new HashMap<>(); // 砂站基础信息缓存,常用配置数据,避免重复请求数据库 + public static Map SUP_CACHE = new HashMap<>(); // 砂站基础信息缓存,常用配置数据,避免重复请求数据库 + public static Map SUP_HEARTBEAT = new HashMap<>(); // 砂站客户端心跳时间戳 } diff --git a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/netty/NettyServer.java b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/netty/NettyServer.java index 8d02477..e1e2509 100644 --- a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/netty/NettyServer.java +++ b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/netty/NettyServer.java @@ -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())); diff --git a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/order/ordertemp/OrderTempSyncService.java b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/order/ordertemp/OrderTempSyncService.java new file mode 100644 index 0000000..e46ced4 --- /dev/null +++ b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/order/ordertemp/OrderTempSyncService.java @@ -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("取消失败"); + } +} diff --git a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/system/sysuser/SysuserController.java b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/system/sysuser/SysuserController.java index cbe4000..1b2549c 100644 --- a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/system/sysuser/SysuserController.java +++ b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/system/sysuser/SysuserController.java @@ -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); diff --git a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/system/sysuser/SysuserCustomerValidator.java b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/system/sysuser/SysuserCustomerValidator.java index 66207da..c96b3f5 100644 --- a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/system/sysuser/SysuserCustomerValidator.java +++ b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/system/sysuser/SysuserCustomerValidator.java @@ -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) { diff --git a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/system/sysuser/SysuserSyncService.java b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/system/sysuser/SysuserSyncService.java index a8d6e6a..fad87e8 100644 --- a/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/system/sysuser/SysuserSyncService.java +++ b/ssjygl-xsx-service/src/main/java/com/cowr/service/ssjygl/system/sysuser/SysuserSyncService.java @@ -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());