项目更新

This commit is contained in:
1215525055@qq.com 2025-05-23 17:02:18 +08:00
parent c6549f4c74
commit a54b43c07d
51 changed files with 2055 additions and 217 deletions

63
pom.xml
View File

@ -20,6 +20,10 @@
<druid.version>1.1.9</druid.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
@ -54,19 +58,37 @@
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ink.wgink</groupId>
<artifactId>basic-app</artifactId>
<version>1.0-SNAPSHOT</version>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>cn.com.tenlion</groupId>
<artifactId>module-freemarker</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>ink.wgink</groupId>
<artifactId>redis-cache</artifactId>
<version>1.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<artifactId>poi-ooxml-schemas</artifactId>
<groupId>org.apache.poi</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>ink.wgink</groupId>
<artifactId>module-file</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>ink.wgink</groupId>
<artifactId>login-oauth2-client</artifactId>
<version>1.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
@ -74,12 +96,35 @@
<artifactId>module-dictionary</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- Tess4J依赖 -->
<!-- OAuth2客户端 -->
<dependency>
<groupId>ink.wgink</groupId>
<artifactId>login-oauth2-client</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- 用于实现对APP的的管理包含了APP的token管理token格式的校验 -->
<dependency>
<groupId>ink.wgink</groupId>
<artifactId>basic-app</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- Tesseract OCR -->
<dependency>
<groupId>net.sourceforge.tess4j</groupId>
<artifactId>tess4j</artifactId>
<version>5.4.0</version>
</dependency>
<!-- 图像处理库(可选,用于预处理) -->
<dependency>
<groupId>org.openpnp</groupId>
<artifactId>opencv</artifactId>
<version>4.5.5-1</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>

View File

@ -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<String, Object> 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<String, Object> params = requestParams();
params.put("correctionType", "1");
params.put("correctionParentId", "0");
params.put("userId", securityComponent.getCurrentUser().getUserId());
page.setParams(params);
return correctionService.listPage(page);
}

View File

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

View File

@ -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<List<GoodsSimpleDTO>> listPage(ListPage page) {
Map<String, Object> 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<List<GoodsSimpleDTO>> listAll(ListPage page) {
Map<String, Object> 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}")

View File

@ -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<String, Object> 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<String, Object> 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) {

View File

@ -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({

View File

@ -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;
}

View File

@ -125,4 +125,6 @@ public interface IGoodsDao {
List<GoodsSimpleDTO> listPageAll(Map<String, Object> params);
GoodsSimpleDTO getAll(String goodsId);
void updateFlag(Map<String, Object> query);
}

View File

@ -127,4 +127,6 @@ public interface IGoodsonlineDao {
GoodsSimpleDTO getByGoodsId(Map<String, Object> params);
GoodsonlineDTO getByGoodsIdAndGoodsNumber(Map<String, Object> params);
void removeByGoodId(Map<String, Object> params);
}

View File

@ -122,5 +122,7 @@ public interface IOrderDao {
void updateResult(Map<String, Object> params);
void updateClose(HashMap<Object, Object> objectObjectHashMap);
void updateClose(String orderId);
List<String> getCloseAll(HashMap<Object, Object> objectObjectHashMap);
}

View File

@ -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;
}
}

View File

@ -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;
}

View File

@ -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();

View File

@ -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;

View File

@ -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();

View File

@ -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;
}
}

View File

@ -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();
}

View File

@ -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;
}
}

View File

@ -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<String, String> 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<RedisClientInfo> 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");
}
}

View File

@ -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 + " 进行资料补充</br>订单号:" + 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<String, String> 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<String, String> 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<String, Object> 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 + " 进行资料补充</br>订单号:" + 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<String, String> 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<String, String> 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<String, Object> 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);
}

View File

@ -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<String, Object> 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<String> goodsIds , String name);
}

View File

@ -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<String, Object> 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<GoodsDTO> list(Map<String, Object> params) {
if(params.get("goodsType") != null) {
params.put("goodsTypes", Arrays.asList(params.get("goodsType").toString().split(",")));
params.put("goodsType", "");
}
List<GoodsDTO> 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<String, Object> params2 = HashMapUtil.beanToMap(goodsCheckVO);
goodsDao.update(params2);
Map<String, Object> 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<String, String> 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<OrderDTO> 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<String, Object> 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<OrderDTO> 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<String> goodsIds , String name) {
Map<String, Object> params = super.getHashMap(2);
params.put("goodsIds", goodsIds);
List<GoodsDTO> list = list(params);
for(GoodsDTO dto : list) {
String goodsFlag = dto.getGoodsFlag();
Set<String> resultSet = StringUtils.isEmpty(goodsFlag) ? new HashSet<>() : new HashSet<>(Arrays.asList(goodsFlag.split(",")));
Map<String, Object> 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;
}
}

View File

@ -186,4 +186,5 @@ public interface IGoodslogService {
Integer count(Map<String, Object> params);
String saveByUser(GoodslogVO goodsLogVO, String userId);
}

View File

@ -20,6 +20,12 @@ import java.util.Map;
**/
public interface IGoodsonlineService {
/**
* 删除商品的上架信息
* @param goodId
*/
public void removeByGoodId(String goodId);
void saveOnline(String goodsId);
/**

View File

@ -51,12 +51,19 @@ public class GoodsonlineServiceImpl extends DefaultBaseService implements IGoods
if (page.getRows() > 12 ) {
page.setRows(12);
}
Map<String, Object> 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<GoodsSimpleDTO> 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<String, Object> params = getHashMap(2);
params.put("goodsId", goodId);
setUpdateInfo(params);
goodsonlineDao.removeByGoodId(params);
}
@Override
public void remove(List<String> ids) {
remove(null, ids);

View File

@ -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<String, Object> 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<String, String> 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<OrderDTO> list(Map<String, Object> params) {
List<OrderDTO> list = orderDao.list(params);
Map<String, Object> 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<String, String> 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<String> 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<String> 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<String, Object> 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<String, String> 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<String> 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() + "</br>买家下单后60分内未付款");
iGoodslogService.saveByUser(goodsLogVO, "1");
}
}
}

View File

@ -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);
}

View File

@ -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();
}

View File

@ -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<String> 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整数和小数都为00.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")); // 玖佰玖拾玖兆玖仟玖佰玖拾玖亿玖仟玖佰玖拾玖万玖仟玖佰玖拾玖元玖角玖分
}
}

View File

@ -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();
// 识别

View File

@ -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> T getBean(Class<T> clazz){
return getApplicationContext().getBean(clazz);
}
//通过name,以及Clazz返回指定的Bean
public static <T> T getBean(String name,Class<T> clazz){
return getApplicationContext().getBean(name, clazz);
}
}

View File

@ -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<String, String> templateParams = new HashMap<String, String>();
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<String, String> 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;
}
}

View File

@ -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;
}
}

View File

@ -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);
}
}
}

View File

@ -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));
}
}

View File

@ -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));
}
}

View File

@ -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

View File

@ -194,6 +194,9 @@
<if test="correctionType != null and correctionType != ''">
AND t1.correction_type LIKE CONCAT('%', #{correctionType}, '%')
</if>
<if test="userId != null and userId != ''">
AND NOT EXISTS(SELECT 1 FROM shop_correction t2 WHERE t2.correction_parent_id = t1.correction_id AND t2.create_user_id = #{userId})
</if>
<if test="keywords != null and keywords != ''">
AND (
<!-- 这里添加其他条件 -->
@ -290,6 +293,12 @@
<if test="correctionType != null and correctionType != ''">
AND t1.correction_type LIKE CONCAT('%', #{correctionType}, '%')
</if>
<if test="createUserId != null and createUserId != ''">
AND t1.create_user_id = #{createUserId}
</if>
<if test="orderId != null and orderId != ''">
AND t1.order_id = #{orderId}
</if>
</select>
</mapper>

View File

@ -27,6 +27,9 @@
<result column="goods_status_time" property="goodsStatusTime"/>
<result column="goods_last_time" property="goodsLastTime"/>
<result column="goods_check_status" property="goodsCheckStatus"/>
<result column="goods_check_remark" property="goodsCheckRemark"/>
<result column="goods_local_photo" property="goodsLocalPhoto"/>
<result column="goods_flag" property="goodsFlag"/>
<result column="creator" property="creator"/>
<result column="gmt_create" property="gmtCreate"/>
<result column="modified" property="modified"/>
@ -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 @@
)
</insert>
<update id="updateFlag" parameterType="map">
UPDATE
shop_goods
SET
goods_flag = #{goodsFlag}
WHERE
goods_id = #{goodsId}
</update>
<update id="updateStatus" parameterType="map">
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}
</update>
@ -272,6 +291,12 @@
</if>
<if test="goodsStatusTime != null and goodsStatusTime != ''">
goods_status_time = #{goodsStatusTime},
</if>
<if test="goodsLocalPhoto != null and goodsLocalPhoto != ''">
goods_local_photo = #{goodsLocalPhoto},
</if>
<if test="goodsFlag != null and goodsFlag != ''">
goods_flag = #{goodsFlag},
</if>
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 @@
<if test="goodsCheckStatus != null and goodsCheckStatus != ''">
AND t1.goods_check_status = #{goodsCheckStatus}
</if>
<if test="goodsFlag != null and goodsFlag != ''">
AND t1.goods_flag LIKE CONCAT('%', #{goodsFlag}, '%')
</if>
<if test="goodsType != null and goodsType != ''">
AND t1.goods_type LIKE CONCAT('%', #{goodsType}, '%')
</if>
@ -453,14 +487,17 @@
t1.goods_type LIKE CONCAT('%', #{goodsTypes[${index}]}, '%')
</foreach>
</if>
<if test="goodsFlag != null and goodsFlag != ''">
AND t1.goods_flag = #{goodsFlag}
</if>
<if test="keywords != null and 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_name LIKE CONCAT('%', #{keywords}, '%')
OR
t1.goods_sub_name LIKE CONCAT('%', #{keywords}, '%')
OR
t1.goods_description LIKE CONCAT('%', #{keywords}, '%')
)
</if>
<if test="goodsGetTime != null and goodsGetTime != ''">
AND t1.goods_get_time LIKE CONCAT(#{goodsGetTime}, '%')

View File

@ -20,6 +20,7 @@
<result column="goods_status_time" property="goodsStatusTime"/>
<result column="goods_last_time" property="goodsLastTime"/>
<result column="goods_vnumber" property="goodsVnumber"/>
<result column="goods_flag" property="goodsFlag"/>
</resultMap>
<resultMap id="goodsonlineDTO" type="cn.com.tenlion.aishop.pojo.dtos.goodsonline.GoodsonlineDTO">
@ -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>
<select id="getAll" parameterType="java.lang.String" resultMap="goodsSimpleDTO">
@ -169,7 +170,7 @@
FROM
shop_goodsonline t1
WHERE
t1.is_delete = 0 AND t1.goods_id = #{goodsId} AND t1.goods_status = 1 AND t1.goods_check_status = 2 AND DATE(t1.goods_last_time) > CURDATE() AND NOT EXISTS (SELECT 1 FROM shop_order t2 WHERE t2.order_status != 0 AND t2.goods_id = t1.goods_id)
t1.is_delete = 0 AND t1.goods_id = #{goodsId} AND t1.goods_status = 1 AND t1.goods_check_status = 2 /* AND DATE(t1.goods_last_time) > CURDATE() AND NOT EXISTS (SELECT 1 FROM shop_order t2 WHERE t2.order_status != 0 AND t2.goods_id = t1.goods_id)*/
ORDER BY
t1.goods_vnumber DESC
LIMIT 1
@ -193,7 +194,8 @@
t1.goods_last_time,
t1.goods_status_time,
t1.goods_vnumber,
t1.goodsonline_id
t1.goodsonline_id,
t3.goods_flag
FROM
shop_goodsonline t1
INNER JOIN
@ -202,16 +204,32 @@
) temp2
ON
t1.goods_id = temp2.goods_id AND t1.goods_vnumber = temp2.v
LEFT JOIN
shop_goods t3
ON
t1.goods_id = t3.goods_id
WHERE
t1.is_delete = 0 AND t1.goods_status = 1 AND t1.goods_check_status = 2 AND DATE(t1.goods_last_time) > CURDATE() AND NOT EXISTS (SELECT 1 FROM shop_order t2 WHERE t2.order_status != 0 AND t2.goods_id = t1.goods_id)
t1.is_delete = 0 AND t1.goods_status = 1 AND t1.goods_check_status = 2 AND DATE(t1.goods_last_time) >= CURDATE() AND NOT EXISTS (SELECT 1 FROM shop_order t2 WHERE t2.order_status != 0 AND t2.goods_id = t1.goods_id)
<if test="goodsLeaderType != null and goodsLeaderType != ''">
AND t1.goods_leader_type = #{goodsLeaderType}
</if>
<if test="goodsFlag != null and goodsFlag != ''">
AND t3.goods_flag LIKE CONCAT('%', #{goodsFlag}, '%')
</if>
<if test="notUserId != null and notUserId != ''">
AND t1.creator != #{notUserId}
</if>
<if test="goodsDevelop != null and goodsDevelop != ''">
AND t1.goods_develop = #{goodsDevelop}
</if>
<if test="goodsType != null and goodsType != ''">
AND t1.goods_type = #{goodsType}
AND t1.goods_type LIKE CONCAT('%', #{goodsType}, '%')
</if>
<if test="goodsTypes != null and goodsTypes.size > 0">
AND
<foreach collection="goodsTypes" index="index" open="(" separator=" OR " close=")">
t1.goods_type LIKE CONCAT('%', #{goodsTypes[${index}]}, '%')
</foreach>
</if>
<if test="priceRangeStart != null and priceRangeStart != '' and ( priceRangeEnd == null or priceRangeEnd == '' )">
AND t1.goods_open_price >= #{priceRangeStart}
@ -315,6 +333,17 @@
)
</insert>
<update id="removeByGoodId" parameterType="map">
UPDATE
shop_goodsonline
SET
is_delete = 1,
modified = #{modified},
gmt_modifir = #{gmtModifir}
WHERE
goods_id = #{goodsId}
</update>
<!-- 删除上架的商品 -->
<update id="remove" parameterType="map">
UPDATE

View File

@ -204,17 +204,24 @@
order_id = #{orderId}
</update>
<update id="updateClose" parameterType="map">
<update id="updateClose" parameterType="java.lang.String">
UPDATE
shop_order
SET
order_status = '0'
WHERE
order_status = '1'
AND
NOW() - INTERVAL 60 MINUTE >= create_time
order_status = '1' AND order_id = #{orderId}
</update>
<select id="getCloseAll" parameterType="map" resultType="java.lang.String">
SELECT
order_id
FROM
shop_order
WHERE
order_status = '1' AND NOW() - INTERVAL 60 MINUTE >= create_time
</select>
<!-- 修改订单 -->
<update id="update" parameterType="map">
UPDATE
@ -470,6 +477,12 @@
t1.goods_id = t2.goods_id AND t1.goods_vnumber = t2.goods_vnumber
WHERE
1 = 1
<if test="sellUserId != null and sellUserId != ''">
AND t1.sell_user_id = #{sellUserId}
</if>
<if test="buyUserId != null and buyUserId != ''">
AND t1.buy_user_id = #{buyUserId}
</if>
<if test="systemOrder != null and systemOrder != ''">
AND (t1.order_status = '2' OR t1.order_status = '3' OR t1.order_status = '4' OR t1.order_status = '5')
</if>

Binary file not shown.

After

Width:  |  Height:  |  Size: 730 B

View File

@ -42,7 +42,11 @@
</div>
</div>
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">资料附件</label>
<label class="layui-form-label">资料附件
<button type="button" class="layui-btn layui-btn-xs" style="top: 7px;left: 85px;position: absolute;" id="createZhuanRang">
<i class="fa fa-lg fa-code"></i>快捷生成转让合同
</button>
</label>
<div class="layui-input-block">
<input type="hidden" id="correctionFiles" name="correctionFiles">
<div class="layui-btn-container" id="correctionFilesFileBox" style="border: 1px solid #e6e6e6;"></div>
@ -92,7 +96,7 @@
<div class="layui-form-item layui-layout-admin">
<div class="layui-input-block">
<div class="layui-footer" style="left: 0;">
<button type="button" class="layui-btn" lay-submit lay-filter="submitForm">提交保存</button>
<button type="button" class="layui-btn" lay-submit lay-filter="submitForm">提交发布</button>
<button type="button" class="layui-btn layui-btn-primary close">返回上级</button>
</div>
</div>
@ -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',

View File

@ -19,7 +19,7 @@
<form class="layui-form layui-form-pane" lay-filter="dataForm">
<div class="layui-card-body" style="padding: 15px;">
<form class="layui-form layui-form-pane" lay-filter="dataForm">
<blockquote class="layui-elem-quote">平台需要您补充的内容说明</blockquote>
<blockquote class="layui-elem-quote">平台发起的内容</blockquote>
<input type="hidden" id="orderId" disabled name="orderId" class="layui-input" value="" placeholder="" maxlength="500">
<div class="layui-form-item">
<label class="layui-form-label">主题</label>

View File

@ -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',

View File

@ -35,19 +35,34 @@
<form class="layui-form layui-form-pane" lay-filter="dataForm">
<blockquote class="layui-elem-quote">软著信息</blockquote>
<div class=" layui-row " style="height: 90px">
<div class="layui-col-lg2" style="border: 1px solid #C9C9C9;" id="basicsLogoSpanDIV">
<div class="layui-col-lg3" style="border: 1px solid #C9C9C9;" id="basicsLogoSpanDIV2">
<div class="layui-form-item" style="text-align: center;padding-top: 20px;">
<img id="logoImage" src="assets/images/ruanzhu.jpg" style="height:74px;width:50px;" title="点击查看软著电子版">
<input type="hidden" id="goodsPhoto" name="goodsPhoto" >
<img id="logoImage2" src="assets/images/ruanzhu.jpg" style="height:74px;width:74px;" title="点击查看软著电子版">
<input type="hidden" id="goodsLocalPhoto" name="goodsLocalPhoto" >
</br>
<span style="white-space: nowrap; font-size: 11px" id="basicsLogoSpan">点击查看软著电子版</span>
<span style="white-space: nowrap; font-size: 11px" id="basicsLogoSpan2">点击查看软著电子版</span>
</div>
</div>
<div class="layui-col-lg10">
<div class="layui-col-lg3" style="border: 1px solid #C9C9C9;" id="basicsLogoSpanDIV">
<div class="layui-form-item" style="text-align: center;padding-top: 20px;">
<img id="logoImage" src="assets/images/ruanzhu.jpg" style="height:74px;width:74px;" title="点击查看 上架软著电子版">
<input type="hidden" id="goodsPhoto" name="goodsPhoto" >
</br>
<span style="white-space: nowrap; font-size: 11px" id="basicsLogoSpan">点击查看 上架软著电子版</span>
<button type="button" class="layui-btn layui-btn-danger layui-btn-xs" style="top: 5px;position: absolute;right: 5px;" id="basicsLogoSpanDelete">
<i class="fa fa-lg fa-remove"></i> 删除
</button>
</div>
</div>
<div class="layui-col-lg6">
<div class="layui-form-item layui-form-text">
<label class="layui-form-label">软著说明</label>
<label class="layui-form-label">软著说明
<button type="button" class="layui-btn layui-btn-xs" style="" id="aiDescription">
<i class="fa fa-lg fa-code"></i> AI生成
</button>
</label>
<div class="layui-input-block">
<textarea id="goodsDescription" readonly name="goodsDescription" class="layui-textarea" placeholder="请输入软著说明"></textarea>
<textarea id="goodsDescription" name="goodsDescription" class="layui-textarea" placeholder="请输入软著说明"></textarea>
</div>
</div>
</div>
@ -64,9 +79,9 @@
</div>
<div class="layui-col-lg6">
<div class="layui-form-item">
<label class="layui-form-label">软著简称<span style="color: red">*</span></label>
<label class="layui-form-label">软著简称</label>
<div class="layui-input-block">
<input type="text" id="goodsSubName" readonly name="goodsSubName" class="layui-input" value="" placeholder="请输入软著简称" maxlength="100">
<input type="text" id="goodsSubName" name="goodsSubName" class="layui-input" value="" placeholder="请输入软著简称" maxlength="100">
</div>
</div>
</div>
@ -74,7 +89,7 @@
<div class="layui-form-item">
<label class="layui-form-label">软著证号<span style="color: red">*</span></label>
<div class="layui-input-block">
<input type="text" id="goodsNumber" readonly name="goodsNumber" class="layui-input" value="" placeholder="请输入软著证号" maxlength="100">
<input type="text" id="goodsNumber" name="goodsNumber" class="layui-input" value="" placeholder="请输入软著证号" maxlength="100">
</div>
</div>
</div>
@ -82,24 +97,24 @@
<div class="layui-form-item">
<label class="layui-form-label">软著版本<span style="color: red">*</span></label>
<div class="layui-input-block">
<input type="text" id="goodsVersion" readonly name="goodsVersion" class="layui-input" value="" placeholder="请输入软著版本" maxlength="100">
<input type="text" id="goodsVersion" name="goodsVersion" class="layui-input" value="" placeholder="请输入软著版本" maxlength="100">
</div>
</div>
</div>
<div class="layui-col-lg6">
<!-- <div class="layui-col-lg6">
<div class="layui-form-item">
<label class="layui-form-label">取得时间<span style="color: red">*</span></label>
<div class="layui-input-block">
<input type="text" id="goodsGetTime" readonly style="cursor: pointer" name="goodsGetTime" class="layui-input" value="" placeholder="请输入软著取得时间" maxlength="50">
<input type="text" id="goodsGetTime" style="cursor: pointer" name="goodsGetTime" class="layui-input" value="" placeholder="请输入软著取得时间" maxlength="50">
</div>
</div>
</div>
<div class="layui-col-lg6">
</div>-->
<!-- <div class="layui-col-lg6">
<div class="layui-form-item">
<label class="layui-form-label">开发语言<span style="color: red">*</span></label>
<label class="layui-form-label">开发语言</label>
<div class="layui-input-block layui-form" id="goodsDevelopSelectTemplateBox" lay-filter="goodsDevelopSelectTemplateBox"></div>
<script id="goodsDevelopSelectTemplate" type="text/html">
<select id="goodsDevelop" disabled name="goodsDevelop">
<select id="goodsDevelop" name="goodsDevelop">
<option value="">请选择软著开发语言</option>
{{# for(var i = 0, item; item = d[i++];) { }}
<option value="{{item.dataId}}">{{item.dataName}}</option>
@ -107,21 +122,21 @@
</select>
</script>
</div>
</div>
<div class="layui-col-lg6">
</div>-->
<!--<div class="layui-col-lg6">
<div class="layui-form-item">
<label class="layui-form-label">获取方式<span style="color: red">*</span></label>
<div class="layui-input-block">
<select id="goodsGetType" disabled name="goodsGetType">
<option value="">请选择所有者类型</option>
<select id="goodsGetType" name="goodsGetType">
<option value="">请选择获取方式</option>
<option value="1">原始取得</option>
<option value="2">继受取得(受让)</option>
<option value="3">继受取得(继承)</option>
<option value="4">继受取得(承受)</option>
<option value="3">继受取得(继承)</option>
</select>
</div>
</div>
</div>
</div>-->
<div class="layui-col-lg6">
<div class="layui-form-item">
<label class="layui-form-label">软著分类<span style="color: red">*</span></label>
@ -163,6 +178,15 @@
</div>
</div>
</div>
<div class="layui-col-lg6">
<div class="layui-form-item" pane="">
<label class="layui-form-label">是否特价</label>
<div class="layui-input-block">
<input type="checkbox" name="goodsFlag[特价]" title="今日特价">
<input type="checkbox" name="goodsFlag[]" title="非特价">
</div>
</div>
</div>
</div>
<div class=" layui-row ">
<blockquote class="layui-elem-quote">著作权人信息</blockquote>
@ -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,

View File

@ -28,14 +28,14 @@
<div class="layui-inline">
<input type="text" id="goodsGetTime" class="layui-input search-item" placeholder="软著取得时间" style="cursor: pointer;" readonly>
</div>
<div class="layui-inline layui-form search-item" >
<!-- <div class="layui-inline layui-form search-item" >
<select id="goodsGetType" name="goodsGetType">
<option value="">请选择所有者类型</option>
<option value="1">平台申请</option>
<option value="2">原始取得</option>
<option value="3">继受取得</option>
</select>
</div>
</div>-->
<div class="layui-inline layui-form search-item" >
<select id="goodsCheckStatus" name="goodsCheckStatus">
<option value="">请选择审核状态</option>
@ -44,7 +44,7 @@
<option value="2">已通过</option>
</select>
</div>
<div class="layui-inline layui-form search-item" id="goodsDevelopSelectTemplateBox" lay-filter="goodsDevelopSelectTemplateBox"></div>
<!--<div class="layui-inline layui-form search-item" id="goodsDevelopSelectTemplateBox" lay-filter="goodsDevelopSelectTemplateBox"></div>
<script type="text/html" id="goodsDevelopSelectTemplate">
<select id="goodsDevelop" name="goodsDevelop">
<option value="">请选择软著开发语言</option>
@ -52,7 +52,7 @@
<option value="{{item.dataId}}">{{item.dataName}}</option>
{{# } }}
</select>
</script>
</script>-->
<div class="layui-inline layui-form search-item" id="goodsTypeSelectTemplateBox" lay-filter="goodsTypeSelectTemplateBox"></div>
<script type="text/html" id="goodsTypeSelectTemplate">
<select id="goodsType" name="goodsType">
@ -73,6 +73,9 @@
<button type="button" class="layui-btn layui-btn-normal layui-btn-sm" lay-event="checkEvent">
<i class="fa fa-lg fa-check"></i> 著作权信息审核
</button>
<button type="button" class="layui-btn layui-btn-sm" lay-event="teJiaEvent">
<i class="fa fa-lg fa-star"></i> 今日特价
</button>
</div>
</script>
</div>
@ -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 = '<div class="layui-btn-group">';
for(var i = 0 ; i < arr.length ; i++) {
rowData += ' <button type="button" class="layui-btn layui-btn-xs layui-btn-normal">' + arr[i] + '</button>';
}
rowData += '</div>';
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) {

View File

@ -28,15 +28,15 @@
<div class="layui-inline">
<input type="text" id="goodsGetTime" class="layui-input search-item" placeholder="软著取得时间" style="cursor: pointer;" readonly>
</div>
<div class="layui-inline layui-form search-item" >
<!-- <div class="layui-inline layui-form search-item" >
<select id="goodsGetType" name="goodsGetType">
<option value="">请选择所有者类型</option>
<option value="">请选择获取方式</option>
<option value="1">平台申请</option>
<option value="2">原始取得</option>
<option value="3">继受取得</option>
</select>
</div>
<div class="layui-inline layui-form search-item" id="goodsDevelopSelectTemplateBox" lay-filter="goodsDevelopSelectTemplateBox"></div>
</div>-->
<!-- <div class="layui-inline layui-form search-item" id="goodsDevelopSelectTemplateBox" lay-filter="goodsDevelopSelectTemplateBox"></div>
<script type="text/html" id="goodsDevelopSelectTemplate">
<select id="goodsDevelop" name="goodsDevelop">
<option value="">请选择软著开发语言</option>
@ -44,7 +44,7 @@
<option value="{{item.dataId}}">{{item.dataName}}</option>
{{# } }}
</select>
</script>
</script>-->
<div class="layui-inline layui-form search-item" id="goodsTypeSelectTemplateBox" lay-filter="goodsTypeSelectTemplateBox"></div>
<script type="text/html" id="goodsTypeSelectTemplate">
<select id="goodsType" name="goodsType">
@ -121,7 +121,7 @@
}
function initGoodsTypeSelect() {
top.restAjax.get(top.restAjax.path('api/data/listbyparentid/0b00884a-f7a2-425f-93e5-599fbaad4bde', []), {}, null, function(code, data, args) {
top.restAjax.get(top.restAjax.path('c', []), {}, null, function(code, data, args) {
laytpl(document.getElementById('goodsTypeSelectTemplate').innerHTML).render(data, function(html) {
document.getElementById('goodsTypeSelectTemplateBox').innerHTML = html;
});
@ -190,7 +190,7 @@
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 == '') {
@ -198,7 +198,7 @@
}
return rowData;
}
},
},*/
{field: 'goodsPrice', width: 120, title: '售卖价格', align:'center', fixed: "right",
templet: function(row) {
var rowData = row[this.field];

View File

@ -112,7 +112,7 @@
<label class="layui-form-label">获取方式<span style="color: red">*</span></label>
<div class="layui-input-block">
<select id="goodsGetType" name="goodsGetType">
<option value="">请选择所有者类型</option>
<option value="">请选择获取方式</option>
<option value="1">原始取得</option>
<option value="2">继受取得(受让)</option>
<option value="3">继受取得(继承)</option>

View File

@ -15,10 +15,10 @@
<div class="layui-row">
<div class="layui-col-md12">
<div class="layui-card">
<div class="layui-card-body" id="app" v-cloak style="height: 94vh; overflow: auto;">
<div class="layui-card-body" id="app" v-cloak style="height: 94vh; overflow: auto;cursor:pointer" >
<div class="layui-row">
<ul class="layui-timeline">
<li class="layui-timeline-item" v-for="data in logList">
<li class="layui-timeline-item" v-for="data in logList" @click="handleLogContentClick(data)":class="{ 'active-log': data.isActive }">
<i class="layui-icon layui-timeline-axis"></i>
<div class="layui-timeline-content layui-text">
<div class="layui-timeline-title">
@ -26,7 +26,7 @@
</div>
<div class="log-content">
<p>
<span v-if="data.goodslogContent != ''">{{ data.goodslogContent }}</span>
<span v-if="data.goodslogContent != ''" v-html="data.goodslogContent"></span>
<span v-if="data.goodslogStatus == '1'" style="color: orange">审核中.</span>
<span v-if="data.goodslogStatus == '2'" style="color: green">审核通过</span>
<span v-if="data.goodslogStatus == '0' && data.goodslogContent == '' " style="color: red">审核未通过</span>
@ -71,12 +71,70 @@
logList: [],
},
methods: {
/* 点击日志内容事件 */
handleLogContentClick(data) {
// 这里可以获取到当前点击的 data 对象
console.log('点击的日志数据:', data);
// 根据状态处理逻辑(示例)
if (data.goodslogName.indexOf("资料补充") != -1) {
const regex = /SHOP\d{18}/;
const result = regex.exec(data.goodslogContent);
const orderNumber = result ? result[0] : null;
top.layer.open({
type: 2,
title: false,
closeBtn: 0,
area: ['80%', '80%'],
shadeClose: true,
anim: 2,
content: 'route/correction/list-system?orderId=' + orderNumber,
end: function() {
}
});
}else if (data.goodslogContent.indexOf("SHOP") != -1) {
const regex = /SHOP\d{18}/;
const result = regex.exec(data.goodslogContent);
const orderNumber = result ? result[0] : null;
top.layer.open({
type: 2,
title: false,
closeBtn: 0,
area: ['80%', '80%'],
shadeClose: true,
anim: 2,
content: 'route/order/update?orderId=' + orderNumber,
end: function() {
}
});
}else{
top.layer.open({
type: 2,
title: false,
closeBtn: 0,
area: ['80%', '80%'],
shadeClose: true,
anim: 2,
content: 'route/goods/check?goodsId=' + data.goodsId,
end: function() {
}
});
}
},
/* 审核日志*/
initLogList: function(){
var self = this;
var loadLayerIndex;
top.restAjax.get(top.restAjax.path('api/goodslog/list/{goodsId}', [goodsId]), {
}, null, function(code, data) {
for(var i = 0 ; i < data.length ; i++) {
const regex = /SHOP\d{18}/;
const result = regex.exec(data[i].goodslogContent);
const orderNumber = result ? result[0] : "";
if(orderNumber)
data[i].goodslogContent = data[i].goodslogContent.replace(orderNumber, '<font style="color:red">' + orderNumber + "</font>");
}
self.logList = data;
}, function(code, data) {
top.dialog.msg(data.msg);

View File

@ -31,6 +31,18 @@
<div class="layui-inline">
<input type="text" id="endTime" class="layui-input search-item" placeholder="结束时间" readonly>
</div>
<div class="layui-inline layui-form search-item" >
<select id="orderStatus" name="orderStatus">
<option value="">请选择订单状态</option>
<option value="0">订单已取消</option>
<option value="1">买家待付款</option>
<option value="2">待填写资料</option>
<option value="3">过户进行中</option>
<option value="4">过户已完成</option>
<option value="5">买家已评价</option>
<!-- <option value="6">发票已开具</option>-->
</select>
</div>
<button type="button" id="search" class="layui-btn layui-btn-sm">
<i class="fa fa-lg fa-search"></i> 搜索
</button>
@ -110,7 +122,7 @@
return rowData.goodsName + " " + rowData.goodsVersion;
}
},
{field: 'payMoney', width: 180, title: '订单金额', align:'center',
{field: 'payMoney', width: 150, title: '订单金额', align:'center',
templet: function(row) {
var rowData = row[this.field];
if(typeof(rowData) === 'undefined' || rowData == null || rowData == '') {
@ -160,13 +172,14 @@
return rowData;
}
},
{field: 'cz', width: 300, title: '操作', align:'center',fixed: 'right',
{field: 'cz', width: 400, title: '操作', align:'center',fixed: 'right',
templet: function(row) {
var rowData = '<div class="layui-btn-group">';
rowData += ' <button type="button" class="layui-btn layui-btn-xs " lay-event="viewEvent">订单详情</button>';
if(row.orderStatus == '3') {
rowData += ' <button type="button" class="layui-btn layui-btn-xs " lay-event="correctionEvent">资料补充</button>';
rowData += ' <button type="button" class="layui-btn layui-btn-xs " lay-event="uploadEvent">过户完成(电子版上传)</button>';
rowData += ' <button type="button" class="layui-btn layui-btn-xs layui-btn-normal" lay-event="showEvent">商品记录</button>';
}
rowData += '</div>';
return rowData;
@ -230,6 +243,21 @@
reloadTable();
}
});
}else if(layEvent === 'showEvent') {
top.layer.open({
type: 2,
title: false,
closeBtn: 0,
area: ['20%', '100%'],
title: data.orderNumber,
offset: 'r',
shadeClose: true,
anim: 2,
content: top.restAjax.path('route/goodslog/list?goodsId={goodsId}', [data.goodsId]),
end: function() {
reloadTable();
}
});
}
});