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")