he2802 2 年之前
父节点
当前提交
9c3dfb856c
共有 16 个文件被更改,包括 870 次插入1 次删除
  1. 74 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/common/CommonController.java
  2. 101 0
      zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/sdk/TopNuoMplatformLogController.java
  3. 1 1
      zhongzheng-admin/src/main/resources/application-dev.yml
  4. 5 0
      zhongzheng-common/pom.xml
  5. 1 0
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/config/SecurityConfig.java
  6. 59 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/bo/TopNuoMplatformLogAddBo.java
  7. 69 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/bo/TopNuoMplatformLogEditBo.java
  8. 69 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/bo/TopNuoMplatformLogQueryBo.java
  9. 56 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/domain/TopNuoMplatformLog.java
  10. 14 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/mapper/TopNuoMplatformLogMapper.java
  11. 54 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/service/ITopNuoMplatformLogService.java
  12. 22 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/service/NuonuoService.java
  13. 99 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/service/impl/NuonuoServiceImpl.java
  14. 155 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/service/impl/TopNuoMplatformLogServiceImpl.java
  15. 67 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/vo/TopNuoMplatformLogVo.java
  16. 24 0
      zhongzheng-system/src/main/resources/mapper/modules/sdk/TopNuoMplatformLogMapper.xml

+ 74 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/common/CommonController.java

@@ -0,0 +1,74 @@
+package com.zhongzheng.controller.common;
+
+import cn.hutool.core.lang.Validator;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.common.core.redis.RedisCache;
+import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.common.utils.ToolsUtils;
+import com.zhongzheng.framework.web.service.WxLoginService;
+import com.zhongzheng.modules.activity.vo.ActivityGoodsPriceVo;
+import com.zhongzheng.modules.base.bo.ConfigQueryBo;
+import com.zhongzheng.modules.course.bo.CourseQueryBo;
+import com.zhongzheng.modules.course.bo.CourseTopicGoodsQueryBo;
+import com.zhongzheng.modules.course.service.ICourseService;
+import com.zhongzheng.modules.course.service.ICourseTopicService;
+import com.zhongzheng.modules.course.vo.CourseTopicGoodsVo;
+import com.zhongzheng.modules.course.vo.CourseTopicVo;
+import com.zhongzheng.modules.course.vo.CourseUserVo;
+import com.zhongzheng.modules.data.domain.DataWxTpClick;
+import com.zhongzheng.modules.data.service.IDataWxTpClickService;
+import com.zhongzheng.modules.distribution.bo.DistributionActivityGoodsQueryBo;
+import com.zhongzheng.modules.distribution.service.IDistributionActivityGoodsService;
+import com.zhongzheng.modules.distribution.service.IDistributionSellerService;
+import com.zhongzheng.modules.distribution.vo.DistributionSellerVo;
+import com.zhongzheng.modules.goods.bo.DistributionGoodsBo;
+import com.zhongzheng.modules.goods.service.IGoodsSpecTemplateService;
+import com.zhongzheng.modules.goods.vo.GoodsSpecTemplateVo;
+import com.zhongzheng.modules.goods.vo.GoodsUserVo;
+import com.zhongzheng.modules.goods.vo.GoodsVo;
+import com.zhongzheng.modules.order.domain.Printer;
+import com.zhongzheng.modules.sdk.service.NuonuoService;
+import com.zhongzheng.modules.system.bo.SysTenantQueryBo;
+import com.zhongzheng.modules.system.service.ISysConfigService;
+import com.zhongzheng.modules.system.service.ISysTenantService;
+import com.zhongzheng.modules.wx.bo.WxInfoBo;
+import com.zhongzheng.modules.wx.bo.WxInfoQuery;
+import com.zhongzheng.modules.wx.bo.WxServerBody;
+import com.zhongzheng.modules.wx.domain.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.text.ParseException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 课程Controller
+ *
+ * @author hjl
+ * @date 2021-10-09
+ */
+@Api(value = "游客访问接口", tags = {"游客访问接口"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/sys/common/")
+public class CommonController extends BaseController {
+
+    private final NuonuoService nuonuoService;
+
+
+    @ApiOperation("获取nuonuo信息")
+    @GetMapping("/nuonuo/token")
+    public AjaxResult<Void> getNuo() {
+        return AjaxResult.success(nuonuoService.getAccessToken());
+    }
+}

+ 101 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/sdk/TopNuoMplatformLogController.java

@@ -0,0 +1,101 @@
+package com.zhongzheng.controller.sdk;
+
+import java.util.List;
+import java.util.Arrays;
+import java.util.Map;
+
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.modules.sdk.bo.TopNuoMplatformLogAddBo;
+import com.zhongzheng.modules.sdk.bo.TopNuoMplatformLogEditBo;
+import com.zhongzheng.modules.sdk.bo.TopNuoMplatformLogQueryBo;
+import com.zhongzheng.modules.sdk.service.ITopNuoMplatformLogService;
+import com.zhongzheng.modules.sdk.vo.TopNuoMplatformLogVo;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.enums.BusinessType;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+/**
+ * 诺税通开单记录Controller
+ *
+ * @author ruoyi
+ * @date 2023-04-18
+ */
+@Api(value = "诺税通开单记录控制器", tags = {"诺税通开单记录管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/openMplatform/log")
+public class TopNuoMplatformLogController extends BaseController {
+
+    private final ITopNuoMplatformLogService iTopNuoMplatformLogService;
+
+    /**
+     * 查询诺税通开单记录列表
+     */
+    @ApiOperation("查询诺税通开单记录列表")
+    @PreAuthorize("@ss.hasPermi('system:log:list')")
+    @GetMapping("/list")
+    public TableDataInfo<TopNuoMplatformLogVo> list(TopNuoMplatformLogQueryBo bo) {
+        startPage();
+        List<TopNuoMplatformLogVo> list = iTopNuoMplatformLogService.queryList(bo);
+        return getDataTable(list);
+    }
+
+
+
+    /**
+     * 获取诺税通开单记录详细信息
+     */
+    @ApiOperation("获取诺税通开单记录详细信息")
+    @PreAuthorize("@ss.hasPermi('system:log:query')")
+    @GetMapping("/{id}")
+    public AjaxResult<TopNuoMplatformLogVo> getInfo(@PathVariable("id" ) Long id) {
+        return AjaxResult.success(iTopNuoMplatformLogService.queryById(id));
+    }
+
+    /**
+     * 新增诺税通开单记录
+     */
+    @ApiOperation("新增诺税通开单记录")
+    @PreAuthorize("@ss.hasPermi('system:log:add')")
+    @Log(title = "诺税通开单记录", businessType = BusinessType.INSERT)
+    @PostMapping()
+    public AjaxResult<Map<String, String>> add(@RequestBody TopNuoMplatformLogAddBo bo) {
+        return AjaxResult.success(iTopNuoMplatformLogService.insertByAddBo(bo));
+    }
+
+    /**
+     * 修改诺税通开单记录
+     */
+    @ApiOperation("修改诺税通开单记录")
+    @PreAuthorize("@ss.hasPermi('system:log:edit')")
+    @Log(title = "诺税通开单记录", businessType = BusinessType.UPDATE)
+    @PutMapping()
+    public AjaxResult<Void> edit(@RequestBody TopNuoMplatformLogEditBo bo) {
+        return toAjax(iTopNuoMplatformLogService.updateByEditBo(bo) ? 1 : 0);
+    }
+
+    /**
+     * 删除诺税通开单记录
+     */
+    @ApiOperation("删除诺税通开单记录")
+    @PreAuthorize("@ss.hasPermi('system:log:remove')")
+    @Log(title = "诺税通开单记录" , businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    public AjaxResult<Void> remove(@PathVariable Long[] ids) {
+        return toAjax(iTopNuoMplatformLogService.deleteWithValidByIds(Arrays.asList(ids), true) ? 1 : 0);
+    }
+}

+ 1 - 1
zhongzheng-admin/src/main/resources/application-dev.yml

@@ -10,7 +10,7 @@ spring:
             connection-init-sql: set names utf8mb4
         #动态数据源配置
         dynamic:
-            primary: slave #设置默认的数据源或者数据源组,默认值即为master
+            primary: master #设置默认的数据源或者数据源组,默认值即为master
             strict: false #设置严格模式,默认false不启动. 启动后在未匹配到指定数据源时候会抛出异常,不启动则使用默认数据源.
             datasource:
                 #数据源

+ 5 - 0
zhongzheng-common/pom.xml

@@ -69,6 +69,11 @@
             <version>1.4.17</version>
         </dependency>
 
+        <dependency>
+            <groupId>com.nuonuo</groupId>
+            <artifactId>open-sdk</artifactId>
+            <version>1.0.5.2</version>
+        </dependency>
         <!-- 保利威 -->
         <dependency>
             <groupId>net.polyv</groupId>

+ 1 - 0
zhongzheng-framework/src/main/java/com/zhongzheng/framework/config/SecurityConfig.java

@@ -129,6 +129,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
                         "/**/*.js"
                 ).permitAll()
                 .antMatchers("/app/common/**").anonymous() //小程序非验证接口
+                .antMatchers("/sys/common/**").anonymous()
                 .antMatchers("/refreshToken/**").anonymous()
                 .antMatchers("/v1/test/**").anonymous()
                 .antMatchers("/profile/**").anonymous()

+ 59 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/bo/TopNuoMplatformLogAddBo.java

@@ -0,0 +1,59 @@
+package com.zhongzheng.modules.sdk.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import java.util.Date;
+
+
+
+/**
+ * 诺税通开单记录添加对象 top_nuo_mplatform_log
+ *
+ * @author ruoyi
+ * @date 2023-04-18
+ */
+@Data
+@ApiModel("诺税通开单记录添加对象")
+public class TopNuoMplatformLogAddBo {
+
+    /** 订单号(每个企业唯一) */
+    @ApiModelProperty("订单号(每个企业唯一)")
+    private String orderNo;
+    /** 请求参数 */
+    @ApiModelProperty("请求参数")
+    private String content;
+    /** 请求结果 */
+    @ApiModelProperty("请求结果")
+    private String result;
+    /** 诺税通流水号 */
+    @ApiModelProperty("诺税通流水号")
+    private String invoiceSerialNum;
+    /** 诺税通请求结果 */
+    @ApiModelProperty("诺税通请求结果")
+    private String resultCode;
+    /** 创建时间 */
+    @ApiModelProperty("创建时间")
+    private Long createTime;
+    /** 更新时间 */
+    @ApiModelProperty("更新时间")
+    private Long updateTime;
+    /** 1开票正常 0关闭  */
+    @ApiModelProperty("1开票正常 0关闭 ")
+    private Integer status;
+    /** 来源平台 1新系统 2旧系统 */
+    @ApiModelProperty("来源平台 1新系统 2旧系统")
+    private Integer fromPlat;
+    /** 发票ofd地址(公共服务平台签章时返回) */
+    @ApiModelProperty("发票ofd地址(公共服务平台签章时返回)")
+    private String ofdUrl;
+    /** 发票pdf地址(若同时返回了ofdUrl与pdfUrl,则pdf文件不能做为原始凭证,请用ofd文件做为原始凭证) */
+    @ApiModelProperty("发票pdf地址(若同时返回了ofdUrl与pdfUrl,则pdf文件不能做为原始凭证,请用ofd文件做为原始凭证)")
+    private String pdfUrl;
+    /** 失败原因 */
+    @ApiModelProperty("失败原因")
+    private String failCause;
+    @ApiModelProperty("商户ID")
+    private String tenantId;
+}

+ 69 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/bo/TopNuoMplatformLogEditBo.java

@@ -0,0 +1,69 @@
+package com.zhongzheng.modules.sdk.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import java.util.Date;
+
+
+/**
+ * 诺税通开单记录编辑对象 top_nuo_mplatform_log
+ *
+ * @author ruoyi
+ * @date 2023-04-18
+ */
+@Data
+@ApiModel("诺税通开单记录编辑对象")
+public class TopNuoMplatformLogEditBo {
+
+    /** $column.columnComment */
+    @ApiModelProperty("$column.columnComment")
+    private Long id;
+
+    /** 订单号(每个企业唯一) */
+    @ApiModelProperty("订单号(每个企业唯一)")
+    private String orderNo;
+
+    /** 请求参数 */
+    @ApiModelProperty("请求参数")
+    private String content;
+
+    /** 请求结果 */
+    @ApiModelProperty("请求结果")
+    private String result;
+
+    /** 诺税通流水号 */
+    @ApiModelProperty("诺税通流水号")
+    private String invoiceSerialNum;
+
+    /** 诺税通请求结果 */
+    @ApiModelProperty("诺税通请求结果")
+    private String resultCode;
+
+    /** 更新时间 */
+    @ApiModelProperty("更新时间")
+    private Long updateTime;
+
+    /** 1开票正常 0关闭  */
+    @ApiModelProperty("1开票正常 0关闭 ")
+    private Integer status;
+
+
+    /** 来源平台 1新系统 2旧系统 */
+    @ApiModelProperty("来源平台 1新系统 2旧系统")
+    private Integer fromPlat;
+
+    /** 发票ofd地址(公共服务平台签章时返回) */
+    @ApiModelProperty("发票ofd地址(公共服务平台签章时返回)")
+    private String ofdUrl;
+
+    /** 发票pdf地址(若同时返回了ofdUrl与pdfUrl,则pdf文件不能做为原始凭证,请用ofd文件做为原始凭证) */
+    @ApiModelProperty("发票pdf地址(若同时返回了ofdUrl与pdfUrl,则pdf文件不能做为原始凭证,请用ofd文件做为原始凭证)")
+    private String pdfUrl;
+
+    /** 失败原因 */
+    @ApiModelProperty("失败原因")
+    private String failCause;
+
+}

+ 69 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/bo/TopNuoMplatformLogQueryBo.java

@@ -0,0 +1,69 @@
+package com.zhongzheng.modules.sdk.bo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+import java.util.Map;
+import java.util.HashMap;
+
+import com.zhongzheng.common.core.domain.BaseEntity;
+
+/**
+ * 诺税通开单记录分页查询对象 top_nuo_mplatform_log
+ *
+ * @author ruoyi
+ * @date 2023-04-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ApiModel("诺税通开单记录分页查询对象")
+public class TopNuoMplatformLogQueryBo extends BaseEntity {
+
+	/** 分页大小 */
+	@ApiModelProperty("分页大小")
+	private Integer pageSize;
+	/** 当前页数 */
+	@ApiModelProperty("当前页数")
+	private Integer pageNum;
+	/** 排序列 */
+	@ApiModelProperty("排序列")
+	private String orderByColumn;
+	/** 排序的方向desc或者asc */
+	@ApiModelProperty(value = "排序的方向", example = "asc,desc")
+	private String isAsc;
+
+
+	/** 订单号(每个企业唯一) */
+	@ApiModelProperty("订单号(每个企业唯一)")
+	private String orderNo;
+	/** 请求参数 */
+	@ApiModelProperty("请求参数")
+	private String content;
+	/** 请求结果 */
+	@ApiModelProperty("请求结果")
+	private String result;
+	/** 诺税通流水号 */
+	@ApiModelProperty("诺税通流水号")
+	private String invoiceSerialNum;
+	/** 诺税通请求结果 */
+	@ApiModelProperty("诺税通请求结果")
+	private String resultCode;
+	/** 1开票正常 0关闭  */
+	@ApiModelProperty("1开票正常 0关闭 ")
+	private Integer status;
+	/** 来源平台 1新系统 2旧系统 */
+	@ApiModelProperty("来源平台 1新系统 2旧系统")
+	private Integer fromPlat;
+	/** 发票ofd地址(公共服务平台签章时返回) */
+	@ApiModelProperty("发票ofd地址(公共服务平台签章时返回)")
+	private String ofdUrl;
+	/** 发票pdf地址(若同时返回了ofdUrl与pdfUrl,则pdf文件不能做为原始凭证,请用ofd文件做为原始凭证) */
+	@ApiModelProperty("发票pdf地址(若同时返回了ofdUrl与pdfUrl,则pdf文件不能做为原始凭证,请用ofd文件做为原始凭证)")
+	private String pdfUrl;
+	/** 失败原因 */
+	@ApiModelProperty("失败原因")
+	private String failCause;
+}

+ 56 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/domain/TopNuoMplatformLog.java

@@ -0,0 +1,56 @@
+package com.zhongzheng.modules.sdk.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+import java.io.Serializable;
+import java.util.Date;
+import java.math.BigDecimal;
+import com.zhongzheng.common.annotation.Excel;
+
+/**
+ * 诺税通开单记录对象 top_nuo_mplatform_log
+ *
+ * @author ruoyi
+ * @date 2023-04-18
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("top_nuo_mplatform_log")
+public class TopNuoMplatformLog implements Serializable {
+
+private static final long serialVersionUID=1L;
+
+    /** $column.columnComment */
+    @TableId(value = "id")
+    private Long id;
+    /** 订单号(每个企业唯一) */
+    private String orderNo;
+    /** 请求参数 */
+    private String content;
+    /** 请求结果 */
+    private String result;
+    /** 诺税通流水号 */
+    private String invoiceSerialNum;
+    /** 诺税通请求结果 */
+    private String resultCode;
+    /** 创建时间 */
+    @TableField(fill = FieldFill.INSERT)
+    private Long createTime;
+    /** 更新时间 */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Long updateTime;
+    /** 1开票正常 0关闭  */
+    private Integer status;
+    /** 来源平台 1新系统 2旧系统 */
+    private Integer fromPlat;
+    /** 发票ofd地址(公共服务平台签章时返回) */
+    private String ofdUrl;
+    /** 发票pdf地址(若同时返回了ofdUrl与pdfUrl,则pdf文件不能做为原始凭证,请用ofd文件做为原始凭证) */
+    private String pdfUrl;
+    /** 失败原因 */
+    private String failCause;
+    private String tenantId;
+}

+ 14 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/mapper/TopNuoMplatformLogMapper.java

@@ -0,0 +1,14 @@
+package com.zhongzheng.modules.sdk.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhongzheng.modules.sdk.domain.TopNuoMplatformLog;
+
+/**
+ * 诺税通开单记录Mapper接口
+ *
+ * @author ruoyi
+ * @date 2023-04-18
+ */
+public interface TopNuoMplatformLogMapper extends BaseMapper<TopNuoMplatformLog> {
+
+}

+ 54 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/service/ITopNuoMplatformLogService.java

@@ -0,0 +1,54 @@
+package com.zhongzheng.modules.sdk.service;
+
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhongzheng.modules.sdk.bo.TopNuoMplatformLogAddBo;
+import com.zhongzheng.modules.sdk.bo.TopNuoMplatformLogEditBo;
+import com.zhongzheng.modules.sdk.bo.TopNuoMplatformLogQueryBo;
+import com.zhongzheng.modules.sdk.domain.TopNuoMplatformLog;
+import com.zhongzheng.modules.sdk.vo.TopNuoMplatformLogVo;
+
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 诺税通开单记录Service接口
+ *
+ * @author ruoyi
+ * @date 2023-04-18
+ */
+public interface ITopNuoMplatformLogService extends IService<TopNuoMplatformLog> {
+	/**
+	 * 查询单个
+	 * @return
+	 */
+	TopNuoMplatformLogVo queryById(Long id);
+
+	/**
+	 * 查询列表
+	 */
+	List<TopNuoMplatformLogVo> queryList(TopNuoMplatformLogQueryBo bo);
+
+	/**
+	 * 根据新增业务对象插入诺税通开单记录
+	 * @param bo 诺税通开单记录新增业务对象
+	 * @return
+	 */
+	Map<String, String>  insertByAddBo(TopNuoMplatformLogAddBo bo);
+
+	/**
+	 * 根据编辑业务对象修改诺税通开单记录
+	 * @param bo 诺税通开单记录编辑业务对象
+	 * @return
+	 */
+	Boolean updateByEditBo(TopNuoMplatformLogEditBo bo);
+
+	/**
+	 * 校验并删除数据
+	 * @param ids 主键集合
+	 * @param isValid 是否校验,true-删除前校验,false-不校验
+	 * @return
+	 */
+	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}

+ 22 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/service/NuonuoService.java

@@ -0,0 +1,22 @@
+package com.zhongzheng.modules.sdk.service;
+
+
+
+import com.zhongzheng.modules.alioss.bo.OssRequest;
+import com.zhongzheng.modules.alioss.vo.FileBean;
+import com.zhongzheng.modules.alioss.vo.ResultBean;
+import com.zhongzheng.modules.grade.vo.ClassPeriodStudentExportVo;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.InputStream;
+import java.util.List;
+import java.util.Map;
+import java.util.zip.ZipOutputStream;
+
+public interface NuonuoService {
+    String getAccessToken();
+
+    String openMplatform(Map<String,String> params);
+
+    String queryInvoiceResult(List<String> snList);
+}

+ 99 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/service/impl/NuonuoServiceImpl.java

@@ -0,0 +1,99 @@
+package com.zhongzheng.modules.sdk.service.impl;
+
+import cn.hutool.core.lang.Validator;
+import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.aliyun.oss.OSSClient;
+import com.aliyun.oss.common.utils.BinaryUtil;
+import com.aliyun.oss.model.*;
+import com.zhongzheng.common.core.redis.RedisCache;
+import com.zhongzheng.common.exception.CustomException;
+import com.zhongzheng.modules.alioss.bo.OssCallbackParam;
+import com.zhongzheng.modules.alioss.bo.OssRequest;
+import com.zhongzheng.modules.alioss.service.OssService;
+import com.zhongzheng.modules.alioss.vo.FileBean;
+import com.zhongzheng.modules.alioss.vo.ResultBean;
+import com.zhongzheng.modules.grade.vo.ClassPeriodStudentExportVo;
+import com.zhongzheng.modules.sdk.service.NuonuoService;
+import com.zhongzheng.modules.user.service.IUserStudyRecordPhotoService;
+import nuonuo.open.sdk.NNOpenSDK;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+import sun.misc.BASE64Decoder;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.sql.rowset.serial.SerialBlob;
+import javax.sql.rowset.serial.SerialException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.sql.SQLException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.concurrent.TimeUnit;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+@Service
+public class NuonuoServiceImpl implements NuonuoService {
+    private static final Logger LOGGER = LoggerFactory.getLogger(NuonuoServiceImpl.class);
+
+    private String APPkey = "39149760";
+
+    private String APPSecret = "07168A248B2844E0";
+
+
+    @Autowired
+    private RedisCache redisCache;
+
+
+    @Override
+    public String getAccessToken() {
+        String key = "NuoNuoToken";
+        String token = redisCache.getCacheObjectNoTenant(key);
+        if (Validator.isEmpty(token)||token.equals("null")) {
+            String json = NNOpenSDK.getIntance().getMerchantToken(APPkey,APPSecret);
+            JSONObject jsonObject = (JSONObject) JSONObject.parse(json);
+            token = String.valueOf(jsonObject.get("access_token"));
+            if (token != null&&!token.equals("null")) {
+                redisCache.setCacheObject(key, token, 23 * 60, TimeUnit.MINUTES);//23个小时
+            }else{
+                throw new CustomException("nuonuoToekn获取失败");
+            }
+        }
+        return token;
+    }
+
+    @Override
+    public String openMplatform(Map<String, String> params) {
+        NNOpenSDK sdk = NNOpenSDK.getIntance();
+        String taxnum = ""; // 授权企业税号
+        String method = "nuonuo.OpeMplatform.requestBillingNew"; // API方法名
+        String token = getAccessToken(); // 访问令牌
+        String url = "https://sdk.nuonuo.com/open/v1/services"; // SDK请求地址
+        String content = params.get("content");
+        String senid = UUID.randomUUID().toString().replace("-", ""); // 唯一标识,32位随机码,无需修改,保持默认即可
+        String result = sdk.sendPostSyncRequest(url, senid, APPkey, APPSecret, token, taxnum, method, content);
+        System.out.println(result);
+        return result;
+    }
+
+    @Override
+    public String queryInvoiceResult(List<String> snList) {
+        NNOpenSDK sdk = NNOpenSDK.getIntance();
+        String taxnum = ""; // 授权企业税号
+        String method = "nuonuo.OpeMplatform.queryInvoiceResult"; // API方法名
+        String token = getAccessToken(); // 访问令牌
+        Map<String, Object> params = new HashMap<>();
+        params.put("serialNos",snList);
+        params.put("isOfferInvoiceDetail",1);
+        String content = JSONObject.toJSONString(params);
+        String url = "https://sdk.nuonuo.com/open/v1/services"; // SDK请求地址
+        String senid = UUID.randomUUID().toString().replace("-", ""); // 唯一标识,32位随机码,无需修改,保持默认即可
+        String result = sdk.sendPostSyncRequest(url, senid, APPkey, APPSecret, token, taxnum, method, content);
+        return result;
+    }
+}

+ 155 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/service/impl/TopNuoMplatformLogServiceImpl.java

@@ -0,0 +1,155 @@
+package com.zhongzheng.modules.sdk.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.lang.Validator;
+import cn.hutool.core.util.StrUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.zhongzheng.common.core.redis.RedisCache;
+import com.zhongzheng.common.exception.CustomException;
+import com.zhongzheng.common.utils.DateUtils;
+import com.zhongzheng.modules.grade.domain.ClassGradeUser;
+import com.zhongzheng.modules.sdk.bo.TopNuoMplatformLogAddBo;
+import com.zhongzheng.modules.sdk.bo.TopNuoMplatformLogEditBo;
+import com.zhongzheng.modules.sdk.bo.TopNuoMplatformLogQueryBo;
+import com.zhongzheng.modules.sdk.domain.TopNuoMplatformLog;
+import com.zhongzheng.modules.sdk.mapper.TopNuoMplatformLogMapper;
+import com.zhongzheng.modules.sdk.service.ITopNuoMplatformLogService;
+import com.zhongzheng.modules.sdk.service.NuonuoService;
+import com.zhongzheng.modules.sdk.vo.TopNuoMplatformLogVo;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.github.pagehelper.Page;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 诺税通开单记录Service业务层处理
+ *
+ * @author ruoyi
+ * @date 2023-04-18
+ */
+@Service
+public class TopNuoMplatformLogServiceImpl extends ServiceImpl<TopNuoMplatformLogMapper, TopNuoMplatformLog> implements ITopNuoMplatformLogService {
+
+    @Autowired
+    private NuonuoService nuonuoService;
+
+    @Override
+    public TopNuoMplatformLogVo queryById(Long id){
+        TopNuoMplatformLog db = this.baseMapper.selectById(id);
+        return BeanUtil.toBean(db, TopNuoMplatformLogVo.class);
+    }
+
+    @Override
+    public List<TopNuoMplatformLogVo> queryList(TopNuoMplatformLogQueryBo bo) {
+        LambdaQueryWrapper<TopNuoMplatformLog> lqw = Wrappers.lambdaQuery();
+        lqw.eq(StrUtil.isNotBlank(bo.getOrderNo()), TopNuoMplatformLog::getOrderNo, bo.getOrderNo());
+        lqw.eq(StrUtil.isNotBlank(bo.getContent()), TopNuoMplatformLog::getContent, bo.getContent());
+        lqw.eq(StrUtil.isNotBlank(bo.getResult()), TopNuoMplatformLog::getResult, bo.getResult());
+        lqw.eq(StrUtil.isNotBlank(bo.getInvoiceSerialNum()), TopNuoMplatformLog::getInvoiceSerialNum, bo.getInvoiceSerialNum());
+        lqw.eq(StrUtil.isNotBlank(bo.getResultCode()), TopNuoMplatformLog::getResultCode, bo.getResultCode());
+        lqw.eq(bo.getStatus() != null, TopNuoMplatformLog::getStatus, bo.getStatus());
+        lqw.eq(bo.getFromPlat() != null, TopNuoMplatformLog::getFromPlat, bo.getFromPlat());
+        lqw.eq(StrUtil.isNotBlank(bo.getOfdUrl()), TopNuoMplatformLog::getOfdUrl, bo.getOfdUrl());
+        lqw.eq(StrUtil.isNotBlank(bo.getPdfUrl()), TopNuoMplatformLog::getPdfUrl, bo.getPdfUrl());
+        lqw.eq(StrUtil.isNotBlank(bo.getFailCause()), TopNuoMplatformLog::getFailCause, bo.getFailCause());
+        return entity2Vo(this.list(lqw));
+    }
+
+    /**
+    * 实体类转化成视图对象
+    *
+    * @param collection 实体类集合
+    * @return
+    */
+    private List<TopNuoMplatformLogVo> entity2Vo(Collection<TopNuoMplatformLog> collection) {
+        List<TopNuoMplatformLogVo> voList = collection.stream()
+                .map(any -> BeanUtil.toBean(any, TopNuoMplatformLogVo.class))
+                .collect(Collectors.toList());
+        if (collection instanceof Page) {
+            Page<TopNuoMplatformLog> page = (Page<TopNuoMplatformLog>)collection;
+            Page<TopNuoMplatformLogVo> pageVo = new Page<>();
+            BeanUtil.copyProperties(page,pageVo);
+            pageVo.addAll(voList);
+            voList = pageVo;
+        }
+        return voList;
+    }
+
+    @Override
+    public Map<String, String>  insertByAddBo(TopNuoMplatformLogAddBo bo) {
+        if(Validator.isEmpty(bo.getOrderNo())||Validator.isEmpty(bo.getTenantId())||Validator.isEmpty(bo.getContent())){
+            throw new CustomException("参数缺少");
+        }
+        TopNuoMplatformLog mplatformLog = getOne(new LambdaQueryWrapper<TopNuoMplatformLog>()
+                .eq(TopNuoMplatformLog::getOrderNo,bo.getOrderNo()).eq(TopNuoMplatformLog::getTenantId,bo.getTenantId()
+                ).ne(TopNuoMplatformLog::getStatus,-1).last("limit 1"));
+        if(Validator.isNotEmpty(mplatformLog)){
+            throw new CustomException("该订单号已提交过");
+        }
+        TopNuoMplatformLog add = BeanUtil.toBean(bo, TopNuoMplatformLog.class);
+        validEntityBeforeSave(add);
+        add.setFromPlat(2);
+        add.setCreateTime(DateUtils.getNowTime());
+        add.setUpdateTime(DateUtils.getNowTime());
+        if(this.save(add)){
+            Long id = add.getId();
+            Map<String,String> params = new HashMap<>();
+            params.put("",bo.getContent());
+            String result = nuonuoService.openMplatform(params);
+            TopNuoMplatformLog update = new TopNuoMplatformLog();
+            update.setId(id);
+            update.setResult(result);
+;           JSONObject jsonObject = (JSONObject) JSONObject.parse(result);
+            String code = String.valueOf(jsonObject.get("code"));
+            String describe = String.valueOf(jsonObject.get("describe"));
+            update.setResultCode(code);
+            Map<String,String> rs = new HashMap<>();
+            if("E0000".equals(code)){
+                JSONObject resultObject = jsonObject.getJSONObject("result");
+                String invoiceSerialNum = String.valueOf(resultObject.get("invoiceSerialNum"));
+                update.setInvoiceSerialNum(invoiceSerialNum);
+                update.setStatus(1);
+                rs.put("invoiceSerialNum",invoiceSerialNum);
+            }else{
+                update.setStatus(-1);
+            }
+            update.setUpdateTime(DateUtils.getNowTime());
+            updateById(update);
+
+            rs.put("code",code);
+            rs.put("describe",describe);
+            return rs;
+        }
+        throw new CustomException("新增失败");
+    }
+
+    @Override
+    public Boolean updateByEditBo(TopNuoMplatformLogEditBo bo) {
+        TopNuoMplatformLog update = BeanUtil.toBean(bo, TopNuoMplatformLog.class);
+        validEntityBeforeSave(update);
+        update.setUpdateTime(DateUtils.getNowTime());
+        return this.updateById(update);
+    }
+
+    /**
+     * 保存前的数据校验
+     *
+     * @param entity 实体类数据
+     */
+    private void validEntityBeforeSave(TopNuoMplatformLog entity){
+        //TODO 做一些数据校验,如唯一约束
+    }
+
+    @Override
+    public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+        if(isValid){
+            //TODO 做一些业务上的校验,判断是否需要校验
+        }
+        return this.removeByIds(ids);
+    }
+}

+ 67 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/sdk/vo/TopNuoMplatformLogVo.java

@@ -0,0 +1,67 @@
+package com.zhongzheng.modules.sdk.vo;
+
+import com.zhongzheng.common.annotation.Excel;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+
+
+
+/**
+ * 诺税通开单记录视图对象 mall_package
+ *
+ * @author ruoyi
+ * @date 2023-04-18
+ */
+@Data
+@ApiModel("诺税通开单记录视图对象")
+public class TopNuoMplatformLogVo {
+	private static final long serialVersionUID = 1L;
+
+	/** $pkColumn.columnComment */
+	@ApiModelProperty("$pkColumn.columnComment")
+	private Long id;
+
+	/** 订单号(每个企业唯一) */
+	@Excel(name = "订单号" , readConverterExp = "每=个企业唯一")
+	@ApiModelProperty("订单号(每个企业唯一)")
+	private String orderNo;
+	/** 请求参数 */
+	@Excel(name = "请求参数")
+	@ApiModelProperty("请求参数")
+	private String content;
+	/** 请求结果 */
+	@Excel(name = "请求结果")
+	@ApiModelProperty("请求结果")
+	private String result;
+	/** 诺税通流水号 */
+	@Excel(name = "诺税通流水号")
+	@ApiModelProperty("诺税通流水号")
+	private String invoiceSerialNum;
+	/** 诺税通请求结果 */
+	@Excel(name = "诺税通请求结果")
+	@ApiModelProperty("诺税通请求结果")
+	private String resultCode;
+	/** 1开票正常 0关闭  */
+	@Excel(name = "1开票正常 0关闭 ")
+	@ApiModelProperty("1开票正常 0关闭 ")
+	private Integer status;
+	/** 来源平台 1新系统 2旧系统 */
+	@Excel(name = "来源平台 1新系统 2旧系统")
+	@ApiModelProperty("来源平台 1新系统 2旧系统")
+	private Integer fromPlat;
+	/** 发票ofd地址(公共服务平台签章时返回) */
+	@Excel(name = "发票ofd地址" , readConverterExp = "公=共服务平台签章时返回")
+	@ApiModelProperty("发票ofd地址(公共服务平台签章时返回)")
+	private String ofdUrl;
+	/** 发票pdf地址(若同时返回了ofdUrl与pdfUrl,则pdf文件不能做为原始凭证,请用ofd文件做为原始凭证) */
+	@Excel(name = "发票pdf地址" , readConverterExp = "若=同时返回了ofdUrl与pdfUrl,则pdf文件不能做为原始凭证,请用ofd文件做为原始凭证")
+	@ApiModelProperty("发票pdf地址(若同时返回了ofdUrl与pdfUrl,则pdf文件不能做为原始凭证,请用ofd文件做为原始凭证)")
+	private String pdfUrl;
+	/** 失败原因 */
+	@Excel(name = "失败原因")
+	@ApiModelProperty("失败原因")
+	private String failCause;
+}

+ 24 - 0
zhongzheng-system/src/main/resources/mapper/modules/sdk/TopNuoMplatformLogMapper.xml

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zhongzheng.modules.sdk.mapper.TopNuoMplatformLogMapper">
+
+    <resultMap type="com.zhongzheng.modules.sdk.domain.TopNuoMplatformLog" id="TopNuoMplatformLogResult">
+        <result property="id" column="id"/>
+        <result property="orderNo" column="order_no"/>
+        <result property="content" column="content"/>
+        <result property="result" column="result"/>
+        <result property="invoiceSerialNum" column="invoice_serial_num"/>
+        <result property="resultCode" column="result_code"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="status" column="status"/>
+        <result property="fromPlat" column="from_plat"/>
+        <result property="ofdUrl" column="ofd_url"/>
+        <result property="pdfUrl" column="pdf_url"/>
+        <result property="failCause" column="fail_cause"/>
+    </resultMap>
+
+
+</mapper>