From 22d78d8b5f776602b550cb71a46087f83ba267a3 Mon Sep 17 00:00:00 2001 From: wangh <9483> Date: Tue, 26 Dec 2023 09:50:37 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=8F=E7=A5=A8=E6=89=93=E5=8D=B0--=E7=A7=AF?= =?UTF-8?q?=E5=88=86=E6=94=AF=E4=BB=98--=E4=B8=AD=E5=8F=B0=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E6=B5=81=E6=B0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fuintAdmin_zt/src/views/Site/index.vue | 85 ++- .../impl/IntegralSettingsServiceImpl.java | 27 +- .../controller/HandoverRecordController.java | 11 + .../order/service/HandoverRecordService.java | 2 + .../impl/HandoverRecordServiceImpl.java | 511 +++++++++++++++++- .../service/impl/LJUserServiceImpl.java | 8 +- .../java/com/fuint/common/util/TscLibDll.java | 40 ++ .../com/fuint/system/dept/entity/SysDept.java | 6 +- .../src/main/resources/TSCLIB.dll | Bin 0 -> 81408 bytes .../src/main/resources/TSCLIB.lib | Bin 0 -> 5404 bytes .../fuint-application/src/test/java/dyj.java | 118 ++++ fuintBackend/pom.xml | 16 + fuintCashierWeb/src/api/cashier/handover.js | 8 + .../views/cashier/NewComponents/Handover.vue | 46 +- .../cashier/NewComponents/HandoverDetails.vue | 9 +- .../cashier/NewComponents/HandoverOnly.vue | 48 +- .../pagesHome/goodsDetails/goodsDetails.vue | 33 +- gasStation-uni/pagesHome/order/order.vue | 77 ++- 18 files changed, 947 insertions(+), 98 deletions(-) create mode 100644 fuintBackend/fuint-application/src/main/java/com/fuint/common/util/TscLibDll.java create mode 100644 fuintBackend/fuint-application/src/main/resources/TSCLIB.dll create mode 100644 fuintBackend/fuint-application/src/main/resources/TSCLIB.lib create mode 100644 fuintBackend/fuint-application/src/test/java/dyj.java diff --git a/fuintAdmin_zt/src/views/Site/index.vue b/fuintAdmin_zt/src/views/Site/index.vue index 0882cb4ab..dc66d57c1 100644 --- a/fuintAdmin_zt/src/views/Site/index.vue +++ b/fuintAdmin_zt/src/views/Site/index.vue @@ -165,11 +165,11 @@ - - + + - - + + @@ -180,6 +180,34 @@ >{{dict.label}} + + + + + + + 金额上限 + 时间上限 + + + + + + + + + + + + + + + + + @@ -349,10 +377,15 @@ parentId:'', deptType:'1', status:'qy', - leader_name:'', - leader_phone:'', + leaderName:'', + leaderPhone:'', // parentName:'请先选择父级节点', deptName: '', + turnoverLimit: '', + turnoverType: "1", + turnoverTime: '', + + }, filterText:'', xtitle:'', @@ -445,11 +478,11 @@ rolelist:'', // 表单校验 rules: { - leader_name: [ - { required: true, message: '不能为空', trigger: 'blur' }, + leaderName: [ + { required: true, message: '姓名不能为空', trigger: 'blur' }, ], - leader_phone: [ - { required: true, message: '不能为空', trigger: 'blur' }, + leaderPhone: [ + { required: true, message: '电话不能为空', trigger: 'blur' }, ], deptName: [ @@ -538,23 +571,31 @@ activecilck(data){ console.log('点树',data) + this.cleanUp() // 点击树之后 this.queryParams.deptId = data.id this.deptType = data.deptType // 新增节点 - if(this.activeName == 'info'){ + // if(this.activeName == 'info'){ this.appedit(data.id,data.label) - } + // } // 用户请求 - if(this.activeName == 'list'){ + // if(this.activeName == 'list'){ this.getList(); - } + // } }, cleanUp(){ this.ruleForm = { parentId:'', - depId:'', + deptType:'1', + status:'qy', + leaderName:'', + leaderPhone:'', + // parentName:'请先选择父级节点', deptName: '', + turnoverLimit: '', + turnoverType: "1", + turnoverTime: '', } }, handleChange(value) { @@ -588,8 +629,8 @@ }, //修改 - submitFormseide(){ - this.$refs[formName].validate((valid) => { + submitFormseide(ruleForm){ + this.$refs[ruleForm].validate((valid) => { if (valid) { deptedit(this.ruleForm).then(res=>{ @@ -663,8 +704,14 @@ let ancestors = res.data.ancestors.slice(2).toString(); console.log('Userlist:',res) this.parentName = res.data.parentName - this.ruleForm.parentId = res.data.parentId - this.ruleForm.status = res.data.status + this.ruleForm = res.data + // this.ruleForm.parentId = res.data.parentId + // this.ruleForm.status = res.data.status + // this.ruleForm.leaderName = res.data.leaderName + // this.ruleForm.leaderPhone = res.data.leaderPhone + // this.ruleForm.turnoverType = res.data.turnoverType + // this.ruleForm.turnoverTime = res.data.turnoverTime + // this.ruleForm.turnoverType = res.data.turnoverType if(res.data.status == 'qy'){ this.value10 = true }else { diff --git a/fuintBackend/fuint-application/src/main/java/com/fuint/business/integral/service/impl/IntegralSettingsServiceImpl.java b/fuintBackend/fuint-application/src/main/java/com/fuint/business/integral/service/impl/IntegralSettingsServiceImpl.java index b66e32d5c..0045b81c9 100644 --- a/fuintBackend/fuint-application/src/main/java/com/fuint/business/integral/service/impl/IntegralSettingsServiceImpl.java +++ b/fuintBackend/fuint-application/src/main/java/com/fuint/business/integral/service/impl/IntegralSettingsServiceImpl.java @@ -19,8 +19,10 @@ import com.fuint.business.petrolStationManagement.entity.OilNumber; import com.fuint.business.petrolStationManagement.mapper.OilNumberMapper; import com.fuint.business.storeInformation.entity.LJStore; import com.fuint.business.storeInformation.service.ILJStoreService; +import com.fuint.business.userManager.entity.LJUserGrade; import com.fuint.business.userManager.entity.UserBalance; import com.fuint.business.userManager.mapper.LJUserMapper; +import com.fuint.business.userManager.service.LJUserGradeService; import com.fuint.business.userManager.service.UserBalanceService; import com.fuint.business.userManager.vo.LJUserVo; import org.springframework.stereotype.Service; @@ -215,7 +217,8 @@ public class IntegralSettingsServiceImpl implements IntegralSettingsService { } } - + @Resource + LJUserGradeService ljUserGradeService; /** * 签到功能 @@ -230,11 +233,27 @@ public class IntegralSettingsServiceImpl implements IntegralSettingsService { Integer integer = todayIsSignIn(integralSettings.getStoreId()); if (integer == 0) { - - // 根据店铺id 查找连锁店id -// LJStore ljStore = iljStoreService.selectStoreByIdUni(integralSettings.getStoreId()); // 查询当前用户 LJUserVo ljUserVos = ljUserMapper.selectAllInfoById4Chain(nowAccountInfo.getId(),integralSettings.getChainStoreId()); + + if (ObjectUtil.isEmpty(ljUserVos)) { + // 新增余额信息 + UserBalance userBalanceAdd = new UserBalance(); + userBalanceAdd.setMtUserId(nowAccountInfo.getId()); + userBalanceAdd.setChainStoreId(integralSettings.getChainStoreId()); + userBalanceAdd.setStoreId(integralSettings.getStoreId()); + userBalanceAdd.setCardBalance(0.0); + userBalanceAdd.setPoints(0); + userBalanceAdd.setGrowthValue(0); + userBalanceAdd.setConsumeNum(0); + LJUserGrade ljUserGrade = ljUserGradeService.selectUserGradeByStoreId(integralSettings.getStoreId()); + if (ObjectUtil.isNotEmpty(ljUserGrade) && ObjectUtil.isNotEmpty(ljUserGrade.getId())) { + userBalanceAdd.setGradeId(ljUserGrade.getId()); + } + // 新增会员余额信息 + userBalanceService.insertUserBalance(userBalanceAdd); + ljUserVos = ljUserMapper.selectAllInfoById4Chain(nowAccountInfo.getId(),integralSettings.getChainStoreId()); + } ljUserVos.setChainStoreId(integralSettings.getChainStoreId()); ljUserVos.setStoreId(integralSettings.getStoreId()); // 查询积分配置 diff --git a/fuintBackend/fuint-application/src/main/java/com/fuint/business/order/controller/HandoverRecordController.java b/fuintBackend/fuint-application/src/main/java/com/fuint/business/order/controller/HandoverRecordController.java index 1c7d74d57..0c433f604 100644 --- a/fuintBackend/fuint-application/src/main/java/com/fuint/business/order/controller/HandoverRecordController.java +++ b/fuintBackend/fuint-application/src/main/java/com/fuint/business/order/controller/HandoverRecordController.java @@ -11,6 +11,7 @@ import io.lettuce.core.dynamic.annotation.Param; import javax.annotation.Resource; +import java.util.Map; /** * 交班记录表(HandoverRecord)表控制层 @@ -102,5 +103,15 @@ public class HandoverRecordController extends BaseController { return getSuccessResult(handoverRecordService.handover()); } + /** + * 本地打印 + * @return + */ + @PostMapping("printLocally") + public ResponseObject printLocally(@RequestBody Map aa) { + handoverRecordService.printLocally(aa); + return getSuccessResult(true); + } + } diff --git a/fuintBackend/fuint-application/src/main/java/com/fuint/business/order/service/HandoverRecordService.java b/fuintBackend/fuint-application/src/main/java/com/fuint/business/order/service/HandoverRecordService.java index 0b2720237..8f9b0d315 100644 --- a/fuintBackend/fuint-application/src/main/java/com/fuint/business/order/service/HandoverRecordService.java +++ b/fuintBackend/fuint-application/src/main/java/com/fuint/business/order/service/HandoverRecordService.java @@ -61,5 +61,7 @@ public interface HandoverRecordService { public Map handover(); + public void printLocally(Map aa); + } diff --git a/fuintBackend/fuint-application/src/main/java/com/fuint/business/order/service/impl/HandoverRecordServiceImpl.java b/fuintBackend/fuint-application/src/main/java/com/fuint/business/order/service/impl/HandoverRecordServiceImpl.java index bc284c803..e30d2b962 100644 --- a/fuintBackend/fuint-application/src/main/java/com/fuint/business/order/service/impl/HandoverRecordServiceImpl.java +++ b/fuintBackend/fuint-application/src/main/java/com/fuint/business/order/service/impl/HandoverRecordServiceImpl.java @@ -13,11 +13,13 @@ import com.fuint.business.store.mapper.MtStoreMapper; import com.fuint.business.store.service.StoreService; import com.fuint.business.userManager.mapper.LJUserMapper; import com.fuint.business.userManager.vo.LJUserVo; +import com.fuint.common.util.TscLibDll; import com.fuint.framework.exception.BusinessCheckException; import com.fuint.system.dict.entity.SysDictData; import com.fuint.system.dict.entity.SysDictType; import com.fuint.system.dict.service.ISysDictDataService; import com.fuint.system.dict.service.ISysDictTypeService; +import javafx.print.Printer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.fuint.common.util.TokenUtil; @@ -33,10 +35,7 @@ import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; /** * 交班记录表(HandoverRecord)表服务实现类 @@ -197,6 +196,7 @@ public class HandoverRecordServiceImpl implements HandoverRecordService { return handoverMap; } + public Map orderSummary(String startTime, String endTime) { AccountInfo nowAccountInfo = TokenUtil.getNowAccountInfo(); // 油品订单(订单) 油品订单(退款) 油品订单(实收) 油品优惠(实收) 油品交易(实收) @@ -249,6 +249,13 @@ public class HandoverRecordServiceImpl implements HandoverRecordService { boolean flag = true; for (Map stringObjectMap : mapList) { + if (ObjectUtil.isEmpty(map.get("payType"))) { + map.put("payType","other"); + } + if (ObjectUtil.isEmpty(stringObjectMap.get("payType"))) { + map.put("payType","other"); + + } if (map.get("payType").equals(stringObjectMap.get("payType"))) { BigDecimal paidAmount = new BigDecimal(stringObjectMap.get("paidAmount").toString()).add(new BigDecimal(map.get("paidAmount").toString())); BigDecimal refundAmount = new BigDecimal(stringObjectMap.get("refundAmount").toString()).add(new BigDecimal(map.get("refundAmount").toString())); @@ -381,4 +388,500 @@ public class HandoverRecordServiceImpl implements HandoverRecordService { return map; } + private static final String LOAD_LIBRARY = "TSCLIB"; + + //打印机 +// private static final String print_model = "58130IVC"; + @Override + public void printLocally(Map handover) { + + Map baseInfo = (Map)handover.get("baseInfo"); + Map orderSummary = (Map)handover.get("orderSummary"); + + // 支付方式汇总 + List> paymentAggregationMap = (List>)handover.get("paymentAggregation"); + // 油号统计 + List> oilNumberStatisticsMap = (List>)handover.get("oilNumberStatistics"); + // 油枪统计 + List> greaseGunStatisticsMap = (List>)handover.get("greaseGunStatistics"); + // 员工统计 + List> employeeStatisticsMap = (List>)handover.get("employeeStatistics"); + // 挂账详情 + List> billingDetailsMap = (List>)handover.get("billingDetails"); + // 挂账归还 + List> returnedToTheAccountMap = (List>)handover.get("returnedToTheAccount"); + + +// System.loadLibrary(LOAD_LIBRARY); + System.setProperty("jna.encoding", "GBK"); + // 获取默认打印机 + Printer printer = Printer.getDefaultPrinter(); + // 获取打印机的名称 + String printerName = printer.getName(); + TscLibDll.INSTANCE.openport(printerName); + + TscLibDll.INSTANCE.sendcommand(""); + TscLibDll.INSTANCE.sendcommand(""); + TscLibDll.INSTANCE.sendcommand("------------交班统计------------"); + TscLibDll.INSTANCE.sendcommand(""); + TscLibDll.INSTANCE.sendcommand("油站名称:\t"+Optional.ofNullable(baseInfo.get("storeName")).orElse("未知油站")); + TscLibDll.INSTANCE.sendcommand("收银员:\t"+Optional.ofNullable(baseInfo.get("realName")).orElse("未知姓名")); + TscLibDll.INSTANCE.sendcommand("交班方式:\t"+Optional.ofNullable(baseInfo.get("handoverType")).orElse("未知")); + TscLibDll.INSTANCE.sendcommand("开始时间:\t"+Optional.ofNullable(baseInfo.get("startTime")).orElse("-")); + TscLibDll.INSTANCE.sendcommand("结束时间:\t"+Optional.ofNullable(baseInfo.get("endTime")).orElse("-")); + TscLibDll.INSTANCE.sendcommand("--------------------------------"); + TscLibDll.INSTANCE.sendcommand("当前版本:\t"+"V1.0.1"); + TscLibDll.INSTANCE.sendcommand("--------------------------------"); + + TscLibDll.INSTANCE.sendcommand(""); + TscLibDll.INSTANCE.sendcommand("**订单汇总**"); + TscLibDll.INSTANCE.sendcommand("类型\t金额"); + TscLibDll.INSTANCE.sendcommand("油品订单(订单):\t¥"+Optional.ofNullable(orderSummary.get("oilOrder")).orElse("0")); + TscLibDll.INSTANCE.sendcommand("油品订单(退款):\t¥"+Optional.ofNullable(orderSummary.get("oilRefund")).orElse("0")); + TscLibDll.INSTANCE.sendcommand("油品订单(实收):\t¥"+Optional.ofNullable(orderSummary.get("oilPaid")).orElse("0")); + TscLibDll.INSTANCE.sendcommand("油品优惠(实收):\t¥"+Optional.ofNullable(orderSummary.get("oilDiacount")).orElse("0")); + TscLibDll.INSTANCE.sendcommand("--------------------------------"); + TscLibDll.INSTANCE.sendcommand("会员储值(订单):\t¥"+Optional.ofNullable(orderSummary.get("cardOrder")).orElse("0")); + TscLibDll.INSTANCE.sendcommand("会员储值(退款):\t¥"+Optional.ofNullable(orderSummary.get("cardRefund")).orElse("0")); + TscLibDll.INSTANCE.sendcommand("会员储值(实收):\t¥"+Optional.ofNullable(orderSummary.get("cardPaid")).orElse("0")); + TscLibDll.INSTANCE.sendcommand("储值赠送(订单):\t¥"+Optional.ofNullable(orderSummary.get("cardGiftOrder")).orElse("0")); + TscLibDll.INSTANCE.sendcommand("储值赠送(退款):\t¥"+Optional.ofNullable(orderSummary.get("cardGiftRefund")).orElse("0")); + TscLibDll.INSTANCE.sendcommand("储值赠送(实际):\t¥"+Optional.ofNullable(orderSummary.get("cardGiftPaid")).orElse("0")); + TscLibDll.INSTANCE.sendcommand("--------------------------------"); + TscLibDll.INSTANCE.sendcommand("存油储值(订单):\t¥"+Optional.ofNullable(orderSummary.get("fuelOrder")).orElse("0")); + TscLibDll.INSTANCE.sendcommand("存油储值(退款):\t¥"+Optional.ofNullable(orderSummary.get("fuelRefund")).orElse("0")); + TscLibDll.INSTANCE.sendcommand("存油储值(实收):\t¥"+Optional.ofNullable(orderSummary.get("fuelPaid")).orElse("0")); + TscLibDll.INSTANCE.sendcommand("--------------------------------"); + TscLibDll.INSTANCE.sendcommand("普通收款(订单):\t¥"+Optional.ofNullable(orderSummary.get("goodsOrder")).orElse("0")); + TscLibDll.INSTANCE.sendcommand("普通收款(退款):\t¥"+Optional.ofNullable(orderSummary.get("goodsRefund")).orElse("0")); + TscLibDll.INSTANCE.sendcommand("普通收款(实收):\t¥"+Optional.ofNullable(orderSummary.get("goodsPaid")).orElse("0")); + TscLibDll.INSTANCE.sendcommand(""); + + TscLibDll.INSTANCE.sendcommand("**退款汇总**"); + TscLibDll.INSTANCE.sendcommand("支付方式\t金额"); + List> paymentAggregationAll = paymentAggregation("all", paymentAggregationMap); + if (ObjectUtil.isNotEmpty(paymentAggregationAll)) { + for (Map stringObjectMap : paymentAggregationAll) { + if (Double.parseDouble(stringObjectMap.get("refundAmount").toString()) > 0) { + TscLibDll.INSTANCE.sendcommand(calculatePaymentMethod(stringObjectMap.get("payType").toString())+":\t¥"+Optional.ofNullable(stringObjectMap.get("refundAmount")).orElse("0")); + } + } + } + TscLibDll.INSTANCE.sendcommand("--------------------------------"); + TscLibDll.INSTANCE.sendcommand("合计:\t¥"+refundAggregateTotal(paymentAggregationAll)); + TscLibDll.INSTANCE.sendcommand("--------------------------------"); + TscLibDll.INSTANCE.sendcommand(""); + + TscLibDll.INSTANCE.sendcommand("**实收汇总**"); + TscLibDll.INSTANCE.sendcommand("支付方式\t金额"); + if (ObjectUtil.isNotEmpty(paymentAggregationAll)) { + for (Map stringObjectMap : paymentAggregationAll) { + if (Double.parseDouble(stringObjectMap.get("paidAmount").toString()) > 0) { + TscLibDll.INSTANCE.sendcommand(calculatePaymentMethod(stringObjectMap.get("payType").toString())+":\t¥"+Optional.ofNullable(stringObjectMap.get("paidAmount")).orElse("0")); + } + } + } + TscLibDll.INSTANCE.sendcommand("--------------------------------"); + TscLibDll.INSTANCE.sendcommand("合计:\t¥"+totalTotalOfActualReceipts(paymentAggregationAll)); + TscLibDll.INSTANCE.sendcommand("--------------------------------"); + TscLibDll.INSTANCE.sendcommand(""); + TscLibDll.INSTANCE.sendcommand("**油品订单**"); + TscLibDll.INSTANCE.sendcommand("支付方式\t金额"); + List> paymentAggregationOil = paymentAggregation("oil", paymentAggregationMap); + + if (ObjectUtil.isNotEmpty(paymentAggregationOil)) { + for (Map stringObjectMap : paymentAggregationOil) { + TscLibDll.INSTANCE.sendcommand(calculatePaymentMethod(stringObjectMap.get("payType").toString())+":\t¥"+Optional.ofNullable(stringObjectMap.get("paidAmount")).orElse("0")); + } + } + TscLibDll.INSTANCE.sendcommand("--------------------------------"); + TscLibDll.INSTANCE.sendcommand("合计:\t¥"+totalOilOrders(paymentAggregationOil)); + TscLibDll.INSTANCE.sendcommand("--------------------------------"); + + TscLibDll.INSTANCE.sendcommand(""); + TscLibDll.INSTANCE.sendcommand("**商品订单**"); + TscLibDll.INSTANCE.sendcommand("支付方式\t金额"); + + List> paymentAggregationGoods = paymentAggregation("goods", paymentAggregationMap); + if (ObjectUtil.isNotEmpty(paymentAggregationGoods)) { + for (Map stringObjectMap : paymentAggregationGoods) { + TscLibDll.INSTANCE.sendcommand(calculatePaymentMethod(stringObjectMap.get("payType").toString())+":\t¥"+Optional.ofNullable(stringObjectMap.get("paidAmount")).orElse("0")); + } + } + TscLibDll.INSTANCE.sendcommand("--------------------------------"); + TscLibDll.INSTANCE.sendcommand("合计:\t¥"+totalOfProductOrders(paymentAggregationGoods)); + TscLibDll.INSTANCE.sendcommand("--------------------------------"); + + TscLibDll.INSTANCE.sendcommand(""); + TscLibDll.INSTANCE.sendcommand("**会员储值**"); + TscLibDll.INSTANCE.sendcommand("支付方式\t金额"); + List> paymentAggregationFg = paymentAggregation("fg", paymentAggregationMap); + + if (ObjectUtil.isNotEmpty(paymentAggregationFg)) { + for (Map stringObjectMap : paymentAggregationFg) { + TscLibDll.INSTANCE.sendcommand(calculatePaymentMethod(stringObjectMap.get("payType").toString())+":\t¥"+Optional.ofNullable(stringObjectMap.get("paidAmount")).orElse("0")); + } + } + TscLibDll.INSTANCE.sendcommand("--------------------------------"); + TscLibDll.INSTANCE.sendcommand("合计:\t¥"+totalMemberStoredValue(paymentAggregationMap)); + TscLibDll.INSTANCE.sendcommand("--------------------------------"); + + TscLibDll.INSTANCE.sendcommand(""); + TscLibDll.INSTANCE.sendcommand("**积分商城**"); + TscLibDll.INSTANCE.sendcommand("支付方式\t金额"); + List> paymentAggregationPoint = paymentAggregation("point", paymentAggregationMap); + + if (ObjectUtil.isNotEmpty(paymentAggregationPoint)) { + for (Map stringObjectMap : paymentAggregationPoint) { + TscLibDll.INSTANCE.sendcommand(calculatePaymentMethod(stringObjectMap.get("payType").toString())+":\t¥"+Optional.ofNullable(stringObjectMap.get("paidAmount")).orElse("0")); + } + } + TscLibDll.INSTANCE.sendcommand("--------------------------------"); + TscLibDll.INSTANCE.sendcommand("合计:\t¥"+pointsMallStatistics(paymentAggregationPoint)); + TscLibDll.INSTANCE.sendcommand("--------------------------------"); + + TscLibDll.INSTANCE.sendcommand(""); + TscLibDll.INSTANCE.sendcommand("**油号统计**"); + TscLibDll.INSTANCE.sendcommand("油号\t笔数\t升数\t金额"); + + if (ObjectUtil.isNotEmpty(oilNumberStatisticsMap)) { + for (Map stringObjectMap : oilNumberStatisticsMap) { + TscLibDll.INSTANCE.sendcommand( + Optional.ofNullable(stringObjectMap.get("oilName")).orElse("未知") + +"\t"+Optional.ofNullable(stringObjectMap.get("numberOfDeals")).orElse("0") + +"\t"+Optional.ofNullable(stringObjectMap.get("oilNum")).orElse("0") + +"\t¥"+Optional.ofNullable(stringObjectMap.get("paidAmount")).orElse("0")); + } + } + TscLibDll.INSTANCE.sendcommand("--------------------------------"); + TscLibDll.INSTANCE.sendcommand("合计:\t"+totalOilNumberStatistics(oilNumberStatisticsMap)); + TscLibDll.INSTANCE.sendcommand("--------------------------------"); + + TscLibDll.INSTANCE.sendcommand("**优惠统计**"); + TscLibDll.INSTANCE.sendcommand(""); + TscLibDll.INSTANCE.sendcommand("油品\t金额"); + + if (ObjectUtil.isNotEmpty(oilNumberStatisticsMap)) { + for (Map stringObjectMap : oilNumberStatisticsMap) { + TscLibDll.INSTANCE.sendcommand( + Optional.ofNullable(stringObjectMap.get("oilName")).orElse("未知") + +"\t¥"+Optional.ofNullable(stringObjectMap.get("paidDiscount")).orElse("0")); + } + } + TscLibDll.INSTANCE.sendcommand("--------------------------------"); + TscLibDll.INSTANCE.sendcommand("合计:\t¥"+discountStatisticsTotal(oilNumberStatisticsMap)); + TscLibDll.INSTANCE.sendcommand("--------------------------------"); + + TscLibDll.INSTANCE.sendcommand("**油枪统计**"); + TscLibDll.INSTANCE.sendcommand(""); + TscLibDll.INSTANCE.sendcommand("油枪\t笔数\t升数\t金额"); + if (ObjectUtil.isNotEmpty(greaseGunStatisticsMap)) { + for (Map stringObjectMap : greaseGunStatisticsMap) { + TscLibDll.INSTANCE.sendcommand( + Optional.ofNullable(stringObjectMap.get("gunName")).orElse("未知") + +"\t"+Optional.ofNullable(stringObjectMap.get("numberOfDeals")).orElse("0") + +"\t"+Optional.ofNullable(stringObjectMap.get("oilNum")).orElse("0") + +"\t¥"+Optional.ofNullable(stringObjectMap.get("paidAmount")).orElse("0")); + } + } + + + TscLibDll.INSTANCE.sendcommand("--------------------------------"); + TscLibDll.INSTANCE.sendcommand("合计:\t"+totalOfOilGunStatistics(greaseGunStatisticsMap)); + TscLibDll.INSTANCE.sendcommand("--------------------------------"); + + TscLibDll.INSTANCE.sendcommand(""); + TscLibDll.INSTANCE.sendcommand("**员工统计**"); + TscLibDll.INSTANCE.sendcommand("员工姓名\t笔数\t金额"); + if (ObjectUtil.isNotEmpty(employeeStatisticsMap)) { + for (Map stringObjectMap : employeeStatisticsMap) { + TscLibDll.INSTANCE.sendcommand( + Optional.ofNullable(stringObjectMap.get("name")).orElse("未知") + +"\t"+Optional.ofNullable(stringObjectMap.get("numberOfDeals")).orElse("0") + +"\t¥"+Optional.ofNullable(stringObjectMap.get("paidAmount")).orElse("0")); + } + } + + TscLibDll.INSTANCE.sendcommand("--------------------------------"); + TscLibDll.INSTANCE.sendcommand("合计:\t"+totalOfEmployeeStatistics(employeeStatisticsMap)); + TscLibDll.INSTANCE.sendcommand("--------------------------------"); + + TscLibDll.INSTANCE.sendcommand(""); + TscLibDll.INSTANCE.sendcommand("**挂账统计**"); + TscLibDll.INSTANCE.sendcommand("·····挂账详情·····"); + + TscLibDll.INSTANCE.sendcommand("挂账单位\t笔数\t金额"); + if (ObjectUtil.isNotEmpty(billingDetailsMap)) { + for (Map stringObjectMap : billingDetailsMap) { + TscLibDll.INSTANCE.sendcommand( + Optional.ofNullable(stringObjectMap.get("name")).orElse("未知") + +"\t"+Optional.ofNullable(stringObjectMap.get("numberOfDeals")).orElse("0") + +"\t¥"+Optional.ofNullable(stringObjectMap.get("amount")).orElse("0")); + } + } + TscLibDll.INSTANCE.sendcommand("--------------------------------"); + TscLibDll.INSTANCE.sendcommand("合计:\t¥"+statisticsOfAccountDetails(billingDetailsMap)); + TscLibDll.INSTANCE.sendcommand("--------------------------------"); + + TscLibDll.INSTANCE.sendcommand("······归还详情······"); + TscLibDll.INSTANCE.sendcommand("挂账单位\t笔数\t金额"); + if (ObjectUtil.isNotEmpty(returnedToTheAccountMap)) { + for (Map stringObjectMap : returnedToTheAccountMap) { + TscLibDll.INSTANCE.sendcommand( + Optional.ofNullable(stringObjectMap.get("name")).orElse("未知") + +"\t"+Optional.ofNullable(stringObjectMap.get("numberOfDeals")).orElse("0") + +"\t¥"+Optional.ofNullable(stringObjectMap.get("amount")).orElse("0")); + } + } + + TscLibDll.INSTANCE.sendcommand("--------------------------------"); + TscLibDll.INSTANCE.sendcommand("合计:\t¥"+postedAccountReturnStatistics(returnedToTheAccountMap)); + TscLibDll.INSTANCE.sendcommand("--------------------------------"); + + + + TscLibDll.INSTANCE.sendcommand("--------------------------------"); + TscLibDll.INSTANCE.sendcommand(""); + TscLibDll.INSTANCE.sendcommand(""); + TscLibDll.INSTANCE.sendcommand(""); + TscLibDll.INSTANCE.sendcommand(""); + + TscLibDll.INSTANCE.closeport(); + } + public List> paymentAggregation(String flag, List> paymentAggregation) { + List> count = new ArrayList<>(); + + if (ObjectUtil.isNotEmpty(paymentAggregation)) { + for (Map res : paymentAggregation) { + if ("fg".equals(flag)) { + if ("card".equals(res.get("flag")) || "fuel".equals(res.get("flag"))) { + boolean flag2 = false; + for (Map coun : count) { + if (Objects.equals(res.get("payType"), coun.get("payType"))) { + coun.put("paidAmount", Double.valueOf(coun.get("paidAmount").toString()) + Double.valueOf(res.get("paidAmount").toString())); + flag2 = true; + } + } + if (!flag2) { + // 创建新的对象,以防修改原始数据 + Map newRes = new HashMap<>(res); + count.add(newRes); + } + } + } else if (Objects.equals(res.get("flag"), flag)) { + count.add(res); + } + } + } + + return count; + } + + private int findIndexByPayType(List> list, String payType) { + for (int i = 0; i < list.size(); i++) { + if (payType.equals(list.get(i).get("payType").toString())) { + return i; + } + } + return -1; + } + + + public String calculatePaymentMethod(String payType) { + switch (payType) { + case "ALIPAY": + return "支付宝"; + case "WECHAT": + return "微信"; + case "UNIONPAY": + return "银联二维码"; + case "CASH": + return "现金"; + default: + return "其他"; + } + } + + //退款汇总合计 + public BigDecimal refundAggregateTotal(List> paymentAggregation) { + BigDecimal totalRefundAmount = BigDecimal.ZERO; + + if (paymentAggregation != null && !paymentAggregation.isEmpty()) { + for (Map payment : paymentAggregation) { + if ("all".equals(payment.get("flag"))) { + BigDecimal refundAmount = new BigDecimal(String.valueOf(payment.get("refundAmount"))); + totalRefundAmount = totalRefundAmount.add(refundAmount); + } + } + } + + return totalRefundAmount; + } + + //实收汇总合计 + public BigDecimal totalTotalOfActualReceipts(List> paymentAggregation) { + BigDecimal totalPaidAmount = BigDecimal.ZERO; + + if (paymentAggregation != null && !paymentAggregation.isEmpty()) { + for (Map payment : paymentAggregation) { + if ("all".equals(payment.get("flag"))) { + BigDecimal paidAmount = new BigDecimal(String.valueOf(payment.get("paidAmount"))); + totalPaidAmount = totalPaidAmount.add(paidAmount); + } + } + } + + return totalPaidAmount; + } + + //油品订单合计 + public BigDecimal totalOilOrders(List> paymentAggregation) { + BigDecimal totalOilAmount = BigDecimal.ZERO; + + if (paymentAggregation != null && !paymentAggregation.isEmpty()) { + for (Map payment : paymentAggregation) { + if ("oil".equals(payment.get("flag"))) { + BigDecimal paidAmount = new BigDecimal(String.valueOf(payment.get("paidAmount"))); + totalOilAmount = totalOilAmount.add(paidAmount); + } + } + } + + return totalOilAmount; + } + + + // 商品订单合计 + public BigDecimal totalOfProductOrders(List> paymentAggregation) { + BigDecimal totalProductAmount = BigDecimal.ZERO; + + if (paymentAggregation != null && !paymentAggregation.isEmpty()) { + for (Map payment : paymentAggregation) { + if ("goods".equals(payment.get("flag"))) { + BigDecimal paidAmount = new BigDecimal(String.valueOf(payment.get("paidAmount"))); + totalProductAmount = totalProductAmount.add(paidAmount); + } + } + } + + return totalProductAmount; + } + + // 会员储值合计 + public BigDecimal totalMemberStoredValue(List> paymentAggregation) { + BigDecimal totalStoredValue = BigDecimal.ZERO; + + if (paymentAggregation != null && !paymentAggregation.isEmpty()) { + for (Map payment : paymentAggregation) { + if ("card".equals(payment.get("flag")) || "fuel".equals(payment.get("flag"))) { + BigDecimal paidAmount = new BigDecimal(String.valueOf(payment.get("paidAmount"))); + totalStoredValue = totalStoredValue.add(paidAmount); + } + } + } + + return totalStoredValue; + } + + // 积分商城统计 + public BigDecimal pointsMallStatistics(List> paymentAggregation) { + BigDecimal totalPointsMallAmount = BigDecimal.ZERO; + + if (paymentAggregation != null && !paymentAggregation.isEmpty()) { + for (Map payment : paymentAggregation) { + if ("point".equals(payment.get("flag"))) { + BigDecimal paidAmount = new BigDecimal(String.valueOf(payment.get("paidAmount"))); + totalPointsMallAmount = totalPointsMallAmount.add(paidAmount); + } + } + } + + return totalPointsMallAmount; + } + + // 油号统计合计 + public BigDecimal totalOilNumberStatistics(List> oilNumberStatistics) { + BigDecimal totalOilNumberAmount = BigDecimal.ZERO; + + if (oilNumberStatistics != null && !oilNumberStatistics.isEmpty()) { + for (Map statistics : oilNumberStatistics) { + BigDecimal paidAmount = new BigDecimal(String.valueOf(statistics.get("paidAmount"))); + totalOilNumberAmount = totalOilNumberAmount.add(paidAmount); + } + } + + return totalOilNumberAmount; + } + + // 优惠统计合计 + public BigDecimal discountStatisticsTotal(List> oilNumberStatistics) { + BigDecimal totalDiscountAmount = BigDecimal.ZERO; + + if (oilNumberStatistics != null && !oilNumberStatistics.isEmpty()) { + for (Map statistics : oilNumberStatistics) { + BigDecimal paidDiscount = new BigDecimal(String.valueOf(statistics.get("paidDiscount"))); + totalDiscountAmount = totalDiscountAmount.add(paidDiscount); + } + } + + return totalDiscountAmount; + } + + // 油枪统计合计 + public BigDecimal totalOfOilGunStatistics(List> greaseGunStatistics) { + BigDecimal totalOilGunAmount = BigDecimal.ZERO; + + if (greaseGunStatistics != null && !greaseGunStatistics.isEmpty()) { + for (Map statistics : greaseGunStatistics) { + BigDecimal paidAmount = new BigDecimal(String.valueOf(statistics.get("paidAmount"))); + totalOilGunAmount = totalOilGunAmount.add(paidAmount); + } + } + + return totalOilGunAmount; + } + + // 员工统计合计 + public BigDecimal totalOfEmployeeStatistics(List> employeeStatistics) { + BigDecimal totalEmployeeAmount = BigDecimal.ZERO; + + if (employeeStatistics != null && !employeeStatistics.isEmpty()) { + for (Map statistics : employeeStatistics) { + BigDecimal paidAmount = new BigDecimal(String.valueOf(statistics.get("paidAmount"))); + totalEmployeeAmount = totalEmployeeAmount.add(paidAmount); + } + } + + return totalEmployeeAmount; + } + + // 挂账详情统计 + public BigDecimal statisticsOfAccountDetails(List> billingDetails) { + BigDecimal totalAccountDetailsAmount = BigDecimal.ZERO; + + if (billingDetails != null && !billingDetails.isEmpty()) { + for (Map details : billingDetails) { + BigDecimal amount = new BigDecimal(String.valueOf(details.get("amount"))); + totalAccountDetailsAmount = totalAccountDetailsAmount.add(amount); + } + } + + return totalAccountDetailsAmount; + } + + // 挂账归还统计 + public BigDecimal postedAccountReturnStatistics(List> returnedToTheAccount) { + BigDecimal totalReturnAmount = BigDecimal.ZERO; + + if (returnedToTheAccount != null && !returnedToTheAccount.isEmpty()) { + for (Map returnDetails : returnedToTheAccount) { + BigDecimal amount = new BigDecimal(String.valueOf(returnDetails.get("amount"))); + totalReturnAmount = totalReturnAmount.add(amount); + } + } + + return totalReturnAmount; + } + + } diff --git a/fuintBackend/fuint-application/src/main/java/com/fuint/business/userManager/service/impl/LJUserServiceImpl.java b/fuintBackend/fuint-application/src/main/java/com/fuint/business/userManager/service/impl/LJUserServiceImpl.java index c54e69a06..161cf294f 100644 --- a/fuintBackend/fuint-application/src/main/java/com/fuint/business/userManager/service/impl/LJUserServiceImpl.java +++ b/fuintBackend/fuint-application/src/main/java/com/fuint/business/userManager/service/impl/LJUserServiceImpl.java @@ -22,6 +22,7 @@ import com.fuint.common.util.TokenUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.util.*; /** @@ -107,12 +108,13 @@ public class LJUserServiceImpl extends ServiceImpl impleme return baseMapper.selectUserById(id); } + + @Override public LJUserVo getByUniApp(Integer chainStoreId) { - AccountInfo nowAccountInfo = TokenUtil.getNowAccountInfo(); - - return baseMapper.selectUserByIdUni(nowAccountInfo.getId(),chainStoreId); + LJUserVo ljUserVo = baseMapper.selectUserByIdUni(nowAccountInfo.getId(), chainStoreId); + return ljUserVo; } /** diff --git a/fuintBackend/fuint-application/src/main/java/com/fuint/common/util/TscLibDll.java b/fuintBackend/fuint-application/src/main/java/com/fuint/common/util/TscLibDll.java new file mode 100644 index 000000000..ca0aeac4f --- /dev/null +++ b/fuintBackend/fuint-application/src/main/java/com/fuint/common/util/TscLibDll.java @@ -0,0 +1,40 @@ +package com.fuint.common.util; + +import com.sun.jna.Library; +import com.sun.jna.Native; + +public interface TscLibDll extends Library { +// TscLibDll INSTANCE = (TscLibDll) Native.loadLibrary("TSCLIB", TscLibDll.class); + TscLibDll INSTANCE = Native.load("TSCLIB", TscLibDll.class); + + int about(); + + int openport(String pirnterName); + + int closeport(); + + int sendcommand(String printerCommand); + +// int sendBinaryData(byte[] printerCommand, int CommandLength); + + int setup(String width, String height, String speed, String density, String sensor, String vertical, String offset); + + int downloadpcx(String filename, String image_name); + + int barcode(String x, String y, String type, String height, String readable, String rotation, String narrow, String wide, String code); + + int printerfont(String x, String y, String fonttype, String rotation, String xmul, String ymul, String text); + + int clearbuffer(); + + int printlabel(String set, String copy); + + int windowsfont(int x, int y, int fontheight, int rotation, int fontstyle, int fontunderline, String szFaceName, String content); + + int windowsfontUnicode(int x, int y, int fontheight, int rotation, int fontstyle, int fontunderline, String szFaceName, byte[] content); + + int windowsfontUnicodeLengh(int x, int y, int fontheight, int rotation, int fontstyle, int fontunderline, String szFaceName, byte[] content, int length); + + byte usbportqueryprinter(); + +} diff --git a/fuintBackend/fuint-application/src/main/java/com/fuint/system/dept/entity/SysDept.java b/fuintBackend/fuint-application/src/main/java/com/fuint/system/dept/entity/SysDept.java index 3356dc1c4..d4dcc8705 100644 --- a/fuintBackend/fuint-application/src/main/java/com/fuint/system/dept/entity/SysDept.java +++ b/fuintBackend/fuint-application/src/main/java/com/fuint/system/dept/entity/SysDept.java @@ -13,6 +13,7 @@ import javax.validation.constraints.Email; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import javax.validation.constraints.Size; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -63,6 +64,7 @@ public class SysDept extends BaseEntity /** 子部门 */ @TableField(exist = false) private List children = new ArrayList(); - - + private String turnoverType; + private BigDecimal turnoverLimit; + private Date turnoverTime; } diff --git a/fuintBackend/fuint-application/src/main/resources/TSCLIB.dll b/fuintBackend/fuint-application/src/main/resources/TSCLIB.dll new file mode 100644 index 0000000000000000000000000000000000000000..79499e96d5f5775a25e19f8c3740a3f98bae03ee GIT binary patch literal 81408 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%0D`T3Cj(3-g8?MI-|2atf={%_x`=lu4T0+L4_wc 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 literal 0 HcmV?d00001 diff --git a/fuintBackend/fuint-application/src/main/resources/TSCLIB.lib b/fuintBackend/fuint-application/src/main/resources/TSCLIB.lib new file mode 100644 index 0000000000000000000000000000000000000000..531c3884793fc2a3338ddabeff0f12eee0ec2e59 GIT binary patch literal 5404 zcmcIn&rcgi6#g(t2*!YcTpG31RZ!Bj5;czP0IIqs0SOdBEMp|vi?O}y#;WnU{vp~^ zZ=9-J`VZt#jd_0N*xB*P2fT=?u_5_&83wcGFB>v8n z*;T-hXQWBu*M*#tCYe)(ye3UDUl8(=G|9D_LY|T)nSN`^!gIiob<*pl($2&Dqe8K? zxwU`4u#+!7DwK-*_jh;hp;X#C*xmKp@r&tTnv2^9dk;#R8^sMM6*?bX)pEISH@5Rz z8=Fbda^KNp_2X74%tNU*v~s)BtJSo&F~gxfN@7v;mey?P?XC^xfXGZVyWY|40q(gy z{fereG#h$ZZB>7=Cr>)F2bqRZ&f;4Q?2U9$K|HE9e$e*Vt|!Kb$cxb##pF(l+>!6)SGms z9ea=4Ml<5a86589p5wq+z*&>Xyp(c9@0sW9#7AGB((6<>hECe`t`p|YDuc|{xF363 z`)BdKJYgb+$~=bVo0W{9o}(y{4N{Z9;S}&B2IOaeS0wM^!0IgUjO02!pOUC^z-yAi zJn)j_<~86c$=hk*`2w&`GHT=X%;6F)V**z(i72jM3NcJ$1`C+SEaDhLG&^uMiP znZ?fsfqCysY)J-7=_ovVgEBKH_kyx3EVeA0FJ9dVBgq%HS(Ygua%+eipf8`!z7>Rr z>@ghQcj@XJ@)Y;T6 zEW{_M>o3DVWgY3o!u-Q}wXJvbS~u}|;dWwoXYYZq_bJBWb+CXKk)Mc!i5dCH0ihMp zP28fTE*5^n`}gh<ck7SP93>a=_6K>V zpU@fti*Q#M4whS~)wJu>%-s5i5X?6$KedqD%2)@*xyiZZZaL(v+)7*h?Dx0zM`-pt z@6#RRWIrbS^NPlFMjUH`zwS6c)l=rJkBmLWJavjIuZMnv87u5PNVf=SjJPYT1{w+1 z{;uucA@f9paV59&D0p^yd-losFmB>`?)*{EGUD4j;Xzv>v`dT@R7to%oyWm)F}*5} z8IH@#jOi^;901qNFc_BgE#TeXB4J%&EPu^23R+6Ovjm|{Fq*888UZgG5SzCN?<(Vk zR%b5Y;j=Ly?{5(Dq>b#a`7R1G%9sI_99cH#PJ sX&0#TI9PsW12X0dilZ6E3@^|fxS^RLdq + + + + + + + + + + + net.java.dev.jna + jna + 5.10.0 + + + cn.hutool hutool-all diff --git a/fuintCashierWeb/src/api/cashier/handover.js b/fuintCashierWeb/src/api/cashier/handover.js index 0528f9339..85ebb04e2 100644 --- a/fuintCashierWeb/src/api/cashier/handover.js +++ b/fuintCashierWeb/src/api/cashier/handover.js @@ -23,3 +23,11 @@ export function addHandoverApi(data) { data: data }) } + +export function printLocallyApi(data) { + return request({ + url: '/business/handoverRecord/printLocally', + method: 'post', + data: data + }) +} diff --git a/fuintCashierWeb/src/views/cashier/NewComponents/Handover.vue b/fuintCashierWeb/src/views/cashier/NewComponents/Handover.vue index 839cd2191..283ea0001 100644 --- a/fuintCashierWeb/src/views/cashier/NewComponents/Handover.vue +++ b/fuintCashierWeb/src/views/cashier/NewComponents/Handover.vue @@ -288,7 +288,7 @@
油枪统计
-
油号
+
油枪
笔数
升数
金额
@@ -371,8 +371,8 @@
交班
-
云打印
-
本地打印
+ +
本地打印
交班记录
@@ -382,7 +382,7 @@