lisai17@sina.com 2021-03-03 11:40:27 +08:00
parent afdfe0c0b8
commit 7a77fdc674
10 changed files with 524 additions and 130 deletions

View File

@ -5,7 +5,7 @@ import com.jfinal.plugin.activerecord.IBean;
import com.alibaba.fastjson.annotation.JSONField;
/**
* Generated by COWR Mon Mar 01 10:54:13 CST 2021
* Generated by COWR Wed Mar 03 11:26:53 CST 2021
* TableName: ticket_log
* Remarks: - 使
* PrimaryKey: id
@ -394,5 +394,71 @@ public abstract class BaseTicketLog<M extends BaseTicketLog<M>> extends BaseMode
return getStr("invoice_code");
}
/**
* name: invoice_time
* type: DATETIME(19)
* isNullable: YES
* isPrimaryKey: NO
* defaultValue:
* @param invoiceTime
*/
@JSONField(name="invoice_time")
public void setInvoiceTime(java.util.Date invoiceTime) {
set("invoice_time", invoiceTime);
}
/**
* @return invoice_time
*/
@JSONField(name="invoice_time")
public java.util.Date getInvoiceTime() {
return get("invoice_time");
}
/**
* name: invoice_user_id
* type: INT(10)
* isNullable: YES
* isPrimaryKey: NO
* defaultValue:
* @param invoiceUserId id
*/
@JSONField(name="invoice_user_id")
public void setInvoiceUserId(Integer invoiceUserId) {
set("invoice_user_id", invoiceUserId);
}
/**
* @return invoice_user_id id
*/
@JSONField(name="invoice_user_id")
public Integer getInvoiceUserId() {
return getInt("invoice_user_id");
}
/**
* name: invoice_user_name
* type: VARCHAR(255)
* isNullable: YES
* isPrimaryKey: NO
* defaultValue:
* @param invoiceUserName
*/
@JSONField(name="invoice_user_name")
public void setInvoiceUserName(String invoiceUserName) {
set("invoice_user_name", invoiceUserName);
}
/**
* @return invoice_user_name
*/
@JSONField(name="invoice_user_name")
public String getInvoiceUserName() {
return getStr("invoice_user_name");
}
}

View File

@ -15,62 +15,8 @@ import com.cowr.model.TicketInvalidVerify;
public class TicketInvalidVerifyValidator extends CrudParamValidator {
@Override
protected void validate(Controller c) {
// 默认新增时,前端不需要传主键。若需要前端传主键,需要去掉这个判断
if (!"save".equals(getActionMethodName())) {
validateRequired("id", "id", "id 必填");
validateString("id", 1, 32, "id", "id 长度 1~32");
}
validateString("ticket_code", 1, 20, "ticket_code", "ticket_code 长度 1~20");
validateString("create_time", 1, 19, "create_time", "create_time 长度 1~19");
validateDate("create_time", "yyyy-MM-dd HH:mm:ss", false, "create_time", "create_time 格式 yyyy-MM-dd HH:mm:ss"); // 默认时间时间字符串格式,生成后根据情况调整
validateString("change_time", 0, 19, "change_time", "change_time 长度 0~19");
validateInteger("state", -2147483647, 2147483647, "state", "state 范围 -2147483647~2147483647");
validateInteger("create_user_id", 1, 2147483647, "create_user_id", "create_user_id 范围 1~2147483647");
validateString("create_user_name", 1, 255, "create_user_name", "create_user_name 长度 1~255");
if (StrKit.notBlank(c.get("verify_user_id"))) { // 可为空字段,当传入值时,才做验证
validateInteger("verify_user_id", 1, 2147483647, "verify_user_id", "verify_user_id 范围 1~2147483647");
}
validateString("verify_user_name", 0, 255, "verify_user_name", "verify_user_name 长度 0~255");
validateString("order_sn", 0, 16, "order_sn", "order_sn 长度 0~16");
if (StrKit.notBlank(c.get("type"))) { // 可为空字段,当传入值时,才做验证
validateInteger("type", -999999, 999999, "type", "type 范围 -999999~999999");
}
if (StrKit.notBlank(c.get("invoice_receive_id"))) { // 可为空字段,当传入值时,才做验证
validateInteger("invoice_receive_id", 1, 2147483647, "invoice_receive_id", "invoice_receive_id 范围 1~2147483647");
}
if (StrKit.notBlank(c.get("supermarket_id"))) { // 可为空字段,当传入值时,才做验证
validateInteger("supermarket_id", 1, 2147483647, "supermarket_id", "supermarket_id 范围 1~2147483647");
}
validateString("invalid_memo", 1, 255, "invalid_memo", "invalid_memo 长度 1~255");
validateString("memo", 0, 255, "memo", "memo 长度 0~255");
// 使用 model 更新时model 不能只有主键有值
// 这里用 getActionMethodName 写死,判断是 update 时,才做验证
// 如果确实是需要将主键外的字段置为 null可以在代码生成后删掉这段
if ("edit".equals(getActionMethodName())) {
validateUpdateModel(TicketInvalidVerify.class, "", true); // 忽略不在model中的字段
}
}
protected void handleError(Controller c) {

View File

@ -178,7 +178,7 @@ public class TicketLogService extends BaseService {
row.createCell(a++).setCellValue("备注");
// 表头 end
int end_col = 16;
int end_col = 18;
int datalen = list.size();
for (int i = 0; i < datalen; i++) {
Record order = list.get(i);

View File

@ -98,7 +98,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 = "20210221";
public static final String CLINET_VERSION = "20210301";
public static String getRootPath() {
return PathKit.getWebRootPath()

View File

@ -81,12 +81,13 @@ public class OrderTempController extends BaseController {
Integer product_id = getInt("product_id");
String invoice_number = get("invoice_number");
String invoice_code = get("invoice_code");
String ticket_code = get("ticket_code");
Integer pay_type = getInt("pay_type");
String memo = get("memo");
String printer = get("printer", Enums.PrinterIdEnum.printer1.name());
int req_receipt = getInt("req_receipt", 0); // 是否需要发票0 默认不需要1需要
renderJson(OrderTempSyncService.me.pay(uuid, transport_id, product_id, invoice_number, invoice_code, pay_type, memo, printer, tokenuser, req_receipt));
renderJson(OrderTempSyncService.me.pay(uuid, transport_id, product_id, invoice_number, invoice_code, ticket_code, pay_type, memo, printer, tokenuser, req_receipt));
}
@ -104,11 +105,12 @@ public class OrderTempController extends BaseController {
Integer ordercluster_id = getInt("ordercluster_id");
String invoice_number = get("invoice_number");
String invoice_code = get("invoice_code");
String ticket_code = get("ticket_code");
String memo = get("memo");
String printer = get("printer", Enums.PrinterIdEnum.printer1.name());
// int req_receipt = getInt("req_receipt", 0); // 是否需要发票0 默认不需要1需要
renderJson(OrderTempSyncService.me.payordercluster(uuid, transport_id, ordercluster_id, invoice_number, invoice_code, memo, printer, tokenuser));
renderJson(OrderTempSyncService.me.payordercluster(uuid, transport_id, ordercluster_id, invoice_number, invoice_code, ticket_code, memo, printer, tokenuser));
}
@Before(OrderTempPrepayValidator.class)
@ -125,12 +127,13 @@ public class OrderTempController extends BaseController {
Integer ordercluster_id = getInt("ordercluster_id");
String invoice_number = get("invoice_number");
String invoice_code = get("invoice_code");
String ticket_code = get("ticket_code");
Integer product_id = getInt("product_id");
String memo = get("memo");
String printer = get("printer", Enums.PrinterIdEnum.printer1.name());
int req_receipt = getInt("req_receipt", 0); // 是否需要发票0 默认不需要1需要
renderJson(OrderTempSyncService.me.prepay(uuid, transport_id, ordercluster_id, invoice_number, invoice_code, product_id, memo, printer, tokenuser, req_receipt));
renderJson(OrderTempSyncService.me.prepay(uuid, transport_id, ordercluster_id, invoice_number, invoice_code, ticket_code, product_id, memo, printer, tokenuser, req_receipt));
}
@Before(SnValidator.class)

View File

@ -9,16 +9,18 @@ import com.cowr.common.view.Result;
import com.cowr.local.ssjygl.actioncmdlog.ActionCmdLogSyncService;
import com.cowr.local.ssjygl.main.CliCacheData;
import com.cowr.local.ssjygl.main.Config;
import com.cowr.local.ssjygl.modifylog.ModifyLogSyncService;
import com.cowr.local.ssjygl.order.LocalOrderService;
import com.cowr.local.ssjygl.order.orderseq.OrderSeqService;
import com.cowr.local.ssjygl.synctask.SyncTaskService;
import com.cowr.model.*;
import com.cowr.ssjygl.invoice.log.InvoiceLogService;
import com.cowr.ssjygl.invoice.receive.InvoiceReceiveService;
import com.cowr.ssjygl.order.ordercluster.OrderclusterService;
import com.cowr.ssjygl.supermarket.product.SupermarketProductService;
import com.cowr.local.ssjygl.synctask.SyncTaskService;
import com.cowr.model.*;
import com.cowr.local.ssjygl.modifylog.ModifyLogSyncService;
import com.cowr.ssjygl.prepay.prepaycustomer.PrepayCustomerService;
import com.cowr.ssjygl.supermarket.product.SupermarketProductService;
import com.cowr.ssjygl.ticket.log.TicketLogService;
import com.cowr.ssjygl.ticket.receive.TicketReceiveService;
import com.cowr.ssjygl.transprice.TransPriceService;
import com.jfinal.kit.StrKit;
import com.jfinal.log.Log;
@ -39,6 +41,7 @@ public class OrderTempSyncService {
Integer product_id,
String invoice_number,
String invoice_code,
String ticket_code,
Integer pay_type,
String memo,
String printerId,
@ -55,16 +58,6 @@ public class OrderTempSyncService {
return Result.failed("进出场记录已完结或者已作废,不能使用");
}
InvoiceReceive receive = InvoiceReceiveService.me.checkSurplusReceive(transport.getSupermarketId(), invoice_number, invoice_code);
if (receive == null) {
return Result.failed("没有有效的发票领用记录,或者发票已经被使用");
}
InvoiceLog invoiceLog = InvoiceLogService.me.checkInvalidInvoiceLog(invoice_number, invoice_code);
if (invoiceLog != null) {
return Result.failedstr("发票 %s|%s 已作废", invoice_number, invoice_code);
}
Product product = Product.dao.findById(product_id);
if (product == null) {
@ -104,9 +97,43 @@ public class OrderTempSyncService {
BigDecimal net_weight = transport.getSecondWeight().subtract(transport.getFirstWeight()); // 销售的用第二次减第一次
InvoiceReceive receive = null;
TicketReceive ticketReceive = null;
if (req_receipt == 1) { // 需要同时开具发票
receive = InvoiceReceiveService.me.checkSurplusReceive(transport.getSupermarketId(), invoice_number, invoice_code);
if (receive == null) {
return Result.failed("没有有效的发票领用记录,或者发票已经被使用");
}
InvoiceLog invoiceLog = InvoiceLogService.me.checkInvalidInvoiceLog(invoice_number, invoice_code);
if (invoiceLog != null) {
return Result.failedstr("发票 %s|%s 已作废", invoice_number, invoice_code);
}
receive.setSurplus(receive.getSurplus() - 1);
receive.setCurrentCode(invoice_code);
order.setInvoiceCode(invoice_code);
order.setInvoiceNumber(invoice_number);
order.setInvoiceType(1);
} else {
// 不开发票的,必须使用结算单
ticketReceive = TicketReceiveService.me.checkSurplusReceive(transport.getSupermarketId(), ticket_code);
if (ticketReceive == null) {
return Result.failed("没有有效的结算单领用记录,或者结算单已经被使用");
}
TicketLog ticketLog = TicketLogService.me.checkInvalidTicketLog(ticket_code);
if (ticketLog != null) {
return Result.failedstr("结算单 %s 已作废", ticket_code);
}
ticketReceive.setSurplus(ticketReceive.getSurplus() - 1);
ticketReceive.setCurrentCode(ticket_code);
order.setTicketCode(ticket_code);
order.setInvoiceType(2);
}
order.setTransportId(transport.getId());
@ -142,6 +169,8 @@ public class OrderTempSyncService {
transport.setState(order.getState()); // 使用 order 的 state
transport.setType(OrderTypeEnum.TEMP.getTypeid());
InvoiceReceive finalReceive = receive;
TicketReceive finalTicketReceive = ticketReceive;
boolean ret = Db.tx(new IAtom() {
@Override
public boolean run() {
@ -180,12 +209,9 @@ public class OrderTempSyncService {
synctask.addUpdateData(stock);
}
// if (req_receipt == 1) { // 需要同时开具发票
if (req_receipt == 1) { // 需要同时开具发票
// 这里的 finalReceive 在前面肯定验证过了
receive.setSurplus(receive.getSurplus() - 1);
receive.setCurrentCode(invoice_code);
ret = receive.update();
ret = finalReceive.update();
if (!ret) {
log.error("发票领用信息更新失败", invoice_code);
@ -194,7 +220,7 @@ public class OrderTempSyncService {
InvoiceLog invoiceLog = new InvoiceLog();
invoiceLog.setId(StrKit.getRandomUUID());
invoiceLog.setInvoiceReceiveId(receive.getId());
invoiceLog.setInvoiceReceiveId(finalReceive.getId());
invoiceLog.setCode(invoice_code);
invoiceLog.setInvoiceNumber(invoice_number);
invoiceLog.setState(OrderStateEnum.RECEIVED.getStateid());
@ -211,8 +237,36 @@ public class OrderTempSyncService {
}
synctask.addSaveData(invoiceLog);
synctask.addUpdateData(receive);
// }
synctask.addUpdateData(finalReceive);
} else {
// 不开发票的,要开结算单
ret = finalTicketReceive.update();
if (!ret) {
log.error("结算单领用信息更新失败", ticket_code);
return false;
}
TicketLog ticketLog = new TicketLog();
ticketLog.setId(StrKit.getRandomUUID());
ticketLog.setTicketReceiveId(finalTicketReceive.getId());
ticketLog.setTicketCode(ticket_code);
ticketLog.setState(OrderStateEnum.RECEIVED.getStateid());
ticketLog.setSettlementTime(now);
ticketLog.setSettlementUserId(order.getSettlementUserId());
ticketLog.setSettlementUserName(order.getSettlementUserName());
ticketLog.setOrderSn(order.getSn());
ticketLog.setType(OrderTypeEnum.TEMP.getTypeid());
ret = ticketLog.save();
if (!ret) {
return false;
}
synctask.addSaveData(ticketLog);
synctask.addUpdateData(finalTicketReceive);
}
synctask.addUpdateData(transport);
synctask.addSaveData(order);
@ -243,6 +297,7 @@ public class OrderTempSyncService {
Integer ordercluster_id,
String invoice_number,
String invoice_code,
String ticket_code,
String memo,
String printerId,
Sysuser sysuser
@ -312,6 +367,7 @@ public class OrderTempSyncService {
}
InvoiceReceive receive = null;
TicketReceive ticketReceive = null;
// 零散客户需要开具发票的,需要检查是否有有效的领用记录
if (ordercluster.getReqReceipt() == 1) {
@ -334,6 +390,20 @@ public class OrderTempSyncService {
order.setInvoiceType(1); // 需要开发票的,都是冠名发票
} else {
// 不开发票的,必须使用结算单
ticketReceive = TicketReceiveService.me.checkSurplusReceive(transport.getSupermarketId(), ticket_code);
if (ticketReceive == null) {
return Result.failed("没有有效的结算单领用记录,或者结算单已经被使用");
}
TicketLog ticketLog = TicketLogService.me.checkInvalidTicketLog(ticket_code);
if (ticketLog != null) {
return Result.failedstr("结算单 %s 已作废", ticket_code);
}
ticketReceive.setSurplus(ticketReceive.getSurplus() - 1);
ticketReceive.setCurrentCode(ticket_code);
order.setTicketCode(ticket_code);
order.setInvoiceType(2); // 不需要开发票的,都是要专票的
}
@ -380,7 +450,7 @@ public class OrderTempSyncService {
// 2020-10-26 应王乐要求,零散购砂客户总价四舍五入
BigDecimal total_price = TransPriceService.me.caleTotalPrice(up, net_weight);
if(total_price == null){
if (total_price == null) {
return Result.failed("总价计算错误");
}
@ -427,6 +497,7 @@ public class OrderTempSyncService {
transport.setType(OrderTypeEnum.TEMP.getTypeid());
InvoiceReceive finalReceive = receive;
TicketReceive finalTicketReceive = ticketReceive;
boolean ret = Db.tx(new IAtom() {
@Override
public boolean run() {
@ -507,6 +578,34 @@ public class OrderTempSyncService {
synctask.addSaveData(invoiceLog);
synctask.addUpdateData(finalReceive);
} else {
// 不开发票的,要开结算单
ret = finalTicketReceive.update();
if (!ret) {
log.error("结算单领用信息更新失败", ticket_code);
return false;
}
TicketLog ticketLog = new TicketLog();
ticketLog.setId(StrKit.getRandomUUID());
ticketLog.setTicketReceiveId(finalTicketReceive.getId());
ticketLog.setTicketCode(ticket_code);
ticketLog.setState(OrderStateEnum.RECEIVED.getStateid());
ticketLog.setSettlementTime(now);
ticketLog.setSettlementUserId(order.getSettlementUserId());
ticketLog.setSettlementUserName(order.getSettlementUserName());
ticketLog.setOrderSn(order.getSn());
ticketLog.setType(OrderTypeEnum.TEMP.getTypeid());
ret = ticketLog.save();
if (!ret) {
return false;
}
synctask.addSaveData(ticketLog);
synctask.addUpdateData(finalTicketReceive);
}
// 在这里更新sn字段之后存入
@ -535,6 +634,7 @@ public class OrderTempSyncService {
Integer ordercluster_id,
String invoice_number,
String invoice_code,
String ticket_code,
Integer product_id,
String memo,
String printerId,
@ -630,13 +730,11 @@ public class OrderTempSyncService {
}
InvoiceReceive receive = null;
TicketReceive ticketReceive = null;
// 2020-09-29 需要开具专票的,先开具结算单,不打发票
// 2020-10-12 所有砂站都可以开结算单
if (customer.getInvoiceType() == 2) {
order.setInvoiceType(2);
// 需要专票的,在结算开了专票之后,再修改 invoice_site 字段
} else {
if (customer.getInvoiceType() == 1) {
receive = InvoiceReceiveService.me.checkSurplusReceive(transport.getSupermarketId(), invoice_number, invoice_code);
if (receive == null) {
return Result.failed("没有有效的发票领用记录,或者发票已经被使用");
@ -647,6 +745,9 @@ public class OrderTempSyncService {
return Result.failedstr("发票 %s|%s 已作废", invoice_number, invoice_code);
}
receive.setSurplus(receive.getSurplus() - 1);
receive.setCurrentCode(invoice_code);
// 不满足开专票的条件的,就必须开具冠名发票
// if (req_receipt == 1) { // 需要同时开具发票
order.setInvoiceCode(invoice_code);
@ -654,6 +755,23 @@ public class OrderTempSyncService {
order.setInvoiceType(1);
order.setInvoiceSite(1); // 在砂站开具冠名发票
// }
} else {
// 需要专票的,在结算开了专票之后,再修改 invoice_site 字段
// 不开冠名发票的,必须使用结算单
ticketReceive = TicketReceiveService.me.checkSurplusReceive(transport.getSupermarketId(), ticket_code);
if (ticketReceive == null) {
return Result.failed("没有有效的结算单领用记录,或者结算单已经被使用");
}
TicketLog ticketLog = TicketLogService.me.checkInvalidTicketLog(ticket_code);
if (ticketLog != null) {
return Result.failedstr("结算单 %s 已作废", ticket_code);
}
ticketReceive.setSurplus(ticketReceive.getSurplus() - 1);
ticketReceive.setCurrentCode(ticket_code);
order.setTicketCode(ticket_code);
order.setInvoiceType(2); // 不需要开发票的,都是要专票的
}
Product product = Product.dao.findById(ordercluster.getProductId());
@ -736,6 +854,7 @@ public class OrderTempSyncService {
}
InvoiceReceive finalReceive = receive;
TicketReceive finalTicketReceive = ticketReceive;
boolean ret = Db.tx(new IAtom() {
@Override
public boolean run() {
@ -811,12 +930,10 @@ public class OrderTempSyncService {
synctask.addUpdateData(stock);
}
if (finalReceive != null) {
// if (finalReceive != null) {
if (customer.getInvoiceType() == 1) {
// if (req_receipt == 1) { // 需要同时开具发票
// 这里的 finalReceive 在前面肯定验证过了
finalReceive.setSurplus(finalReceive.getSurplus() - 1);
finalReceive.setCurrentCode(invoice_code);
ret = finalReceive.update();
if (!ret) {
@ -844,6 +961,34 @@ public class OrderTempSyncService {
synctask.addSaveData(invoiceLog);
synctask.addUpdateData(finalReceive);
} else {
// 不开发票的,要开结算单
ret = finalTicketReceive.update();
if (!ret) {
log.error("结算单领用信息更新失败", ticket_code);
return false;
}
TicketLog ticketLog = new TicketLog();
ticketLog.setId(StrKit.getRandomUUID());
ticketLog.setTicketReceiveId(finalTicketReceive.getId());
ticketLog.setTicketCode(ticket_code);
ticketLog.setState(OrderStateEnum.RECEIVED.getStateid());
ticketLog.setSettlementTime(now);
ticketLog.setSettlementUserId(order.getSettlementUserId());
ticketLog.setSettlementUserName(order.getSettlementUserName());
ticketLog.setOrderSn(order.getSn());
ticketLog.setType(OrderTypeEnum.TEMP.getTypeid());
ret = ticketLog.save();
if (!ret) {
return false;
}
synctask.addSaveData(ticketLog);
synctask.addUpdateData(finalTicketReceive);
}
// }
@ -867,6 +1012,15 @@ public class OrderTempSyncService {
return LocalOrderService.me.orderPayComplete(ret, order.toRecord(), transport, printerId);
}
/**
*
* @param sn
* @param invoice_number
* @param invoice_code
* @param printerId
* @param sysuser
* @return
*/
public Result invoice(String sn, String invoice_number, String invoice_code, String printerId, Sysuser sysuser) {
// TODO: 判断权限
@ -993,4 +1147,137 @@ public class OrderTempSyncService {
return Result.failed("开票失败");
}
/**
*
* @param sn
* @param ticket_code
* @param printerId
* @param sysuser
* @return
*/
public Result ticket(String sn, String ticket_code, String printerId, Sysuser sysuser) {
// TODO: 判断权限
OrderTemp order = OrderTemp.dao.findById(sn);
if (order == null) {
return Result.failedstr("按订单号【%s】未找到记录", sn);
}
int orderstate = order.getState();
if (orderstate == OrderStateEnum.INVALID.getStateid()) {
return Result.failed("订单已经取消");
}
if (StrKit.notBlank(order.getTicketCode())) {
return Result.failedstr("请先将已开具的结算单[%s]取消", order.getTicketCode());
}
TicketReceive receive = TicketReceiveService.me.checkSurplusReceive(order.getSupermarketId(), ticket_code);
if (receive == null) {
return Result.failed("没有有效的结算单领用记录,或者结算单已经被使用");
}
TicketLog ticketLog = TicketLogService.me.checkInvalidTicketLog(ticket_code);
if (ticketLog != null) {
return Result.failedstr("结算单 %s 已作废", ticket_code);
}
order.setTicketCode(ticket_code);
receive.setSurplus(receive.getSurplus() - 1);
receive.setCurrentCode(ticket_code);
Record logrecord = new Record();
logrecord.set("sn", sn);
logrecord.set("ticket", ticket_code);
SyncTask synctask = new SyncTask();
boolean ret = Db.tx(new IAtom() {
@Override
public boolean run() {
try {
boolean ret = order.update();
if (!ret) {
return false;
}
ret = receive.update();
if (!ret) {
log.error("结算单领用信息更新失败", ticket_code);
return false;
}
TicketLog ticketLog = new TicketLog();
ticketLog.setId(StrKit.getRandomUUID());
ticketLog.setTicketReceiveId(receive.getId());
ticketLog.setTicketCode(ticket_code);
ticketLog.setState(OrderStateEnum.RECEIVED.getStateid());
ticketLog.setSettlementTime(new Date());
ticketLog.setSettlementUserId(order.getSettlementUserId());
ticketLog.setSettlementUserName(order.getSettlementUserName());
ticketLog.setOrderSn(order.getSn());
ticketLog.setType(OrderTypeEnum.TEMP.getTypeid());
ret = ticketLog.save();
if (!ret) {
return false;
}
synctask.addUpdateData(order);
synctask.addSaveData(ticketLog);
synctask.addUpdateData(receive);
return ret && SyncTaskService.me.save(synctask)
&& ModifyLogSyncService.me.save(order.tablename, "sn", logrecord.toJson(), Enums.DataOpType.UPDATE.getId(), sysuser);
} catch (Exception e) {
log.error(e.getMessage(), e);
return false;
}
}
});
if (ret) {
// 数据库保存成功后,立即推送到服务端,及时更新发票使用信息
SyncTaskService.me.send(synctask);
Transport transport = Transport.dao.findById(order.get("transport_id"));
if (transport == null) {
return Result.failed("运输记录不存在");
}
Record printdata = order.toRecord();
printdata.set("first_weight", transport.getFirstWeight());
printdata.set("second_weight", transport.getSecondWeight());
Record cmd = new Record();
cmd.set("cmd", "print");
cmd.set("sn", sn);
cmd.set("printer", printerId);
try {
Config.deviceThread.print(printerId, LocalOrderService.me.getPrintFile(printdata));
cmd.set("status", true);
ActionCmdLogSyncService.me.save(cmd.toJson(), sysuser);
} catch (Exception e) {
log.error(e.getMessage(), e);
cmd.set("status", false);
ActionCmdLogSyncService.me.save(cmd.toJson(), sysuser);
return Result.success("开票成功,打印指令失败");
}
return Result.success("开票成功,打印指令已发送");
}
return Result.failed("开票失败");
}
}

View File

@ -5,6 +5,7 @@ import com.cowr.common.view.Result;
import com.cowr.local.ssjygl.system.sysuser.SysuserSyncService;
import com.cowr.model.Sysuser;
import com.cowr.model.TicketInvalidVerify;
import com.cowr.ssjygl.invoice.invalidverify.InvoiceInvalidBySnVerifyValidator;
import com.cowr.ssjygl.ticket.invalidverify.TicketInvalidVerifyService;
import com.cowr.ssjygl.ticket.invalidverify.TicketInvalidVerifyValidator;
import com.jfinal.aop.Before;
@ -38,4 +39,22 @@ public class TicketInvalidVerifyController extends Controller {
TicketInvalidVerify model = getModel(TicketInvalidVerify.class, "", true); // 忽略不在model中的字段
renderJson(TicketInvalidVerifySyncService.me.save(model, tokenuser));
}
/**
* invoice_invalid_verify -
*/
@Before(InvoiceInvalidBySnVerifyValidator.class)
public void saveBySn() {
Sysuser tokenuser = SysuserSyncService.me.getSysuserByToken(get("token"));
if (tokenuser == null) {
renderJson(Result.noauth());
return;
}
String order_sn = get("order_sn");
String invalid_memo = get("invalid_memo");
renderJson(TicketInvalidVerifySyncService.me.save(order_sn, invalid_memo, tokenuser));
}
}

View File

@ -97,7 +97,7 @@ public class TicketInvalidVerifySyncService {
}
TicketLog ticketLog = TicketLog.dao.findFirst("select * from ticket_log t \n" +
" where t.ticket_number = ? and t.code = ? limit 1 ", model.getTicketCode());
" where t.ticket_code = ? limit 1 ", model.getTicketCode());
if (ticketLog != null) {
// 再判断这张结算单是不是已经被取消了

View File

@ -7,16 +7,16 @@ import com.cowr.common.enums.OrderTypeEnum;
import com.cowr.common.utils.ImageUtil;
import com.cowr.common.view.Result;
import com.cowr.local.ssjygl.main.Config;
import com.cowr.model.*;
import com.cowr.ssjygl.customer.supermarketproduct.CustomerSupermarketProductService;
import com.cowr.ssjygl.invoice.receive.InvoiceReceiveService;
import com.cowr.ssjygl.order.OrderService;
import com.cowr.ssjygl.order.ordercluster.OrderclusterService;
import com.cowr.ssjygl.order.ordercluster.truck.OrderclusterTruckService;
import com.cowr.ssjygl.supermarket.product.SupermarketProductService;
import com.cowr.model.*;
import com.cowr.ssjygl.order.ordersale.OrderSaleService;
import com.cowr.ssjygl.order.ordertemp.OrderTempService;
import com.cowr.ssjygl.prepay.PrepayService;
import com.cowr.ssjygl.supermarket.product.SupermarketProductService;
import com.cowr.ssjygl.ticket.receive.TicketReceiveService;
import com.cowr.ssjygl.transprice.TransPriceService;
import com.jfinal.kit.StrKit;
@ -130,8 +130,14 @@ public class TransportQueryService {
// transobj.set("next_invoice_code", InvoiceReceiveService.me.nextInvoiceCode(transport.getSupermarketId())); // 2020-09-21 加了发票代码
if (ordercluster.getReqReceipt() == 1) { // 需要打印发票的,才去插领票记录
// 开专票的需要用结算单
if (prepayinfo != null && prepayinfo.get("prepay_customer_invoice_type") != null && prepayinfo.getInt("prepay_customer_invoice_type") == 2) {
transobj.set("invoice_numbers", new ArrayList<>());
transobj.set("ticket_numbers", TicketReceiveService.me.nextTicketCodes(transport.getSupermarketId()));
} else {
transobj.set("invoice_numbers", InvoiceReceiveService.me.nextInvoiceCodes(transport.getSupermarketId()));
transobj.set("ticket_numbers", new ArrayList<>());
}
} else {
transobj.set("invoice_numbers", new ArrayList<>());
transobj.set("ticket_numbers", TicketReceiveService.me.nextTicketCodes(transport.getSupermarketId()));

View File

@ -48,16 +48,24 @@ public class InvoiceLogSyncService extends BaseSyncService {
List<OrderTemp> list = OrderTemp.dao.find("select * from order_temp t \n" +
" where t.invoice_code is null \n" +
" and t.state = " + OrderStateEnum.RECEIVED.getStateid() +
" and t.sn in(" + StrKit.join(question, ", ") + ")", ordersnlist.toArray());
if (list.size() != snarr.length) {
List<TicketLog> ticketLogs = TicketLog.dao.find("select * from ticket_log t \n" +
" where t.invoice_code is null \n" +
" and t.state = " + OrderStateEnum.RECEIVED.getStateid() +
" and t.order_sn in(" + StrKit.join(question, ", ") + ")", ordersnlist.toArray());
if (list.size() != snarr.length || list.size() != ticketLogs.size()) {
return Result.failed("部分订单号未找到,或者已开票");
}
List<InvoiceLog> logs = new ArrayList<>();
Map<Integer, SyncTask> map = new HashMap<>();
for (OrderTemp o : list) {
for (int i = 0; i < list.size(); i++) {
OrderTemp o = list.get(i);
InvoiceLog invoiceLog = new InvoiceLog();
invoiceLog.setId(StrKit.getRandomUUID());
invoiceLog.setSettlementUserId(sysuser.getId());
@ -77,6 +85,13 @@ public class InvoiceLogSyncService extends BaseSyncService {
o.setInvoiceNumber(invoice_number);
o.setInvoiceCode(invoice_code);
TicketLog ticketLog = ticketLogs.get(i);
ticketLog.setInvoiceNumber(invoice_number);
ticketLog.setInvoiceCode(invoice_code);
ticketLog.setInvoiceUserId(sysuser.getId());
ticketLog.setInvoiceUserName(sysuser.getName());
ticketLog.setInvoiceTime(new Date());
int supermarket_id = o.getSupermarketId();
if (!map.containsKey(supermarket_id)) {
@ -85,13 +100,14 @@ public class InvoiceLogSyncService extends BaseSyncService {
map.get(supermarket_id).addUpdateData(o);
map.get(supermarket_id).addSaveData(invoiceLog);
map.get(supermarket_id).addUpdateData(ticketLog);
}
boolean ret = Db.tx(new IAtom() {
@Override
public boolean run() {
try {
int[] saveret = Db.batchSave(logs, logs.size());
int[] saveret = Db.batchSave(logs, 500);
for (int i : saveret) {
// 必须是每条 sql 修改一条记录
@ -100,7 +116,7 @@ public class InvoiceLogSyncService extends BaseSyncService {
}
}
int[] editret = Db.batchUpdate(list, list.size());
int[] editret = Db.batchUpdate(list, 500);
for (int i : editret) {
// 必须是每条 sql 修改一条记录
@ -109,6 +125,15 @@ public class InvoiceLogSyncService extends BaseSyncService {
}
}
int[] editlogsret = Db.batchUpdate(ticketLogs, 500);
for (int i : editlogsret) {
// 必须是每条 sql 修改一条记录
if (i != 1) {
return false;
}
}
// 将订单同步到不同的砂站
for (Map.Entry<Integer, SyncTask> entry : map.entrySet()) {
@ -180,7 +205,7 @@ public class InvoiceLogSyncService extends BaseSyncService {
} else if (receive.getSurplus() == 0) {
// 作废最后一张发票,当前发票停再最后一个发票号码上
receive.setCurrentCode(receive.getEndCode());
} else{
} else {
if (code.equals(receive.getStartCode())) { // 作废第一张发票
receive.setCurrentCode(String.format("%0" + receive.getStartCode().length() + "d", Integer.parseInt(receive.getStartCode()) + 1));
} else if (code.equals(receive.getCurrentCode())) { // 作废顺延的下一张发票
@ -366,7 +391,20 @@ public class InvoiceLogSyncService extends BaseSyncService {
invoiceLog.getCode()
);
if (ordlist.isEmpty()) {
if (loglist.isEmpty()) {
return Result.failed("发票使用信息错误");
}
List<TicketLog> ticketloglist = TicketLog.dao.find("select * from ticket_log t \n" +
" where t.state = ? \n" +
" and t.invoice_number = ? \n" +
" and t.ticket_code = ? ",
OrderStateEnum.RECEIVED.getStateid(),
invoiceLog.getInvoiceNumber(),
invoiceLog.getCode()
);
if (ticketloglist.isEmpty()) {
return Result.failed("发票使用信息错误");
}
@ -415,11 +453,31 @@ public class InvoiceLogSyncService extends BaseSyncService {
map.get(supermarket_id).addUpdateData(o);
}
for (TicketLog o : ticketloglist) {
o.setInvoiceNumber(null);
o.setInvoiceCode(null);
o.setInvoiceUserId(null);
o.setInvoiceUserName(null);
o.setInvoiceTime(null);
if (!ordmap.containsKey(o.getOrderSn())) {
return Result.failedstr("发票[%s]未找到订单信息", o.getTicketCode());
}
int supermarket_id = ordmap.get(o.getOrderSn()).getSupermarketId();
if (!map.containsKey(supermarket_id)) {
map.put(supermarket_id, new SyncTask());
}
map.get(supermarket_id).addUpdateData(o);
}
boolean ret = Db.tx(new IAtom() {
@Override
public boolean run() {
try {
int[] editret = Db.batchUpdate(ordlist, ordlist.size());
int[] editret = Db.batchUpdate(ordlist, 500);
for (int i : editret) {
// 必须是每条 sql 修改一条记录
@ -428,7 +486,16 @@ public class InvoiceLogSyncService extends BaseSyncService {
}
}
editret = Db.batchUpdate(loglist, loglist.size());
editret = Db.batchUpdate(loglist, 500);
for (int i : editret) {
// 必须是每条 sql 修改一条记录
if (i != 1) {
return false;
}
}
editret = Db.batchUpdate(ticketloglist, 500);
for (int i : editret) {
// 必须是每条 sql 修改一条记录