From a54b43c07d6645b34e47a9d9d8772abba149c320 Mon Sep 17 00:00:00 2001 From: "1215525055@qq.com" <1215525055@qq.com> Date: Fri, 23 May 2025 17:02:18 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 63 ++++- .../api/correction/CorrectionController.java | 6 + .../controller/api/goods/GoodsController.java | 28 +- .../goodsonline/GoodsonlineController.java | 24 +- .../controller/api/order/OrderController.java | 129 ++++++++- .../goods/GoodsResourceController.java | 4 +- .../route/order/OrderRouteController.java | 7 +- .../tenlion/aishop/dao/goods/IGoodsDao.java | 2 + .../dao/goodsonline/IGoodsonlineDao.java | 2 + .../tenlion/aishop/dao/order/IOrderDao.java | 4 +- .../com/tenlion/aishop/enums/OrderStatus.java | 41 +++ .../aishop/pojo/dtos/goods/GoodsDTO.java | 30 +++ .../pojo/dtos/goods/GoodsSimpleDTO.java | 10 + .../aishop/pojo/dtos/order/OrderBaseDTO.java | 21 ++ .../aishop/pojo/dtos/order/OrderDTO.java | 10 + .../aishop/pojo/vos/goods/GoodsCheckVO.java | 158 +++++++++++ .../aishop/pojo/vos/goods/GoodsVO.java | 55 ++-- .../properties/SystemApiPathProperties.java | 45 ++++ .../aishop/service/AccessTokenService.java | 71 +++++ .../impl/CorrectionServiceImpl.java | 90 +++++-- .../aishop/service/goods/IGoodsService.java | 7 +- .../service/goods/impl/GoodsServiceImpl.java | 113 ++++++-- .../service/goodslog/IGoodslogService.java | 1 + .../goodsonline/IGoodsonlineService.java | 6 + .../impl/GoodsonlineServiceImpl.java | 45 +++- .../service/order/impl/OrderServiceImpl.java | 249 ++++++++++++++++-- .../aishop/service/remote/IRemoteApi.java | 4 +- .../tenlion/aishop/util/CloseOrderTask.java | 2 +- .../tenlion/aishop/util/MoneyToChinese.java | 172 ++++++++++++ .../cn/com/tenlion/aishop/util/OCRUtil.java | 6 +- .../aishop/util/OperatorShopSpringUtil.java | 44 ++++ .../com/tenlion/aishop/util/TenlionSMS.java | 186 +++++++++++++ .../aishop/util/ocr/CertInfoExtractor.java | 33 +++ .../aishop/util/ocr/CertOcrService.java | 26 ++ .../tenlion/aishop/util/ocr/CertOcrUtil.java | 22 ++ .../util/ocr/JavaImagePreprocessor.java | 28 ++ src/main/resources/application-lanproxy.yml | 35 ++- .../mapper/correction/correction-mapper.xml | 9 + .../mybatis/mapper/goods/goods-mapper.xml | 53 +++- .../mapper/goodsonline/goodsonline-mapper.xml | 39 ++- .../mybatis/mapper/order/order-mapper.xml | 21 +- .../assets/images/filetype/image-add.png | Bin 0 -> 730 bytes .../resources/templates/correction/save.html | 24 +- .../templates/correction/show-system.html | 2 +- .../templates/correction/update.html | 2 +- src/main/resources/templates/goods/check.html | 162 +++++++++--- .../templates/goods/list-system.html | 67 ++++- src/main/resources/templates/goods/list.html | 16 +- src/main/resources/templates/goods/save.html | 2 +- .../resources/templates/goodslog/list.html | 64 ++++- src/main/resources/templates/order/list.html | 32 ++- 51 files changed, 2055 insertions(+), 217 deletions(-) create mode 100644 src/main/java/cn/com/tenlion/aishop/enums/OrderStatus.java create mode 100644 src/main/java/cn/com/tenlion/aishop/pojo/vos/goods/GoodsCheckVO.java create mode 100644 src/main/java/cn/com/tenlion/aishop/properties/SystemApiPathProperties.java create mode 100644 src/main/java/cn/com/tenlion/aishop/service/AccessTokenService.java create mode 100644 src/main/java/cn/com/tenlion/aishop/util/MoneyToChinese.java create mode 100644 src/main/java/cn/com/tenlion/aishop/util/OperatorShopSpringUtil.java create mode 100644 src/main/java/cn/com/tenlion/aishop/util/TenlionSMS.java create mode 100644 src/main/java/cn/com/tenlion/aishop/util/ocr/CertInfoExtractor.java create mode 100644 src/main/java/cn/com/tenlion/aishop/util/ocr/CertOcrService.java create mode 100644 src/main/java/cn/com/tenlion/aishop/util/ocr/CertOcrUtil.java create mode 100644 src/main/java/cn/com/tenlion/aishop/util/ocr/JavaImagePreprocessor.java create mode 100644 src/main/resources/static/assets/images/filetype/image-add.png diff --git a/pom.xml b/pom.xml index 8ba9fac..d89fc21 100644 --- a/pom.xml +++ b/pom.xml @@ -20,6 +20,10 @@ 1.1.9 + + org.springframework + spring-test + org.springframework.boot spring-boot-starter-web @@ -54,19 +58,37 @@ 1.0-SNAPSHOT - ink.wgink - basic-app - 1.0-SNAPSHOT + org.springframework.boot + spring-boot-starter-data-redis + + cn.com.tenlion + module-freemarker + 1.0-SNAPSHOT + compile + + + ink.wgink + redis-cache + 1.0-SNAPSHOT + + + poi-ooxml-schemas + org.apache.poi + + + + ink.wgink module-file 1.0-SNAPSHOT - - - ink.wgink - login-oauth2-client - 1.0-SNAPSHOT + + + org.apache.poi + poi-ooxml-schemas + + @@ -74,12 +96,35 @@ module-dictionary 1.0-SNAPSHOT - + + + ink.wgink + login-oauth2-client + 1.0-SNAPSHOT + + + + + ink.wgink + basic-app + 1.0-SNAPSHOT + + net.sourceforge.tess4j tess4j 5.4.0 + + + org.openpnp + opencv + 4.5.5-1 + + + org.projectlombok + lombok + diff --git a/src/main/java/cn/com/tenlion/aishop/controller/api/correction/CorrectionController.java b/src/main/java/cn/com/tenlion/aishop/controller/api/correction/CorrectionController.java index ad3a3e5..ea77c59 100644 --- a/src/main/java/cn/com/tenlion/aishop/controller/api/correction/CorrectionController.java +++ b/src/main/java/cn/com/tenlion/aishop/controller/api/correction/CorrectionController.java @@ -2,6 +2,7 @@ package cn.com.tenlion.aishop.controller.api.correction; import ink.wgink.annotation.CheckRequestBodyAnnotation; import ink.wgink.common.base.DefaultBaseController; +import ink.wgink.common.component.SecurityComponent; import ink.wgink.interfaces.consts.ISystemConstant; import ink.wgink.pojo.ListPage; import ink.wgink.pojo.result.ErrorResult; @@ -115,10 +116,14 @@ public class CorrectionController extends DefaultBaseController { Map params = requestParams(); params.put("correctionType", "2"); params.put("correctionParentId", "0"); + params.put("userId", securityComponent.getCurrentUser().getUserId()); page.setParams(params); return correctionService.listPage(page); } + @Autowired + private SecurityComponent securityComponent; + @ApiOperation(value = "沟通分页列表", notes = "沟通分页列表接口") @ApiImplicitParams({ @ApiImplicitParam(name = "page", value = "当前页码", paramType = "query", dataType = "int", defaultValue = "1"), @@ -133,6 +138,7 @@ public class CorrectionController extends DefaultBaseController { Map params = requestParams(); params.put("correctionType", "1"); params.put("correctionParentId", "0"); + params.put("userId", securityComponent.getCurrentUser().getUserId()); page.setParams(params); return correctionService.listPage(page); } diff --git a/src/main/java/cn/com/tenlion/aishop/controller/api/goods/GoodsController.java b/src/main/java/cn/com/tenlion/aishop/controller/api/goods/GoodsController.java index f37bfa3..6c2d880 100644 --- a/src/main/java/cn/com/tenlion/aishop/controller/api/goods/GoodsController.java +++ b/src/main/java/cn/com/tenlion/aishop/controller/api/goods/GoodsController.java @@ -1,6 +1,7 @@ package cn.com.tenlion.aishop.controller.api.goods; import cn.com.tenlion.aishop.pojo.dtos.goods.GoodsSimpleDTO; +import cn.com.tenlion.aishop.pojo.vos.goods.GoodsCheckVO; import cn.com.tenlion.aishop.pojo.vos.goodslog.GoodslogVO; import ink.wgink.annotation.CheckRequestBodyAnnotation; import ink.wgink.common.base.DefaultBaseController; @@ -39,11 +40,18 @@ public class GoodsController extends DefaultBaseController { @Autowired private IGoodsService goodsService; + @ApiOperation(value = "今日特价", notes = "今日特价接口") + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @PutMapping("update-flag/{goodsIds}") + public SuccessResult updateFlag(@PathVariable("goodsIds") String goodsIds) { + return goodsService.updateFlag(Arrays.asList(goodsIds.split("\\_")), "特价"); + } + @ApiOperation(value = "著作权下架", notes = "著作权下架接口") @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) @PutMapping("no-publish/{goodsId}") public SuccessResult saveNoPublish(@PathVariable("goodsId") String goodsId) { - goodsService.saveNoPublish(goodsId); + goodsService.saveNoPublish(goodsId, false); return new SuccessResult(); } @@ -60,14 +68,16 @@ public class GoodsController extends DefaultBaseController { @PutMapping("sub-check/{goodsId}") public SuccessResult subCheck(@PathVariable("goodsId") String goodsId) { goodsService.saveSubCheck(goodsId); + return new SuccessResult(); } @ApiOperation(value = "著作权信息审核", notes = "著作权信息审核接口") @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) @PutMapping("check") - public SuccessResult check(@RequestBody GoodslogVO goodsLogVO) { - goodsService.saveCheck(goodsLogVO); + @CheckRequestBodyAnnotation + public SuccessResult check(@RequestBody GoodsCheckVO goodsCheckVO) { + goodsService.saveCheck(goodsCheckVO); return new SuccessResult(); } @@ -128,7 +138,11 @@ public class GoodsController extends DefaultBaseController { @ApiImplicitParam(name = "rows", value = "显示数量", paramType = "query", dataType = "int", defaultValue = "20"), @ApiImplicitParam(name = "keywords", value = "关键字", paramType = "query", dataType = "String"), @ApiImplicitParam(name = "startTime", value = "开始时间", paramType = "query", dataType = "String"), - @ApiImplicitParam(name = "endTime", value = "结束时间", paramType = "query", dataType = "String") + @ApiImplicitParam(name = "endTime", value = "结束时间", paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "goodsGetTime'", value = "取得时间 年", paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "goodsGetType", value = "所有者类型", paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "goodsDevelop", value = "软著开发语言", paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "goodsType", value = "软著类型", paramType = "query", dataType = "String") }) @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) @GetMapping("listpage") @@ -145,7 +159,11 @@ public class GoodsController extends DefaultBaseController { @ApiImplicitParam(name = "rows", value = "显示数量", paramType = "query", dataType = "int", defaultValue = "20"), @ApiImplicitParam(name = "keywords", value = "关键字", paramType = "query", dataType = "String"), @ApiImplicitParam(name = "startTime", value = "开始时间", paramType = "query", dataType = "String"), - @ApiImplicitParam(name = "endTime", value = "结束时间", paramType = "query", dataType = "String") + @ApiImplicitParam(name = "endTime", value = "结束时间", paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "goodsGetTime'", value = "取得时间 年", paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "goodsGetType", value = "所有者类型", paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "goodsDevelop", value = "软著开发语言", paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "goodsType", value = "软著类型", paramType = "query", dataType = "String") }) @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) @GetMapping("listpage-check") diff --git a/src/main/java/cn/com/tenlion/aishop/controller/api/goodsonline/GoodsonlineController.java b/src/main/java/cn/com/tenlion/aishop/controller/api/goodsonline/GoodsonlineController.java index 0174bfb..05ec2eb 100644 --- a/src/main/java/cn/com/tenlion/aishop/controller/api/goodsonline/GoodsonlineController.java +++ b/src/main/java/cn/com/tenlion/aishop/controller/api/goodsonline/GoodsonlineController.java @@ -3,6 +3,7 @@ package cn.com.tenlion.aishop.controller.api.goodsonline; import cn.com.tenlion.aishop.pojo.dtos.goods.GoodsSimpleDTO; import cn.com.tenlion.aishop.util.SystemConfig; import ink.wgink.common.base.DefaultBaseController; +import ink.wgink.common.component.SecurityComponent; import ink.wgink.interfaces.consts.ISystemConstant; import ink.wgink.pojo.ListPage; import ink.wgink.pojo.result.ErrorResult; @@ -29,19 +30,27 @@ public class GoodsonlineController extends DefaultBaseController { @Autowired private IGoodsonlineService goodsonlineService; + @Autowired + private SecurityComponent securityComponent; + @ApiOperation(value = "著作权商品分页列表", notes = "商品分页列表接口") @ApiImplicitParams({ @ApiImplicitParam(name = "page", value = "当前页码", paramType = "query", dataType = "int", defaultValue = "1"), @ApiImplicitParam(name = "rows", value = "显示数量", paramType = "query", dataType = "int", defaultValue = "20"), @ApiImplicitParam(name = "keywords", value = "关键字", paramType = "query", dataType = "String"), @ApiImplicitParam(name = "startTime", value = "开始时间", paramType = "query", dataType = "String"), - @ApiImplicitParam(name = "endTime", value = "结束时间", paramType = "query", dataType = "String") + @ApiImplicitParam(name = "endTime", value = "结束时间", paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "goodsGetTime'", value = "取得时间 年", paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "goodsGetType", value = "所有者类型", paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "goodsDevelop", value = "软著开发语言", paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "goodsType", value = "软著类型", paramType = "query", dataType = "String") }) @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) @GetMapping("listpage") public SuccessResultList> listPage(ListPage page) { Map params = requestParams(); page.setParams(params); + params.put("notUserId", securityComponent.getCurrentUser().getUserId()); return goodsonlineService.listPageAll(page); } @@ -51,23 +60,24 @@ public class GoodsonlineController extends DefaultBaseController { @ApiImplicitParam(name = "rows", value = "显示数量", paramType = "query", dataType = "int", defaultValue = "20"), @ApiImplicitParam(name = "keywords", value = "关键字", paramType = "query", dataType = "String"), @ApiImplicitParam(name = "startTime", value = "开始时间", paramType = "query", dataType = "String"), - @ApiImplicitParam(name = "endTime", value = "结束时间", paramType = "query", dataType = "String") + @ApiImplicitParam(name = "endTime", value = "结束时间", paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "goodsGetTime'", value = "取得时间 年", paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "goodsGetType", value = "所有者类型", paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "goodsDevelop", value = "软著开发语言", paramType = "query", dataType = "String"), + @ApiImplicitParam(name = "goodsType", value = "软著类型", paramType = "query", dataType = "String") }) @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) @GetMapping("listpage" + ISystemConstant.RELEASE_SUFFIX) public SuccessResultList> listAll(ListPage page) { Map params = requestParams(); page.setParams(params); + params.put("notUserId", securityComponent.getCurrentUser().getUserId()); return goodsonlineService.listPageAll(page); } @ApiOperation(value = "商品分页列表", notes = "商品分页列表接口") @ApiImplicitParams({ - @ApiImplicitParam(name = "page", value = "当前页码", paramType = "query", dataType = "int", defaultValue = "1"), - @ApiImplicitParam(name = "rows", value = "显示数量", paramType = "query", dataType = "int", defaultValue = "20"), - @ApiImplicitParam(name = "keywords", value = "关键字", paramType = "query", dataType = "String"), - @ApiImplicitParam(name = "startTime", value = "开始时间", paramType = "query", dataType = "String"), - @ApiImplicitParam(name = "endTime", value = "结束时间", paramType = "query", dataType = "String") + @ApiImplicitParam(name = "goodsId", value = "主键", paramType = "path", dataType = "String") }) @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) @GetMapping("get/{goodsId}") diff --git a/src/main/java/cn/com/tenlion/aishop/controller/api/order/OrderController.java b/src/main/java/cn/com/tenlion/aishop/controller/api/order/OrderController.java index 5f0076f..f966bc0 100644 --- a/src/main/java/cn/com/tenlion/aishop/controller/api/order/OrderController.java +++ b/src/main/java/cn/com/tenlion/aishop/controller/api/order/OrderController.java @@ -5,11 +5,22 @@ import cn.com.tenlion.aishop.pojo.dtos.goodsonline.GoodsonlineDTO; import cn.com.tenlion.aishop.pojo.dtos.order.OrderBaseDTO; import cn.com.tenlion.aishop.pojo.vos.order.OrderBuyVO; import cn.com.tenlion.aishop.pojo.vos.order.OrderEvaluateVO; +import cn.com.tenlion.freemarker.pojo.dtos.templaterecord.TemplateRecordDTO; +import cn.com.tenlion.freemarker.pojo.vos.templaterecord.TemplateRecordVO; +import cn.com.tenlion.freemarker.service.templaterecord.ITemplateRecordService; +import cn.com.tenlion.freemarker.util.TemplateBuilderUtil; +import cn.com.tenlion.freemarker.util.TemplateCreateData; +import cn.com.tenlion.freemarker.util.TemplatePageUtil; import ink.wgink.annotation.CheckRequestBodyAnnotation; import ink.wgink.common.base.DefaultBaseController; import ink.wgink.common.component.SecurityComponent; import ink.wgink.interfaces.consts.ISystemConstant; +import ink.wgink.module.file.enums.UploadTypeEnum; +import ink.wgink.module.file.pojo.vos.FileVO; +import ink.wgink.module.file.service.IDefaultFileService; +import ink.wgink.module.file.service.IFileService; import ink.wgink.pojo.ListPage; +import ink.wgink.pojo.pos.FilePO; import ink.wgink.pojo.result.ErrorResult; import ink.wgink.pojo.result.SuccessResult; import ink.wgink.pojo.result.SuccessResultData; @@ -17,11 +28,21 @@ import ink.wgink.pojo.result.SuccessResultList; import cn.com.tenlion.aishop.pojo.dtos.order.OrderDTO; import cn.com.tenlion.aishop.pojo.vos.order.OrderVO; import cn.com.tenlion.aishop.service.order.IOrderService; +import ink.wgink.util.map.HashMapUtil; import io.swagger.annotations.*; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.mock.web.MockMultipartFile; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.net.URLEncoder; +import java.nio.ByteBuffer; +import java.nio.channels.FileChannel; import java.util.Arrays; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -40,9 +61,113 @@ public class OrderController extends DefaultBaseController { @Autowired private IOrderService orderService; + @Autowired + private ITemplateRecordService iTemplateRecordService; + @Autowired private SecurityComponent securityComponent; + @Autowired + private IFileService iFileService; + @Autowired + private IDefaultFileService iFileService2; + /** + * 读取到字节数组 + * @param f 文件对象 + * @return + * @throws IOException + */ + private byte[] toByteArray(File f) throws IOException { + FileChannel channel = null; + FileInputStream fs = null; + try { + fs = new FileInputStream(f); + channel = fs.getChannel(); + ByteBuffer byteBuffer = ByteBuffer.allocate((int) channel.size()); + while ((channel.read(byteBuffer)) > 0) { + } + return byteBuffer.array(); + } catch (IOException e) { + e.printStackTrace(); + throw e; + } finally { + try { + channel.close(); + } catch (IOException e) { + e.printStackTrace(); + } + try { + fs.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + @ApiOperation(value = "转让协议书", notes = "转让协议书接口") + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @GetMapping("get-xieyi/{orderId}") + public void getXieYi(@PathVariable("orderId") String orderId, HttpServletRequest request, HttpServletResponse response) throws Exception { + TemplateRecordDTO dto = iTemplateRecordService.getTemplateRecordById(orderId); + if(dto == null) { + return; + } + File file = new File(dto.getTemplateRecordPath()); + String fileName = file.getName(); + String userAgent = request.getHeader("User-Agent").toUpperCase(); + if (userAgent.indexOf("MSIE") > 0 || userAgent.indexOf("Trident") > 0) { + fileName = URLEncoder.encode(fileName, "UTF-8"); + } else { + fileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1"); + } + byte[] data = toByteArray(file); + response.reset(); + response.setCharacterEncoding("UTF-8"); + String filename = URLEncoder.encode(dto.getBusinessContent() + dto.getTemplateFileType(), "UTF-8"); + response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\""); + response.addHeader("Content-Length", "" + data.length); + response.setContentType("application/octet-stream;charset=UTF-8"); + OutputStream outputStream = new BufferedOutputStream(response.getOutputStream()); + outputStream.write(data); + outputStream.flush(); + outputStream.close(); + response.flushBuffer(); + } + + @ApiOperation(value = "转让协议书", notes = "转让协议书接口") + @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) + @GetMapping("create-xieyi/{templateCode}/{orderId}") + public FilePO createXieYi(@PathVariable("orderId") String orderId, HttpServletRequest request, HttpServletResponse response) throws Exception { + OrderBaseDTO baseDTO = orderService.getOrder(orderId); + // CBC 其他模块批量生成示例代码, 遍历您的业务数据集循环调用下列代码, 如果需要实时生成, 请在您的新增修改的结尾调用下面代码 17691030315 + // 将您的业务数据对象转为Map + Map templateDataMap = HashMapUtil.beanToMap(baseDTO); + // 创建模板数据封装对象 + TemplateCreateData createData = new TemplateCreateData(); + // 您的业务关联的模板引擎编码 + createData.setTemplateCode("SHOP05"); + // 您的业务表主键ID唯一识别, 请确保该值不会重复 + createData.setBusinessId(orderId + "XieYi"); + // 您自定义的模板说明, 用于后期在模板生成记录中模糊查找使用 + createData.setBusinessContent(baseDTO.getGoodsDTO().getGoodsName() + "转让合同"); + createData.setPublishStatus(true); + // 您的业务数据对象 + createData.setTemplateDataMap(templateDataMap); + // 生成模板文件, 返回模板生成记录对象 + TemplateRecordVO recordVo = TemplateBuilderUtil.getInstance().createFile(createData); + // 如果要加入发布版本的控制, 则需要引入ITemplateVersionService进行相关操作 + FileInputStream inputStream = new FileInputStream(recordVo.getTemplateRecordPath()); + MultipartFile file1 = new MockMultipartFile( + "file", // 参数名(表单中的name) + baseDTO.getGoodsDTO().getGoodsName() + "转让合同.doc", // 原始文件名 + "application/msword", // MIME类型 + inputStream // 文件输入流 + ); + Map params = new HashMap<>(); + String fileId = iFileService.uploadSingleByUserId("1" , file1, UploadTypeEnum.FILE, params); + return iFileService2.getPO(fileId); + } + @ApiOperation(value = "确认付款", notes = "确认付款接口") @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) @PutMapping("save-evaluate/{orderId}") @@ -74,7 +199,7 @@ public class OrderController extends DefaultBaseController { return orderService.getByGoods(orderId); } - @ApiOperation(value = "新增订单", notes = "新增订单接口") + @ApiOperation(value = "订单取消", notes = "订单取消接口") @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) @PutMapping("save-cancel/{orderId}") public synchronized SuccessResult saveCancel(@PathVariable("orderId") String orderId) { @@ -82,7 +207,7 @@ public class OrderController extends DefaultBaseController { return new SuccessResult(); } - @ApiOperation(value = "新增订单", notes = "新增订单接口") + @ApiOperation(value = "填写过户资料", notes = "填写过户资料接口") @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) @PostMapping("save-input/{orderId}") public synchronized SuccessResult saveInput(@PathVariable("orderId") String orderId, @RequestBody OrderBuyVO orderBuyVO) { diff --git a/src/main/java/cn/com/tenlion/aishop/controller/resource/goods/GoodsResourceController.java b/src/main/java/cn/com/tenlion/aishop/controller/resource/goods/GoodsResourceController.java index 5db0eb9..b7b4865 100644 --- a/src/main/java/cn/com/tenlion/aishop/controller/resource/goods/GoodsResourceController.java +++ b/src/main/java/cn/com/tenlion/aishop/controller/resource/goods/GoodsResourceController.java @@ -34,14 +34,14 @@ public class GoodsResourceController extends DefaultBaseController { @Autowired private IGoodsService goodsService; - +/* @ApiOperation(value = "著作权信息审核", notes = "著作权信息审核接口") @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) @PutMapping("check") public SuccessResult check(@RequestBody GoodslogVO goodsLogVO) { goodsService.saveCheck(goodsLogVO); return new SuccessResult(); - } + }*/ @ApiOperation(value = "商品详情", notes = "商品详情接口") @ApiImplicitParams({ diff --git a/src/main/java/cn/com/tenlion/aishop/controller/route/order/OrderRouteController.java b/src/main/java/cn/com/tenlion/aishop/controller/route/order/OrderRouteController.java index 65eaa9d..b14790d 100644 --- a/src/main/java/cn/com/tenlion/aishop/controller/route/order/OrderRouteController.java +++ b/src/main/java/cn/com/tenlion/aishop/controller/route/order/OrderRouteController.java @@ -43,10 +43,11 @@ public class OrderRouteController extends DefaultBaseController { public ModelAndView update(String orderId) { OrderBaseDTO baseDTO = iOrderService.getOrder(orderId); String systemRoleId = systemConfig.getSystemRoleId(); - ModelAndView mv = new ModelAndView("404"); + // ModelAndView mv = new ModelAndView("404"); + ModelAndView mv = new ModelAndView("order/update"); mv.addObject("orderDTO",baseDTO); mv.addObject("accountServicePath", systemConfig.getAccountServicePath()); - if (securityComponent.getCurrentUser().getUserUsername().equals("admin") || systemRoleId.contains(securityComponent.getCurrentUser().getRoles().get(0).getRoleId())) { +/* if (securityComponent.getCurrentUser().getUserUsername().equals("admin") || systemRoleId.contains(securityComponent.getCurrentUser().getRoles().get(0).getRoleId())) { mv.setViewName("order/update"); } if (securityComponent.getCurrentUser().getUserId().equals(baseDTO.getSellUserId())) { @@ -54,7 +55,7 @@ public class OrderRouteController extends DefaultBaseController { } if (securityComponent.getCurrentUser().getUserId().equals(baseDTO.getBuyUserId())) { mv.setViewName("order/update-buy"); - } + }*/ return mv; } diff --git a/src/main/java/cn/com/tenlion/aishop/dao/goods/IGoodsDao.java b/src/main/java/cn/com/tenlion/aishop/dao/goods/IGoodsDao.java index 4b26fe6..bcb14d0 100644 --- a/src/main/java/cn/com/tenlion/aishop/dao/goods/IGoodsDao.java +++ b/src/main/java/cn/com/tenlion/aishop/dao/goods/IGoodsDao.java @@ -125,4 +125,6 @@ public interface IGoodsDao { List listPageAll(Map params); GoodsSimpleDTO getAll(String goodsId); + + void updateFlag(Map query); } \ No newline at end of file diff --git a/src/main/java/cn/com/tenlion/aishop/dao/goodsonline/IGoodsonlineDao.java b/src/main/java/cn/com/tenlion/aishop/dao/goodsonline/IGoodsonlineDao.java index a583b50..ad6040e 100644 --- a/src/main/java/cn/com/tenlion/aishop/dao/goodsonline/IGoodsonlineDao.java +++ b/src/main/java/cn/com/tenlion/aishop/dao/goodsonline/IGoodsonlineDao.java @@ -127,4 +127,6 @@ public interface IGoodsonlineDao { GoodsSimpleDTO getByGoodsId(Map params); GoodsonlineDTO getByGoodsIdAndGoodsNumber(Map params); + + void removeByGoodId(Map params); } \ No newline at end of file diff --git a/src/main/java/cn/com/tenlion/aishop/dao/order/IOrderDao.java b/src/main/java/cn/com/tenlion/aishop/dao/order/IOrderDao.java index e5dc542..2e00150 100644 --- a/src/main/java/cn/com/tenlion/aishop/dao/order/IOrderDao.java +++ b/src/main/java/cn/com/tenlion/aishop/dao/order/IOrderDao.java @@ -122,5 +122,7 @@ public interface IOrderDao { void updateResult(Map params); - void updateClose(HashMap objectObjectHashMap); + void updateClose(String orderId); + + List getCloseAll(HashMap objectObjectHashMap); } \ No newline at end of file diff --git a/src/main/java/cn/com/tenlion/aishop/enums/OrderStatus.java b/src/main/java/cn/com/tenlion/aishop/enums/OrderStatus.java new file mode 100644 index 0000000..73dccac --- /dev/null +++ b/src/main/java/cn/com/tenlion/aishop/enums/OrderStatus.java @@ -0,0 +1,41 @@ +package cn.com.tenlion.aishop.enums; + +/** + * 缓存类型 + * 2025年1月14日11:24:49 + * 崔宝铖 + */ +public enum OrderStatus { + + CANCEL("0","订单已取消"), + WAIT_BUYER_PAY("1","买家待付款"), + WAIT_INPUT_INFORMATION("2","待填写资料"), + TRANSFER_ING("3","过户进行中"), + TRANSFER_COMPLETE("4","过户已完成"), + BUYER_EVALUATE("5","买家已评价"), + INVOICE_ISSUE("6","发票已开具"); + + private String status; + private String title; + + private OrderStatus(String status, String title) { + this.status = status; + this.title = title; + } + + public String getStatus() { + return status == null ? "" : status.trim(); + } + + public void setStatus(String status) { + this.status = status; + } + + public String getTitle() { + return title == null ? "" : title.trim(); + } + + public void setTitle(String title) { + this.title = title; + } +} diff --git a/src/main/java/cn/com/tenlion/aishop/pojo/dtos/goods/GoodsDTO.java b/src/main/java/cn/com/tenlion/aishop/pojo/dtos/goods/GoodsDTO.java index 1345c7e..c419502 100644 --- a/src/main/java/cn/com/tenlion/aishop/pojo/dtos/goods/GoodsDTO.java +++ b/src/main/java/cn/com/tenlion/aishop/pojo/dtos/goods/GoodsDTO.java @@ -16,6 +16,10 @@ public class GoodsDTO { @ApiModelProperty(name = "goodsId", value = "软著商品") private String goodsId; + @ApiModelProperty(name = "goodsLocalPhoto", value = "软著上架图片") + private String goodsLocalPhoto; + @ApiModelProperty(name = "goodsFlag", value = "软著标签") + private String goodsFlag; @ApiModelProperty(name = "goodsNumber", value = "软著编号") private String goodsNumber; @ApiModelProperty(name = "goodsName", value = "软著名称") @@ -64,6 +68,8 @@ public class GoodsDTO { private String goodsLastTime; @ApiModelProperty(name = "goodsCheckStatus", value = "软件审核状态(0不通过,1审核中,2通过)") private String goodsCheckStatus; + @ApiModelProperty(name = "goodsCheckRemark", value = "不通过原因") + private String goodsCheckRemark; @ApiModelProperty(name = "creator", value = "") private String creator; @ApiModelProperty(name = "gmtCreate", value = "") @@ -75,6 +81,30 @@ public class GoodsDTO { @ApiModelProperty(name = "isDelete", value = "") private Integer isDelete; + public String getGoodsLocalPhoto() { + return goodsLocalPhoto == null ? "" : goodsLocalPhoto.trim(); + } + + public void setGoodsLocalPhoto(String goodsLocalPhoto) { + this.goodsLocalPhoto = goodsLocalPhoto; + } + + public String getGoodsFlag() { + return goodsFlag == null ? "" : goodsFlag.trim(); + } + + public void setGoodsFlag(String goodsFlag) { + this.goodsFlag = goodsFlag; + } + + public String getGoodsCheckRemark() { + return goodsCheckRemark == null ? "" : goodsCheckRemark.trim(); + } + + public void setGoodsCheckRemark(String goodsCheckRemark) { + this.goodsCheckRemark = goodsCheckRemark; + } + public String getGoodsOrderStatus() { return goodsOrderStatus == null ? "" : goodsOrderStatus; } diff --git a/src/main/java/cn/com/tenlion/aishop/pojo/dtos/goods/GoodsSimpleDTO.java b/src/main/java/cn/com/tenlion/aishop/pojo/dtos/goods/GoodsSimpleDTO.java index d1539d5..09a161e 100644 --- a/src/main/java/cn/com/tenlion/aishop/pojo/dtos/goods/GoodsSimpleDTO.java +++ b/src/main/java/cn/com/tenlion/aishop/pojo/dtos/goods/GoodsSimpleDTO.java @@ -49,6 +49,16 @@ public class GoodsSimpleDTO { private String goodsLastTime; @ApiModelProperty(name = "goodsVnumber", value = "版本") private Integer goodsVnumber; + @ApiModelProperty(name = "goodsFlag", value = "商品标签") + private String goodsFlag; + + public String getGoodsFlag() { + return goodsFlag == null ? "" : goodsFlag.trim(); + } + + public void setGoodsFlag(String goodsFlag) { + this.goodsFlag = goodsFlag; + } public String getGoodsOnlineId() { return goodsOnlineId == null ? "" : goodsOnlineId.trim(); diff --git a/src/main/java/cn/com/tenlion/aishop/pojo/dtos/order/OrderBaseDTO.java b/src/main/java/cn/com/tenlion/aishop/pojo/dtos/order/OrderBaseDTO.java index 373e578..696fc94 100644 --- a/src/main/java/cn/com/tenlion/aishop/pojo/dtos/order/OrderBaseDTO.java +++ b/src/main/java/cn/com/tenlion/aishop/pojo/dtos/order/OrderBaseDTO.java @@ -2,6 +2,7 @@ package cn.com.tenlion.aishop.pojo.dtos.order; import cn.com.tenlion.aishop.pojo.dtos.goods.GoodsSimpleDTO; import cn.com.tenlion.aishop.pojo.dtos.goods.GoodsSimplePersonDTO; +import cn.com.tenlion.aishop.util.MoneyToChinese; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -32,6 +33,8 @@ public class OrderBaseDTO { private String orderNumber; @ApiModelProperty(name = "payMoney", value = "本次付款金额") private Double payMoney; + @ApiModelProperty(name = "payMoneyMax", value = "本次付款金额中文大写") + private String payMoneyMax; @ApiModelProperty(name = "goodsId", value = "软著商品ID") private String goodsId; @ApiModelProperty(name = "goodsVnumber", value = "软著商品版本") @@ -56,6 +59,24 @@ public class OrderBaseDTO { private String evaluateRemark; @ApiModelProperty(name = "producePhoto", value = "下证电子版") private String producePhoto; + @ApiModelProperty(name = "correctionCount", value = "待补正数量") + private Integer waitCorrectionCount; + + public String getPayMoneyMax() { + return payMoney == null ? "无" : MoneyToChinese.convert(payMoney + ""); + } + + public void setPayMoneyMax(String payMoneyMax) { + this.payMoneyMax = payMoneyMax; + } + + public Integer getWaitCorrectionCount() { + return waitCorrectionCount == null ? 0 : waitCorrectionCount; + } + + public void setWaitCorrectionCount(Integer waitCorrectionCount) { + this.waitCorrectionCount = waitCorrectionCount; + } public Integer getStatus() { return status == null ? 0 : status; diff --git a/src/main/java/cn/com/tenlion/aishop/pojo/dtos/order/OrderDTO.java b/src/main/java/cn/com/tenlion/aishop/pojo/dtos/order/OrderDTO.java index 7bab7f0..4ce9b12 100644 --- a/src/main/java/cn/com/tenlion/aishop/pojo/dtos/order/OrderDTO.java +++ b/src/main/java/cn/com/tenlion/aishop/pojo/dtos/order/OrderDTO.java @@ -80,6 +80,16 @@ public class OrderDTO { private String invoicePhone; @ApiModelProperty(name = "producePhoto", value = "下证电子版") private String producePhoto; + @ApiModelProperty(name = "correctionCount", value = "待补正数量") + private Integer waitCorrectionCount; + + public Integer getWaitCorrectionCount() { + return waitCorrectionCount == null ? 0 : waitCorrectionCount; + } + + public void setWaitCorrectionCount(Integer waitCorrectionCount) { + this.waitCorrectionCount = waitCorrectionCount; + } public String getProducePhoto() { return producePhoto == null ? "" : producePhoto.trim(); diff --git a/src/main/java/cn/com/tenlion/aishop/pojo/vos/goods/GoodsCheckVO.java b/src/main/java/cn/com/tenlion/aishop/pojo/vos/goods/GoodsCheckVO.java new file mode 100644 index 0000000..41f8dcf --- /dev/null +++ b/src/main/java/cn/com/tenlion/aishop/pojo/vos/goods/GoodsCheckVO.java @@ -0,0 +1,158 @@ +package cn.com.tenlion.aishop.pojo.vos.goods; + +import ink.wgink.annotation.CheckEmptyAnnotation; +import ink.wgink.annotation.CheckNumberAnnotation; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +/** + * + * @ClassName: GoodsVO + * @Description: 商品 + * @Author: CodeFactory + * @Date: 2024-04-18 10:35:10 + * @Version: 3.0 + **/ +@ApiModel +public class GoodsCheckVO { + + @ApiModelProperty(name = "goodsNumber", value = "软著证号") + @CheckEmptyAnnotation(name = "软著证号") + private String goodsNumber; + @ApiModelProperty(name = "goodsSubName", value = "软著简称") + private String goodsSubName; + @ApiModelProperty(name = "goodsVersion", value = "软著版本") + @CheckEmptyAnnotation(name = "软著版本") + private String goodsVersion; + @ApiModelProperty(name = "goodsType", value = "软著分类") + @CheckEmptyAnnotation(name = "软著分类") + private String goodsType; + @ApiModelProperty(name = "goodsGetTime", value = "软著取得时间") + private String goodsGetTime; + @ApiModelProperty(name = "goodsDevelop", value = "软著开发语言") + private String goodsDevelop; + @ApiModelProperty(name = "goodsGetType", value = "软著获取方式(1平台申请,2自主研发,3交易取得)") + private String goodsGetType; + @ApiModelProperty(name = "goodsDescription", value = "软著说明") + @CheckEmptyAnnotation(name = "软著说明") + private String goodsDescription; + @ApiModelProperty(name = "goodsPhoto", value = "软著上架图片") + @CheckEmptyAnnotation(name = "软著上架图片") + private String goodsPhoto; + @ApiModelProperty(name = "goodsFlag", value = "软著标签") + private String goodsFlag; + /** + * 审核信息 + */ + @ApiModelProperty(name = "goodslogContent", value = "日志详情") + private String goodslogContent; + @ApiModelProperty(name = "goodslogStatus", value = "审核状态") + private String goodslogStatus; + @ApiModelProperty(name = "goodsId", value = "商品ID") + @CheckEmptyAnnotation(name = "商品信息") + private String goodsId; + + public String getGoodsType() { + return goodsType == null ? "" : goodsType.trim(); + } + + public void setGoodsType(String goodsType) { + this.goodsType = goodsType; + } + + public String getGoodsPhoto() { + return goodsPhoto == null ? "" : goodsPhoto.trim(); + } + + public void setGoodsPhoto(String goodsPhoto) { + this.goodsPhoto = goodsPhoto; + } + + public String getGoodsFlag() { + return goodsFlag == null ? "" : goodsFlag.trim(); + } + + public void setGoodsFlag(String goodsFlag) { + this.goodsFlag = goodsFlag; + } + + public String getGoodslogContent() { + return goodslogContent == null ? "" : goodslogContent.trim(); + } + + public void setGoodslogContent(String goodslogContent) { + this.goodslogContent = goodslogContent; + } + + public String getGoodslogStatus() { + return goodslogStatus == null ? "" : goodslogStatus.trim(); + } + + public void setGoodslogStatus(String goodslogStatus) { + this.goodslogStatus = goodslogStatus; + } + + public String getGoodsId() { + return goodsId == null ? "" : goodsId.trim(); + } + + public void setGoodsId(String goodsId) { + this.goodsId = goodsId; + } + + public String getGoodsNumber() { + return goodsNumber == null ? "" : goodsNumber.trim(); + } + + public void setGoodsNumber(String goodsNumber) { + this.goodsNumber = goodsNumber; + } + + public String getGoodsSubName() { + return goodsSubName == null ? "" : goodsSubName.trim(); + } + + public void setGoodsSubName(String goodsSubName) { + this.goodsSubName = goodsSubName; + } + + public String getGoodsVersion() { + return goodsVersion == null ? "" : goodsVersion.trim(); + } + + public void setGoodsVersion(String goodsVersion) { + this.goodsVersion = goodsVersion; + } + + public String getGoodsGetTime() { + return goodsGetTime == null ? "" : goodsGetTime.trim(); + } + + public void setGoodsGetTime(String goodsGetTime) { + this.goodsGetTime = goodsGetTime; + } + + public String getGoodsDevelop() { + return goodsDevelop == null ? "" : goodsDevelop.trim(); + } + + public void setGoodsDevelop(String goodsDevelop) { + this.goodsDevelop = goodsDevelop; + } + + public String getGoodsGetType() { + return goodsGetType == null ? "" : goodsGetType.trim(); + } + + public void setGoodsGetType(String goodsGetType) { + this.goodsGetType = goodsGetType; + } + + public String getGoodsDescription() { + return goodsDescription == null ? "" : goodsDescription.trim(); + } + + public void setGoodsDescription(String goodsDescription) { + this.goodsDescription = goodsDescription; + } +} diff --git a/src/main/java/cn/com/tenlion/aishop/pojo/vos/goods/GoodsVO.java b/src/main/java/cn/com/tenlion/aishop/pojo/vos/goods/GoodsVO.java index 23ed986..46f939f 100644 --- a/src/main/java/cn/com/tenlion/aishop/pojo/vos/goods/GoodsVO.java +++ b/src/main/java/cn/com/tenlion/aishop/pojo/vos/goods/GoodsVO.java @@ -17,65 +17,68 @@ import io.swagger.annotations.ApiModelProperty; public class GoodsVO { @ApiModelProperty(name = "goodsNumber", value = "软著证号") - @CheckEmptyAnnotation(name = "软著证号") +/* @CheckEmptyAnnotation(name = "软著证号")*/ private String goodsNumber; + @ApiModelProperty(name = "goodsLocalPhoto", value = "软著图片") + @CheckEmptyAnnotation(name = "软著照片") + private String goodsLocalPhoto; + @ApiModelProperty(name = "goodsFlag", value = "软著标签") + private String goodsFlag; @ApiModelProperty(name = "goodsName", value = "软著名称") @CheckEmptyAnnotation(name = "软著名称") private String goodsName; @ApiModelProperty(name = "goodsSubName", value = "软著简称") - @CheckEmptyAnnotation(name = "软著简称") private String goodsSubName; @ApiModelProperty(name = "goodsVersion", value = "软著版本") - @CheckEmptyAnnotation(name = "软著版本") +/* @CheckEmptyAnnotation(name = "软著版本")*/ private String goodsVersion; @ApiModelProperty(name = "goodsGetTime", value = "软著取得时间") - @CheckEmptyAnnotation(name = "取得时间") +/* @CheckEmptyAnnotation(name = "取得时间")*/ private String goodsGetTime; @ApiModelProperty(name = "goodsDevelop", value = "软著开发语言") - @CheckEmptyAnnotation(name = "开发语言") +/* @CheckEmptyAnnotation(name = "开发语言")*/ private String goodsDevelop; @ApiModelProperty(name = "goodsPhoto", value = "软著照片") - @CheckEmptyAnnotation(name = "软著电子版") private String goodsPhoto; @ApiModelProperty(name = "goodsLeaderType", value = "软著所有者类型(1个人,2企业)") - @CheckEmptyAnnotation(name = "软著电子版") + @CheckEmptyAnnotation(name = "著作权人类别") private String goodsLeaderType; @ApiModelProperty(name = "goodsLeader", value = "软著所有者姓名") - @CheckEmptyAnnotation(name = "所有者姓名") + @CheckEmptyAnnotation(name = "著作权人姓名或名称") private String goodsLeader; @ApiModelProperty(name = "goodsLeaderCity1", value = "软著所有者所在省") - @CheckEmptyAnnotation(name = "所有者所在省") + @CheckEmptyAnnotation(name = "著作权人所在省") private String goodsLeaderCity1; @ApiModelProperty(name = "goodsLeaderCity2", value = "软著所有者所在市") - @CheckEmptyAnnotation(name = "所有者所在市") + @CheckEmptyAnnotation(name = "著作权人所在市") private String goodsLeaderCity2; @ApiModelProperty(name = "goodsLeaderCity2", value = "软著所有者证件类型") - @CheckEmptyAnnotation(name = "所有者证件类型") + @CheckEmptyAnnotation(name = "著作权人证件类型") private String goodsLeaderIdcardType; @ApiModelProperty(name = "goodsLeaderIdcard", value = "软著所有者证件号") - @CheckEmptyAnnotation(name = "所有者证件号") + @CheckEmptyAnnotation(name = "著作权人证件号码") private String goodsLeaderIdcard; @ApiModelProperty(name = "goodsLeaderPhone", value = "软著所有者联系电话") - @CheckEmptyAnnotation(name = "所有者联系电话") + @CheckEmptyAnnotation(name = "著作权人联系电话") private String goodsLeaderPhone; @ApiModelProperty(name = "goodsGetType", value = "软著获取方式(1平台申请,2自主研发,3交易取得)") - @CheckEmptyAnnotation(name = "获取方式") +/* @CheckEmptyAnnotation(name = "获取方式")*/ private String goodsGetType; @ApiModelProperty(name = "goodsDescription", value = "软著说明") - @CheckEmptyAnnotation(name = "软著说明") +/* @CheckEmptyAnnotation(name = "软著说明")*/ private String goodsDescription; @ApiModelProperty(name = "goodsType", value = "软著平台类型") - @CheckEmptyAnnotation(name = "软著类型") +/* @CheckEmptyAnnotation(name = "软著分类")*/ private String goodsType; @ApiModelProperty(name = "goodsPrice", value = "软著售卖价格") @CheckNumberAnnotation(name = "软著售卖价格") @CheckEmptyAnnotation(name = "售卖价格") private Double goodsPrice; @ApiModelProperty(name = "goodsOpenPrice", value = "软著挂牌价格") - @CheckNumberAnnotation(name = "软著挂牌价格") +/* @CheckNumberAnnotation(name = "软著挂牌价格")*/ private Double goodsOpenPrice; @ApiModelProperty(name = "goodsStatus", value = "软件上架状态(1上架,0未上架)") - @CheckNumberAnnotation(name = "软件上架状态(1上架,0未上架)") +/* @CheckNumberAnnotation(name = "软件上架状态(1上架,0未上架)")*/ private Integer goodsStatus; @ApiModelProperty(name = "goodsStatusTime", value = "软件上架时间") private String goodsStatusTime; @@ -84,6 +87,22 @@ public class GoodsVO { @ApiModelProperty(name = "goodsCheckStatus", value = "软件审核状态(0不通过,1审核中,2通过)") private String goodsCheckStatus; + public String getGoodsFlag() { + return goodsFlag == null ? "" : goodsFlag.trim(); + } + + public void setGoodsFlag(String goodsFlag) { + this.goodsFlag = goodsFlag; + } + + public String getGoodsLocalPhoto() { + return goodsLocalPhoto == null ? "" : goodsLocalPhoto.trim(); + } + + public void setGoodsLocalPhoto(String goodsLocalPhoto) { + this.goodsLocalPhoto = goodsLocalPhoto; + } + public String getGoodsLeaderCity1() { return goodsLeaderCity1 == null ? "" : goodsLeaderCity1.trim(); } diff --git a/src/main/java/cn/com/tenlion/aishop/properties/SystemApiPathProperties.java b/src/main/java/cn/com/tenlion/aishop/properties/SystemApiPathProperties.java new file mode 100644 index 0000000..e7d1542 --- /dev/null +++ b/src/main/java/cn/com/tenlion/aishop/properties/SystemApiPathProperties.java @@ -0,0 +1,45 @@ +package cn.com.tenlion.aishop.properties; + +import ink.wgink.properties.ApiPathProperties; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * ClassName: SystemApiPathProperties + * Description: + * Author: wanggeng + * Date: 2024/7/22 下午6:13 + * Version: 1.0 + */ +@Component +@ConfigurationProperties(prefix = "api-path") +public class SystemApiPathProperties extends ApiPathProperties { + + private String copyright; + private String copyrightExternal; + private String operatorPlugin; + + public String getOperatorPlugin() { + return operatorPlugin == null ? "" : operatorPlugin.trim(); + } + + public void setOperatorPlugin(String operatorPlugin) { + this.operatorPlugin = operatorPlugin; + } + + public String getCopyright() { + return copyright == null ? "" : copyright.trim(); + } + + public void setCopyright(String copyright) { + this.copyright = copyright; + } + + public String getCopyrightExternal() { + return copyrightExternal == null ? "" : copyrightExternal.trim(); + } + + public void setCopyrightExternal(String copyrightExternal) { + this.copyrightExternal = copyrightExternal; + } +} diff --git a/src/main/java/cn/com/tenlion/aishop/service/AccessTokenService.java b/src/main/java/cn/com/tenlion/aishop/service/AccessTokenService.java new file mode 100644 index 0000000..f6b2cba --- /dev/null +++ b/src/main/java/cn/com/tenlion/aishop/service/AccessTokenService.java @@ -0,0 +1,71 @@ +package cn.com.tenlion.aishop.service; + +import com.alibaba.fastjson.JSONObject; +import ink.wgink.app.AppTokenManager; +import ink.wgink.app.impl.DefaultAppTokenServiceImpl; +import ink.wgink.common.base.DefaultBaseService; +import ink.wgink.exceptions.SearchException; +import ink.wgink.exceptions.base.SystemException; +import ink.wgink.module.oauth2.filter.AccessTokenFilter; +import ink.wgink.pojo.app.AppToken; +import ink.wgink.pojo.app.AppTokenUser; +import ink.wgink.pojo.bos.UserInfoBO; +import ink.wgink.pojo.dtos.role.RoleSimpleDTO; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.core.types.RedisClientInfo; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.stream.Collectors; + +@Service +public class AccessTokenService extends DefaultBaseService implements AccessTokenFilter.IAccessTokenCheckFilter { + + @Autowired + private RedisTemplate redisTemplate; + + @Override + public UserInfoBO getUserInfo(String accessToken) { + AppTokenUser appTokenUser = AppTokenManager.getInstance().parseToAppTokenUser(accessToken); + UserInfoBO userInfoBO = new UserInfoBO(); + userInfoBO.setUserId(appTokenUser.getId()); + userInfoBO.setUserUsername(appTokenUser.getUsername()); + userInfoBO.setUserName(appTokenUser.getName()); + userInfoBO.setUserPhone(appTokenUser.getPhone()); + userInfoBO.setUserEmail(appTokenUser.getEmail()); + userInfoBO.setRoles(appTokenUser.getRoles().stream().map(role -> { + RoleSimpleDTO roleSimpleDTO = new RoleSimpleDTO(); + roleSimpleDTO.setRoleId(role.getRoleId()); + roleSimpleDTO.setRoleName(role.getRoleName()); + return roleSimpleDTO; + }).collect(Collectors.toList())); + // 先检查access_token是否过期 + checkAccessToken(userInfoBO.getUserId()); + // 在更新超时时间 + set2Redis(userInfoBO.getUserId(), accessToken); + return userInfoBO; + } + + public void checkAccessToken(String userId) { + getAccessToken(userId); + } + + public void set2Redis(String userId, String accessToken) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("access_token", accessToken); + jsonObject.put("expired_time", System.currentTimeMillis() + 7200000); + redisTemplate.opsForValue().set("access_token:" + userId, jsonObject.toJSONString()); + } + + public String getAccessToken(String userId) { + List list = redisTemplate.getClientList(); + String accessToken = redisTemplate.opsForValue().get("access_token:" + userId); + if (StringUtils.isBlank(accessToken)) { + throw new SystemException("access_token不存在,请重新登录"); + } + JSONObject jsonObject = JSONObject.parseObject(accessToken); + return jsonObject.getString("access_token"); + } +} diff --git a/src/main/java/cn/com/tenlion/aishop/service/correction/impl/CorrectionServiceImpl.java b/src/main/java/cn/com/tenlion/aishop/service/correction/impl/CorrectionServiceImpl.java index a61ad92..7704c8c 100644 --- a/src/main/java/cn/com/tenlion/aishop/service/correction/impl/CorrectionServiceImpl.java +++ b/src/main/java/cn/com/tenlion/aishop/service/correction/impl/CorrectionServiceImpl.java @@ -8,6 +8,9 @@ import cn.com.tenlion.aishop.service.goodslog.IGoodslogService; import cn.com.tenlion.aishop.service.goodsonline.IGoodsonlineService; import cn.com.tenlion.aishop.service.order.IOrderService; import cn.com.tenlion.aishop.util.SystemConfig; +import cn.com.tenlion.aishop.util.TenlionSMS; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import ink.wgink.common.base.DefaultBaseService; import ink.wgink.exceptions.SaveException; import ink.wgink.interfaces.sms.ISmsBaseService; @@ -109,29 +112,29 @@ public class CorrectionServiceImpl extends DefaultBaseService implements ICorrec goodsLogVO.setGoodslogName("平台发起资料补充"); goodsLogVO.setGoodslogStatus(""); goodsLogVO.setGoodsId(orderDTO.getGoodsId()); - goodsLogVO.setGoodslogContent("需要 " + type + " 进行资料补充"); + goodsLogVO.setGoodslogContent("需要 " + type + " 进行资料补充
订单号:" + orderDTO.getOrderNumber()); iGoodslogService.saveByUser(goodsLogVO, userId); }else{ if (params.get("creator").toString().equals(orderDTO.getSellUserId())) { - params.put("correctionType", "卖家"); + params.put("correctionType", "1"); GoodslogVO goodsLogVO = new GoodslogVO(); goodsLogVO.setGoodslogType("ORDER"); goodsLogVO.setGoodslogTime(DateUtil.getTime()); - goodsLogVO.setGoodslogName("卖家填入补充资料"); + goodsLogVO.setGoodslogName("卖家填入资料补充"); goodsLogVO.setGoodslogStatus(""); goodsLogVO.setGoodsId(orderDTO.getGoodsId()); - goodsLogVO.setGoodslogContent(""); + goodsLogVO.setGoodslogContent("订单号:" + orderDTO.getOrderNumber()); iGoodslogService.saveByUser(goodsLogVO, userId); } if (params.get("creator").toString().equals(orderDTO.getBuyUserId())) { - params.put("correctionType", "买家"); + params.put("correctionType", "2"); GoodslogVO goodsLogVO = new GoodslogVO(); goodsLogVO.setGoodslogType("ORDER"); goodsLogVO.setGoodslogTime(DateUtil.getTime()); - goodsLogVO.setGoodslogName("买家填入补充资料"); + goodsLogVO.setGoodslogName("买家填入资料补充"); goodsLogVO.setGoodslogStatus(""); goodsLogVO.setGoodsId(orderDTO.getGoodsId()); - goodsLogVO.setGoodslogContent(""); + goodsLogVO.setGoodslogContent("订单号:" + orderDTO.getOrderNumber()); iGoodslogService.saveByUser(goodsLogVO, userId); } } @@ -141,10 +144,30 @@ public class CorrectionServiceImpl extends DefaultBaseService implements ICorrec if (systemConfig.getSmsSwitch()) { if (correctionVO.getCorrectionParentId().equals("0")) { if(correctionVO.getCorrectionType().contains("1")) { - iSmsService.sendContentDirectlyByPhone(goodsonlineDTO.getGoodsLeaderPhone(), "著作权交易订单(" + goodsonlineDTO.getGoodsName() + " " + goodsonlineDTO.getGoodsVersion() + "),需要您补充资料(" + correctionVO.getCorrectionTitle() + ")"); + + JSONArray phoneArray = new JSONArray(); + JSONObject obj = new JSONObject(); + obj.put("phone", goodsonlineDTO.getGoodsLeaderPhone()); + phoneArray.add(obj); + + Map templateParams = new HashMap<>(); + templateParams.put("name", goodsonlineDTO.getGoodsName()); + TenlionSMS.sendMessage(UUIDUtil.getUUID(), "M00015", templateParams, phoneArray); + + // iSmsService.sendContentDirectlyByPhone(goodsonlineDTO.getGoodsLeaderPhone(), "著作权交易订单(" + goodsonlineDTO.getGoodsName() + " " + goodsonlineDTO.getGoodsVersion() + "),需要您补充资料(" + correctionVO.getCorrectionTitle() + ")"); } if(correctionVO.getCorrectionType().contains("2")) { - iSmsService.sendContentDirectlyByPhone(orderDTO.getBuyPhone(), "著作权交易订单(" + goodsonlineDTO.getGoodsName() + " " + goodsonlineDTO.getGoodsVersion() + "),需要您补充资料(" + correctionVO.getCorrectionTitle() + ")"); + + JSONArray phoneArray = new JSONArray(); + JSONObject obj = new JSONObject(); + obj.put("phone", orderDTO.getBuyPhone()); + phoneArray.add(obj); + + Map templateParams = new HashMap<>(); + templateParams.put("name", goodsonlineDTO.getGoodsName()); + TenlionSMS.sendMessage(UUIDUtil.getUUID(), "M00015", templateParams, phoneArray); + + // iSmsService.sendContentDirectlyByPhone(orderDTO.getBuyPhone(), "著作权交易订单(" + goodsonlineDTO.getGoodsName() + " " + goodsonlineDTO.getGoodsVersion() + "),需要您补充资料(" + correctionVO.getCorrectionTitle() + ")"); } } } @@ -158,6 +181,9 @@ public class CorrectionServiceImpl extends DefaultBaseService implements ICorrec if(orderDTO == null) { throw new SaveException("订单不存在"); } + if(StringUtils.isEmpty(correctionVO.getCorrectionRemark()) && StringUtils.isEmpty(correctionVO.getCorrectionFiles())) { + throw new SaveException("资料补充不能为空"); + } String correctionId = UUIDUtil.getUUID(); Map params = HashMapUtil.beanToMap(correctionVO); params.put("correctionId", correctionId); @@ -186,29 +212,29 @@ public class CorrectionServiceImpl extends DefaultBaseService implements ICorrec goodsLogVO.setGoodslogName("平台发起资料补充"); goodsLogVO.setGoodslogStatus(""); goodsLogVO.setGoodsId(orderDTO.getGoodsId()); - goodsLogVO.setGoodslogContent("需要 " + type + " 进行资料补充"); + goodsLogVO.setGoodslogContent("需要 " + type + " 进行资料补充
订单号:" + orderDTO.getOrderNumber()); iGoodslogService.save(goodsLogVO); }else{ if (params.get("creator").toString().equals(orderDTO.getSellUserId())) { - params.put("correctionType", "卖家"); + params.put("correctionType", "1"); GoodslogVO goodsLogVO = new GoodslogVO(); goodsLogVO.setGoodslogType("ORDER"); goodsLogVO.setGoodslogTime(DateUtil.getTime()); - goodsLogVO.setGoodslogName("卖家填入补充资料"); + goodsLogVO.setGoodslogName("卖家填入资料补充"); goodsLogVO.setGoodslogStatus(""); goodsLogVO.setGoodsId(orderDTO.getGoodsId()); - goodsLogVO.setGoodslogContent(""); + goodsLogVO.setGoodslogContent("订单号:" + orderDTO.getOrderNumber()); iGoodslogService.save(goodsLogVO); } if (params.get("creator").toString().equals(orderDTO.getBuyUserId())) { - params.put("correctionType", "买家"); + params.put("correctionType", "2"); GoodslogVO goodsLogVO = new GoodslogVO(); goodsLogVO.setGoodslogType("ORDER"); goodsLogVO.setGoodslogTime(DateUtil.getTime()); - goodsLogVO.setGoodslogName("买家填入补充资料"); + goodsLogVO.setGoodslogName("买家填入资料补充"); goodsLogVO.setGoodslogStatus(""); goodsLogVO.setGoodsId(orderDTO.getGoodsId()); - goodsLogVO.setGoodslogContent(""); + goodsLogVO.setGoodslogContent("订单号:" + orderDTO.getOrderNumber()); iGoodslogService.save(goodsLogVO); } } @@ -218,10 +244,30 @@ public class CorrectionServiceImpl extends DefaultBaseService implements ICorrec if (systemConfig.getSmsSwitch()) { if (correctionVO.getCorrectionParentId().equals("0")) { if(correctionVO.getCorrectionType().contains("1")) { - iSmsService.sendContentDirectlyByPhone(goodsonlineDTO.getGoodsLeaderPhone(), "著作权交易订单(" + goodsonlineDTO.getGoodsName() + " " + goodsonlineDTO.getGoodsVersion() + "),需要您补充资料(" + correctionVO.getCorrectionTitle() + ")"); + + JSONArray phoneArray = new JSONArray(); + JSONObject obj = new JSONObject(); + obj.put("phone", goodsonlineDTO.getGoodsLeaderPhone()); + phoneArray.add(obj); + + Map templateParams = new HashMap<>(); + templateParams.put("name", goodsonlineDTO.getGoodsName()); + TenlionSMS.sendMessage(UUIDUtil.getUUID(), "M00015", templateParams, phoneArray); + + // iSmsService.sendContentDirectlyByPhone(goodsonlineDTO.getGoodsLeaderPhone(), "著作权交易订单(" + goodsonlineDTO.getGoodsName() + " " + goodsonlineDTO.getGoodsVersion() + "),需要您补充资料(" + correctionVO.getCorrectionTitle() + ")"); } if(correctionVO.getCorrectionType().contains("2")) { - iSmsService.sendContentDirectlyByPhone(orderDTO.getBuyPhone(), "著作权交易订单(" + goodsonlineDTO.getGoodsName() + " " + goodsonlineDTO.getGoodsVersion() + "),需要您补充资料(" + correctionVO.getCorrectionTitle() + ")"); + + JSONArray phoneArray = new JSONArray(); + JSONObject obj = new JSONObject(); + obj.put("phone", orderDTO.getBuyPhone()); + phoneArray.add(obj); + + Map templateParams = new HashMap<>(); + templateParams.put("name", goodsonlineDTO.getGoodsName()); + TenlionSMS.sendMessage(UUIDUtil.getUUID(), "M00015", templateParams, phoneArray); + + // iSmsService.sendContentDirectlyByPhone(orderDTO.getBuyPhone(), "著作权交易订单(" + goodsonlineDTO.getGoodsName() + " " + goodsonlineDTO.getGoodsVersion() + "),需要您补充资料(" + correctionVO.getCorrectionTitle() + ")"); } } } @@ -282,10 +328,10 @@ public class CorrectionServiceImpl extends DefaultBaseService implements ICorrec Map params1 = new HashMap<>(); params1.put("correctionParentId", dto.getCorrectionId()); params1.put("orderId", dto.getOrderId()); - params1.put("correctionType", "买家"); + params1.put("correctionType", "2"); String id = getDataId(params1); dto.setBuyId(id); - params1.put("correctionType", "卖家"); + params1.put("correctionType", "1"); String id2 = getDataId(params1); dto.setSellId(id2); return dto; @@ -330,10 +376,10 @@ public class CorrectionServiceImpl extends DefaultBaseService implements ICorrec for(CorrectionDTO dto : list) { params1.put("orderId", dto.getOrderId()); params1.put("correctionParentId", dto.getCorrectionId()); - params1.put("correctionType", "买家"); + params1.put("correctionType", "2"); String id = getDataId(params1); dto.setBuyId(id); - params1.put("correctionType", "卖家"); + params1.put("correctionType", "1"); String id2 = getDataId(params1); dto.setSellId(id2); } diff --git a/src/main/java/cn/com/tenlion/aishop/service/goods/IGoodsService.java b/src/main/java/cn/com/tenlion/aishop/service/goods/IGoodsService.java index 1cc1db8..3caa8e6 100644 --- a/src/main/java/cn/com/tenlion/aishop/service/goods/IGoodsService.java +++ b/src/main/java/cn/com/tenlion/aishop/service/goods/IGoodsService.java @@ -1,8 +1,10 @@ package cn.com.tenlion.aishop.service.goods; import cn.com.tenlion.aishop.pojo.dtos.goods.GoodsSimpleDTO; +import cn.com.tenlion.aishop.pojo.vos.goods.GoodsCheckVO; import cn.com.tenlion.aishop.pojo.vos.goodslog.GoodslogVO; import ink.wgink.pojo.ListPage; +import ink.wgink.pojo.result.SuccessResult; import ink.wgink.pojo.result.SuccessResultList; import cn.com.tenlion.aishop.pojo.dtos.goods.GoodsDTO; import cn.com.tenlion.aishop.pojo.vos.goods.GoodsVO; @@ -187,12 +189,13 @@ public interface IGoodsService { */ Integer count(Map params); - void saveCheck(GoodslogVO goodsLogVO); + void saveCheck(GoodsCheckVO goodsCheckVO); void saveSubCheck(String goodsId); void savePublish(String goodsId); - void saveNoPublish(String goodsId); + void saveNoPublish(String goodsId, Boolean noLog); + SuccessResult updateFlag(List goodsIds , String name); } \ No newline at end of file diff --git a/src/main/java/cn/com/tenlion/aishop/service/goods/impl/GoodsServiceImpl.java b/src/main/java/cn/com/tenlion/aishop/service/goods/impl/GoodsServiceImpl.java index 18afe8a..facc308 100644 --- a/src/main/java/cn/com/tenlion/aishop/service/goods/impl/GoodsServiceImpl.java +++ b/src/main/java/cn/com/tenlion/aishop/service/goods/impl/GoodsServiceImpl.java @@ -3,12 +3,16 @@ package cn.com.tenlion.aishop.service.goods.impl; import cn.com.tenlion.aishop.pojo.dtos.goods.GoodsSimpleDTO; import cn.com.tenlion.aishop.pojo.dtos.goodsonline.GoodsonlineDTO; import cn.com.tenlion.aishop.pojo.dtos.order.OrderDTO; +import cn.com.tenlion.aishop.pojo.vos.goods.GoodsCheckVO; import cn.com.tenlion.aishop.pojo.vos.goodslog.GoodslogVO; import cn.com.tenlion.aishop.pojo.vos.goodsonline.GoodsonlineVO; import cn.com.tenlion.aishop.service.goodslog.IGoodslogService; import cn.com.tenlion.aishop.service.goodsonline.IGoodsonlineService; import cn.com.tenlion.aishop.service.order.IOrderService; import cn.com.tenlion.aishop.util.SystemConfig; +import cn.com.tenlion.aishop.util.TenlionSMS; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import ink.wgink.common.base.DefaultBaseService; import ink.wgink.common.component.SecurityComponent; import ink.wgink.exceptions.SaveException; @@ -93,6 +97,7 @@ public class GoodsServiceImpl extends DefaultBaseService implements IGoodsServic if (goodsVO.getGoodsPrice() < 10) { throw new SaveException("价格不能小于10"); } + goodsVO.setGoodsPhoto(goodsVO.getGoodsLocalPhoto()); String goodsId = UUIDUtil.getUUID(); double d = goodsVO.getGoodsPrice() / 100 * systemConfig.getPriceIncreaseRatio(); goodsVO.setGoodsOpenPrice(goodsVO.getGoodsPrice() + d ); @@ -124,6 +129,15 @@ public class GoodsServiceImpl extends DefaultBaseService implements IGoodsServic if(!userId.equals(dto.getCreator())) { throw new SaveException("您不是该著作权商品的发布者"); } + GoodslogVO goodsLogVO = new GoodslogVO(); + goodsLogVO.setGoodslogType("LOG"); + goodsLogVO.setGoodslogTime(DateUtil.getTime()); + goodsLogVO.setGoodslogName("商品被卖家删除"); + goodsLogVO.setGoodslogStatus(""); + goodsLogVO.setGoodsId(id); + goodsLogVO.setGoodslogContent("商品被卖家删除"); + iGoodslogService.save(goodsLogVO); + iGoodsonlineService.removeByGoodId(id); } params.put("goodsIds", ids); if (StringUtils.isBlank(token)) { @@ -155,7 +169,7 @@ public class GoodsServiceImpl extends DefaultBaseService implements IGoodsServic Map params = HashMapUtil.beanToMap(goodsVO); params.put("goodsId", goodsId); GoodsDTO goodsDTO = get(goodsId); - if (goodsDTO.getGoodsStatus().equals("1")) { + if (goodsDTO.getGoodsStatus().equals(1)) { throw new SaveException("著作权商品在上架的时候不能修改"); } String userId = securityComponent.getCurrentUser().getUserId(); @@ -211,10 +225,14 @@ public class GoodsServiceImpl extends DefaultBaseService implements IGoodsServic @Override public List list(Map params) { + if(params.get("goodsType") != null) { + params.put("goodsTypes", Arrays.asList(params.get("goodsType").toString().split(","))); + params.put("goodsType", ""); + } List list = goodsDao.list(params); for(GoodsDTO dto : list) { OrderDTO orderDTO = iOrderService.getOrderByGoodsId(dto.getGoodsId()); - if (orderDTO != null) { + if (orderDTO != null && !orderDTO.getOrderStatus().equals("0")) { dto.setGoodsOrderStatus("1"); }else{ dto.setGoodsOrderStatus("0"); @@ -254,20 +272,42 @@ public class GoodsServiceImpl extends DefaultBaseService implements IGoodsServic private IGoodsonlineService iGoodsonlineService; @Override - public void saveCheck(GoodslogVO goodsLogVO) { - GoodsDTO goodsDTO = get(goodsLogVO.getGoodsId()); + public void saveCheck(GoodsCheckVO goodsCheckVO) { + GoodsDTO goodsDTO = get(goodsCheckVO.getGoodsId()); + + Map params2 = HashMapUtil.beanToMap(goodsCheckVO); + goodsDao.update(params2); + Map params = super.getHashMap(2); - params.put("goodsId", goodsLogVO.getGoodsId()); - params.put("goodsCheckStatus", goodsLogVO.getGoodslogStatus().equals("2") ? "2" : "0"); + params.put("goodsId", goodsCheckVO.getGoodsId()); + params.put("goodsCheckStatus", goodsCheckVO.getGoodslogStatus().equals("2") ? "2" : "0"); + params.put("goodsCheckRemark", goodsCheckVO.getGoodslogStatus().equals("2") ? "" : goodsCheckVO.getGoodslogContent()); goodsDao.updateCheckStatus(params); + + GoodslogVO goodsLogVO = new GoodslogVO(); + goodsLogVO.setGoodsId(goodsCheckVO.getGoodsId()); + goodsLogVO.setGoodslogContent(params.get("goodsCheckRemark").toString()); + goodsLogVO.setGoodslogStatus(params.get("goodsCheckStatus").toString()); + goodsLogVO.setGoodslogType("CHECK"); goodsLogVO.setGoodslogTime(DateUtil.getTime()); goodsLogVO.setGoodslogName("平台对著作权信息进行审核"); goodsLogVO.setGoodslogContent(goodsLogVO.getGoodslogContent()); iGoodslogService.save(goodsLogVO); - if (systemConfig.getSmsSwitch()) { + + JSONArray phoneArray = new JSONArray(); + JSONObject obj = new JSONObject(); + obj.put("phone", goodsDTO.getGoodsLeaderPhone()); + phoneArray.add(obj); + + Map templateParams = new HashMap<>(); + templateParams.put("name", goodsDTO.getGoodsName()); + templateParams.put("status", goodsLogVO.getGoodslogStatus().equals("2") ? "已通过 " : "未通过 "); + TenlionSMS.sendMessage(UUIDUtil.getUUID(), "M00019", templateParams, phoneArray); + +/* if (systemConfig.getSmsSwitch()) { iSmsService.sendContentDirectlyByPhone(goodsDTO.getGoodsLeaderPhone(), "您的著作权商品(" + goodsDTO.getGoodsName() + " " + goodsDTO.getGoodsVersion() + "), 信息审核 " + (goodsLogVO.getGoodslogStatus().equals("2") ? "已通过 " : "未通过 ") + (!goodsLogVO.getGoodslogStatus().equals("2") ? goodsLogVO.getGoodslogContent() : "" )); - } + }*/ // 通过直接上架 if (goodsLogVO.getGoodslogStatus().equals("2")) { List list = iOrderService.getByGoodsId(goodsLogVO.getGoodsId()); @@ -278,6 +318,7 @@ public class GoodsServiceImpl extends DefaultBaseService implements IGoodsServic } } } + goodsDTO = get(goodsCheckVO.getGoodsId()); if (goodsDTO.getGoodsCheckStatus().equals("2")) { Map params1 = super.getHashMap(2); params1.put("goodsId", goodsLogVO.getGoodsId()); @@ -311,7 +352,7 @@ public class GoodsServiceImpl extends DefaultBaseService implements IGoodsServic goodsLogVO.setGoodsId(goodsId); goodsLogVO.setGoodslogContent(""); iGoodslogService.save(goodsLogVO); - + saveNoPublish(goodsId , true); } @Override @@ -357,15 +398,15 @@ public class GoodsServiceImpl extends DefaultBaseService implements IGoodsServic } @Override - public void saveNoPublish(String goodsId) { + public void saveNoPublish(String goodsId , Boolean noLog) { GoodsDTO goodsDTO = get(goodsId); String userId = securityComponent.getCurrentUser().getUserId(); if(!userId.equals(goodsDTO.getCreator())) { throw new SaveException("您不是该著作权商品的发布者"); } - if (!goodsDTO.getGoodsStatus().equals(1)) { +/* if (!goodsDTO.getGoodsStatus().equals(1)) { throw new SaveException("当前著作权商品并未上架"); - } + }*/ List list = iOrderService.getByGoodsId(goodsId); if (list.size() > 0) { for(OrderDTO dto : list) { @@ -379,15 +420,47 @@ public class GoodsServiceImpl extends DefaultBaseService implements IGoodsServic params.put("goodsStatus", "0"); params.put("goodsStatusTime", ""); goodsDao.updateStatus(params); - GoodslogVO goodsLogVO = new GoodslogVO(); - goodsLogVO.setGoodslogType("LOG"); - goodsLogVO.setGoodslogTime(DateUtil.getTime()); - goodsLogVO.setGoodslogName("著作权商品被卖家下架"); - goodsLogVO.setGoodslogStatus(""); - goodsLogVO.setGoodsId(goodsId); - goodsLogVO.setGoodslogContent(""); - iGoodslogService.save(goodsLogVO); + if(noLog != true) { + GoodslogVO goodsLogVO = new GoodslogVO(); + goodsLogVO.setGoodslogType("LOG"); + goodsLogVO.setGoodslogTime(DateUtil.getTime()); + goodsLogVO.setGoodslogName("著作权商品被卖家下架"); + goodsLogVO.setGoodslogStatus(""); + goodsLogVO.setGoodsId(goodsId); + goodsLogVO.setGoodslogContent(""); + iGoodslogService.save(goodsLogVO); + } iGoodsonlineService.saveNoOnline(goodsId); } + @Override + public SuccessResult updateFlag(List goodsIds , String name) { + Map params = super.getHashMap(2); + params.put("goodsIds", goodsIds); + List list = list(params); + for(GoodsDTO dto : list) { + String goodsFlag = dto.getGoodsFlag(); + Set resultSet = StringUtils.isEmpty(goodsFlag) ? new HashSet<>() : new HashSet<>(Arrays.asList(goodsFlag.split(","))); + Map query = super.getHashMap(2); + query.put("goodsId", dto.getGoodsId()); + if(resultSet.contains(name)) { + resultSet.remove(name); + }else{ + resultSet.add(name); + } + query.put("goodsFlag", StringUtils.join(resultSet, ",")); + goodsDao.updateFlag(query); + + GoodslogVO goodsLogVO = new GoodslogVO(); + goodsLogVO.setGoodslogType("LOG"); + goodsLogVO.setGoodslogTime(DateUtil.getTime()); + goodsLogVO.setGoodslogName("商品标签被改为" + StringUtils.join(resultSet, ",")); + goodsLogVO.setGoodslogStatus(""); + goodsLogVO.setGoodsId(dto.getGoodsId()); + goodsLogVO.setGoodslogContent(""); + iGoodslogService.save(goodsLogVO); + } + return null; + } + } \ No newline at end of file diff --git a/src/main/java/cn/com/tenlion/aishop/service/goodslog/IGoodslogService.java b/src/main/java/cn/com/tenlion/aishop/service/goodslog/IGoodslogService.java index 6657113..1b50535 100644 --- a/src/main/java/cn/com/tenlion/aishop/service/goodslog/IGoodslogService.java +++ b/src/main/java/cn/com/tenlion/aishop/service/goodslog/IGoodslogService.java @@ -186,4 +186,5 @@ public interface IGoodslogService { Integer count(Map params); String saveByUser(GoodslogVO goodsLogVO, String userId); + } \ No newline at end of file diff --git a/src/main/java/cn/com/tenlion/aishop/service/goodsonline/IGoodsonlineService.java b/src/main/java/cn/com/tenlion/aishop/service/goodsonline/IGoodsonlineService.java index 9b160ba..aff07b3 100644 --- a/src/main/java/cn/com/tenlion/aishop/service/goodsonline/IGoodsonlineService.java +++ b/src/main/java/cn/com/tenlion/aishop/service/goodsonline/IGoodsonlineService.java @@ -20,6 +20,12 @@ import java.util.Map; **/ public interface IGoodsonlineService { + /** + * 删除商品的上架信息 + * @param goodId + */ + public void removeByGoodId(String goodId); + void saveOnline(String goodsId); /** diff --git a/src/main/java/cn/com/tenlion/aishop/service/goodsonline/impl/GoodsonlineServiceImpl.java b/src/main/java/cn/com/tenlion/aishop/service/goodsonline/impl/GoodsonlineServiceImpl.java index 780cf4c..b1c3629 100644 --- a/src/main/java/cn/com/tenlion/aishop/service/goodsonline/impl/GoodsonlineServiceImpl.java +++ b/src/main/java/cn/com/tenlion/aishop/service/goodsonline/impl/GoodsonlineServiceImpl.java @@ -51,12 +51,19 @@ public class GoodsonlineServiceImpl extends DefaultBaseService implements IGoods if (page.getRows() > 12 ) { page.setRows(12); } + Map params = page.getParams(); + if(params.get("goodsType") != null) { + params.put("goodsTypes", Arrays.asList(params.get("goodsType").toString().split(","))); + params.put("goodsType", ""); + } PageHelper.startPage(page.getPage(), page.getRows()); List goodsDTOs = goodsonlineDao.listPageAll(page.getParams()); for(GoodsSimpleDTO dto : goodsDTOs) { - DataDTO dataDTO1 = iDataService.get(dto.getGoodsDevelop()); - if (dataDTO1 != null) { - dto.setGoodsDevelop(dataDTO1.getDataName()); + if(!StringUtils.isEmpty(dto.getGoodsDevelop())) { + DataDTO dataDTO1 = iDataService.get(dto.getGoodsDevelop()); + if (dataDTO1 != null) { + dto.setGoodsDevelop(dataDTO1.getDataName()); + } } if ("1".equals(dto.getGoodsGetType())) { dto.setGoodsGetType("原始取得"); @@ -78,9 +85,11 @@ public class GoodsonlineServiceImpl extends DefaultBaseService implements IGoods if (dto == null) { return null; } - DataDTO dataDTO1 = iDataService.get(dto.getGoodsDevelop()); - if (dataDTO1 != null) { - dto.setGoodsDevelop(dataDTO1.getDataName()); + if(!StringUtils.isEmpty(dto.getGoodsDevelop())) { + DataDTO dataDTO1 = iDataService.get(dto.getGoodsDevelop()); + if (dataDTO1 != null) { + dto.setGoodsDevelop(dataDTO1.getDataName()); + } } if ("1".equals(dto.getGoodsGetType())) { dto.setGoodsGetType("原始取得"); @@ -103,9 +112,11 @@ public class GoodsonlineServiceImpl extends DefaultBaseService implements IGoods params.put("goodsId", goodsId); params.put("goodsVnumber", goodsVnumber); GoodsonlineDTO dto = goodsonlineDao.getByGoodsIdAndGoodsNumber(params); - DataDTO dataDTO1 = iDataService.get(dto.getGoodsDevelop()); - if (dataDTO1 != null) { - dto.setGoodsDevelop(dataDTO1.getDataName()); + if (!StringUtils.isEmpty(dto.getGoodsDevelop())) { + DataDTO dataDTO1 = iDataService.get(dto.getGoodsDevelop()); + if (dataDTO1 != null) { + dto.setGoodsDevelop(dataDTO1.getDataName()); + } } if ("1".equals(dto.getGoodsGetType())) { dto.setGoodsGetType("原始取得"); @@ -134,9 +145,11 @@ public class GoodsonlineServiceImpl extends DefaultBaseService implements IGoods if (dto == null) { return null; } - DataDTO dataDTO1 = iDataService.get(dto.getGoodsDevelop()); - if (dataDTO1 != null) { - dto.setGoodsDevelop(dataDTO1.getDataName()); + if(!StringUtils.isEmpty(dto.getGoodsDevelop())) { + DataDTO dataDTO1 = iDataService.get(dto.getGoodsDevelop()); + if (dataDTO1 != null) { + dto.setGoodsDevelop(dataDTO1.getDataName()); + } } if ("1".equals(dto.getGoodsGetType())) { dto.setGoodsGetType("原始取得"); @@ -196,6 +209,14 @@ public class GoodsonlineServiceImpl extends DefaultBaseService implements IGoods return goodsonlineId; } + @Override + public void removeByGoodId(String goodId) { + Map params = getHashMap(2); + params.put("goodsId", goodId); + setUpdateInfo(params); + goodsonlineDao.removeByGoodId(params); + } + @Override public void remove(List ids) { remove(null, ids); diff --git a/src/main/java/cn/com/tenlion/aishop/service/order/impl/OrderServiceImpl.java b/src/main/java/cn/com/tenlion/aishop/service/order/impl/OrderServiceImpl.java index 8d546a6..ec3af08 100644 --- a/src/main/java/cn/com/tenlion/aishop/service/order/impl/OrderServiceImpl.java +++ b/src/main/java/cn/com/tenlion/aishop/service/order/impl/OrderServiceImpl.java @@ -9,20 +9,27 @@ import cn.com.tenlion.aishop.pojo.vos.account.PayVO; import cn.com.tenlion.aishop.pojo.vos.goodslog.GoodslogVO; import cn.com.tenlion.aishop.pojo.vos.order.OrderBuyVO; import cn.com.tenlion.aishop.pojo.vos.order.OrderEvaluateVO; +import cn.com.tenlion.aishop.service.correction.ICorrectionService; import cn.com.tenlion.aishop.service.goods.IGoodsService; import cn.com.tenlion.aishop.service.goodslog.IGoodslogService; import cn.com.tenlion.aishop.service.goodsonline.IGoodsonlineService; import cn.com.tenlion.aishop.service.remote.IRemoteService; import cn.com.tenlion.aishop.util.PayUtil; import cn.com.tenlion.aishop.util.SystemConfig; +import cn.com.tenlion.aishop.util.TenlionSMS; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; import ink.wgink.common.base.DefaultBaseService; import ink.wgink.common.component.SecurityComponent; import ink.wgink.exceptions.SaveException; import ink.wgink.interfaces.sms.ISmsBaseService; +import ink.wgink.module.dictionary.pojo.dtos.AreaDTO; import ink.wgink.module.dictionary.pojo.dtos.DataDTO; +import ink.wgink.module.dictionary.service.IAreaService; import ink.wgink.module.dictionary.service.IDataService; import ink.wgink.module.sms.service.sms.ISmsService; import ink.wgink.pojo.ListPage; +import ink.wgink.pojo.bos.UserInfoBO; import ink.wgink.pojo.result.SuccessResult; import ink.wgink.pojo.result.SuccessResultList; import ink.wgink.util.date.DateUtil; @@ -43,6 +50,7 @@ import org.springframework.core.annotation.Order; import org.springframework.stereotype.Service; import java.text.SimpleDateFormat; +import java.time.LocalDate; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -64,6 +72,8 @@ public class OrderServiceImpl extends DefaultBaseService implements IOrderServic @Autowired private IGoodsService iGoodsService; @Autowired + private ICorrectionService iCorrectionService; + @Autowired protected SecurityComponent securityComponent; @Override @@ -95,7 +105,7 @@ public class OrderServiceImpl extends DefaultBaseService implements IOrderServic randomPart.append(RANDOM.nextInt(10)); } // 拼接订单号 - return datePart + randomPart.toString(); + return "SHOP" + datePart + randomPart.toString(); } @Autowired @@ -106,7 +116,8 @@ public class OrderServiceImpl extends DefaultBaseService implements IOrderServic @Override public String saveReturnId(String token, OrderVO orderVO) { - String orderId = UUIDUtil.getUUID(); + String orderNumber = generateOrderNumber(); + String orderId = orderNumber; GoodsSimpleDTO goodsonlineDTO = iGoodsonlineService.getAll(orderVO.getGoodsId()); if (goodsonlineDTO == null) { throw new SaveException("该著作权商品已不存在"); @@ -120,13 +131,15 @@ public class OrderServiceImpl extends DefaultBaseService implements IOrderServic throw new SaveException("您不能购买自己的著作权商品"); } GoodsDTO goodsDTO = iGoodsService.get(goodsonlineDTO.getGoodsId()); + if(goodsDTO == null) { + throw new SaveException("商品已不存在"); + } orderVO.setPayMoney(goodsonlineDTO.getGoodsOpenPrice()); orderVO.setSellMoney(goodsonlineDTO.getGoodsPrice()); orderVO.setSellUserId(goodsDTO.getCreator()); orderVO.setBuyUserId(securityComponent.getCurrentUser().getUserId()); orderVO.setGoodsVnumber(goodsonlineDTO.getGoodsVnumber()); orderVO.setCreateTime(DateUtil.getTime()); - String orderNumber = generateOrderNumber(); orderVO.setOrderNumber(orderNumber); orderVO.setOrderStatus("1"); Map params = HashMapUtil.beanToMap(orderVO); @@ -145,9 +158,22 @@ public class OrderServiceImpl extends DefaultBaseService implements IOrderServic goodsLogVO.setGoodsId(goodsonlineDTO.getGoodsId()); goodsLogVO.setGoodslogContent("订单号:" + orderNumber); iGoodslogService.save(goodsLogVO); - if (systemConfig.getSmsSwitch()) { + + + + JSONArray phoneArray = new JSONArray(); + JSONObject obj = new JSONObject(); + obj.put("phone", goodsDTO.getGoodsLeaderPhone()); + phoneArray.add(obj); + + Map templateParams = new HashMap<>(); + templateParams.put("name", goodsDTO.getGoodsName()); + TenlionSMS.sendMessage(UUIDUtil.getUUID(), "M00014", templateParams, phoneArray); + + +/* if (systemConfig.getSmsSwitch()) { iSmsService.sendContentDirectlyByPhone(goodsDTO.getGoodsLeaderPhone(), "您的著作权商品(" + goodsDTO.getGoodsName() + " " + goodsDTO.getGoodsVersion() + ") 已被用户下单购买"); - } + }*/ return orderId; } @@ -231,9 +257,49 @@ public class OrderServiceImpl extends DefaultBaseService implements IOrderServic @Override public List list(Map params) { List list = orderDao.list(params); + Map query = super.getHashMap(2); + String userId = securityComponent.getCurrentUser().getUserId(); for(OrderDTO dto : list) { + query.put("orderId", dto.getOrderId()); GoodsSimpleDTO goodsonDTO = iGoodsonlineService.getByGoodsId(dto.getGoodsId(), dto.getGoodsVnumber()); + if(goodsonDTO == null) { + System.out.println(1); + } dto.setGoodsDTO(goodsonDTO); + /** + * 查询需要补正的数量 + */ + if("3,4,5,6".contains(dto.getOrderStatus())) { + // 查询待补正的信息内容 + Integer count = 0; + if(userId.equals(dto.getSellUserId())) { + // 卖家 + query.put("correctionType", "1"); + query.put("correctionParentId", "0"); + int count1 = iCorrectionService.count(query); + + query.put("correctionType", "1"); + query.put("createUserId", dto.getSellUserId()); + query.put("correctionParentId", null); + query.put("notBuZheng", "notBuZheng"); + int count2 = iCorrectionService.count(query); + + count = count1 - count2; + }else if(userId.equals(dto.getBuyUserId())){ + query.put("correctionType", "2"); + query.put("correctionParentId", "0"); + int count1 = iCorrectionService.count(query); + + query.put("correctionType", "2"); + query.put("createUserId", dto.getBuyUserId()); + query.put("correctionParentId", null); + query.put("notBuZheng", "notBuZheng"); + int count2 = iCorrectionService.count(query); + + count = count1 - count2; + } + dto.setWaitCorrectionCount(count); + } } return list; } @@ -416,9 +482,26 @@ public class OrderServiceImpl extends DefaultBaseService implements IOrderServic goodsLogVO.setGoodsId(orderDTO.getGoodsId()); goodsLogVO.setGoodslogContent("订单号:" + orderDTO.getOrderNumber()); iGoodslogService.save(goodsLogVO); - if (systemConfig.getSmsSwitch()) { + + PayVO payVO = new PayVO(); + payVO.setOrderId(orderId); + payVO.setUserId(orderDTO.getSellUserId()); // 代理商userId + payVO.setAccountMoney(PayUtil.buiderMoney(dto.getGoodsPrice())); + payVO.setDescription("软著出售收益." + simpleDTO.getGoodsName()); + remoteService.savePayIn(payVO); + + JSONArray phoneArray = new JSONArray(); + JSONObject obj = new JSONObject(); + obj.put("phone", orderDTO.getBuyPhone()); + phoneArray.add(obj); + + Map templateParams = new HashMap<>(); + templateParams.put("name", simpleDTO.getGoodsName() ); + TenlionSMS.sendMessage(UUIDUtil.getUUID(), "M00016", templateParams, phoneArray); + +/* if (systemConfig.getSmsSwitch()) { iSmsService.sendContentDirectlyByPhone(orderDTO.getBuyPhone(), "您购买的著作权商品(" + simpleDTO.getGoodsName() + " " + simpleDTO.getGoodsVersion() + ") 已经过户完成, 请登录平台查看。"); - } + }*/ } @Override @@ -447,6 +530,8 @@ public class OrderServiceImpl extends DefaultBaseService implements IOrderServic @Autowired private IDataService iDataService; + @Autowired + private IAreaService iAreaService; @Override public OrderBaseDTO getOrder(String orderId) { @@ -454,28 +539,114 @@ public class OrderServiceImpl extends DefaultBaseService implements IOrderServic OrderDTO orderDTO = get(orderId); OrderBaseDTO baseDTO = new OrderBaseDTO(); BeanUtils.copyProperties(orderDTO, baseDTO); + UserInfoBO userInfoBO = securityComponent.getCurrentUser(); // 管理员角色才可以看买家卖家信息 - if (securityComponent.getCurrentUser().getUserUsername().equals("admin") || systemRoleId.contains(securityComponent.getCurrentUser().getRoles().get(0).getRoleId())) { + if (userInfoBO.getUserUsername().equals("admin") || systemRoleId.contains(userInfoBO.getRoles().get(0).getRoleId()) + || userInfoBO.getUserId().equals(orderDTO.getBuyUserId()) || userInfoBO.getUserId().equals(orderDTO.getSellUserId()) + ) { // 查询卖家买家信息 - GoodsSimplePersonDTO buy = new GoodsSimplePersonDTO(); - buy.setCity(orderDTO.getBuyCity()); - buy.setName(orderDTO.getBuyName()); - buy.setType(orderDTO.getBuyType().equals("1") ? "自然人" : orderDTO.getBuyType().equals("2") ? "法人" : "非法人组织或其他"); - buy.setPhone(orderDTO.getBuyPhone()); - buy.setIdcardType(orderDTO.getBuyIdcardType()); - buy.setIdcard(orderDTO.getBuyIdcard()); - baseDTO.setBuyUserDTO(buy); + if(userInfoBO.getUserId().equals(orderDTO.getBuyUserId())) { + // 买家 + GoodsSimplePersonDTO buy = new GoodsSimplePersonDTO(); + String[] arr = orderDTO.getBuyCity().split(","); + List area = new ArrayList<>(); + for(String area1 : arr) { + if(StringUtils.isEmpty(area1)) {continue;} + AreaDTO A = iAreaService.get(area1); + if(A != null) + area.add(A.getAreaName()); + } + buy.setCity(StringUtils.join(area, " ")); + buy.setName(orderDTO.getBuyName()); + buy.setType(orderDTO.getBuyType().equals("1") ? "自然人" : orderDTO.getBuyType().equals("2") ? "法人" : "非法人组织或其他"); + buy.setPhone(orderDTO.getBuyPhone()); + if(!StringUtils.isEmpty(orderDTO.getBuyIdcardType())) { + buy.setIdcardType(iDataService.get(orderDTO.getBuyIdcardType()).getDataName()); + } + buy.setIdcard(orderDTO.getBuyIdcard()); + baseDTO.setBuyUserDTO(buy); + }else if(userInfoBO.getUserId().equals(orderDTO.getSellUserId())) { + // 卖家 + GoodsSimplePersonDTO sell = new GoodsSimplePersonDTO(); + GoodsonlineDTO goodsonlineDTO = iGoodsonlineService.getByGoodsIdAndNumber(orderDTO.getGoodsId(), orderDTO.getGoodsVnumber()); + sell.setName(goodsonlineDTO.getGoodsLeader()); + sell.setType(goodsonlineDTO.getGoodsLeaderType()); + sell.setPhone(goodsonlineDTO.getGoodsLeaderPhone()); + sell.setCity(goodsonlineDTO.getGoodsLeaderCity1()); + sell.setIdcardType(goodsonlineDTO.getGoodsLeaderIdcardType()); + sell.setIdcard(goodsonlineDTO.getGoodsLeaderIdcard()); + baseDTO.setSellUserDTO(sell); + }else{ + // 买家 + GoodsSimplePersonDTO buy = new GoodsSimplePersonDTO(); + String[] arr = orderDTO.getBuyCity().split(","); + List area = new ArrayList<>(); + for(String area1 : arr) { + if(StringUtils.isEmpty(area1)) {continue;} + AreaDTO A = iAreaService.get(area1); + if(A != null) + area.add(A.getAreaName()); + } + buy.setCity(StringUtils.join(area, " ")); + buy.setName(orderDTO.getBuyName()); + buy.setType(orderDTO.getBuyType().equals("1") ? "自然人" : orderDTO.getBuyType().equals("2") ? "法人" : "非法人组织或其他"); + buy.setPhone(orderDTO.getBuyPhone()); + if(!StringUtils.isEmpty(orderDTO.getBuyIdcardType())) { + buy.setIdcardType(iDataService.get(orderDTO.getBuyIdcardType()).getDataName()); + } + buy.setIdcard(orderDTO.getBuyIdcard()); + baseDTO.setBuyUserDTO(buy); - GoodsSimplePersonDTO sell = new GoodsSimplePersonDTO(); - GoodsonlineDTO goodsonlineDTO = iGoodsonlineService.getByGoodsIdAndNumber(orderDTO.getGoodsId(), orderDTO.getGoodsVnumber()); - sell.setName(goodsonlineDTO.getGoodsLeader()); - sell.setType(goodsonlineDTO.getGoodsLeaderType()); - sell.setPhone(goodsonlineDTO.getGoodsLeaderPhone()); - sell.setCity(goodsonlineDTO.getGoodsLeaderCity1()); - sell.setIdcardType(goodsonlineDTO.getGoodsLeaderIdcardType()); - sell.setIdcard(goodsonlineDTO.getGoodsLeaderIdcard()); - baseDTO.setSellUserDTO(sell); + // 卖家 + GoodsSimplePersonDTO sell = new GoodsSimplePersonDTO(); + GoodsonlineDTO goodsonlineDTO = iGoodsonlineService.getByGoodsIdAndNumber(orderDTO.getGoodsId(), orderDTO.getGoodsVnumber()); + sell.setName(goodsonlineDTO.getGoodsLeader()); + sell.setType(goodsonlineDTO.getGoodsLeaderType()); + sell.setPhone(goodsonlineDTO.getGoodsLeaderPhone()); + sell.setCity(goodsonlineDTO.getGoodsLeaderCity1()); + sell.setIdcardType(goodsonlineDTO.getGoodsLeaderIdcardType()); + sell.setIdcard(goodsonlineDTO.getGoodsLeaderIdcard()); + baseDTO.setSellUserDTO(sell); + } } + + /** + * 查询需要补正的数量 + */ + Map query = super.getHashMap(2); + query.put("orderId" , orderId); + if("3,4,5,6".contains(orderDTO.getOrderStatus())) { + // 查询待补正的信息内容 + Integer count = 0; + if(userInfoBO.getUserId().equals(orderDTO.getSellUserId())) { + // 卖家 + query.put("correctionType", "1"); + query.put("correctionParentId", "0"); + int count1 = iCorrectionService.count(query); + + query.put("correctionType", "1"); + query.put("createUserId", orderDTO.getSellUserId()); + query.put("correctionParentId", null); + query.put("notBuZheng", "notBuZheng"); + int count2 = iCorrectionService.count(query); + + count = count1 - count2; + }else if(userInfoBO.getUserId().equals(orderDTO.getBuyUserId())){ + query.put("correctionType", "2"); + query.put("correctionParentId", "0"); + int count1 = iCorrectionService.count(query); + + query.put("correctionType", "2"); + query.put("createUserId", orderDTO.getBuyUserId()); + query.put("correctionParentId", null); + query.put("notBuZheng", "notBuZheng"); + int count2 = iCorrectionService.count(query); + + count = count1 - count2; + } + baseDTO.setWaitCorrectionCount(count); + } + baseDTO.setBuyUserId(orderDTO.getBuyUserId()); baseDTO.setSellUserId(orderDTO.getSellUserId()); baseDTO.setStatus(Integer.valueOf(orderDTO.getOrderStatus())); @@ -494,6 +665,7 @@ public class OrderServiceImpl extends DefaultBaseService implements IOrderServic }else if (orderDTO.getOrderStatus().equals("6")) { baseDTO.setOrderStatus("发票已开具"); } + GoodsSimpleDTO goodsonlineDTO = iGoodsonlineService.getByGoodsId(orderDTO.getGoodsId(), orderDTO.getGoodsVnumber()); baseDTO.setGoodsDTO(goodsonlineDTO); return baseDTO; @@ -571,13 +743,36 @@ public class OrderServiceImpl extends DefaultBaseService implements IOrderServic goodsLogVO.setGoodslogContent("订单号:" + orderDTO.getOrderNumber()); iGoodslogService.saveByUser(goodsLogVO, userId); if (systemConfig.getSmsSwitch()) { - iSmsService.sendContentDirectlyByPhone(orderDTO.getBuyPhone(), "您购买的著作权商品(" + simpleDTO.getGoodsName() + " " + simpleDTO.getGoodsVersion() + ") 已经过户完成, 请登录平台查看。"); + + + JSONArray phoneArray = new JSONArray(); + JSONObject obj = new JSONObject(); + obj.put("phone", orderDTO.getBuyPhone()); + phoneArray.add(obj); + + Map templateParams = new HashMap<>(); + templateParams.put("name", simpleDTO.getGoodsName()); + TenlionSMS.sendMessage(UUIDUtil.getUUID(), "M00016", templateParams, phoneArray); + + // iSmsService.sendContentDirectlyByPhone(orderDTO.getBuyPhone(), "您购买的著作权商品(" + simpleDTO.getGoodsName() + " " + simpleDTO.getGoodsVersion() + ") 已经过户完成, 请登录平台查看。"); } } @Override public void updateClose() { - orderDao.updateClose(new HashMap<>()); + List orderList = orderDao.getCloseAll(new HashMap<>()); + for(String orderId : orderList) { + OrderDTO orderDTO = get(orderId); + orderDao.updateClose(orderId); + GoodslogVO goodsLogVO = new GoodslogVO(); + goodsLogVO.setGoodslogType("ORDER"); + goodsLogVO.setGoodslogTime(DateUtil.getTime()); + goodsLogVO.setGoodslogName("系统自动关闭订单"); + goodsLogVO.setGoodslogStatus(""); + goodsLogVO.setGoodsId(orderDTO.getGoodsId()); + goodsLogVO.setGoodslogContent("订单号:" + orderDTO.getOrderNumber() + "
买家下单后60分内未付款"); + iGoodslogService.saveByUser(goodsLogVO, "1"); + } } } \ No newline at end of file diff --git a/src/main/java/cn/com/tenlion/aishop/service/remote/IRemoteApi.java b/src/main/java/cn/com/tenlion/aishop/service/remote/IRemoteApi.java index a6d32b4..9f2a1b5 100644 --- a/src/main/java/cn/com/tenlion/aishop/service/remote/IRemoteApi.java +++ b/src/main/java/cn/com/tenlion/aishop/service/remote/IRemoteApi.java @@ -46,7 +46,7 @@ public interface IRemoteApi { * @param accessToken * @param vo */ - @RemotePostMethod("resource/accountitem/pay-out/agent") + @RemotePostMethod("resource/accountitem/pay-out/shop") void savePayOut(@RemoteServerParams String serverPath, @RemoteQueryParams("access_token") String accessToken, @RemoteJsonBodyParams PayVO vo); /** @@ -55,7 +55,7 @@ public interface IRemoteApi { * @param accessToken * @param vo */ - @RemotePostMethod("resource/accountitem/pay-in/agent") + @RemotePostMethod("resource/accountitem/pay-in/shop") void savePayIn(@RemoteServerParams String serverPath, @RemoteQueryParams("access_token") String accessToken, @RemoteJsonBodyParams PayVO vo); } diff --git a/src/main/java/cn/com/tenlion/aishop/util/CloseOrderTask.java b/src/main/java/cn/com/tenlion/aishop/util/CloseOrderTask.java index 0498b34..7180a4e 100644 --- a/src/main/java/cn/com/tenlion/aishop/util/CloseOrderTask.java +++ b/src/main/java/cn/com/tenlion/aishop/util/CloseOrderTask.java @@ -14,7 +14,7 @@ public class CloseOrderTask { @Autowired private IOrderService iOrderService; - @Scheduled(cron = "0 */2 * * * ?") + @Scheduled(cron = "0 */2 * * * ?") // 2分钟 public void task() { iOrderService.updateClose(); } diff --git a/src/main/java/cn/com/tenlion/aishop/util/MoneyToChinese.java b/src/main/java/cn/com/tenlion/aishop/util/MoneyToChinese.java new file mode 100644 index 0000000..7a89022 --- /dev/null +++ b/src/main/java/cn/com/tenlion/aishop/util/MoneyToChinese.java @@ -0,0 +1,172 @@ +package cn.com.tenlion.aishop.util; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.regex.Pattern; + +/** + * 修正版:价格转中文大写工具类(兼容Java 8+,修复120等场景错误) + */ +public class MoneyToChinese { + private static final String[] NUM_CHAR = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}; + private static final String[] UNIT_INT = {"", "拾", "佰", "仟"}; // 个位、十位、百位、千位的单位 + private static final String[] UNIT_BIG = {"元", "万", "亿", "兆"}; // 大单位(元、万、亿、兆) + private static final String[] UNIT_DEC = {"角", "分"}; // 小数单位 + + /** + * 核心转换方法 + */ + public static String convert(Object money) { + String moneyStr = parseMoney(money); + if (!checkMoney(moneyStr)) { + throw new IllegalArgumentException("无效金额格式,仅支持0 ≤ 金额 ≤ 999999999999999.99,且最多两位小数"); + } + + // 拆分整数和小数部分 + String[] parts = moneyStr.split("\\."); + String integerPart = parts[0]; + String decimalPart = parts.length > 1 ? parts[1] : "00"; + + // 转换整数部分(修复分组逻辑) + String intChinese = convertInteger(integerPart); + // 转换小数部分 + String decChinese = convertDecimal(decimalPart); + + return mergeResult(intChinese, decChinese); + } + + // 解析输入金额为字符串 + private static String parseMoney(Object money) { + if (money instanceof BigDecimal) { + return ((BigDecimal) money).stripTrailingZeros().toPlainString(); + } else if (money instanceof Double) { + return String.format("%.2f", money); + } else { + return money.toString().trim(); + } + } + + // 校验金额格式 + private static boolean checkMoney(String moneyStr) { + String regex = "^0$|^[1-9]\\d{0,14}(\\.\\d{1,2})?$"; // 整数最多15位(999万亿) + return Pattern.matches(regex, moneyStr); + } + + // 转换整数部分(关键修复:调整分组逻辑) + private static String convertInteger(String integerPart) { + // 特殊情况:整数部分为0(如0.56) + if ("0".equals(integerPart)) { + return ""; + } + + // 从右往左每4位分组(不补前导零) + List groups = new ArrayList<>(); + int len = integerPart.length(); + for (int i = len; i > 0; i -= 4) { + int start = Math.max(0, i - 4); + groups.add(integerPart.substring(start, i)); + } + Collections.reverse(groups); // 反转后顺序为高位到低位(如123456789 → [1, 2345, 6789]) + + StringBuilder result = new StringBuilder(); + for (int i = 0; i < groups.size(); i++) { + String group = groups.get(i); + String groupStr = convertFourDigit(group); // 转换当前组的数字 + int bigUnitIndex = groups.size() - 1 - i; // 大单位索引(兆/亿/万/元) + + // 过滤全零的组(如100000000 → 分组为[1, 0000, 0000],中间的0000组不处理) + if (!groupStr.isEmpty()) { + result.append(groupStr).append(UNIT_BIG[bigUnitIndex]); + } + } + return result.toString(); + } + + // 转换任意长度(1-4位)的数字组(关键修复:调整单位匹配逻辑) + private static String convertFourDigit(String group) { + int length = group.length(); + if (length == 0) return ""; + + StringBuilder sb = new StringBuilder(); + boolean hasZero = false; + + for (int i = 0; i < length; i++) { + int num = group.charAt(i) - '0'; + int unitIndex = length - 1 - i; // 单位索引(如3位数的第0位是百位,对应UNIT_INT[2]) + + if (num == 0) { + hasZero = true; + } else { + if (hasZero) { + sb.append(NUM_CHAR[0]); // 补零(仅当之前有零且当前位非零时) + hasZero = false; + } + sb.append(NUM_CHAR[num]); // 数字大写 + sb.append(UNIT_INT[unitIndex]); // 追加单位(拾/佰/仟) + } + } + + // 移除末尾的单个零(如"壹佰贰拾零" → "壹佰贰拾",但正常逻辑不会出现) + if (sb.length() > 0 && sb.charAt(sb.length() - 1) == '零') { + sb.deleteCharAt(sb.length() - 1); + } + return sb.toString(); + } + + // 转换小数部分 + private static String convertDecimal(String decimalPart) { + // 补零到两位 + if (decimalPart.length() < 2) { + decimalPart = decimalPart + repeatString("0", 2 - decimalPart.length()); + } + + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < 2; i++) { + int num = decimalPart.charAt(i) - '0'; + if (num != 0) { + sb.append(NUM_CHAR[num]).append(UNIT_DEC[i]); + } + } + return sb.toString(); + } + + // 合并整数和小数结果 + private static String mergeResult(String intChinese, String decChinese) { + // 情况1:整数和小数都为0(0.00) + if (intChinese.isEmpty() && decChinese.isEmpty()) { + return "零元整"; + } + // 情况2:只有整数部分(如100.00) + if (decChinese.isEmpty()) { + return intChinese + "整"; + } + // 情况3:整数为0(如0.56) + if (intChinese.isEmpty()) { + return decChinese; + } + // 正常情况(如123.45) + return intChinese + (decChinese.startsWith("零") ? decChinese.substring(1) : decChinese); + } + + // 兼容低版本JDK的字符串重复方法 + private static String repeatString(String str, int count) { + if (count <= 0) return ""; + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < count; i++) { + sb.append(str); + } + return sb.toString(); + } + + // 测试用例(重点验证120等场景) + public static void main(String[] args) { + System.out.println(convert("120")); // 壹佰贰拾元整(修复后正确) + System.out.println(convert("100")); // 壹佰元整 + System.out.println(convert("1001.05")); // 壹仟零壹元零伍分 + System.out.println(convert("123456789.99")); // 壹亿贰仟叁佰肆拾伍万陆仟柒佰捌拾玖元玖角玖分 + System.out.println(convert("0.56")); // 伍角陆分 + System.out.println(convert("1000000000")); // 壹拾亿整 + System.out.println(convert("999999999999999.99")); // 玖佰玖拾玖兆玖仟玖佰玖拾玖亿玖仟玖佰玖拾玖万玖仟玖佰玖拾玖元玖角玖分 + } +} \ No newline at end of file diff --git a/src/main/java/cn/com/tenlion/aishop/util/OCRUtil.java b/src/main/java/cn/com/tenlion/aishop/util/OCRUtil.java index 69b6672..a3e9b61 100644 --- a/src/main/java/cn/com/tenlion/aishop/util/OCRUtil.java +++ b/src/main/java/cn/com/tenlion/aishop/util/OCRUtil.java @@ -20,7 +20,7 @@ public class OCRUtil { // 英文库+简体中文 instance.setLanguage("eng+chi_sim"); // 待识别的图片路径 - File image = new File("D:\\tupian\\2.png"); + File image = new File("D:\\1744962227845.png"); BufferedImage bufferedImage = ImageIO.read(new FileInputStream(image)); bufferedImage = ImageFilter.imageScale(bufferedImage, 3174, 4293); int width = bufferedImage.getWidth(); @@ -31,7 +31,7 @@ public class OCRUtil { // 将所有不是黑色的转为白色5 softwareName = convertWhite(softwareName); // 测试输出 - OutputStream OUT = new FileOutputStream("D:\\tupian\\softwareName.jpg"); + OutputStream OUT = new FileOutputStream("D:\\softwareName.jpg"); ImageIO.write( softwareName,"jpg", OUT); // 识别 String softwareNameContent = instance.doOCR(softwareName); @@ -79,7 +79,7 @@ public class OCRUtil { // 区域截取/软件名称 BufferedImage imageN = ImageFilter.subImage(image, 0, height * (i - 1), image.getWidth(), height); // 测试输出 - OutputStream OUT = new FileOutputStream("D:\\tupian\\1-"+ fieldName + i + ".jpg"); + OutputStream OUT = new FileOutputStream("D:\\1-"+ fieldName + i + ".jpg"); ImageIO.write( imageN,"jpg", OUT); OUT.close(); // 识别 diff --git a/src/main/java/cn/com/tenlion/aishop/util/OperatorShopSpringUtil.java b/src/main/java/cn/com/tenlion/aishop/util/OperatorShopSpringUtil.java new file mode 100644 index 0000000..d9e6aa4 --- /dev/null +++ b/src/main/java/cn/com/tenlion/aishop/util/OperatorShopSpringUtil.java @@ -0,0 +1,44 @@ +package cn.com.tenlion.aishop.util; + +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Component; + +@Component +public class OperatorShopSpringUtil implements ApplicationContextAware { + + private static ApplicationContext applicationContext; + + @Override + public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + if(OperatorShopSpringUtil.applicationContext == null) { + OperatorShopSpringUtil.applicationContext = applicationContext; + } + System.out.println("---------------------------------------------------------------------"); + System.out.println("--------------------------OperatorShopSpringUtil------------------------"); + System.out.println("========ApplicationContext配置成功,在普通类可以通过调用SpringUtils.getAppContext()获取applicationContext对象,applicationContext="+OperatorShopSpringUtil.applicationContext+"========"); + System.out.println("---------------------------------------------------------------------"); + } + + //获取applicationContext + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + + //通过name获取 Bean. + public static Object getBean(String name){ + return getApplicationContext().getBean(name); + } + + //通过class获取Bean. + public static T getBean(Class clazz){ + return getApplicationContext().getBean(clazz); + } + + //通过name,以及Clazz返回指定的Bean + public static T getBean(String name,Class clazz){ + return getApplicationContext().getBean(name, clazz); + } + +} \ No newline at end of file diff --git a/src/main/java/cn/com/tenlion/aishop/util/TenlionSMS.java b/src/main/java/cn/com/tenlion/aishop/util/TenlionSMS.java new file mode 100644 index 0000000..71349ea --- /dev/null +++ b/src/main/java/cn/com/tenlion/aishop/util/TenlionSMS.java @@ -0,0 +1,186 @@ +package cn.com.tenlion.aishop.util; + + +import cn.com.tenlion.aishop.properties.SystemApiPathProperties; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import org.apache.http.HttpResponse; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClients; +import org.apache.http.util.EntityUtils; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +/** + * 腾狮短信工具类 + * @author Administrator + * 崔宝铖 2023年5月12日11:28:11 + */ +public class TenlionSMS { + + private static String smsKey = "e73296ba-72f7-43cc-92eb-9777780a19c0"; + + private static String smsSecret = "W+JbRu58Qzw3czp5jQEnd3wScA/fVDvd"; + + private static String systemUrl = ""; + // 短信发送地址 + private static String sendSMSUrl = systemUrl + "/app/send"; + // 短信状态查询地址 + private static String getStatusSMSUrl = systemUrl + "/app/send/status"; + // 短信回复列表查询 + private static String getReplySMSUrl = systemUrl + "/app/send/reply"; + // 账号可用模板列表查询 + private static String getTemplateSMSUrl = systemUrl + "/app/send/template"; + + static{ + SystemApiPathProperties apiPathProperties = OperatorShopSpringUtil.getBean(SystemApiPathProperties.class); + systemUrl = apiPathProperties.getOperatorPlugin(); + if (systemUrl.endsWith("/")) { + systemUrl = systemUrl.substring(0, systemUrl.length() -1); + } + sendSMSUrl = systemUrl + "/app/send"; + getStatusSMSUrl = systemUrl + "/app/send/status"; + getReplySMSUrl = systemUrl + "/app/send/reply"; + getTemplateSMSUrl = systemUrl + "/app/send/template"; + } + + public static void main(String[] args) { + // 可用模板列表 + // System.out.println(getTemplate()); + // 短信发送 + String uuid = UUID.randomUUID().toString(); + Map templateParams = new HashMap(); + templateParams.put("content", "您的验证码是123356"); + JSONArray phoneArray = new JSONArray(); + JSONObject obj1 = new JSONObject(); + obj1.put("phone", "17691030315"); + phoneArray.add(obj1); + System.out.println(sendMessage(uuid, "M00002", templateParams, phoneArray)); + + // 短信回复查询 + System.out.println(getMessageReply(uuid, "17691030315")); + // 短信状态查询 + // System.out.println(getMessageStatus("26800e6c-004a-4d77-bac2-3f80c70a423d", "17691030315")); + } + + /** + * 获取模板列表 + * @return + */ + public static JSONArray getTemplate() { + // jsonPost请求 + HttpGet httpGet = new HttpGet(getTemplateSMSUrl); + httpGet.addHeader("smsKey", smsKey); + httpGet.addHeader("smsSecret", smsSecret); + CloseableHttpClient client = HttpClients.createDefault(); + //定义接收数据 + JSONArray result = new JSONArray(); + try { + HttpResponse response = client.execute(httpGet); + String body = EntityUtils.toString(response.getEntity(), "UTF-8"); + result = JSON.parseArray(body); + System.out.println("返回结果:" + result.toJSONString()); + } catch (IOException e) { + e.printStackTrace(); + } + return result; + } + + /** + * 短信回复查询 + * @param smsNO 36位UUID + * @param phone 手机号 + * @return + */ + public static JSONObject getMessageReply(String smsNO, String phone) { + // jsonPost请求 + HttpGet httpGet = new HttpGet(getReplySMSUrl + "?smsNO=" + smsNO + "&phone=" + phone); + httpGet.addHeader("smsKey", smsKey); + httpGet.addHeader("smsSecret", smsSecret); + CloseableHttpClient client = HttpClients.createDefault(); + //定义接收数据 + JSONObject result = new JSONObject(); + try { + HttpResponse response = client.execute(httpGet); + String body = EntityUtils.toString(response.getEntity(), "UTF-8"); + result = JSON.parseObject(body); + System.out.println("返回结果:" + result.toJSONString()); + } catch (IOException e) { + e.printStackTrace(); + } + return result; + } + + /** + * 短信状态查询 + * @param smsNO 36位UUID + * @param phone 手机号 + * @return + */ + public static JSONObject getMessageStatus(String smsNO, String phone) { + // jsonPost请求 + HttpGet httpGet = new HttpGet(getStatusSMSUrl + "?smsNO=" + smsNO + "&phone=" + phone); + httpGet.addHeader("smsKey", smsKey); + httpGet.addHeader("smsSecret", smsSecret); + CloseableHttpClient client = HttpClients.createDefault(); + //定义接收数据 + JSONObject result = new JSONObject(); + try { + HttpResponse response = client.execute(httpGet); + String body = EntityUtils.toString(response.getEntity(), "UTF-8"); + result = JSON.parseObject(body); + System.out.println("返回结果:" + result.toJSONString()); + } catch (IOException e) { + e.printStackTrace(); + } + return result; + } + + + /** + * 短信发送 + * @param smsNO 36位UUID + * @param templateCode 模板编码 + * @param templateParams 模板参数 + * @param phoneArray 接收号码集 + * @return + */ + public static Boolean sendMessage(String smsNO, String templateCode, Map templateParams, JSONArray phoneArray) { + JSONObject jsonObject = new JSONObject(); + jsonObject.put("smsNo", smsNO); + jsonObject.put("phoneArray", phoneArray); + jsonObject.put("templateParams", templateParams); + // jsonPost请求 + HttpPost httpPost = new HttpPost(sendSMSUrl + "/" + templateCode); + httpPost.addHeader("smsKey", smsKey); + httpPost.addHeader("smsSecret", smsSecret); + CloseableHttpClient client = HttpClients.createDefault(); + // 请求参数转JOSN字符串 + StringEntity entity = new StringEntity(jsonObject.toString(), "UTF-8"); + entity.setContentEncoding("UTF-8"); + entity.setContentType("application/json"); + httpPost.setEntity(entity); + //定义接收数据 + JSONObject result = new JSONObject(); + try { + HttpResponse response = client.execute(httpPost); + String body = EntityUtils.toString(response.getEntity(), "UTF-8"); + result = JSON.parseObject(body); + System.out.println("返回结果:" + result.toJSONString()); + if("200".equals(result.getString("code"))){ + return true; + } + } catch (IOException e) { + e.printStackTrace(); + } + return false; + } + + +} diff --git a/src/main/java/cn/com/tenlion/aishop/util/ocr/CertInfoExtractor.java b/src/main/java/cn/com/tenlion/aishop/util/ocr/CertInfoExtractor.java new file mode 100644 index 0000000..7425852 --- /dev/null +++ b/src/main/java/cn/com/tenlion/aishop/util/ocr/CertInfoExtractor.java @@ -0,0 +1,33 @@ +package cn.com.tenlion.aishop.util.ocr; + +import lombok.Data; + +import java.util.regex.*; + +public class CertInfoExtractor { + + public static CertInfo extractFromText(String ocrText) { + CertInfo info = new CertInfo(); + + // 提取软件名称(示例:软件名称:XXXX) + Matcher nameMatcher = Pattern.compile("软件名称[::]\\s*(.*?)(\\n|$)").matcher(ocrText); + if (nameMatcher.find()) info.setSoftwareName(nameMatcher.group(1).trim()); + + // 提取著作权人(示例:著作权人:XXXX) + Matcher ownerMatcher = Pattern.compile("著作权人[::]\\s*(.*?)(\\n|$)").matcher(ocrText); + if (ownerMatcher.find()) info.setCopyrightOwner(ownerMatcher.group(1).trim()); + + // 提取登记号(示例:登记号:2023SR123456) + Matcher regNumMatcher = Pattern.compile("登记号[::]\\s*([A-Z0-9]{13})").matcher(ocrText); + if (regNumMatcher.find()) info.setRegistrationNumber(regNumMatcher.group(1)); + + return info; + } + + @Data // Lombok 注解 + public static class CertInfo { + private String softwareName; + private String copyrightOwner; + private String registrationNumber; + } +} \ No newline at end of file diff --git a/src/main/java/cn/com/tenlion/aishop/util/ocr/CertOcrService.java b/src/main/java/cn/com/tenlion/aishop/util/ocr/CertOcrService.java new file mode 100644 index 0000000..3e9bf01 --- /dev/null +++ b/src/main/java/cn/com/tenlion/aishop/util/ocr/CertOcrService.java @@ -0,0 +1,26 @@ +package cn.com.tenlion.aishop.util.ocr; + +import net.sourceforge.tess4j.TesseractException; + +public class CertOcrService { + + public static void main(String[] args) { + try { + // 1. 预处理图像 (将图片灰度化) + JavaImagePreprocessor.preprocess("D:\\鱼香茄条.png", "D:\\preprocessed1.png"); + + // 2. 执行 OCR + String ocrResult = CertOcrUtil.doOCR("D:\\preprocessed1.png"); + + System.out.println(ocrResult); + + /* // 3. 提取关键信息 + CertInfoExtractor.CertInfo c = CertInfoExtractor.extractFromText(ocrResult); + System.out.println(c);*/ + } catch (TesseractException e) { + throw new RuntimeException("OCR识别失败: " + e.getMessage()); + } catch (Exception e) { + throw new RuntimeException(e); + } + } +} \ No newline at end of file diff --git a/src/main/java/cn/com/tenlion/aishop/util/ocr/CertOcrUtil.java b/src/main/java/cn/com/tenlion/aishop/util/ocr/CertOcrUtil.java new file mode 100644 index 0000000..32f1d47 --- /dev/null +++ b/src/main/java/cn/com/tenlion/aishop/util/ocr/CertOcrUtil.java @@ -0,0 +1,22 @@ +package cn.com.tenlion.aishop.util.ocr; + +import net.sourceforge.tess4j.*; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import java.io.File; + +public class CertOcrUtil { + + public static String doOCR(String imagePath) throws TesseractException { + Tesseract tesseract = new Tesseract(); + tesseract.setDatapath("src/main/resources/data"); + tesseract.setLanguage("eng+chi_sim"); + // 使用全路径指定页面分割模式 + tesseract.setPageSegMode(3); // ✅ 正确方式 + tesseract.setTessVariable("user_defined_dpi", "300"); // 设置图像DPI + // tesseract.setPageSegMode(6); // PSM_SINGLE_LINE (假设裁剪后为单行文本) + // 设置白名单 + // tesseract.setTessVariable("tessedit_char_whitelist", "0123456789X男女汉回藏壮苗维吾尔族年月日"); + return tesseract.doOCR(new File(imagePath)); + } +} \ No newline at end of file diff --git a/src/main/java/cn/com/tenlion/aishop/util/ocr/JavaImagePreprocessor.java b/src/main/java/cn/com/tenlion/aishop/util/ocr/JavaImagePreprocessor.java new file mode 100644 index 0000000..491f82b --- /dev/null +++ b/src/main/java/cn/com/tenlion/aishop/util/ocr/JavaImagePreprocessor.java @@ -0,0 +1,28 @@ +package cn.com.tenlion.aishop.util.ocr; + +import java.awt.image.BufferedImage; +import java.io.File; +import javax.imageio.ImageIO; + +public class JavaImagePreprocessor { + + public static void preprocess(String inputPath, String outputPath) throws Exception { + // 读取图像 + BufferedImage src = ImageIO.read(new File(inputPath)); + + // 灰度化 + BufferedImage gray = new BufferedImage( + src.getWidth(), src.getHeight(), BufferedImage.TYPE_BYTE_GRAY + ); + gray.getGraphics().drawImage(src, 0, 0, null); + + // 二值化(简单阈值) + BufferedImage binary = new BufferedImage( + gray.getWidth(), gray.getHeight(), BufferedImage.TYPE_BYTE_BINARY + ); + binary.getGraphics().drawImage(gray, 0, 0, null); + + // 保存预处理后的图像 + ImageIO.write(binary, "png", new File(outputPath)); + } +} \ No newline at end of file diff --git a/src/main/resources/application-lanproxy.yml b/src/main/resources/application-lanproxy.yml index 2622912..8db2fe8 100644 --- a/src/main/resources/application-lanproxy.yml +++ b/src/main/resources/application-lanproxy.yml @@ -1,6 +1,7 @@ server: - port: 9001 - url: http://121.36.71.250:58087/aishop/ + port: 8081 + # url: http://121.36.71.250:58087/aishop/ + url: http://192.168.0.115:8081/aishop/ system-title: AI软著商城 system-sub-title: AI软著商城 default-home-page: aishop/index/home @@ -52,8 +53,18 @@ spring: slow-sql-millis: 2000 connection-properties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 use-global-data-source-stat: true - - + redis: + database: 1 + host: 192.168.0.156 + port: 6379 + password: 666 + timeout: 3000ms + jedis: + pool: + max-active: 8 + max-wait: 1ms + max-idle: 8 + min-idle: 0 mybatis: config-location: classpath:mybatis/mybatis-config.xml mapper-locations: classpath*:mybatis/mapper/**/*.xml @@ -69,7 +80,7 @@ file: image-types: png,jpg,jpeg,gif,blob video-types: mp4,rmvb audio-types: mp3,wmv,amr - file-types: doc,docx,xls,xlsx,ppt,pptx,txt,zip,rar,apk,pdf + file-types: doc,docx,xls,xlsx,ppt,pptx,txt,zip,rar,apk,pdf,png,jpg,jpeg,gif,blob max-file-count: 6 image-output-quality: 0.4 # 启用minIo @@ -81,9 +92,17 @@ file: secret-key: smartcity api-path: - user-center: http://121.36.71.250:58085/operator + # user-center: http://121.36.71.250:58085/operator + user-center: http://192.168.0.115:8091/operator client-id: 290ec23667434aa289d07ff4e2491c12 client-secret: bStibC84cElYZCtNU2Zhd3dCeUpwMU5NaDZlbXhXTlFmR0pqcDhXMWZBdmxIdG9KZmEyTjJIRnI0dG1McEdEVA== + operator-plugin: http://192.168.0.15:8099/operator-plugin/ + +#api-path: +# user-center: http://192.168.0.15:8091/operator/ +# copyright: http://192.168.0.15:7025/copyright/ +# copyright-external: http://192.168.0.15:7025/copyright/ +# operator-plugin: http://192.168.0.15:8099/operator-plugin/ security: oauth2: @@ -136,5 +155,9 @@ sms: sign: 【AIXXX平台】 +tess4j: + datapath : src/main/resources/data + language : eng+chi_sim + diff --git a/src/main/resources/mybatis/mapper/correction/correction-mapper.xml b/src/main/resources/mybatis/mapper/correction/correction-mapper.xml index 15d52e0..6934988 100644 --- a/src/main/resources/mybatis/mapper/correction/correction-mapper.xml +++ b/src/main/resources/mybatis/mapper/correction/correction-mapper.xml @@ -194,6 +194,9 @@ AND t1.correction_type LIKE CONCAT('%', #{correctionType}, '%') + + AND NOT EXISTS(SELECT 1 FROM shop_correction t2 WHERE t2.correction_parent_id = t1.correction_id AND t2.create_user_id = #{userId}) + AND ( @@ -290,6 +293,12 @@ AND t1.correction_type LIKE CONCAT('%', #{correctionType}, '%') + + AND t1.create_user_id = #{createUserId} + + + AND t1.order_id = #{orderId} + \ No newline at end of file diff --git a/src/main/resources/mybatis/mapper/goods/goods-mapper.xml b/src/main/resources/mybatis/mapper/goods/goods-mapper.xml index 908ba18..e50fa4d 100644 --- a/src/main/resources/mybatis/mapper/goods/goods-mapper.xml +++ b/src/main/resources/mybatis/mapper/goods/goods-mapper.xml @@ -27,6 +27,9 @@ + + + @@ -115,6 +118,9 @@ goods_status_time, goods_last_time, goods_check_status, + goods_check_remark, + goods_local_photo, + goods_flag, creator, gmt_create, modified, @@ -145,6 +151,9 @@ #{goodsStatusTime}, #{goodsLastTime}, '', + '', + #{goodsLocalPhoto}, + #{goodsFlag}, #{creator}, #{gmtCreate}, #{modified}, @@ -153,6 +162,15 @@ ) + + UPDATE + shop_goods + SET + goods_flag = #{goodsFlag} + WHERE + goods_id = #{goodsId} + + UPDATE shop_goods @@ -167,7 +185,8 @@ UPDATE shop_goods SET - goods_check_status = #{goodsCheckStatus} + goods_check_status = #{goodsCheckStatus}, + goods_check_remark = #{goodsCheckRemark} WHERE goods_id = #{goodsId} @@ -272,6 +291,12 @@ goods_status_time = #{goodsStatusTime}, + + + goods_local_photo = #{goodsLocalPhoto}, + + + goods_flag = #{goodsFlag}, goods_id = goods_id, goods_check_status = '' @@ -305,6 +330,9 @@ t1.goods_status_time, t1.goods_last_time, t1.goods_check_status, + t1.goods_check_remark, + t1.goods_local_photo, + t1.goods_flag, t1.modified, t1.gmt_modifir, t1.goods_id, @@ -420,6 +448,9 @@ t1.goods_last_time, t1.goods_check_status, t1.goods_status_time, + t1.goods_check_remark, + t1.goods_local_photo, + t1.goods_flag, t1.creator, t1.gmt_create, t1.modified, @@ -444,6 +475,9 @@ AND t1.goods_check_status = #{goodsCheckStatus} + + AND t1.goods_flag LIKE CONCAT('%', #{goodsFlag}, '%') + AND t1.goods_type LIKE CONCAT('%', #{goodsType}, '%') @@ -453,14 +487,17 @@ t1.goods_type LIKE CONCAT('%', #{goodsTypes[${index}]}, '%') + + AND t1.goods_flag = #{goodsFlag} + - AND ( - t1.goods_name LIKE CONCAT('%', #{keywords}, '%') - OR - t1.goods_sub_name LIKE CONCAT('%', #{keywords}, '%') - OR - t1.goods_description LIKE CONCAT('%', #{keywords}, '%') - ) + AND ( + t1.goods_name LIKE CONCAT('%', #{keywords}, '%') + OR + t1.goods_sub_name LIKE CONCAT('%', #{keywords}, '%') + OR + t1.goods_description LIKE CONCAT('%', #{keywords}, '%') + ) AND t1.goods_get_time LIKE CONCAT(#{goodsGetTime}, '%') diff --git a/src/main/resources/mybatis/mapper/goodsonline/goodsonline-mapper.xml b/src/main/resources/mybatis/mapper/goodsonline/goodsonline-mapper.xml index 1a1de14..fa6a3a4 100644 --- a/src/main/resources/mybatis/mapper/goodsonline/goodsonline-mapper.xml +++ b/src/main/resources/mybatis/mapper/goodsonline/goodsonline-mapper.xml @@ -20,6 +20,7 @@ + @@ -144,7 +145,7 @@ FROM shop_goodsonline t1 WHERE - t1.is_delete = 0 AND t1.goods_id = #{goodsId} AND t1.goods_vnumber = #{goodsVnumber} AND t1.goods_status = 1 AND t1.goods_check_status = 2 AND DATE(t1.goods_last_time) > CURDATE() + t1.is_delete = 0 AND t1.goods_id = #{goodsId} AND t1.goods_vnumber = #{goodsVnumber} AND t1.goods_status = 1 AND t1.goods_check_status = 2 + SELECT + order_id + FROM + shop_order + WHERE + order_status = '1' AND NOW() - INTERVAL 60 MINUTE >= create_time + + UPDATE @@ -470,6 +477,12 @@ t1.goods_id = t2.goods_id AND t1.goods_vnumber = t2.goods_vnumber WHERE 1 = 1 + + AND t1.sell_user_id = #{sellUserId} + + + AND t1.buy_user_id = #{buyUserId} + AND (t1.order_status = '2' OR t1.order_status = '3' OR t1.order_status = '4' OR t1.order_status = '5') diff --git a/src/main/resources/static/assets/images/filetype/image-add.png b/src/main/resources/static/assets/images/filetype/image-add.png new file mode 100644 index 0000000000000000000000000000000000000000..4bfafb81139ae21d75a413821664525f178d0e39 GIT binary patch literal 730 zcmV<00ww*4P)v6vwrNk!V_q7^G4Z(O`sbTr?Oc*dRf*i8d|VR6Cp4YtbTvFPj0vGecyfGWEXzC>D+Vv@1Aq+d$~EYJaT6_eoi(8 zH1o10&~LwVHU*3mxEu=MOCTbf0^Sj{6v{y7)58|f#r2vLYvMEW_rfO=XulQXFz5Mj z628JyxL^zTonr7{x?V!gTcItEPo<$SmVnJE2>Hm|2WGyO`hexjU4bV&8;B(!Q+1KB z27(m)Hv-fy9k2r?;S3ywpGl_Z8uOOGa+nHygrz|DM_{89tcPn=cG^amfLbDq!dqAc z^Wg>LK@q6k(lWvXG~xX+T!lsx=@rMNuo9j}h^`nlW;Jhfyl2l16R;4YF_;IPumJYK zYp8->o&r{2chQK}6xBh4j{w>1hI620*HDjdfjgeTE3vx^i$Lj9@!fz;z5-;o%mn?$ zaR??ngU`k8KCFd4PzQ}9BfvA>KW2xxa|*O8s-V}K;E`9r_FT`!HmHV&aK*fp8(mxQ zOVB=| z4&t`q2MmhS9og}xj@lWP0&OmfGc4dS{@;fQ$Z+h~?lbiV?ENx-0I}AVA!{SAJpcdz M07*qoM6N<$g2?<&3;+NC literal 0 HcmV?d00001 diff --git a/src/main/resources/templates/correction/save.html b/src/main/resources/templates/correction/save.html index 3e92cdd..b86dfef 100644 --- a/src/main/resources/templates/correction/save.html +++ b/src/main/resources/templates/correction/save.html @@ -42,7 +42,11 @@
- +
@@ -92,7 +96,7 @@
@@ -119,6 +123,20 @@ var wangEditorObj = {}; var orderId = top.restAjax.params(window.location.href).orderId; + $("#createZhuanRang").click(function(e) { + // var files = $('#'+ name).val(); + top.restAjax.get(top.restAjax.path('api/order/create-xieyi/SHOP05/' + orderId, []), {}, null, function(code, data, args) { + initFileList("correctionFiles", data.fileId, function(fileName) { + }); + $("#correctionTitle").val(data.fileName.replace(".doc", "")); + $("#correctionRemark").val("请您下载打印 《" + data.fileName + "》 ,签字盖章后上传扫描图片"); + $('input[name="correctionType[1]"]').prop('checked', true); + form.render('checkbox'); // 刷新checkbox组件 + }, function(code, data) { + top.dialog.msg(data.msg); + }); + }); + function closeBox() { parent.layer.close(parent.layer.getFrameIndex(window.name)); } @@ -168,7 +186,7 @@ var name = this.dataset.name; var explain = this.dataset.explain; top.dialog.file({ - type: 'image', + type: 'file', title: '上传'+ explain, width: '400px', height: '420px', diff --git a/src/main/resources/templates/correction/show-system.html b/src/main/resources/templates/correction/show-system.html index 6c578b8..befa004 100644 --- a/src/main/resources/templates/correction/show-system.html +++ b/src/main/resources/templates/correction/show-system.html @@ -19,7 +19,7 @@
-
平台需要您补充的内容说明
+
平台发起的内容
diff --git a/src/main/resources/templates/correction/update.html b/src/main/resources/templates/correction/update.html index 7ce2540..0569067 100644 --- a/src/main/resources/templates/correction/update.html +++ b/src/main/resources/templates/correction/update.html @@ -219,7 +219,7 @@ var name = this.dataset.name; var explain = this.dataset.explain; top.dialog.file({ - type: 'image', + type: 'file', title: '上传'+ explain, width: '400px', height: '420px', diff --git a/src/main/resources/templates/goods/check.html b/src/main/resources/templates/goods/check.html index 9c0f6f1..4505d76 100644 --- a/src/main/resources/templates/goods/check.html +++ b/src/main/resources/templates/goods/check.html @@ -35,19 +35,34 @@
软著信息
-
+
- - + +
- 点击查看软著电子版 + 点击查看 原软著电子版
-
+
+
+ + +
+ 点击查看 上架软著电子版 + +
+
+
- +
- +
@@ -64,9 +79,9 @@
- +
- +
@@ -74,7 +89,7 @@
- +
@@ -82,24 +97,24 @@
- +
-
+ + +
@@ -163,6 +178,15 @@
+
+
+ +
+ + +
+
+
著作权人信息
@@ -282,6 +306,56 @@ var viewerObj = {}; var goodsId = top.restAjax.params(window.location.href).goodsId; + $('#aiDescription').on('click', function() { + $("#goodsDescription").val(""); + var loadLayerIndex = top.dialog.msg("AI正在思考中...", {icon: 16, time: 4000, shade: 0.3}); + //实现化WebSocket对象,指定要连接的服务器地址与端口 建立连接 + var Socket= new WebSocket("http://106.74.34.136:8083/center/xf-socket"); + //打开事件 + Socket.onopen = function() { + // 注册 + var dataRegister = {"systemContent" : "", "content" : "", "userId" : goodsId}; + + // 发送 + var dataContent = {"systemContent" : "软件名称叫" + $("#goodsName").val(), "content" : "帮我生成一个关于这个软件的介绍, 100字左右 , 直接回复内容, 其他的不要回复。"}; + Socket.send(JSON.stringify(dataContent)); + }; + //获得消息事件 + Socket.onmessage = function(msg) { + $("#goodsDescription").val($("#goodsDescription").val() + msg.data); + }; + //关闭事件 + Socket.onclose = function() { + }; + //发生了错误事件 + Socket.onerror = function() { + } + }); + + $('#logoImage').on('click', function() { + top.dialog.dialogData.uploadImage = ""; + top.dialog.open({ + url: 'route/goods/image?fileId='+ $('#goodsPhoto').val(), + title: '上传软著上架电子版', + width: '850px', + height: '500px', + onClose: function() { + var uploadImage = top.dialog.dialogData.uploadImage; + if(typeof(uploadImage) != 'undefined' && null != uploadImage && '' != uploadImage) { + $('#logoImage').attr('src', 'route/file/download/false/' + uploadImage); + $('#goodsPhoto').val(uploadImage); + $('#basicsLogoSpanDelete').show(); + } + } + }) + }); + + $('#basicsLogoSpanDelete').on('click', function() { + $('#goodsLocalPhoto').val(""); + $('#logoImage').attr('src', 'assets/images/filetype/image-add.png'); + $('#basicsLogoSpanDelete').hide(); + }); + $('#logoImage').on('click', function() { }); @@ -369,7 +443,6 @@ xmSelectDom = xmSelect.render({ el: '#goodsType', data: data, - disabled: true, prop: { name: 'dataName', value: 'dataId', @@ -443,10 +516,18 @@ initGoodsTypeSelect(data.goodsType); initGoodsLeaderIdcardTypeSelect(data.goodsLeaderIdcardType); initGoodsLeaderCity1Select(data.goodsLeaderCity1, data.goodsLeaderCity2); - new Viewer(document.getElementById("basicsLogoSpanDIV"), { + $("#logoImage").attr("src", "route/file/download/false/" + data.goodsPhoto); + +/* new Viewer(document.getElementById("basicsLogoSpanDIV"), { url: "route/file/download/false/" + data.goodsPhoto, fullscreen: false, // 不需要全屏 title: false, //不需要文件标题 + });*/ + $("#logoImage2").attr("src", "route/file/download/false/" + data.goodsLocalPhoto); + new Viewer(document.getElementById("basicsLogoSpanDIV2"), { + url: "route/file/download/false/" + data.goodsLocalPhoto, + fullscreen: false, // 不需要全屏 + title: false, //不需要文件标题 }); if(data.goodsCheckStatus == "1") { $("#subMit").removeClass("layui-disabled"); @@ -469,8 +550,7 @@ title: false, btn: ['通过', '不通过'] //可以无限个按钮 }, function(index, layero){ - - subCheck("2"); + subCheck("2", "" , formData); top.layer.close(index); }, function(index){ top.layer.close(index); @@ -480,7 +560,7 @@ value: '', // 输入框初始值 title: '输入不通过的原因' // 输入框标题 }, function(value, index1){ - subCheck("0", value); + subCheck("0", value, formData); // 关闭输入框 top.layer.close(index1); }); @@ -489,8 +569,30 @@ return false; }); - function subCheck(status, remark) { - top.restAjax.put(top.restAjax.path('api/goods/check', [goodsId]), {goodslogStatus: status, goodslogContent : remark, goodsId: goodsId}, null, function(code, data) { + laydate.render({ + elem: '#goodsGetTime', + max: 0, + btns: ['clear','confirm'], + format: 'yyyy-MM-dd' + }); + + function subCheck(status, remark, formData) { + top.restAjax.put(top.restAjax.path('api/goods/check', [goodsId]), { + goodslogStatus: status, + goodslogContent : remark, + goodsId: goodsId, + goodsDescription: formData.field["goodsDescription"], + goodsSubName: formData.field["goodsSubName"], + goodsNumber: formData.field["goodsNumber"], + goodsVersion: formData.field["goodsVersion"], + goodsGetTime: formData.field["goodsGetTime"], + goodsDevelop: formData.field["goodsDevelop"], + goodsGetType: formData.field["goodsGetType"], + goodsLocalPhoto: formData.field["goodsLocalPhoto"], + goodsPhoto: formData.field["goodsPhoto"], + goodsType: xmSelectDom.getValue("valueStr"), + goodsFlag: top.restAjax.checkBoxToString(formData.field, 'goodsFlag') + }, null, function(code, data) { var layerIndex = top.dialog.msg("信息审核完成.", { time: 0, shade: 0.3, diff --git a/src/main/resources/templates/goods/list-system.html b/src/main/resources/templates/goods/list-system.html index 5895694..89cfd1f 100644 --- a/src/main/resources/templates/goods/list-system.html +++ b/src/main/resources/templates/goods/list-system.html @@ -28,14 +28,14 @@
-
+
-
+
@@ -153,7 +156,7 @@ return rowData; } }, - {field: 'goodsName', width: 180, title: '软著名称', align:'center', + {field: 'goodsName', width: 280, title: '软著名称', align:'center', templet: function(row) { var rowData = row[this.field]; if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') { @@ -162,7 +165,7 @@ return rowData; } }, - {field: 'goodsSubName', width: 180, title: '软著简称', align:'center', + /* {field: 'goodsSubName', width: 180, title: '软著简称', align:'center', templet: function(row) { var rowData = row[this.field]; if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') { @@ -179,8 +182,8 @@ } return rowData; } - }, - {field: 'goodsGetTime', width: 180, title: '软著取得时间', align:'center', + },*/ + /* {field: 'goodsGetTime', width: 180, title: '软著取得时间', align:'center', templet: function(row) { var rowData = row[this.field]; if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') { @@ -188,6 +191,21 @@ } return rowData; } + },*/ + {field: 'goodsFlag', width: 200, title: '标签', align:'center', fixed: "right", + templet: function(row) { + var rowData = row[this.field]; + if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') { + return '-'; + } + var arr = rowData.split(",") + var rowData = '
'; + for(var i = 0 ; i < arr.length ; i++) { + rowData += ' '; + } + rowData += '
'; + return rowData; + } }, {field: 'goodsPrice', width: 120, title: '售卖价格', align:'center', fixed: "right", templet: function(row) { @@ -438,7 +456,38 @@ } }); } - } else if(layEvent === 'downEvent') { + } else if(layEvent === 'teJiaEvent') { + if(checkDatas.length === 0) { + top.dialog.msg("至少选择一个软著商品"); + } else { + var ids = ''; + for(var i = 0, item; item = checkDatas[i++];) { + if(i > 1) { + ids += '_'; + } + ids += item['goodsId']; + } + top.dialog.msg("确定改变这些商品的今日特价状态?", { + time: 0, + btn: [top.dataMessage.button.yes, top.dataMessage.button.no], + shade: 0.3, + yes: function (index) { + top.dialog.close(index); + var layIndex; + top.restAjax.put(top.restAjax.path('api/goods/update-flag/{goodsIds}', [ids]), {}, null, function (code, data) { + top.dialog.msg("修改完成", {time: 1000}); + reloadTable(); + }, function (code, data) { + top.dialog.msg(data.msg); + }, function () { + layIndex = top.dialog.msg("上架中...", {icon: 16, time: 0, shade: 0.3}); + }, function () { + top.dialog.close(layIndex); + }); + } + }); + } + } else if(layEvent === 'downEvent') { if(checkDatas.length === 0) { top.dialog.msg(top.dataMessage.table.selectEdit); } else if(checkDatas.length > 1) { diff --git a/src/main/resources/templates/goods/list.html b/src/main/resources/templates/goods/list.html index 73b086a..b45a797 100644 --- a/src/main/resources/templates/goods/list.html +++ b/src/main/resources/templates/goods/list.html @@ -28,15 +28,15 @@
-
+ +