From 6fd4e5a38319324fd6989aa371017c6cff8c2775 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com>
Date: Fri, 5 Jul 2024 10:07:41 +0800
Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E5=8F=91=E7=A5=A8?=
=?UTF-8?q?=E5=BC=80=E5=85=B7=E6=8E=A5=E5=8F=A3=E3=80=81=E7=AD=89=E7=AD=89?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 8 ++
.../booking/controller/MatchController.java | 2 +-
.../controller/MatchOrderController.java | 15 ++++
.../controller/UserInvoiceController.java | 57 +++++++++++++
.../gxwebsoft/booking/entity/MatchOrder.java | 2 +-
.../com/gxwebsoft/booking/entity/NuoNuo.java | 28 +++++++
.../gxwebsoft/booking/entity/NuoNuoGoods.java | 67 ++++++++++++++++
.../gxwebsoft/booking/entity/NuoNuoOrder.java | 80 +++++++++++++++++++
.../booking/mapper/xml/MatchOrderMapper.xml | 2 +-
.../booking/param/MatchOrderParam.java | 3 +-
.../cms/controller/WebsiteController.java | 4 +
.../common/core/config/MybatisPlusConfig.java | 3 +-
.../system/controller/UserController.java | 15 +++-
.../common/system/mapper/xml/UserMapper.xml | 6 ++
.../common/system/param/UserParam.java | 4 +
.../java/com/gxwebsoft/shop/entity/Users.java | 2 +-
16 files changed, 287 insertions(+), 11 deletions(-)
create mode 100644 src/main/java/com/gxwebsoft/booking/entity/NuoNuo.java
create mode 100644 src/main/java/com/gxwebsoft/booking/entity/NuoNuoGoods.java
create mode 100644 src/main/java/com/gxwebsoft/booking/entity/NuoNuoOrder.java
diff --git a/pom.xml b/pom.xml
index 2338a6b..efa645f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -272,6 +272,14 @@
3.17.0
+
+
+ com.nuonuo
+ open-sdk
+ 1.0.5.2
+
+
+
diff --git a/src/main/java/com/gxwebsoft/booking/controller/MatchController.java b/src/main/java/com/gxwebsoft/booking/controller/MatchController.java
index abddfd2..54ff58f 100644
--- a/src/main/java/com/gxwebsoft/booking/controller/MatchController.java
+++ b/src/main/java/com/gxwebsoft/booking/controller/MatchController.java
@@ -45,7 +45,7 @@ public class MatchController extends BaseController {
return success(matchService.listRel(param));
}
- @PreAuthorize("hasAuthority('booking:match:list')")
+
@ApiOperation("根据id查询比赛信息表")
@GetMapping("/{id}")
public ApiResult get(@PathVariable("id") Integer id) {
diff --git a/src/main/java/com/gxwebsoft/booking/controller/MatchOrderController.java b/src/main/java/com/gxwebsoft/booking/controller/MatchOrderController.java
index 7790b81..a586980 100644
--- a/src/main/java/com/gxwebsoft/booking/controller/MatchOrderController.java
+++ b/src/main/java/com/gxwebsoft/booking/controller/MatchOrderController.java
@@ -1,5 +1,6 @@
package com.gxwebsoft.booking.controller;
+import com.gxwebsoft.common.core.exception.BusinessException;
import com.gxwebsoft.common.core.web.BaseController;
import com.gxwebsoft.booking.service.MatchOrderService;
import com.gxwebsoft.booking.entity.MatchOrder;
@@ -88,6 +89,20 @@ public class MatchOrderController extends BaseController {
@ApiOperation("批量添加比赛报名记录表")
@PostMapping("/batch")
public ApiResult> saveBatch(@RequestBody List list) {
+ for(MatchOrder item : list){
+ if(item.getName() == null){
+ return fail("姓名不能为空");
+ }
+ if(item.getPhone() == null){
+ return fail("电话号码不能为空");
+ }
+ if(item.getIdCardNo() == null){
+ return fail("身份证号不能为空");
+ }
+ }
+ list.forEach(d->{
+ d.setUserId(getLoginUserId());
+ });
if (matchOrderService.saveBatch(list)) {
return success("添加成功");
}
diff --git a/src/main/java/com/gxwebsoft/booking/controller/UserInvoiceController.java b/src/main/java/com/gxwebsoft/booking/controller/UserInvoiceController.java
index 9e3f919..27f5832 100644
--- a/src/main/java/com/gxwebsoft/booking/controller/UserInvoiceController.java
+++ b/src/main/java/com/gxwebsoft/booking/controller/UserInvoiceController.java
@@ -1,5 +1,12 @@
package com.gxwebsoft.booking.controller;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.StrUtil;
+import com.gxwebsoft.booking.entity.NuoNuo;
+import com.gxwebsoft.booking.entity.NuoNuoGoods;
+import com.gxwebsoft.booking.entity.NuoNuoOrder;
+import com.gxwebsoft.common.core.utils.JSONUtil;
import com.gxwebsoft.common.core.web.BaseController;
import com.gxwebsoft.booking.service.UserInvoiceService;
import com.gxwebsoft.booking.entity.UserInvoice;
@@ -12,11 +19,14 @@ import com.gxwebsoft.common.core.annotation.OperationLog;
import com.gxwebsoft.common.system.entity.User;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
+import nuonuo.open.sdk.NNOpenSDK;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
+import java.util.HashMap;
import java.util.List;
+import java.util.UUID;
/**
* 发票控制器
@@ -112,4 +122,51 @@ public class UserInvoiceController extends BaseController {
return fail("删除失败");
}
+ @ApiOperation("开具发票")
+ @GetMapping("/doInvoice/{id}")
+ public ApiResult> doInvoice(@PathVariable("id") Integer id) {
+ final UserInvoice userInvoice = userInvoiceService.getByIdRel(id);
+ // 开票接口
+ NNOpenSDK sdk = NNOpenSDK.getIntance();
+ String taxnum = "339901999999142";//ISV下授权商户税号,自用型应用置""即可
+ String appKey = "SD56531018";
+ String appSecret = "SD3C429B318C485E";
+ String method = "nuonuo.OpeMplatform.requestBillingNew";//API方法名
+ String token = NNOpenSDK.getIntance().getMerchantToken("SD56531018","SD3C429B318C485E"); //访问令牌
+ final NuoNuo nuoNuo = new NuoNuo();
+ final NuoNuoOrder order = new NuoNuoOrder();
+ order.setBuyerName(userInvoice.getName());
+ order.setSalerTaxNum("339901999999142");
+ order.setSalerTel("339901999999142");
+ order.setOrderNo(Long.toString(IdUtil.getSnowflakeNextId()));
+ order.setInvoiceDate(DateUtil.now());
+ order.setClerk("张三");
+ order.setBuyerPhone(userInvoice.getPhone());
+ order.setInvoiceType("1");
+ final NuoNuoGoods goods = new NuoNuoGoods();
+ goods.setGoodsName(userInvoice.getComments());
+ goods.setWithTaxFlag("0");
+ goods.setDField1("综合馆羽毛球馆 2024-05-16 (星期四) 18:00 - 20:00");
+ goods.setDField2("无");
+ goods.setDField3("无");
+ goods.setDField4("无");
+ goods.setDField5("无");
+ goods.setTax("0.12");
+ goods.setTaxRate("0.13");
+ goods.setTaxExcludedAmount("0.88");
+ goods.setTaxIncludedAmount("1");
+ order.setInvoiceDetail(goods);
+ nuoNuo.setOrder(order);
+
+ String content = JSONUtil.toJSONString(nuoNuo);//API私有请求参数
+ String url = "https://sandbox.nuonuocs.cn/open/v1/services"; //SDK请求地址
+ String senid = UUID.randomUUID().toString(); // 唯一标识,由企业自己生成32位随机码
+ String json = sdk.sendPostSyncRequest(url, senid, appKey, appSecret, token, taxnum, method, content); // 请求API
+ System.out.println("json = " + json);
+ if (StrUtil.isNotBlank(json)) {
+ return success("发票开具成功",json);
+ }
+ return fail("发票开具失败");
+ }
+
}
diff --git a/src/main/java/com/gxwebsoft/booking/entity/MatchOrder.java b/src/main/java/com/gxwebsoft/booking/entity/MatchOrder.java
index 907440f..d4e6fcc 100644
--- a/src/main/java/com/gxwebsoft/booking/entity/MatchOrder.java
+++ b/src/main/java/com/gxwebsoft/booking/entity/MatchOrder.java
@@ -38,7 +38,7 @@ public class MatchOrder implements Serializable {
private String address;
@ApiModelProperty(value = "姓名")
- private Integer name;
+ private String name;
@ApiModelProperty(value = "性别")
private Integer sex;
diff --git a/src/main/java/com/gxwebsoft/booking/entity/NuoNuo.java b/src/main/java/com/gxwebsoft/booking/entity/NuoNuo.java
new file mode 100644
index 0000000..5851889
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/booking/entity/NuoNuo.java
@@ -0,0 +1,28 @@
+package com.gxwebsoft.booking.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 发票
+ *
+ * @author 科技小王子
+ * @since 2024-05-25 17:20:15
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value = "NuoNuo开票对象", description = "开票对象")
+public class NuoNuo implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "订单信息")
+ @TableField(exist = false)
+ private NuoNuoOrder order;
+}
diff --git a/src/main/java/com/gxwebsoft/booking/entity/NuoNuoGoods.java b/src/main/java/com/gxwebsoft/booking/entity/NuoNuoGoods.java
new file mode 100644
index 0000000..f1c4542
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/booking/entity/NuoNuoGoods.java
@@ -0,0 +1,67 @@
+package com.gxwebsoft.booking.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+/**
+ * 发票
+ *
+ * @author 科技小王子
+ * @since 2024-05-25 17:20:15
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value = "NuoNuo开票对象", description = "开票对象")
+public class NuoNuoGoods implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "商品名称")
+ @TableField(exist = false)
+ private String goodsName;
+
+ @ApiModelProperty(value = "单价含税标志:0:不含税,1:含税")
+ @TableField(exist = false)
+ private String withTaxFlag;
+
+ @ApiModelProperty(value = "税额")
+ @TableField(exist = false)
+ private String tax;
+
+ @ApiModelProperty(value = "税率,注:1、纸票清单红票存在为null的情况;2、二手车发票税率为null或者0")
+ @TableField(exist = false)
+ private String taxRate;
+
+ @ApiModelProperty(value = "不含税金额")
+ @TableField(exist = false)
+ private String taxExcludedAmount;
+
+ @ApiModelProperty(value = "含税金额")
+ @TableField(exist = false)
+ private String taxIncludedAmount;
+
+ @ApiModelProperty(value = "业务方明细自定义字段1,本应用只作保存")
+ @TableField(exist = false)
+ private String dField1;
+
+ @ApiModelProperty(value = "业务方明细自定义字段1,本应用只作保存")
+ @TableField(exist = false)
+ private String dField2;
+
+ @ApiModelProperty(value = "业务方明细自定义字段1,本应用只作保存")
+ @TableField(exist = false)
+ private String dField3;
+
+ @ApiModelProperty(value = "业务方明细自定义字段1,本应用只作保存")
+ @TableField(exist = false)
+ private String dField4;
+
+ @ApiModelProperty(value = "业务方明细自定义字段1,本应用只作保存")
+ @TableField(exist = false)
+ private String dField5;
+
+}
diff --git a/src/main/java/com/gxwebsoft/booking/entity/NuoNuoOrder.java b/src/main/java/com/gxwebsoft/booking/entity/NuoNuoOrder.java
new file mode 100644
index 0000000..83002d0
--- /dev/null
+++ b/src/main/java/com/gxwebsoft/booking/entity/NuoNuoOrder.java
@@ -0,0 +1,80 @@
+package com.gxwebsoft.booking.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * 发票
+ *
+ * @author 科技小王子
+ * @since 2024-05-25 17:20:15
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value = "NuoNuo开票对象", description = "开票对象")
+@TableName("booking_user_invoice")
+public class NuoNuoOrder implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "购方名称")
+ @TableField(exist = false)
+ private String buyerName;
+
+ @ApiModelProperty(value = "购方税号")
+ @TableField(exist = false)
+ private String buyerTaxNum;
+
+ @ApiModelProperty(value = "销方税号号(使用沙箱环境请求时消息体参数salerTaxNum和消息头参数userTax填写339902999999789113)")
+ @TableField(exist = false)
+ private String salerTaxNum;
+
+ @ApiModelProperty(value = "销方电话")
+ @TableField(exist = false)
+ private String salerTel;
+
+ @ApiModelProperty(value = "销方地址")
+ @TableField(exist = false)
+ private String salerAddress;
+
+ @ApiModelProperty(value = "订单编号")
+ @TableField(exist = false)
+ private String orderNo;
+
+ @ApiModelProperty(value = "订单时间")
+ @TableField(exist = false)
+ private String invoiceDate;
+
+ @ApiModelProperty(value = "开票员")
+ @TableField(exist = false)
+ private String clerk;
+
+ @ApiModelProperty(value = "购方手机号")
+ @TableField(exist = false)
+ private String buyerPhone;
+
+ @ApiModelProperty(value = "推送邮箱")
+ @TableField(exist = false)
+ private String email;
+
+ @ApiModelProperty(value = "开票类型:1:蓝票;2:红票 (数电票冲红请对接数电快捷冲红接口)")
+ @TableField(exist = false)
+ private String invoiceType;
+
+ @ApiModelProperty(value = "开票明细")
+ @TableField(exist = false)
+ private NuoNuoGoods invoiceDetail;
+
+
+ @ApiModelProperty(value = "完整字段名invoiceTractorAndCombineHarvester,开具拖拉机和联合收割机特定要素的数电票才需要传specificFactor =13)")
+ @TableField(exist = false)
+ private String invoiceTractorAndCombineH;
+
+}
diff --git a/src/main/java/com/gxwebsoft/booking/mapper/xml/MatchOrderMapper.xml b/src/main/java/com/gxwebsoft/booking/mapper/xml/MatchOrderMapper.xml
index a784b80..2203c2b 100644
--- a/src/main/java/com/gxwebsoft/booking/mapper/xml/MatchOrderMapper.xml
+++ b/src/main/java/com/gxwebsoft/booking/mapper/xml/MatchOrderMapper.xml
@@ -21,7 +21,7 @@
AND a.address LIKE CONCAT('%', #{param.address}, '%')
- AND a.name = #{param.name}
+ AND a.name LIKE CONCAT('%', #{param.name}, '%')
AND a.sex = #{param.sex}
diff --git a/src/main/java/com/gxwebsoft/booking/param/MatchOrderParam.java b/src/main/java/com/gxwebsoft/booking/param/MatchOrderParam.java
index e85b13c..ba5c5e3 100644
--- a/src/main/java/com/gxwebsoft/booking/param/MatchOrderParam.java
+++ b/src/main/java/com/gxwebsoft/booking/param/MatchOrderParam.java
@@ -39,8 +39,7 @@ public class MatchOrderParam extends BaseParam {
private String address;
@ApiModelProperty(value = "姓名")
- @QueryField(type = QueryType.EQ)
- private Integer name;
+ private String name;
@ApiModelProperty(value = "性别")
@QueryField(type = QueryType.EQ)
diff --git a/src/main/java/com/gxwebsoft/cms/controller/WebsiteController.java b/src/main/java/com/gxwebsoft/cms/controller/WebsiteController.java
index 642f627..74bf3ae 100644
--- a/src/main/java/com/gxwebsoft/cms/controller/WebsiteController.java
+++ b/src/main/java/com/gxwebsoft/cms/controller/WebsiteController.java
@@ -93,6 +93,10 @@ public class WebsiteController extends BaseController {
// redisUtil.set("Domain:xn--15qx69a6lbn8t0tlmve.com",10157);
// redisUtil.set("Domain:oa.gxwebsoft.com",5);
// redisUtil.set("Domain:gxwebsoft.com",5);
+
+ if(tenantId.equals(0)){
+ return fail("租户ID不存在",null);
+ }
// 从缓存读取信息
if(StrUtil.isNotBlank(siteInfo)){
return success(JSONObject.parseObject(siteInfo,Website.class));
diff --git a/src/main/java/com/gxwebsoft/common/core/config/MybatisPlusConfig.java b/src/main/java/com/gxwebsoft/common/core/config/MybatisPlusConfig.java
index 1136b48..f01b1a2 100644
--- a/src/main/java/com/gxwebsoft/common/core/config/MybatisPlusConfig.java
+++ b/src/main/java/com/gxwebsoft/common/core/config/MybatisPlusConfig.java
@@ -65,7 +65,8 @@ public class MybatisPlusConfig {
"sys_dictionary_data",
"apps_test_data",
"shop_order",
- "shop_order_info"
+ "shop_order_info",
+ "booking_user_invoice"
).contains(tableName);
}
};
diff --git a/src/main/java/com/gxwebsoft/common/system/controller/UserController.java b/src/main/java/com/gxwebsoft/common/system/controller/UserController.java
index 264fcd6..8bd16d5 100644
--- a/src/main/java/com/gxwebsoft/common/system/controller/UserController.java
+++ b/src/main/java/com/gxwebsoft/common/system/controller/UserController.java
@@ -9,10 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.gxwebsoft.common.core.annotation.OperationLog;
import com.gxwebsoft.common.core.utils.CommonUtil;
import com.gxwebsoft.common.core.web.*;
-import com.gxwebsoft.common.system.entity.DictionaryData;
-import com.gxwebsoft.common.system.entity.Organization;
-import com.gxwebsoft.common.system.entity.Role;
-import com.gxwebsoft.common.system.entity.User;
+import com.gxwebsoft.common.system.entity.*;
import com.gxwebsoft.common.system.param.UserImportParam;
import com.gxwebsoft.common.system.param.UserParam;
import com.gxwebsoft.common.system.service.DictionaryDataService;
@@ -88,6 +85,16 @@ public class UserController extends BaseController {
return fail("添加失败");
}
+ @PreAuthorize("hasAuthority('sys:user:save')")
+ @ApiOperation("批量添加用户")
+ @PostMapping("/batch")
+ public ApiResult> saveBatch(@RequestBody List userList) {
+ if (userService.saveBatch(userList)) {
+ return success("添加成功");
+ }
+ return fail("添加失败");
+ }
+
@PreAuthorize("hasAuthority('sys:user:update')")
@ApiOperation("修改用户")
@PutMapping()
diff --git a/src/main/java/com/gxwebsoft/common/system/mapper/xml/UserMapper.xml b/src/main/java/com/gxwebsoft/common/system/mapper/xml/UserMapper.xml
index 4c23016..138b7b6 100644
--- a/src/main/java/com/gxwebsoft/common/system/mapper/xml/UserMapper.xml
+++ b/src/main/java/com/gxwebsoft/common/system/mapper/xml/UserMapper.xml
@@ -110,6 +110,12 @@
#{item}
+
+ AND a.phones IN
+
+ #{item}
+
+
AND a.province LIKE CONCAT('%', #{param.province}, '%')
diff --git a/src/main/java/com/gxwebsoft/common/system/param/UserParam.java b/src/main/java/com/gxwebsoft/common/system/param/UserParam.java
index d4de53b..3937797 100644
--- a/src/main/java/com/gxwebsoft/common/system/param/UserParam.java
+++ b/src/main/java/com/gxwebsoft/common/system/param/UserParam.java
@@ -190,6 +190,10 @@ public class UserParam extends BaseParam {
@TableField(exist = false)
private Set userIds;
+ @ApiModelProperty("用户手机号码集合")
+ @TableField(exist = false)
+ private Set phones;
+
@ApiModelProperty("是否查询用户详细资料表")
@TableField(exist = false)
private Boolean showProfile;
diff --git a/src/main/java/com/gxwebsoft/shop/entity/Users.java b/src/main/java/com/gxwebsoft/shop/entity/Users.java
index 17f5459..aba9bcc 100644
--- a/src/main/java/com/gxwebsoft/shop/entity/Users.java
+++ b/src/main/java/com/gxwebsoft/shop/entity/Users.java
@@ -27,7 +27,7 @@ import lombok.EqualsAndHashCode;
public class Users implements Serializable {
private static final long serialVersionUID = 1L;
- @TableId(value = "user_id", type = IdType.AUTO)
+ @TableId(value = "uid", type = IdType.AUTO)
private Integer uid;
@ApiModelProperty(value = "用户唯一小程序id")