diff --git a/pom.xml b/pom.xml index f24b4d5e..8ff96ab9 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ co.yixiang yshop pom - 1.5 + 1.6 yshop-common diff --git a/shell/start.sh b/shell/start.sh index dbf372dd..841b4434 100644 --- a/shell/start.sh +++ b/shell/start.sh @@ -1 +1 @@ -nohup java -jar yshop-api-1.5.jar --spring.profiles.active=prod & \ No newline at end of file +nohup java -jar yshop-api-1.6.jar --spring.profiles.active=prod & \ No newline at end of file diff --git a/shell/stop.sh b/shell/stop.sh index 86e081a1..004b7408 100644 --- a/shell/stop.sh +++ b/shell/stop.sh @@ -1,4 +1,4 @@ -PID=$(ps -ef | grep yshop-api-1.5.jar | grep -v grep | awk '{ print $2 }') +PID=$(ps -ef | grep yshop-api-1.6.jar | grep -v grep | awk '{ print $2 }') if [ -z "$PID" ];then echo Application is already stopped else diff --git a/sql/yxshop.sql b/sql/yxshop.sql index a63b73ee..91cdda3b 100644 --- a/sql/yxshop.sql +++ b/sql/yxshop.sql @@ -11,7 +11,7 @@ Target Server Version : 50723 File Encoding : 65001 - Date: 17/12/2019 18:20:31 + Date: 23/12/2019 19:46:32 */ SET NAMES utf8mb4; @@ -227,7 +227,7 @@ CREATE TABLE `log` ( `username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 17693 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact; +) ENGINE = InnoDB AUTO_INCREMENT = 17743 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact; -- ---------------------------- -- Records of log @@ -3653,6 +3653,59 @@ INSERT INTO `log` VALUES (17686, '2019-12-17 11:17:45', '用户登录', NULL, 'I INSERT INTO `log` VALUES (17687, '2019-12-17 12:14:58', '用户登录', NULL, 'INFO', 'co.yixiang.modules.security.rest.AuthenticationController.login()', '{ authorizationUser: {username=15136175246, password= ******} }', '127.0.0.1', 1025, '', '内网IP'); INSERT INTO `log` VALUES (17688, '2019-12-17 13:20:07', '用户登录', NULL, 'INFO', 'co.yixiang.modules.security.rest.AuthenticationController.login()', '{ authorizationUser: {username=15136175246, password= ******} }', '127.0.0.1', 858, '', '内网IP'); INSERT INTO `log` VALUES (17689, '2019-12-17 13:20:10', '用户登录', NULL, 'INFO', 'co.yixiang.modules.security.rest.AuthenticationController.login()', '{ authorizationUser: {username=15136175246, password= ******} }', '127.0.0.1', 18, '', '内网IP'); +INSERT INTO `log` VALUES (17690, '2019-12-17 16:14:49', '用户登录', NULL, 'INFO', 'co.yixiang.modules.security.rest.AuthenticationController.login()', '{ authorizationUser: {username=admin, password= ******} }', '127.0.0.1', 951, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17691, '2019-12-17 16:14:55', '查询YxExpress', NULL, 'INFO', 'co.yixiang.modules.shop.rest.YxExpressController.getYxExpresss()', '{ criteria: YxExpressQueryCriteria() pageable: Page request [number: 0, size 20, sort: UNSORTED] }', '127.0.0.1', 122, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17692, '2019-12-17 16:21:37', '查询YxExpress', NULL, 'INFO', 'co.yixiang.modules.shop.rest.YxExpressController.getYxExpresss()', '{ criteria: YxExpressQueryCriteria() pageable: Page request [number: 0, size 20, sort: UNSORTED] }', '127.0.0.1', 40, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17693, '2019-12-21 09:49:28', '用户登录', NULL, 'INFO', 'co.yixiang.modules.security.rest.AuthenticationController.login()', '{ authorizationUser: {username=15136175246, password= ******} }', '127.0.0.1', 1222, '', '内网IP'); +INSERT INTO `log` VALUES (17694, '2019-12-21 10:03:52', '用户登录', NULL, 'INFO', 'co.yixiang.modules.security.rest.AuthenticationController.login()', '{ authorizationUser: {username=15136175246, password= ******} }', '127.0.0.1', 877, '', '内网IP'); +INSERT INTO `log` VALUES (17695, '2019-12-21 17:44:19', '用户登录', NULL, 'INFO', 'co.yixiang.modules.security.rest.AuthenticationController.login()', '{ authorizationUser: {username=15136175246, password= ******} }', '127.0.0.1', 1001, '', '内网IP'); +INSERT INTO `log` VALUES (17696, '2019-12-22 19:11:30', '用户登录', NULL, 'INFO', 'co.yixiang.modules.security.rest.AuthenticationController.login()', '{ authorizationUser: {username=hupeng, password= ******} }', '127.0.0.1', 235, '', '内网IP'); +INSERT INTO `log` VALUES (17697, '2019-12-22 19:12:03', '用户登录', NULL, 'INFO', 'co.yixiang.modules.security.rest.AuthenticationController.login()', '{ authorizationUser: {username=hupeng, password= ******} }', '127.0.0.1', 26, '', '内网IP'); +INSERT INTO `log` VALUES (17698, '2019-12-23 15:51:07', '用户登录', 'co.yixiang.exception.BadRequestException: 验证码已过期\r\n at co.yixiang.modules.security.rest.AuthenticationController.login(AuthenticationController.java:67)\r\n at co.yixiang.modules.security.rest.AuthenticationController$$FastClassBySpringCGLIB$$7265dd5e.invoke()\r\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:746)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:88)\r\n at co.yixiang.aspect.LogAspect.logAround(LogAspect.java:50)\r\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644)\r\n at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633)\r\n at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\r\n at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:62)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\r\n at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:93)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)\r\n at co.yixiang.modules.security.rest.AuthenticationController$$EnhancerBySpringCGLIB$$15ac468c.login()\r\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:215)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:142)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:800)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:998)\r\n at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:901)\r\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:875)\r\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:320)\r\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127)\r\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)\r\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)\r\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)\r\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)\r\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:170)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)\r\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)\r\n at co.yixiang.modules.security.security.JwtAuthorizationTokenFilter.doFilterInternal(JwtAuthorizationTokenFilter.java:67)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)\r\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)\r\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:66)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)\r\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)\r\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)\r\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:215)\r\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178)\r\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:357)\r\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:270)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:770)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\r\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\r\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\r\n at java.lang.Thread.run(Thread.java:748)\r\n', 'ERROR', 'co.yixiang.modules.security.rest.AuthenticationController.login()', '{ authorizationUser: {username=admin, password= ******} }', '127.0.0.1', 19, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17699, '2019-12-23 15:51:16', '用户登录', NULL, 'INFO', 'co.yixiang.modules.security.rest.AuthenticationController.login()', '{ authorizationUser: {username=admin, password= ******} }', '127.0.0.1', 1051, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17700, '2019-12-23 15:54:03', '查询菜单', NULL, 'INFO', 'co.yixiang.modules.system.rest.MenuController.getMenus()', '{ criteria: MenuQueryCriteria(blurry=null) }', '127.0.0.1', 73, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17701, '2019-12-23 15:54:29', '查询菜单', NULL, 'INFO', 'co.yixiang.modules.system.rest.MenuController.getMenus()', '{ criteria: MenuQueryCriteria(blurry=null) }', '127.0.0.1', 4, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17702, '2019-12-23 15:56:01', '新增菜单', NULL, 'INFO', 'co.yixiang.modules.system.rest.MenuController.create()', '{ resources: co.yixiang.modules.system.domain.Menu@74 }', '127.0.0.1', 87, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17703, '2019-12-23 15:56:01', '查询菜单', NULL, 'INFO', 'co.yixiang.modules.system.rest.MenuController.getMenus()', '{ criteria: MenuQueryCriteria(blurry=null) }', '127.0.0.1', 54, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17704, '2019-12-23 15:56:09', '查询权限', NULL, 'INFO', 'co.yixiang.modules.system.rest.PermissionController.getPermissions()', '{ criteria: PermissionQueryCriteria(blurry=null) }', '127.0.0.1', 30, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17705, '2019-12-23 15:56:13', '查询角色', NULL, 'INFO', 'co.yixiang.modules.system.rest.RoleController.getRoles()', '{ criteria: RoleQueryCriteria(blurry=null) pageable: Page request [number: 0, size 10, sort: level: ASC] }', '127.0.0.1', 16, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17706, '2019-12-23 15:56:21', '修改角色菜单', NULL, 'INFO', 'co.yixiang.modules.system.rest.RoleController.updateMenu()', '{ resources: Role{id=1, name=\'null\', remark=\'null\', createDateTime=null} }', '127.0.0.1', 188, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17707, '2019-12-23 16:01:31', '查询菜单', NULL, 'INFO', 'co.yixiang.modules.system.rest.MenuController.getMenus()', '{ criteria: MenuQueryCriteria(blurry=null) }', '127.0.0.1', 5, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17708, '2019-12-23 16:01:45', '查询数据配置', NULL, 'INFO', 'co.yixiang.modules.shop.rest.YxSystemGroupDataController.getYxSystemGroupDatas()', '{ criteria: YxSystemGroupDataQueryCriteria(groupName=routine_seckill_time) pageable: Page request [number: 0, size 10, sort: id: DESC] }', '127.0.0.1', 89, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17709, '2019-12-23 16:02:15', '查询菜单', NULL, 'INFO', 'co.yixiang.modules.system.rest.MenuController.getMenus()', '{ criteria: MenuQueryCriteria(blurry=null) }', '127.0.0.1', 4, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17710, '2019-12-23 16:02:55', '修改菜单', NULL, 'INFO', 'co.yixiang.modules.system.rest.MenuController.update()', '{ resources: co.yixiang.modules.system.domain.Menu@74 }', '127.0.0.1', 43, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17711, '2019-12-23 16:02:56', '查询菜单', NULL, 'INFO', 'co.yixiang.modules.system.rest.MenuController.getMenus()', '{ criteria: MenuQueryCriteria(blurry=null) }', '127.0.0.1', 32, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17712, '2019-12-23 16:03:07', '查询YxExpress', NULL, 'INFO', 'co.yixiang.modules.shop.rest.YxExpressController.getYxExpresss()', '{ criteria: YxExpressQueryCriteria() pageable: Page request [number: 0, size 20, sort: UNSORTED] }', '127.0.0.1', 36, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17713, '2019-12-23 16:03:09', '查询YxExpress', NULL, 'INFO', 'co.yixiang.modules.shop.rest.YxExpressController.getYxExpresss()', '{ criteria: YxExpressQueryCriteria() pageable: Page request [number: 0, size 20, sort: UNSORTED] }', '127.0.0.1', 3, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17714, '2019-12-23 16:03:16', '查询YxStoreBargain', 'org.springframework.orm.jpa.JpaSystemException: could not execute query; nested exception is org.hibernate.exception.GenericJDBCException: could not execute query\r\n at org.springframework.orm.jpa.vendor.HibernateJpaDialect.convertHibernateAccessException(HibernateJpaDialect.java:351)\r\n at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:253)\r\n at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:527)\r\n at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:61)\r\n at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:242)\r\n at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:153)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:135)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:93)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.data.repository.core.support.SurroundingTransactionDetectorMethodInterceptor.invoke(SurroundingTransactionDetectorMethodInterceptor.java:61)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:212)\r\n at com.sun.proxy.$Proxy181.findAll(Unknown Source)\r\n at co.yixiang.modules.activity.service.impl.YxStoreBargainServiceImpl.queryAll(YxStoreBargainServiceImpl.java:38)\r\n at co.yixiang.modules.activity.service.impl.YxStoreBargainServiceImpl$$FastClassBySpringCGLIB$$7a5ffcb1.invoke()\r\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:746)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:294)\r\n at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)\r\n at co.yixiang.modules.activity.service.impl.YxStoreBargainServiceImpl$$EnhancerBySpringCGLIB$$c3cb21f0.queryAll()\r\n at co.yixiang.modules.activity.rest.YxStoreBargainController.getYxStoreBargains(YxStoreBargainController.java:35)\r\n at co.yixiang.modules.activity.rest.YxStoreBargainController$$FastClassBySpringCGLIB$$9af07f25.invoke()\r\n at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)\r\n at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:746)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\r\n at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:88)\r\n at co.yixiang.aspect.LogAspect.logAround(LogAspect.java:50)\r\n at sun.reflect.GeneratedMethodAccessor284.invoke(Unknown Source)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:644)\r\n at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:633)\r\n at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\r\n at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:62)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:175)\r\n at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:69)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:93)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)\r\n at co.yixiang.modules.activity.rest.YxStoreBargainController$$EnhancerBySpringCGLIB$$f1bac71a.getYxStoreBargains()\r\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:215)\r\n at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:142)\r\n at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)\r\n at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:800)\r\n at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)\r\n at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1038)\r\n at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)\r\n at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:998)\r\n at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:890)\r\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)\r\n at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:875)\r\n at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:101)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:320)\r\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127)\r\n at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)\r\n at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)\r\n at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)\r\n at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)\r\n at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:170)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)\r\n at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)\r\n at co.yixiang.modules.security.security.JwtAuthorizationTokenFilter.doFilterInternal(JwtAuthorizationTokenFilter.java:67)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)\r\n at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)\r\n at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:66)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)\r\n at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)\r\n at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\r\n at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)\r\n at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:215)\r\n at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178)\r\n at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:357)\r\n at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:270)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)\r\n at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)\r\n at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)\r\n at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)\r\n at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)\r\n at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)\r\n at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)\r\n at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)\r\n at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)\r\n at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)\r\n at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)\r\n at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)\r\n at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)\r\n at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:770)\r\n at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415)\r\n at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)\r\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\r\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\r\n at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\r\n at java.lang.Thread.run(Thread.java:748)\r\nCaused by: org.hibernate.exception.GenericJDBCException: could not execute query\r\n at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:47)\r\n at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:113)\r\n at org.hibernate.loader.Loader.doList(Loader.java:2692)\r\n at org.hibernate.loader.Loader.doList(Loader.java:2672)\r\n at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2506)\r\n at org.hibernate.loader.Loader.list(Loader.java:2501)\r\n at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:504)\r\n at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:395)\r\n at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:220)\r\n at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1508)\r\n at org.hibernate.query.internal.AbstractProducedQuery.doList(AbstractProducedQuery.java:1537)\r\n at org.hibernate.query.internal.AbstractProducedQuery.list(AbstractProducedQuery.java:1505)\r\n at org.hibernate.query.Query.getResultList(Query.java:135)\r\n at org.hibernate.query.criteria.internal.compile.CriteriaQueryTypeQueryAdapter.getResultList(CriteriaQueryTypeQueryAdapter.java:74)\r\n at org.springframework.data.jpa.repository.support.SimpleJpaRepository.readPage(SimpleJpaRepository.java:569)\r\n at org.springframework.data.jpa.repository.support.SimpleJpaRepository.findAll(SimpleJpaRepository.java:388)\r\n at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)\r\n at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)\r\n at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)\r\n at java.lang.reflect.Method.invoke(Method.java:498)\r\n at org.springframework.data.repository.core.support.RepositoryComposition$RepositoryFragments.invoke(RepositoryComposition.java:359)\r\n at org.springframework.data.repository.core.support.RepositoryComposition.invoke(RepositoryComposition.java:200)\r\n at org.springframework.data.repository.core.support.RepositoryFactorySupport$ImplementationMethodExecutionInterceptor.invoke(RepositoryFactorySupport.java:644)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:608)\r\n at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.lambda$invoke$3(RepositoryFactorySupport.java:595)\r\n at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:595)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:59)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:294)\r\n at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:98)\r\n at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)\r\n at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:139)\r\n ... 122 more\r\nCaused by: java.sql.SQLException: Zero date value prohibited\r\n at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)\r\n at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)\r\n at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:89)\r\n at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:63)\r\n at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:73)\r\n at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:99)\r\n at com.mysql.cj.jdbc.result.ResultSetImpl.getTimestamp(ResultSetImpl.java:1019)\r\n at com.mysql.cj.jdbc.result.ResultSetImpl.getTimestamp(ResultSetImpl.java:1064)\r\n at net.sf.log4jdbc.sql.jdbcapi.ResultSetSpy.getTimestamp(ResultSetSpy.java:357)\r\n at com.alibaba.druid.filter.FilterChainImpl.resultSet_getTimestamp(FilterChainImpl.java:1258)\r\n at com.alibaba.druid.filter.FilterAdapter.resultSet_getTimestamp(FilterAdapter.java:1818)\r\n at com.alibaba.druid.filter.FilterChainImpl.resultSet_getTimestamp(FilterChainImpl.java:1254)\r\n at com.alibaba.druid.proxy.jdbc.ResultSetProxyImpl.getTimestamp(ResultSetProxyImpl.java:741)\r\n at com.alibaba.druid.pool.DruidPooledResultSet.getTimestamp(DruidPooledResultSet.java:366)\r\n at org.hibernate.type.descriptor.sql.TimestampTypeDescriptor$2.doExtract(TimestampTypeDescriptor.java:84)\r\n at org.hibernate.type.descriptor.sql.BasicExtractor.extract(BasicExtractor.java:47)\r\n at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:261)\r\n at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:257)\r\n at org.hibernate.type.AbstractStandardBasicType.nullSafeGet(AbstractStandardBasicType.java:247)\r\n at org.hibernate.type.AbstractStandardBasicType.hydrate(AbstractStandardBasicType.java:333)\r\n at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:3007)\r\n at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1746)\r\n at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1672)\r\n at org.hibernate.loader.Loader.getRow(Loader.java:1561)\r\n at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:731)\r\n at org.hibernate.loader.Loader.processResultSet(Loader.java:990)\r\n at org.hibernate.loader.Loader.doQuery(Loader.java:948)\r\n at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:340)\r\n at org.hibernate.loader.Loader.doList(Loader.java:2689)\r\n ... 153 more\r\nCaused by: com.mysql.cj.exceptions.DataReadException: Zero date value prohibited\r\n at com.mysql.cj.result.SqlTimestampValueFactory.createFromTimestamp(SqlTimestampValueFactory.java:93)\r\n at com.mysql.cj.result.SqlTimestampValueFactory.createFromTimestamp(SqlTimestampValueFactory.java:46)\r\n at com.mysql.cj.result.BaseDecoratingValueFactory.createFromTimestamp(BaseDecoratingValueFactory.java:61)\r\n at com.mysql.cj.result.BaseDecoratingValueFactory.createFromTimestamp(BaseDecoratingValueFactory.java:61)\r\n at com.mysql.cj.protocol.a.MysqlTextValueDecoder.decodeTimestamp(MysqlTextValueDecoder.java:183)\r\n at com.mysql.cj.protocol.result.AbstractResultsetRow.decodeAndCreateReturnValue(AbstractResultsetRow.java:87)\r\n at com.mysql.cj.protocol.result.AbstractResultsetRow.getValueFromBytes(AbstractResultsetRow.java:250)\r\n at com.mysql.cj.protocol.a.result.TextBufferRow.getValue(TextBufferRow.java:132)\r\n at com.mysql.cj.jdbc.result.ResultSetImpl.getNonStringValueFromRow(ResultSetImpl.java:656)\r\n at com.mysql.cj.jdbc.result.ResultSetImpl.getDateOrTimestampValueFromRow(ResultSetImpl.java:679)\r\n ... 176 more\r\n', 'ERROR', 'co.yixiang.modules.activity.rest.YxStoreBargainController.getYxStoreBargains()', '{ criteria: YxStoreBargainQueryCriteria() pageable: Page request [number: 0, size 10, sort: id: DESC] }', '127.0.0.1', 302, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17715, '2019-12-23 16:04:58', '查询YxStoreBargain', NULL, 'INFO', 'co.yixiang.modules.activity.rest.YxStoreBargainController.getYxStoreBargains()', '{ criteria: YxStoreBargainQueryCriteria() pageable: Page request [number: 0, size 10, sort: id: DESC] }', '127.0.0.1', 10, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17716, '2019-12-23 16:05:19', '查询商品', NULL, 'INFO', 'co.yixiang.modules.shop.rest.YxStoreProductController.getYxStoreProducts()', '{ criteria: YxStoreProductQueryCriteria(storeName=null, isDel=null, isShow=0) pageable: Page request [number: 0, size 10, sort: id: DESC] }', '127.0.0.1', 37, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17717, '2019-12-23 16:05:19', '查询商品', NULL, 'INFO', 'co.yixiang.modules.shop.rest.YxStoreProductController.getYxStoreProducts()', '{ criteria: YxStoreProductQueryCriteria(storeName=null, isDel=1, isShow=null) pageable: Page request [number: 0, size 10, sort: id: DESC] }', '127.0.0.1', 41, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17718, '2019-12-23 16:05:19', '查询商品', NULL, 'INFO', 'co.yixiang.modules.shop.rest.YxStoreProductController.getYxStoreProducts()', '{ criteria: YxStoreProductQueryCriteria(storeName=null, isDel=0, isShow=1) pageable: Page request [number: 0, size 10, sort: id: DESC] }', '127.0.0.1', 48, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17719, '2019-12-23 16:27:14', '查询商品', NULL, 'INFO', 'co.yixiang.modules.shop.rest.YxStoreProductController.getYxStoreProducts()', '{ criteria: YxStoreProductQueryCriteria(storeName=null, isDel=0, isShow=1) pageable: Page request [number: 0, size 10, sort: id: DESC] }', '127.0.0.1', 12, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17720, '2019-12-23 16:27:56', '查询商品', NULL, 'INFO', 'co.yixiang.modules.shop.rest.YxStoreProductController.getYxStoreProducts()', '{ criteria: YxStoreProductQueryCriteria(storeName=null, isDel=0, isShow=1) pageable: Page request [number: 0, size 10, sort: id: DESC] }', '127.0.0.1', 9, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17721, '2019-12-23 16:28:37', '查询商品', NULL, 'INFO', 'co.yixiang.modules.shop.rest.YxStoreProductController.getYxStoreProducts()', '{ criteria: YxStoreProductQueryCriteria(storeName=null, isDel=0, isShow=1) pageable: Page request [number: 0, size 10, sort: id: DESC] }', '127.0.0.1', 15, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17722, '2019-12-23 16:28:59', '查询商品', NULL, 'INFO', 'co.yixiang.modules.shop.rest.YxStoreProductController.getYxStoreProducts()', '{ criteria: YxStoreProductQueryCriteria(storeName=null, isDel=0, isShow=1) pageable: Page request [number: 0, size 10, sort: id: DESC] }', '127.0.0.1', 18, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17723, '2019-12-23 16:30:41', '查询商品', NULL, 'INFO', 'co.yixiang.modules.shop.rest.YxStoreProductController.getYxStoreProducts()', '{ criteria: YxStoreProductQueryCriteria(storeName=null, isDel=1, isShow=null) pageable: Page request [number: 0, size 10, sort: id: DESC] }', '127.0.0.1', 4, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17724, '2019-12-23 16:30:41', '查询商品', NULL, 'INFO', 'co.yixiang.modules.shop.rest.YxStoreProductController.getYxStoreProducts()', '{ criteria: YxStoreProductQueryCriteria(storeName=null, isDel=null, isShow=0) pageable: Page request [number: 0, size 10, sort: id: DESC] }', '127.0.0.1', 11, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17725, '2019-12-23 16:30:41', '查询商品', NULL, 'INFO', 'co.yixiang.modules.shop.rest.YxStoreProductController.getYxStoreProducts()', '{ criteria: YxStoreProductQueryCriteria(storeName=null, isDel=0, isShow=1) pageable: Page request [number: 0, size 10, sort: id: DESC] }', '127.0.0.1', 10, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17726, '2019-12-23 16:31:48', '查询商品', NULL, 'INFO', 'co.yixiang.modules.shop.rest.YxStoreProductController.getYxStoreProducts()', '{ criteria: YxStoreProductQueryCriteria(storeName=null, isDel=0, isShow=1) pageable: Page request [number: 0, size 10, sort: id: DESC] }', '127.0.0.1', 20, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17727, '2019-12-23 16:37:53', '查询商品分类', NULL, 'INFO', 'co.yixiang.modules.shop.rest.YxStoreCategoryController.getYxStoreCategorys()', '{ criteria: YxStoreCategoryQueryCriteria(cateName=null) pageable: Page request [number: 0, size 20, sort: UNSORTED] }', '127.0.0.1', 88, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17728, '2019-12-23 16:42:34', '修改YxStoreBargain', NULL, 'INFO', 'co.yixiang.modules.activity.rest.YxStoreBargainController.update()', '{ resources: YxStoreBargain(id=2, productId=20, title=砍价测试01, image=https://image.dayouqiantu.cn/5ca04fa9c08ef.jpg, unitName=张, stock=100, sales=1, images=https://image.dayouqiantu.cn/5ca05103ad634.jpg,https://image.dayouqiantu.cn/5ca04fa9c08ef.jpg, startTime=1577090495, stopTime=1577728800, startTimeDate=Mon Dec 23 16:41:35 CST 2019, endTimeDate=Tue Dec 31 02:00:00 CST 2019, storeName=70gA4彩色打印复印, price=10, minPrice=0.01, num=1, bargainMaxPrice=2, bargainMinPrice=0.01, bargainNum=1, status=1, description=

7文件请传QQ2412733099,

718504558或2412733099@qq.com邮箱,

手机/微信:13733990583

量大请联系店主,一定让您满意而归

   实体店面经营 保质保量

A4黑白2毛/张,量大1毛/张,

A3黑白双面5毛/张,量大3毛/张,

更大量请联系店主报价,

每消费1元可积1分,1分抵现金1毛,

付款时直接抵扣

(如此优惠的基础上还可积分,积分抵现金)



, giveIntegral=0, info=70gA4彩色打印复印, cost=0.5, sort=0, isHot=1, isDel=0, addTime=1577090553, isPostage=1, postage=0, rule=

这里是规则

, look=null, share=null) }', '127.0.0.1', 145, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17729, '2019-12-23 16:42:34', '查询商品', NULL, 'INFO', 'co.yixiang.modules.shop.rest.YxStoreProductController.getYxStoreProducts()', '{ criteria: YxStoreProductQueryCriteria(storeName=null, isDel=0, isShow=1) pageable: Page request [number: 0, size 10, sort: id: DESC] }', '127.0.0.1', 170, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17730, '2019-12-23 16:42:41', '查询YxStoreBargain', NULL, 'INFO', 'co.yixiang.modules.activity.rest.YxStoreBargainController.getYxStoreBargains()', '{ criteria: YxStoreBargainQueryCriteria() pageable: Page request [number: 0, size 10, sort: id: DESC] }', '127.0.0.1', 14, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17731, '2019-12-23 16:44:05', '查询YxStoreBargain', NULL, 'INFO', 'co.yixiang.modules.activity.rest.YxStoreBargainController.getYxStoreBargains()', '{ criteria: YxStoreBargainQueryCriteria() pageable: Page request [number: 0, size 10, sort: id: DESC] }', '127.0.0.1', 10, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17732, '2019-12-23 16:48:17', '查询YxStoreBargain', NULL, 'INFO', 'co.yixiang.modules.activity.rest.YxStoreBargainController.getYxStoreBargains()', '{ criteria: YxStoreBargainQueryCriteria() pageable: Page request [number: 0, size 10, sort: id: DESC] }', '127.0.0.1', 33, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17733, '2019-12-23 16:48:47', '查询YxStoreSeckill', NULL, 'INFO', 'co.yixiang.modules.activity.rest.YxStoreSeckillController.getYxStoreSeckills()', '{ criteria: YxStoreSeckillQueryCriteria(title=null) pageable: Page request [number: 0, size 10, sort: id: DESC] }', '127.0.0.1', 24, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17734, '2019-12-23 16:48:48', '查询YxStoreBargain', NULL, 'INFO', 'co.yixiang.modules.activity.rest.YxStoreBargainController.getYxStoreBargains()', '{ criteria: YxStoreBargainQueryCriteria() pageable: Page request [number: 0, size 10, sort: id: DESC] }', '127.0.0.1', 5, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17735, '2019-12-23 16:48:54', '查询YxStoreSeckill', NULL, 'INFO', 'co.yixiang.modules.activity.rest.YxStoreSeckillController.getYxStoreSeckills()', '{ criteria: YxStoreSeckillQueryCriteria(title=null) pageable: Page request [number: 0, size 10, sort: id: DESC] }', '127.0.0.1', 6, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17736, '2019-12-23 16:48:56', '查询YxStoreBargain', NULL, 'INFO', 'co.yixiang.modules.activity.rest.YxStoreBargainController.getYxStoreBargains()', '{ criteria: YxStoreBargainQueryCriteria() pageable: Page request [number: 0, size 10, sort: id: DESC] }', '127.0.0.1', 7, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17737, '2019-12-23 16:49:21', '查询YxStoreBargain', NULL, 'INFO', 'co.yixiang.modules.activity.rest.YxStoreBargainController.getYxStoreBargains()', '{ criteria: YxStoreBargainQueryCriteria() pageable: Page request [number: 0, size 10, sort: id: DESC] }', '127.0.0.1', 4, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17738, '2019-12-23 19:38:53', '查询商品', NULL, 'INFO', 'co.yixiang.modules.shop.rest.YxStoreProductController.getYxStoreProducts()', '{ criteria: YxStoreProductQueryCriteria(storeName=null, isDel=null, isShow=0) pageable: Page request [number: 0, size 10, sort: id: DESC] }', '127.0.0.1', 132, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17739, '2019-12-23 19:38:53', '查询商品', NULL, 'INFO', 'co.yixiang.modules.shop.rest.YxStoreProductController.getYxStoreProducts()', '{ criteria: YxStoreProductQueryCriteria(storeName=null, isDel=0, isShow=1) pageable: Page request [number: 0, size 10, sort: id: DESC] }', '127.0.0.1', 138, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17740, '2019-12-23 19:38:53', '查询商品', NULL, 'INFO', 'co.yixiang.modules.shop.rest.YxStoreProductController.getYxStoreProducts()', '{ criteria: YxStoreProductQueryCriteria(storeName=null, isDel=1, isShow=null) pageable: Page request [number: 0, size 10, sort: id: DESC] }', '127.0.0.1', 132, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17741, '2019-12-23 19:39:39', '修改YxStoreBargain', NULL, 'INFO', 'co.yixiang.modules.activity.rest.YxStoreBargainController.update()', '{ resources: YxStoreBargain(id=3, productId=20, title=砍价活动2, image=https://image.dayouqiantu.cn/5ca04fa9c08ef.jpg, unitName=张, stock=100, sales=1, images=https://image.dayouqiantu.cn/5ca05103ad634.jpg,https://image.dayouqiantu.cn/5ca04fa9c08ef.jpg, startTime=1577101169, stopTime=1577721600, startTimeDate=Mon Dec 23 19:39:29 CST 2019, endTimeDate=Tue Dec 31 00:00:00 CST 2019, storeName=70gA4彩色打印复印, price=0.01, minPrice=0.01, num=1, bargainMaxPrice=10, bargainMinPrice=0.01, bargainNum=1, status=1, description=

7文件请传QQ2412733099,

718504558或2412733099@qq.com邮箱,

手机/微信:13733990583

量大请联系店主,一定让您满意而归

   实体店面经营 保质保量

A4黑白2毛/张,量大1毛/张,

A3黑白双面5毛/张,量大3毛/张,

更大量请联系店主报价,

每消费1元可积1分,1分抵现金1毛,

付款时直接抵扣

(如此优惠的基础上还可积分,积分抵现金)



, giveIntegral=0, info=70gA4彩色打印复印, cost=0.5, sort=0, isHot=1, isDel=0, addTime=1577101179, isPostage=1, postage=0, rule=

444444

, look=null, share=null) }', '127.0.0.1', 94, 'admin', '内网IP'); +INSERT INTO `log` VALUES (17742, '2019-12-23 19:39:40', '查询商品', NULL, 'INFO', 'co.yixiang.modules.shop.rest.YxStoreProductController.getYxStoreProducts()', '{ criteria: YxStoreProductQueryCriteria(storeName=null, isDel=0, isShow=1) pageable: Page request [number: 0, size 10, sort: id: DESC] }', '127.0.0.1', 20, 'admin', '内网IP'); -- ---------------------------- -- Table structure for menu @@ -3673,7 +3726,7 @@ CREATE TABLE `menu` ( `component_name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT '-', PRIMARY KEY (`id`) USING BTREE, INDEX `FKqcf9gem97gqa5qjm4d3elcqt5`(`pid`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 85 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact; +) ENGINE = InnoDB AUTO_INCREMENT = 86 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact; -- ---------------------------- -- Records of menu @@ -3739,6 +3792,7 @@ INSERT INTO `menu` VALUES (81, '2019-12-12 16:36:00', b'0', '物流快递', 'sho INSERT INTO `menu` VALUES (82, '2019-12-13 14:42:50', b'0', '微信模板消息', 'wechat/template/index', 48, 35, 'anq', 'template', b'0', b'0', 'Template'); INSERT INTO `menu` VALUES (83, '2019-12-16 13:06:29', b'0', '秒杀产品', 'activity/seckill/index', 63, 66, 'seckill', 'seckill', b'0', b'0', 'Seckill'); INSERT INTO `menu` VALUES (84, '2019-12-16 16:07:42', b'0', '秒杀配置', 'shop/set/seckill', 63, 67, 'configure', 'seckillconfig', b'0', b'0', 'Seckillconfig'); +INSERT INTO `menu` VALUES (85, '2019-12-23 15:56:01', b'0', '砍价产品', 'activity/bargain/index', 63, 68, 'bargain', 'bargain', b'0', b'0', 'Bargain'); -- ---------------------------- -- Table structure for permission @@ -4072,6 +4126,7 @@ INSERT INTO `roles_menus` VALUES (81, 1); INSERT INTO `roles_menus` VALUES (82, 1); INSERT INTO `roles_menus` VALUES (83, 1); INSERT INTO `roles_menus` VALUES (84, 1); +INSERT INTO `roles_menus` VALUES (85, 1); INSERT INTO `roles_menus` VALUES (1, 2); INSERT INTO `roles_menus` VALUES (2, 2); INSERT INTO `roles_menus` VALUES (3, 2); @@ -4223,7 +4278,7 @@ CREATE TABLE `visits` ( `week_day` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `UK_11aksgq87euk9bcyeesfs4vtp`(`date`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 167 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact; +) ENGINE = InnoDB AUTO_INCREMENT = 171 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact; -- ---------------------------- -- Records of visits @@ -4298,7 +4353,11 @@ INSERT INTO `visits` VALUES (162, '2019-12-13 14:17:04', '2019-12-13', 1, 6, 'Fr INSERT INTO `visits` VALUES (163, '2019-12-14 09:17:31', '2019-12-14', 1, 2, 'Sat'); INSERT INTO `visits` VALUES (164, '2019-12-15 20:23:23', '2019-12-15', 1, 1, 'Sun'); INSERT INTO `visits` VALUES (165, '2019-12-16 10:44:59', '2019-12-16', 1, 5, 'Mon'); -INSERT INTO `visits` VALUES (166, '2019-12-17 09:34:14', '2019-12-17', 1, 1, 'Tue'); +INSERT INTO `visits` VALUES (166, '2019-12-17 09:34:14', '2019-12-17', 1, 2, 'Tue'); +INSERT INTO `visits` VALUES (167, '2019-12-19 15:20:25', '2019-12-19', 1, 1, 'Thu'); +INSERT INTO `visits` VALUES (168, '2019-12-21 09:49:05', '2019-12-21', 1, 1, 'Sat'); +INSERT INTO `visits` VALUES (169, '2019-12-22 16:17:10', '2019-12-22', 1, 1, 'Sun'); +INSERT INTO `visits` VALUES (170, '2019-12-23 14:27:20', '2019-12-23', 1, 5, 'Mon'); -- ---------------------------- -- Table structure for yx_article @@ -4515,8 +4574,16 @@ CREATE TABLE `yx_store_bargain` ( `rule` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '砍价规则', `look` int(11) UNSIGNED NULL DEFAULT 0 COMMENT '砍价产品浏览量', `share` int(11) UNSIGNED NULL DEFAULT 0 COMMENT '砍价产品分享量', + `end_time_date` datetime(0) NOT NULL, + `start_time_date` datetime(0) NOT NULL, PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '砍价表' ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '砍价表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of yx_store_bargain +-- ---------------------------- +INSERT INTO `yx_store_bargain` VALUES (2, 20, '砍价测试01', 'https://image.dayouqiantu.cn/5ca04fa9c08ef.jpg', '张', 100, 1, 'https://image.dayouqiantu.cn/5ca05103ad634.jpg,https://image.dayouqiantu.cn/5ca04fa9c08ef.jpg', 1577090495, 1577728800, '70gA4彩色打印复印', 10.00, 0.01, 1, 2.00, 0.01, 1, 1, '

7文件请传QQ2412733099,

718504558或2412733099@qq.com邮箱,

手机/微信:13733990583

量大请联系店主,一定让您满意而归

   实体店面经营 保质保量

A4黑白2毛/张,量大1毛/张,

A3黑白双面5毛/张,量大3毛/张,

更大量请联系店主报价,

每消费1元可积1分,1分抵现金1毛,

付款时直接抵扣

(如此优惠的基础上还可积分,积分抵现金)



', 0.00, '70gA4彩色打印复印', 0.50, 0, 0, 0, 1577090553, 1, 0.00, '

这里是规则

', 15, 0, '2019-12-31 02:00:00', '2019-12-23 16:41:35'); +INSERT INTO `yx_store_bargain` VALUES (3, 20, '砍价活动2', 'https://image.dayouqiantu.cn/5ca04fa9c08ef.jpg', '张', 100, 1, 'https://image.dayouqiantu.cn/5ca05103ad634.jpg,https://image.dayouqiantu.cn/5ca04fa9c08ef.jpg', 1577101169, 1577721600, '70gA4彩色打印复印', 0.01, 0.01, 1, 10.00, 0.01, 1, 1, '

7文件请传QQ2412733099,

718504558或2412733099@qq.com邮箱,

手机/微信:13733990583

量大请联系店主,一定让您满意而归

   实体店面经营 保质保量

A4黑白2毛/张,量大1毛/张,

A3黑白双面5毛/张,量大3毛/张,

更大量请联系店主报价,

每消费1元可积1分,1分抵现金1毛,

付款时直接抵扣

(如此优惠的基础上还可积分,积分抵现金)



', 0.00, '70gA4彩色打印复印', 0.50, 0, 0, 0, 1577101179, 1, 0.00, '

444444

', 0, 0, '2019-12-31 00:00:00', '2019-12-23 19:39:29'); -- ---------------------------- -- Table structure for yx_store_bargain_user @@ -4533,7 +4600,13 @@ CREATE TABLE `yx_store_bargain_user` ( `add_time` int(11) UNSIGNED NULL DEFAULT NULL COMMENT '参与时间', `is_del` tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否取消', PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用户参与砍价表' ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 34 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用户参与砍价表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of yx_store_bargain_user +-- ---------------------------- +INSERT INTO `yx_store_bargain_user` VALUES (32, 12, 2, 0.01, 10.00, 1.06, 1, 1577099027, 1); +INSERT INTO `yx_store_bargain_user` VALUES (33, 12, 2, 0.01, 10.00, 1.34, 1, 1577099210, 0); -- ---------------------------- -- Table structure for yx_store_bargain_user_help @@ -4547,7 +4620,13 @@ CREATE TABLE `yx_store_bargain_user_help` ( `price` decimal(8, 2) UNSIGNED NULL DEFAULT NULL COMMENT '帮助砍价多少金额', `add_time` int(11) UNSIGNED NULL DEFAULT NULL COMMENT '添加时间', PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '砍价用户帮助表' ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 35 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '砍价用户帮助表' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of yx_store_bargain_user_help +-- ---------------------------- +INSERT INTO `yx_store_bargain_user_help` VALUES (33, 12, 2, 32, 1.06, 1577099027); +INSERT INTO `yx_store_bargain_user_help` VALUES (34, 12, 2, 33, 1.34, 1577099210); -- ---------------------------- -- Table structure for yx_store_cart @@ -4574,7 +4653,7 @@ CREATE TABLE `yx_store_cart` ( INDEX `uid_2`(`uid`, `is_del`) USING BTREE, INDEX `uid_3`(`uid`, `is_new`) USING BTREE, INDEX `type`(`type`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 100 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '购物车表' ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 104 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '购物车表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of yx_store_cart @@ -4649,8 +4728,8 @@ INSERT INTO `yx_store_cart` VALUES (87, 11, 'product', 19, '', 1, 1574329392, 1, INSERT INTO `yx_store_cart` VALUES (88, 12, 'product', 19, '', 1, 1574424869, 1, 0, 1, 2, 0, 0); INSERT INTO `yx_store_cart` VALUES (89, 12, 'product', 19, '00e86525a7af4dcf9e653ae0a2062369', 1, 1575095144, 1, 0, 1, 0, 0, 0); INSERT INTO `yx_store_cart` VALUES (90, 12, 'product', 19, '00e86525a7af4dcf9e653ae0a2062369', 1, 1575095354, 1, 0, 1, 0, 0, 0); -INSERT INTO `yx_store_cart` VALUES (91, 12, 'product', 19, '00e86525a7af4dcf9e653ae0a2062369', 2, 1575551197, 0, 0, 0, 0, 0, 0); -INSERT INTO `yx_store_cart` VALUES (92, 12, 'product', 20, 'ba5d202555c44d378e6644ca1296ee01', 1, 1575551310, 0, 0, 0, 0, 0, 0); +INSERT INTO `yx_store_cart` VALUES (91, 12, 'product', 19, '00e86525a7af4dcf9e653ae0a2062369', 2, 1575551197, 0, 1, 0, 0, 0, 0); +INSERT INTO `yx_store_cart` VALUES (92, 12, 'product', 20, 'ba5d202555c44d378e6644ca1296ee01', 3, 1575551310, 0, 1, 0, 0, 0, 0); INSERT INTO `yx_store_cart` VALUES (93, 12, 'product', 19, '', 1, 1575552290, 0, 0, 1, 2, 0, 0); INSERT INTO `yx_store_cart` VALUES (94, 12, 'product', 19, '', 1, 1575552309, 0, 0, 1, 1, 0, 0); INSERT INTO `yx_store_cart` VALUES (95, 12, 'product', 19, '00e86525a7af4dcf9e653ae0a2062369', 1, 1575771477, 1, 0, 1, 0, 0, 0); @@ -4658,6 +4737,10 @@ INSERT INTO `yx_store_cart` VALUES (96, 12, 'product', 19, '00e86525a7af4dcf9e65 INSERT INTO `yx_store_cart` VALUES (97, 12, 'product', 19, '00e86525a7af4dcf9e653ae0a2062369', 5, 1576290026, 0, 0, 1, 0, 0, 0); INSERT INTO `yx_store_cart` VALUES (98, 12, 'product', 20, '', 1, 1576559862, 0, 0, 1, 0, 0, 0); INSERT INTO `yx_store_cart` VALUES (99, 12, 'product', 20, '', 1, 1576561530, 1, 0, 1, 0, 2, 0); +INSERT INTO `yx_store_cart` VALUES (100, 12, 'product', 19, '00e86525a7af4dcf9e653ae0a2062369', 8, 1576749041, 0, 0, 0, 0, 0, 0); +INSERT INTO `yx_store_cart` VALUES (101, 12, 'product', 19, '6c2deabbdebd4f57a7c7b4c9e1c08bce', 9, 1576749047, 0, 0, 0, 0, 0, 0); +INSERT INTO `yx_store_cart` VALUES (102, 12, 'product', 19, 'd8c72945fdbe4035a95a393aff1eea46', 11, 1576749059, 0, 0, 0, 0, 0, 0); +INSERT INTO `yx_store_cart` VALUES (103, 12, 'product', 19, '', 1, 1577085055, 1, 0, 1, 0, 0, 1); -- ---------------------------- -- Table structure for yx_store_category @@ -4953,7 +5036,7 @@ CREATE TABLE `yx_store_order` ( INDEX `status`(`status`) USING BTREE, INDEX `is_del`(`is_del`) USING BTREE, INDEX `coupon_id`(`coupon_id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 102 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '订单表' ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 103 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '订单表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of yx_store_order @@ -5023,6 +5106,7 @@ INSERT INTO `yx_store_order` VALUES (98, '20191130142917149', 12, 'hu', '1513617 INSERT INTO `yx_store_order` VALUES (99, '20191208101834125', 12, 'hu', '15136175246', '上海 闸北区 城区 99999', '95', 0.00, 1, 118.80, 0.00, 118.80, 0.00, 0.00, 0, 0.00, 1, 1575771514, 'yue', 1575771514, 1, 0, NULL, NULL, NULL, NULL, NULL, 0.00, 'STO', '申通快递', 'express', '773002763618907', 1.00, 0.00, NULL, '', 0, 'ffe728984deb4fde9efc3ff9ce900bfb', NULL, 0, 0, 0, 0, 100.00, 0, 0, '', 0, 1, 1, 0, 0); INSERT INTO `yx_store_order` VALUES (100, '20191213185147846', 12, 'hu', '15136175246', '上海 闸北区 城区 99999', '96', 0.00, 1, 118.80, 0.00, 118.80, 0.00, 0.00, 0, 0.00, 1, 1576234308, 'yue', 1576234307, 0, 0, NULL, NULL, NULL, NULL, NULL, 0.00, '', NULL, NULL, NULL, 1.00, 0.00, NULL, '', 0, '6f7c8d3152d9432b96b0144f56cfa97f', NULL, 0, 0, 0, 0, 100.00, 0, 0, '', 0, 1, 1, 0, 0); INSERT INTO `yx_store_order` VALUES (101, '20191217144936011', 12, 'hu', '15136175246', '上海 闸北区 城区 99999', '99', 0.00, 1, 1.00, 0.00, 1.00, 0.00, 0.00, 0, 0.00, 1, 1576565376, 'yue', 1576565376, 0, 0, NULL, NULL, NULL, NULL, NULL, 0.00, '', NULL, NULL, NULL, 0.00, 0.00, NULL, '', 0, '6f7494dc75e64d76a9c47b5caeb6a6cd', NULL, 0, 0, 0, 0, 0.50, 2, 0, '', 0, 1, 1, 0, 0); +INSERT INTO `yx_store_order` VALUES (102, '20191223152924608', 12, 'hu', '15136175246', '上海 闸北区 城区 99999', '103', 0.00, 1, 1.00, 0.00, 1.00, 0.00, 0.00, 0, 0.00, 1, 1577086164, 'yue', 1577086164, 0, 0, NULL, NULL, NULL, NULL, NULL, 0.00, '', NULL, NULL, NULL, 0.00, 0.00, NULL, '', 0, 'b3aef09833a749f2951461c230e809a9', NULL, 0, 0, 0, 0, 50.00, 0, 1, '', 0, 1, 1, 0, 0); -- ---------------------------- -- Table structure for yx_store_order_cart_info @@ -5039,7 +5123,7 @@ CREATE TABLE `yx_store_order_cart_info` ( UNIQUE INDEX `oid`(`oid`, `unique`) USING BTREE, INDEX `cart_id`(`cart_id`) USING BTREE, INDEX `product_id`(`product_id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 98 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '订单购物详情表' ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 99 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '订单购物详情表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of yx_store_order_cart_info @@ -5111,6 +5195,7 @@ INSERT INTO `yx_store_order_cart_info` VALUES (94, 98, 90, 19, '{\"addTime\":157 INSERT INTO `yx_store_order_cart_info` VALUES (95, 99, 95, 19, '{\"addTime\":1575771477,\"productId\":19,\"seckillId\":0,\"vipTruePrice\":120.0,\"combinationId\":0,\"costPrice\":100.0,\"trueStock\":993,\"truePrice\":118.8,\"type\":\"product\",\"cartNum\":1,\"productInfo\":{\"otPrice\":0.50,\"userCollect\":false,\"description\":\"

文件请传QQ2412733099,

718504558或2412733099@qq.com邮箱,

手机/微信:13733990583

量大请联系店主,一定让您满意而归

   实体店面经营 保质保量

A4黑白2毛/张,量大1毛/张,

A3黑白双面5毛/张,量大3毛/张,

更大量请联系店主报价,

每消费1元可积1分,1分抵现金1毛,

付款时直接抵扣

(如此优惠的基础上还可积分,积分抵现金)



    

\",\"merUse\":0,\"isPostage\":1,\"image_base\":\"https://image.dayouqiantu.cn/5ca011a1cd487.jpg\",\"isBest\":1,\"sales\":17,\"price\":120.00,\"isBargain\":0,\"userLike\":false,\"vipPrice\":0.20,\"storeName\":\"70gA4黑白打印复印\",\"id\":19,\"keyword\":\"打印复印\",\"stock\":99,\"image\":\"https://image.dayouqiantu.cn/5ca011a1cd487.jpg\",\"cost\":0.20,\"isGood\":1,\"unitName\":\"张\",\"isBenefit\":1,\"giveIntegral\":1.00,\"isNew\":1,\"sort\":1,\"sliderImageArr\":[\"https://image.dayouqiantu.cn/5ca01c7fc9238.jpg\",\"https://image.dayouqiantu.cn/5ca01c7676042.jpg\"],\"sliderImage\":\"https://image.dayouqiantu.cn/5ca01c7fc9238.jpg,https://image.dayouqiantu.cn/5ca01c7676042.jpg\",\"barCode\":\"\",\"isShow\":1,\"postage\":0.00,\"codePath\":\"\",\"soureLink\":\"\",\"cateId\":\"24\",\"isSeckill\":0,\"storeInfo\":\"打印复印资料A4黑白彩色印刷画册书本装订图文数码快印服务\",\"isDel\":0,\"isHot\":1,\"attrInfo\":{\"image\":\"https://image.dayouqiantu.cn/5ca011a1cd487.jpg\",\"cost\":100.00,\"productId\":19,\"price\":120.00,\"unique\":\"00e86525a7af4dcf9e653ae0a2062369\",\"suk\":\"A1,白色\",\"id\":22,\"stock\":993}},\"uid\":12,\"productAttrUnique\":\"00e86525a7af4dcf9e653ae0a2062369\",\"bargainId\":0,\"id\":95}', '16e9212266b949cdac21e7e45881a84f'); INSERT INTO `yx_store_order_cart_info` VALUES (96, 100, 96, 19, '{\"addTime\":1576234305,\"productId\":19,\"seckillId\":0,\"vipTruePrice\":120.0,\"combinationId\":0,\"costPrice\":100.0,\"trueStock\":992,\"truePrice\":118.8,\"type\":\"product\",\"cartNum\":1,\"productInfo\":{\"otPrice\":0.50,\"userCollect\":false,\"description\":\"

文件请传QQ2412733099,

718504558或2412733099@qq.com邮箱,

手机/微信:13733990583

量大请联系店主,一定让您满意而归

   实体店面经营 保质保量

A4黑白2毛/张,量大1毛/张,

A3黑白双面5毛/张,量大3毛/张,

更大量请联系店主报价,

每消费1元可积1分,1分抵现金1毛,

付款时直接抵扣

(如此优惠的基础上还可积分,积分抵现金)



    

\",\"merUse\":0,\"isPostage\":1,\"image_base\":\"https://image.dayouqiantu.cn/5ca011a1cd487.jpg\",\"isBest\":1,\"sales\":18,\"price\":120.00,\"isBargain\":0,\"userLike\":false,\"vipPrice\":0.20,\"storeName\":\"70gA4黑白打印复印\",\"id\":19,\"keyword\":\"打印复印\",\"stock\":99,\"image\":\"https://image.dayouqiantu.cn/5ca011a1cd487.jpg\",\"cost\":0.20,\"isGood\":1,\"unitName\":\"张\",\"isBenefit\":1,\"giveIntegral\":1.00,\"isNew\":1,\"sort\":1,\"sliderImageArr\":[\"https://image.dayouqiantu.cn/5ca01c7fc9238.jpg\",\"https://image.dayouqiantu.cn/5ca01c7676042.jpg\"],\"sliderImage\":\"https://image.dayouqiantu.cn/5ca01c7fc9238.jpg,https://image.dayouqiantu.cn/5ca01c7676042.jpg\",\"barCode\":\"\",\"isShow\":1,\"postage\":0.00,\"codePath\":\"\",\"soureLink\":\"\",\"cateId\":\"24\",\"isSeckill\":0,\"storeInfo\":\"打印复印资料A4黑白彩色印刷画册书本装订图文数码快印服务\",\"isDel\":0,\"isHot\":1,\"attrInfo\":{\"image\":\"https://image.dayouqiantu.cn/5ca011a1cd487.jpg\",\"cost\":100.00,\"productId\":19,\"price\":120.00,\"unique\":\"00e86525a7af4dcf9e653ae0a2062369\",\"suk\":\"A1,白色\",\"id\":22,\"stock\":992}},\"uid\":12,\"productAttrUnique\":\"00e86525a7af4dcf9e653ae0a2062369\",\"bargainId\":0,\"id\":96}', 'd186a2b7f7f146389c33223f3ce180cf'); INSERT INTO `yx_store_order_cart_info` VALUES (97, 101, 99, 20, '{\"addTime\":1576561530,\"productId\":20,\"seckillId\":2,\"vipTruePrice\":0.0,\"combinationId\":0,\"costPrice\":0.5,\"trueStock\":100,\"truePrice\":1.0,\"type\":\"product\",\"cartNum\":1,\"productInfo\":{\"userCollect\":false,\"isPostage\":1,\"image_base\":\"https://image.dayouqiantu.cn/5ca04fa9c08ef.jpg\",\"sales\":1,\"price\":1.00,\"userLike\":false,\"storeName\":\"70gA4彩色打印复印\",\"id\":2,\"stock\":100,\"image\":\"https://image.dayouqiantu.cn/5ca04fa9c08ef.jpg\",\"cost\":0.50,\"sliderImageArr\":[],\"isShow\":1,\"postage\":0.00,\"isDel\":0},\"uid\":12,\"productAttrUnique\":\"\",\"bargainId\":0,\"id\":99}', 'e132b2634fc64a8eb5fe4022ca04dcb7'); +INSERT INTO `yx_store_order_cart_info` VALUES (98, 102, 103, 19, '{\"addTime\":1577085055,\"productId\":19,\"seckillId\":0,\"vipTruePrice\":0.0,\"combinationId\":0,\"costPrice\":50.0,\"trueStock\":100,\"truePrice\":1.0,\"type\":\"product\",\"cartNum\":1,\"productInfo\":{\"otPrice\":30.00,\"userCollect\":false,\"isPostage\":1,\"image_base\":\"https://image.dayouqiantu.cn/5ca011a1cd487.jpg\",\"sales\":10,\"price\":1.00,\"userLike\":false,\"storeName\":\"砍价标题\",\"id\":1,\"stock\":100,\"image\":\"https://image.dayouqiantu.cn/5ca011a1cd487.jpg\",\"cost\":50.00,\"sliderImageArr\":[],\"isShow\":1,\"postage\":0.00,\"isDel\":0},\"uid\":12,\"productAttrUnique\":\"\",\"bargainId\":1,\"id\":103}', '7b3edd5545764840bb7aa0eba8374286'); -- ---------------------------- -- Table structure for yx_store_order_status @@ -5125,7 +5210,7 @@ CREATE TABLE `yx_store_order_status` ( PRIMARY KEY (`id`) USING BTREE, INDEX `oid`(`oid`) USING BTREE, INDEX `change_type`(`change_type`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 150 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '订单操作记录表' ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 152 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '订单操作记录表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of yx_store_order_status @@ -5240,6 +5325,8 @@ INSERT INTO `yx_store_order_status` VALUES (146, 100, 'pay_success', '用户付 INSERT INTO `yx_store_order_status` VALUES (147, 91, 'refund_price', '退款给用户:120元', 1576286856); INSERT INTO `yx_store_order_status` VALUES (148, 101, 'cache_key_create_order', '订单生成', 1576565376); INSERT INTO `yx_store_order_status` VALUES (149, 101, 'pay_success', '用户付款成功', 1576565376); +INSERT INTO `yx_store_order_status` VALUES (150, 102, 'cache_key_create_order', '订单生成', 1577086164); +INSERT INTO `yx_store_order_status` VALUES (151, 102, 'pay_success', '用户付款成功', 1577086165); -- ---------------------------- -- Table structure for yx_store_pink @@ -5651,7 +5738,7 @@ CREATE TABLE `yx_system_attachment` ( `image_type` tinyint(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '图片上传类型 1本地 2七牛云 3OSS 4COS ', `module_type` tinyint(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '图片上传模块类型 1 后台上传 2 用户生成', PRIMARY KEY (`att_id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 1252 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '附件管理表' ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 1254 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '附件管理表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of yx_system_attachment @@ -5662,6 +5749,8 @@ INSERT INTO `yx_system_attachment` VALUES (1225, '1_12_0_pink_share_wap.jpg', 'E INSERT INTO `yx_system_attachment` VALUES (1249, '1_12_0_pink_user_spread.jpg', 'E:\\yshop\\file\\qrcode\\1_12_0_pink_user_spread.jpg', 'qrcode/1_12_0_pink_user_spread.jpg', '66223', 'image/jpeg', 1, 1574315903, 1, 2); INSERT INTO `yx_system_attachment` VALUES (1250, '12_0_user_wap.jpg', 'E:\\yshop\\file\\qrcode\\12_0_user_wap.jpg', 'qrcode/12_0_user_wap.jpg', '304900', 'image/jpeg', 1, 1575039046, 1, 2); INSERT INTO `yx_system_attachment` VALUES (1251, '12_0_user_spread.jpg', 'E:\\yshop\\file\\qrcode\\12_0_user_spread.jpg', 'qrcode/12_0_user_spread.jpg', '56818', 'image/jpeg', 1, 1575039047, 1, 2); +INSERT INTO `yx_system_attachment` VALUES (1252, '1_12_0_bargain_share_wap.jpg', 'E:\\yshop\\file\\qrcode\\1_12_0_bargain_share_wap.jpg', 'qrcode/1_12_0_bargain_share_wap.jpg', '369077', 'image/jpeg', 1, 1577009608, 1, 2); +INSERT INTO `yx_system_attachment` VALUES (1253, '1_12_0_bargain_user_spread.jpg', 'E:\\yshop\\file\\qrcode\\1_12_0_bargain_user_spread.jpg', 'qrcode/1_12_0_bargain_user_spread.jpg', '50869', 'image/jpeg', 1, 1577009609, 1, 2); -- ---------------------------- -- Table structure for yx_system_attachment_category @@ -5743,7 +5832,7 @@ CREATE TABLE `yx_system_group_data` ( `sort` int(11) NULL DEFAULT 0 COMMENT '数据排序', `status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '状态(1:开启;2:关闭;)', PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 226 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '组合数据详情表' ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 228 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '组合数据详情表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of yx_system_group_data @@ -5785,6 +5874,8 @@ INSERT INTO `yx_system_group_data` VALUES (221, 'routine_seckill_time', '{\"addT INSERT INTO `yx_system_group_data` VALUES (222, 'routine_seckill_time', '{\"addTime\":\"\",\"continued\":\"4\",\"id\":\"\",\"sort\":\"\",\"time\":\"15\",\"value\":\"\",\"status\":\"\"}', 1576484435, NULL, 1); INSERT INTO `yx_system_group_data` VALUES (223, 'routine_seckill_time', '{\"continued\":\"2\",\"id\":223,\"time\":\"19\"}', 1576484444, NULL, 1); INSERT INTO `yx_system_group_data` VALUES (224, 'routine_home_menus', '{\"name\":\"秒杀\",\"id\":180,\"pic\":\"https://image.dayouqiantu.cn/5df74a3bbac9f.png\",\"url\":\"/activity/goods_seckill\"}', 0, 0, 1); +INSERT INTO `yx_system_group_data` VALUES (226, 'routine_home_menus', '{\"name\":\"砍价\",\"id\":180,\"pic\":\"https://image.dayouqiantu.cn/5dfd7c9c49305.png\",\"url\":\"/activity/bargain\"}', 0, 0, 1); +INSERT INTO `yx_system_group_data` VALUES (227, 'routine_my_menus', '{\"name\":\"砍价记录\",\"id\":\"\",\"pic\":\"https://image.dayouqiantu.cn/5dfd7b748e053.png\",\"sort\":\"\",\"url\":\"/activity/bargain/record\",\"status\":\"\"}', 0, 0, 1); -- ---------------------------- -- Table structure for yx_system_store @@ -5935,7 +6026,7 @@ CREATE TABLE `yx_user` ( -- Records of yx_user -- ---------------------------- INSERT INTO `yx_user` VALUES (11, 'hupeng', 'hupeng', 'e10adc3949ba59abbe56e057f20f883e', 'e10adc3949ba59abbe56e057f20f883e', '', 0, '', '', 0, 0, '会敲代码的喵', 'http://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83er0oNIia5bws9DCW1VM9qNbObKU9icwtvMpp7zE534e4Y9gwqR5Izvllladvop0ibpJJg2n6ticNSB9gA/132', '', 1573120584, '', 1573120584, '', 9999.00, 12.70, 0.00, 0, 1, 0, 0, 1573613651, 'wechat', 0, 2, 1, 0, '', 0, ''); -INSERT INTO `yx_user` VALUES (12, '15136175246', '151361752469', 'e10adc3949ba59abbe56e057f20f883e', 'e10adc3949ba59abbe56e057f20f883e', '', 0, '', '', 0, 0, '会敲代码的喵2', 'https://image.dayouqiantu.cn/5dc2c7f3a104c.png', '15136175246', 1573120881, '', 1573120881, '', 9480.00, 28.00, 40.00, 2, 1, 1, 11, 1573527758, 'h5', 0, 12, 1, 0, '', 0, ''); +INSERT INTO `yx_user` VALUES (12, '15136175246', '151361752469', 'e10adc3949ba59abbe56e057f20f883e', 'e10adc3949ba59abbe56e057f20f883e', '', 0, '', '', 0, 0, '会敲代码的喵2', 'https://image.dayouqiantu.cn/5dc2c7f3a104c.png', '15136175246', 1573120881, '', 1573120881, '', 9479.00, 28.00, 70.00, 2, 1, 1, 11, 1573527758, 'h5', 0, 13, 1, 0, '', 0, ''); INSERT INTO `yx_user` VALUES (14, '15136175247', '15136175247', 'e10adc3949ba59abbe56e057f20f883e', 'e10adc3949ba59abbe56e057f20f883e', '', 0, '', '', 0, 0, '15136175247', 'https://image.dayouqiantu.cn/5dc2c7f3a104c.png', '15136175247', 1573612696, '', 1573612696, '', 9400.00, 0.00, 2.00, 0, 1, 0, 12, 1573612702, 'h5', 0, 5, 0, 0, '', 0, ''); -- ---------------------------- @@ -5994,7 +6085,7 @@ CREATE TABLE `yx_user_bill` ( INDEX `add_time`(`add_time`) USING BTREE, INDEX `pm`(`pm`) USING BTREE, INDEX `type`(`category`, `type`, `link_id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 53 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用户账单表' ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 56 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '用户账单表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of yx_user_bill @@ -6046,6 +6137,9 @@ INSERT INTO `yx_user_bill` VALUES (49, 11, '96', 1, '获得推广佣金', 'now_m INSERT INTO `yx_user_bill` VALUES (50, 12, '100', 0, '购买商品', 'now_money', 'pay_product', 118.80, 9479.80, '余额支付', 1576234308, 1); INSERT INTO `yx_user_bill` VALUES (51, 12, '91', 1, '商品退款', 'now_money', 'pay_product_refund', 120.00, 9481.00, '订单退款到余额', 1576286856, 1); INSERT INTO `yx_user_bill` VALUES (52, 12, '101', 0, '购买商品', 'now_money', 'pay_product', 1.00, 9481.00, '余额支付', 1576565376, 1); +INSERT INTO `yx_user_bill` VALUES (53, 12, '0', 1, '签到奖励', 'integral', 'sign', 10.00, 40.00, '', 1577026465, 1); +INSERT INTO `yx_user_bill` VALUES (54, 12, '102', 0, '购买商品', 'now_money', 'pay_product', 1.00, 9480.00, '余额支付', 1577086164, 1); +INSERT INTO `yx_user_bill` VALUES (55, 12, '0', 1, '签到奖励', 'integral', 'sign', 20.00, 50.00, '', 1577099436, 1); -- ---------------------------- -- Table structure for yx_user_enter @@ -6211,7 +6305,7 @@ CREATE TABLE `yx_user_sign` ( `add_time` int(11) NOT NULL DEFAULT 0 COMMENT '添加时间', PRIMARY KEY (`id`) USING BTREE, INDEX `uid`(`uid`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '签到记录表' ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '签到记录表' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of yx_user_sign @@ -6219,6 +6313,8 @@ CREATE TABLE `yx_user_sign` ( INSERT INTO `yx_user_sign` VALUES (2, 12, '签到奖励', 10, 0, 1575549244); INSERT INTO `yx_user_sign` VALUES (3, 12, '签到奖励', 10, 10, 1575684021); INSERT INTO `yx_user_sign` VALUES (4, 12, '签到奖励', 20, 20, 1575771932); +INSERT INTO `yx_user_sign` VALUES (5, 12, '签到奖励', 10, 40, 1577026465); +INSERT INTO `yx_user_sign` VALUES (6, 12, '签到奖励', 20, 50, 1577099436); -- ---------------------------- -- Table structure for yx_user_task_finish @@ -6351,7 +6447,7 @@ CREATE TABLE `yx_wechat_template` ( `status` tinyint(4) NOT NULL DEFAULT 0 COMMENT '状态', PRIMARY KEY (`id`) USING BTREE, INDEX `tempkey`(`tempkey`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 16 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '微信模板' ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 14 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '微信模板' ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of yx_wechat_template diff --git a/yshop-api/pom.xml b/yshop-api/pom.xml index fccb0992..2891905b 100644 --- a/yshop-api/pom.xml +++ b/yshop-api/pom.xml @@ -5,7 +5,7 @@ yshop co.yixiang - 1.5 + 1.6 4.0.0 @@ -21,18 +21,18 @@ co.yixiang yshop-common - 1.5 + 1.6 co.yixiang yshop-tools - 1.5 + 1.6 co.yixiang yshop-mp - 1.5 + 1.6 diff --git a/yshop-api/src/main/java/co/yixiang/modules/activity/entity/YxStoreBargain.java b/yshop-api/src/main/java/co/yixiang/modules/activity/entity/YxStoreBargain.java new file mode 100644 index 00000000..ffd7197b --- /dev/null +++ b/yshop-api/src/main/java/co/yixiang/modules/activity/entity/YxStoreBargain.java @@ -0,0 +1,124 @@ +package co.yixiang.modules.activity.entity; + +import java.math.BigDecimal; + +import com.baomidou.mybatisplus.annotation.IdType; +import co.yixiang.common.entity.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableId; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +/** + *

+ * 砍价表 + *

+ * + * @author hupeng + * @since 2019-12-21 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel(value = "YxStoreBargain对象", description = "砍价表") +public class YxStoreBargain extends BaseEntity { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "砍价产品ID") + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty(value = "关联产品ID") + private Integer productId; + + @ApiModelProperty(value = "砍价活动名称") + private String title; + + @ApiModelProperty(value = "砍价活动图片") + private String image; + + @ApiModelProperty(value = "单位名称") + private String unitName; + + @ApiModelProperty(value = "库存") + private Integer stock; + + @ApiModelProperty(value = "销量") + private Integer sales; + + @ApiModelProperty(value = "砍价产品轮播图") + private String images; + + @ApiModelProperty(value = "砍价开启时间") + private Integer startTime; + + @ApiModelProperty(value = "砍价结束时间") + private Integer stopTime; + + @ApiModelProperty(value = "砍价产品名称") + private String storeName; + + @ApiModelProperty(value = "砍价金额") + private BigDecimal price; + + @ApiModelProperty(value = "砍价商品最低价") + private BigDecimal minPrice; + + @ApiModelProperty(value = "每次购买的砍价产品数量") + private Integer num; + + @ApiModelProperty(value = "用户每次砍价的最大金额") + private BigDecimal bargainMaxPrice; + + @ApiModelProperty(value = "用户每次砍价的最小金额") + private BigDecimal bargainMinPrice; + + @ApiModelProperty(value = "用户每次砍价的次数") + private Integer bargainNum; + + @ApiModelProperty(value = "砍价状态 0(到砍价时间不自动开启) 1(到砍价时间自动开启时间)") + private Integer status; + + @ApiModelProperty(value = "砍价详情") + private String description; + + @ApiModelProperty(value = "反多少积分") + private BigDecimal giveIntegral; + + @ApiModelProperty(value = "砍价活动简介") + private String info; + + @ApiModelProperty(value = "成本价") + private BigDecimal cost; + + @ApiModelProperty(value = "排序") + private Integer sort; + + @ApiModelProperty(value = "是否推荐0不推荐1推荐") + private Integer isHot; + + @ApiModelProperty(value = "是否删除 0未删除 1删除") + private Integer isDel; + + @ApiModelProperty(value = "添加时间") + private Integer addTime; + + @ApiModelProperty(value = "是否包邮 0不包邮 1包邮") + private Integer isPostage; + + @ApiModelProperty(value = "邮费") + private BigDecimal postage; + + @ApiModelProperty(value = "砍价规则") + private String rule; + + @ApiModelProperty(value = "砍价产品浏览量") + private Integer look; + + @ApiModelProperty(value = "砍价产品分享量") + private Integer share; + +} diff --git a/yshop-api/src/main/java/co/yixiang/modules/activity/entity/YxStoreBargainUser.java b/yshop-api/src/main/java/co/yixiang/modules/activity/entity/YxStoreBargainUser.java new file mode 100644 index 00000000..9e9dd60f --- /dev/null +++ b/yshop-api/src/main/java/co/yixiang/modules/activity/entity/YxStoreBargainUser.java @@ -0,0 +1,60 @@ +package co.yixiang.modules.activity.entity; + +import java.math.BigDecimal; + +import com.baomidou.mybatisplus.annotation.IdType; +import co.yixiang.common.entity.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableId; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.*; + +import java.util.Date; + +/** + *

+ * 用户参与砍价表 + *

+ * + * @author hupeng + * @since 2019-12-21 + */ +@Data +@Builder +@EqualsAndHashCode(callSuper = true) +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(value = "YxStoreBargainUser对象", description = "用户参与砍价表") +public class YxStoreBargainUser extends BaseEntity { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "用户参与砍价表ID") + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty(value = "用户ID") + private Integer uid; + + @ApiModelProperty(value = "砍价产品id") + private Integer bargainId; + + @ApiModelProperty(value = "砍价的最低价") + private BigDecimal bargainPriceMin; + + @ApiModelProperty(value = "砍价金额") + private BigDecimal bargainPrice; + + @ApiModelProperty(value = "砍掉的价格") + private BigDecimal price; + + @ApiModelProperty(value = "状态 1参与中 2 活动结束参与失败 3活动结束参与成功") + private Integer status; + + @ApiModelProperty(value = "参与时间") + private Integer addTime; + + @ApiModelProperty(value = "是否取消") + private Integer isDel; + +} diff --git a/yshop-api/src/main/java/co/yixiang/modules/activity/entity/YxStoreBargainUserHelp.java b/yshop-api/src/main/java/co/yixiang/modules/activity/entity/YxStoreBargainUserHelp.java new file mode 100644 index 00000000..65e98a7d --- /dev/null +++ b/yshop-api/src/main/java/co/yixiang/modules/activity/entity/YxStoreBargainUserHelp.java @@ -0,0 +1,51 @@ +package co.yixiang.modules.activity.entity; + +import java.math.BigDecimal; + +import com.baomidou.mybatisplus.annotation.IdType; +import co.yixiang.common.entity.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableId; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.*; + +import java.util.Date; + +/** + *

+ * 砍价用户帮助表 + *

+ * + * @author hupeng + * @since 2019-12-21 + */ +@Data +@Builder +@EqualsAndHashCode(callSuper = true) +@NoArgsConstructor +@AllArgsConstructor +@ApiModel(value = "YxStoreBargainUserHelp对象", description = "砍价用户帮助表") +public class YxStoreBargainUserHelp extends BaseEntity { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "砍价用户帮助表ID") + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + @ApiModelProperty(value = "帮助的用户id") + private Integer uid; + + @ApiModelProperty(value = "砍价产品ID") + private Integer bargainId; + + @ApiModelProperty(value = "用户参与砍价表id") + private Integer bargainUserId; + + @ApiModelProperty(value = "帮助砍价多少金额") + private BigDecimal price; + + @ApiModelProperty(value = "添加时间") + private Integer addTime; + +} diff --git a/yshop-api/src/main/java/co/yixiang/modules/activity/mapper/YxStoreBargainMapper.java b/yshop-api/src/main/java/co/yixiang/modules/activity/mapper/YxStoreBargainMapper.java new file mode 100644 index 00000000..8ea270eb --- /dev/null +++ b/yshop-api/src/main/java/co/yixiang/modules/activity/mapper/YxStoreBargainMapper.java @@ -0,0 +1,75 @@ +package co.yixiang.modules.activity.mapper; + +import co.yixiang.modules.activity.web.dto.TopCountDTO; +import co.yixiang.modules.shop.web.vo.YxStoreProductQueryVo; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import co.yixiang.modules.activity.entity.YxStoreBargain; +import co.yixiang.modules.activity.web.param.YxStoreBargainQueryParam; +import co.yixiang.modules.activity.web.vo.YxStoreBargainQueryVo; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.apache.ibatis.annotations.Update; +import org.springframework.stereotype.Repository; + +import java.io.Serializable; + +/** + *

+ * 砍价表 Mapper 接口 + *

+ * + * @author hupeng + * @since 2019-12-21 + */ +@Repository +public interface YxStoreBargainMapper extends BaseMapper { + + @Update("update yx_store_bargain set stock=stock+#{num}, sales=sales-#{num}" + + " where id=#{bargainId}") + int incStockDecSales(@Param("num") int num,@Param("bargainId") int bargainId); + + @Update("update yx_store_bargain set stock=stock-#{num}, sales=sales+#{num}" + + " where id=#{bargainId}") + int decStockIncSales(@Param("num") int num,@Param("bargainId") int bargainId); + + @Select("SELECT c.id,c.image,c.min_price as price,c.price as otPrice," + + "c.title as storeName,c.status as isShow,c.cost," + + "c.is_postage as isPostage,c.postage,c.sales,c.stock,c.is_del as isDel" + + " FROM yx_store_bargain c " + + " WHERE c.id = #{id} ") + YxStoreProductQueryVo bargainInfo(int id); + + @Select("select IFNULL(sum(look),0)" + + "from yx_store_bargain") + int lookCount(); + + @Select("select IFNULL(sum(share),0) as shareCount " + + "from yx_store_bargain") + int shareCount(); + + @Update("update yx_store_bargain set share=share+1" + + " where id=#{id}") + int addBargainShare(@Param("id") int id); + + @Update("update yx_store_bargain set look=look+1" + + " where id=#{id}") + int addBargainLook(@Param("id") int id); + + /** + * 根据ID获取查询对象 + * @param id + * @return + */ + YxStoreBargainQueryVo getYxStoreBargainById(Serializable id); + + /** + * 获取分页对象 + * @param page + * @param yxStoreBargainQueryParam + * @return + */ + IPage getYxStoreBargainPageList(@Param("page") Page page, @Param("param") YxStoreBargainQueryParam yxStoreBargainQueryParam); + +} diff --git a/yshop-api/src/main/java/co/yixiang/modules/activity/mapper/YxStoreBargainUserHelpMapper.java b/yshop-api/src/main/java/co/yixiang/modules/activity/mapper/YxStoreBargainUserHelpMapper.java new file mode 100644 index 00000000..bc2448b2 --- /dev/null +++ b/yshop-api/src/main/java/co/yixiang/modules/activity/mapper/YxStoreBargainUserHelpMapper.java @@ -0,0 +1,40 @@ +package co.yixiang.modules.activity.mapper; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import co.yixiang.modules.activity.entity.YxStoreBargainUserHelp; +import co.yixiang.modules.activity.web.param.YxStoreBargainUserHelpQueryParam; +import co.yixiang.modules.activity.web.vo.YxStoreBargainUserHelpQueryVo; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Repository; + +import java.io.Serializable; + +/** + *

+ * 砍价用户帮助表 Mapper 接口 + *

+ * + * @author hupeng + * @since 2019-12-21 + */ +@Repository +public interface YxStoreBargainUserHelpMapper extends BaseMapper { + + /** + * 根据ID获取查询对象 + * @param id + * @return + */ + YxStoreBargainUserHelpQueryVo getYxStoreBargainUserHelpById(Serializable id); + + /** + * 获取分页对象 + * @param page + * @param yxStoreBargainUserHelpQueryParam + * @return + */ + IPage getYxStoreBargainUserHelpPageList(@Param("page") Page page, @Param("param") YxStoreBargainUserHelpQueryParam yxStoreBargainUserHelpQueryParam); + +} diff --git a/yshop-api/src/main/java/co/yixiang/modules/activity/mapper/YxStoreBargainUserMapper.java b/yshop-api/src/main/java/co/yixiang/modules/activity/mapper/YxStoreBargainUserMapper.java new file mode 100644 index 00000000..a3d0692b --- /dev/null +++ b/yshop-api/src/main/java/co/yixiang/modules/activity/mapper/YxStoreBargainUserMapper.java @@ -0,0 +1,51 @@ +package co.yixiang.modules.activity.mapper; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import co.yixiang.modules.activity.entity.YxStoreBargainUser; +import co.yixiang.modules.activity.web.param.YxStoreBargainUserQueryParam; +import co.yixiang.modules.activity.web.vo.YxStoreBargainUserQueryVo; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.stereotype.Repository; + +import java.io.Serializable; +import java.util.List; + +/** + *

+ * 用户参与砍价表 Mapper 接口 + *

+ * + * @author hupeng + * @since 2019-12-21 + */ +@Repository +public interface YxStoreBargainUserMapper extends BaseMapper { + + + @Select("SELECT u.uid,u.is_del as isDel,u.bargain_price - u.price as residuePrice,u.id," + + "u.bargain_id as bargainId,u.bargain_price as bargainPrice," + + "u.bargain_price_min as bargainPriceMin,u.price,u.status,b.title," + + "b.image,b.stop_time as datatime FROM yx_store_bargain_user u INNER JOIN " + + "yx_store_bargain b ON b.id=u.bargain_id WHERE u.uid = #{uid} AND u.is_del = 0 " + + "ORDER BY u.id DESC ") + List getBargainUserList(@Param("uid") int uid, Page page); + + /** + * 根据ID获取查询对象 + * @param id + * @return + */ + YxStoreBargainUserQueryVo getYxStoreBargainUserById(Serializable id); + + /** + * 获取分页对象 + * @param page + * @param yxStoreBargainUserQueryParam + * @return + */ + IPage getYxStoreBargainUserPageList(@Param("page") Page page, @Param("param") YxStoreBargainUserQueryParam yxStoreBargainUserQueryParam); + +} diff --git a/yshop-api/src/main/java/co/yixiang/modules/activity/mapper/YxStoreSeckillMapper.java b/yshop-api/src/main/java/co/yixiang/modules/activity/mapper/YxStoreSeckillMapper.java index 99ecddf8..d4513f97 100644 --- a/yshop-api/src/main/java/co/yixiang/modules/activity/mapper/YxStoreSeckillMapper.java +++ b/yshop-api/src/main/java/co/yixiang/modules/activity/mapper/YxStoreSeckillMapper.java @@ -26,6 +26,10 @@ import java.util.List; @Repository public interface YxStoreSeckillMapper extends BaseMapper { + @Update("update yx_store_seckill set stock=stock+#{num}, sales=sales-#{num}" + + " where id=#{seckillId}") + int incStockDecSales(@Param("num") int num,@Param("seckillId") int seckillId); + @Update("update yx_store_seckill set stock=stock-#{num}, sales=sales+#{num}" + " where id=#{seckillId}") int decStockIncSales(@Param("num") int num,@Param("seckillId") int seckillId); diff --git a/yshop-api/src/main/java/co/yixiang/modules/activity/mapping/StoreBargainHelpMap.java b/yshop-api/src/main/java/co/yixiang/modules/activity/mapping/StoreBargainHelpMap.java new file mode 100644 index 00000000..351a25a3 --- /dev/null +++ b/yshop-api/src/main/java/co/yixiang/modules/activity/mapping/StoreBargainHelpMap.java @@ -0,0 +1,17 @@ +package co.yixiang.modules.activity.mapping; + +import co.yixiang.mapper.EntityMapper; +import co.yixiang.modules.activity.entity.YxStoreBargainUserHelp; +import co.yixiang.modules.activity.web.vo.YxStoreBargainUserHelpQueryVo; +import org.mapstruct.Mapper; +import org.mapstruct.ReportingPolicy; + + +/** +* @author hupeng +* @date 2019-12-22 +*/ +@Mapper(componentModel = "spring",uses = {},unmappedTargetPolicy = ReportingPolicy.IGNORE) +public interface StoreBargainHelpMap extends EntityMapper { + +} \ No newline at end of file diff --git a/yshop-api/src/main/java/co/yixiang/modules/activity/mapping/StoreBargainMap.java b/yshop-api/src/main/java/co/yixiang/modules/activity/mapping/StoreBargainMap.java new file mode 100644 index 00000000..10f4f101 --- /dev/null +++ b/yshop-api/src/main/java/co/yixiang/modules/activity/mapping/StoreBargainMap.java @@ -0,0 +1,17 @@ +package co.yixiang.modules.activity.mapping; + +import co.yixiang.mapper.EntityMapper; +import co.yixiang.modules.activity.entity.YxStoreBargain; +import co.yixiang.modules.activity.web.vo.YxStoreBargainQueryVo; +import org.mapstruct.Mapper; +import org.mapstruct.ReportingPolicy; + + +/** +* @author hupeng +* @date 2019-12-21 +*/ +@Mapper(componentModel = "spring",uses = {},unmappedTargetPolicy = ReportingPolicy.IGNORE) +public interface StoreBargainMap extends EntityMapper { + +} \ No newline at end of file diff --git a/yshop-api/src/main/java/co/yixiang/modules/activity/mapping/StoreBargainUserMap.java b/yshop-api/src/main/java/co/yixiang/modules/activity/mapping/StoreBargainUserMap.java new file mode 100644 index 00000000..c7cab56c --- /dev/null +++ b/yshop-api/src/main/java/co/yixiang/modules/activity/mapping/StoreBargainUserMap.java @@ -0,0 +1,17 @@ +package co.yixiang.modules.activity.mapping; + +import co.yixiang.mapper.EntityMapper; +import co.yixiang.modules.activity.entity.YxStoreBargainUser; +import co.yixiang.modules.activity.web.vo.YxStoreBargainUserQueryVo; +import org.mapstruct.Mapper; +import org.mapstruct.ReportingPolicy; + + +/** +* @author hupeng +* @date 2019-12-21 +*/ +@Mapper(componentModel = "spring",uses = {},unmappedTargetPolicy = ReportingPolicy.IGNORE) +public interface StoreBargainUserMap extends EntityMapper { + +} \ No newline at end of file diff --git a/yshop-api/src/main/java/co/yixiang/modules/activity/service/YxStoreBargainService.java b/yshop-api/src/main/java/co/yixiang/modules/activity/service/YxStoreBargainService.java new file mode 100644 index 00000000..ea5ada09 --- /dev/null +++ b/yshop-api/src/main/java/co/yixiang/modules/activity/service/YxStoreBargainService.java @@ -0,0 +1,61 @@ +package co.yixiang.modules.activity.service; + +import co.yixiang.modules.activity.entity.YxStoreBargain; +import co.yixiang.common.service.BaseService; +import co.yixiang.modules.activity.web.dto.BargainCountDTO; +import co.yixiang.modules.activity.web.dto.BargainDTO; +import co.yixiang.modules.activity.web.dto.TopCountDTO; +import co.yixiang.modules.activity.web.param.YxStoreBargainQueryParam; +import co.yixiang.modules.activity.web.vo.YxStoreBargainQueryVo; +import co.yixiang.common.web.vo.Paging; + +import java.io.Serializable; +import java.util.List; + +/** + *

+ * 砍价表 服务类 + *

+ * + * @author hupeng + * @since 2019-12-21 + */ +public interface YxStoreBargainService extends BaseService { + + void incStockDecSales(int num,int bargainId); + + void decStockIncSales(int num,int bargainId); + + YxStoreBargain getBargain(int bargainId); + + void doHelp(int bargainId,int bargainUserUid,int uid); + + TopCountDTO topCount(int bargainId); + + BargainCountDTO helpCount(int bargainId, int uid); + + int getBargainPayCount(int bargainId); + + void addBargainShare(int id); + + void addBargainLook(int id); + + BargainDTO getDetail(int id, int uid); + + List getList(int page, int limit); + + /** + * 根据ID获取查询对象 + * @param id + * @return + */ + YxStoreBargainQueryVo getYxStoreBargainById(Serializable id); + + /** + * 获取分页对象 + * @param yxStoreBargainQueryParam + * @return + */ + Paging getYxStoreBargainPageList(YxStoreBargainQueryParam yxStoreBargainQueryParam) throws Exception; + +} diff --git a/yshop-api/src/main/java/co/yixiang/modules/activity/service/YxStoreBargainUserHelpService.java b/yshop-api/src/main/java/co/yixiang/modules/activity/service/YxStoreBargainUserHelpService.java new file mode 100644 index 00000000..cb513da7 --- /dev/null +++ b/yshop-api/src/main/java/co/yixiang/modules/activity/service/YxStoreBargainUserHelpService.java @@ -0,0 +1,40 @@ +package co.yixiang.modules.activity.service; + +import co.yixiang.modules.activity.entity.YxStoreBargainUserHelp; +import co.yixiang.common.service.BaseService; +import co.yixiang.modules.activity.web.param.YxStoreBargainUserHelpQueryParam; +import co.yixiang.modules.activity.web.vo.YxStoreBargainUserHelpQueryVo; +import co.yixiang.common.web.vo.Paging; + +import java.io.Serializable; +import java.util.List; + +/** + *

+ * 砍价用户帮助表 服务类 + *

+ * + * @author hupeng + * @since 2019-12-21 + */ +public interface YxStoreBargainUserHelpService extends BaseService { + + List getList(int bargainId,int bargainUserUid,int page,int limit); + + int getBargainUserHelpPeopleCount(int bargainId,int bargainUserUid); + + /** + * 根据ID获取查询对象 + * @param id + * @return + */ + YxStoreBargainUserHelpQueryVo getYxStoreBargainUserHelpById(Serializable id) throws Exception; + + /** + * 获取分页对象 + * @param yxStoreBargainUserHelpQueryParam + * @return + */ + Paging getYxStoreBargainUserHelpPageList(YxStoreBargainUserHelpQueryParam yxStoreBargainUserHelpQueryParam) throws Exception; + +} diff --git a/yshop-api/src/main/java/co/yixiang/modules/activity/service/YxStoreBargainUserService.java b/yshop-api/src/main/java/co/yixiang/modules/activity/service/YxStoreBargainUserService.java new file mode 100644 index 00000000..27bae0e3 --- /dev/null +++ b/yshop-api/src/main/java/co/yixiang/modules/activity/service/YxStoreBargainUserService.java @@ -0,0 +1,53 @@ +package co.yixiang.modules.activity.service; + +import co.yixiang.modules.activity.entity.YxStoreBargainUser; +import co.yixiang.common.service.BaseService; +import co.yixiang.modules.activity.web.param.YxStoreBargainUserQueryParam; +import co.yixiang.modules.activity.web.vo.YxStoreBargainUserQueryVo; +import co.yixiang.common.web.vo.Paging; + +import java.io.Serializable; +import java.util.List; + +/** + *

+ * 用户参与砍价表 服务类 + *

+ * + * @author hupeng + * @since 2019-12-21 + */ +public interface YxStoreBargainUserService extends BaseService { + + void setBargainUserStatus(int bargainId,int uid); + + void bargainCancel(int bargainId,int uid); + + List bargainUserList(int bargainUserUid,int page,int limit); + + boolean isBargainUserHelp(int bargainId,int bargainUserUid,int uid); + + void setBargain(Integer bargainId,Integer uid); + + double getBargainUserDiffPrice(int id); + + + YxStoreBargainUser getBargainUserInfo(int bargainId, int uid); + + List getBargainUserList(int bargainId,int status); + + /** + * 根据ID获取查询对象 + * @param id + * @return + */ + YxStoreBargainUserQueryVo getYxStoreBargainUserById(Serializable id); + + /** + * 获取分页对象 + * @param yxStoreBargainUserQueryParam + * @return + */ + Paging getYxStoreBargainUserPageList(YxStoreBargainUserQueryParam yxStoreBargainUserQueryParam) throws Exception; + +} diff --git a/yshop-api/src/main/java/co/yixiang/modules/activity/service/YxStoreSeckillService.java b/yshop-api/src/main/java/co/yixiang/modules/activity/service/YxStoreSeckillService.java index 8dab5e56..3e9f553b 100644 --- a/yshop-api/src/main/java/co/yixiang/modules/activity/service/YxStoreSeckillService.java +++ b/yshop-api/src/main/java/co/yixiang/modules/activity/service/YxStoreSeckillService.java @@ -20,6 +20,8 @@ import java.util.List; */ public interface YxStoreSeckillService extends BaseService { + void incStockDecSales(int num,int seckillId); + void decStockIncSales(int num,int seckillId); YxStoreSeckill getSeckill(int id); diff --git a/yshop-api/src/main/java/co/yixiang/modules/activity/service/impl/YxStoreBargainServiceImpl.java b/yshop-api/src/main/java/co/yixiang/modules/activity/service/impl/YxStoreBargainServiceImpl.java new file mode 100644 index 00000000..568e91fd --- /dev/null +++ b/yshop-api/src/main/java/co/yixiang/modules/activity/service/impl/YxStoreBargainServiceImpl.java @@ -0,0 +1,329 @@ +package co.yixiang.modules.activity.service.impl; + +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.RandomUtil; +import co.yixiang.exception.ErrorRequestException; +import co.yixiang.modules.activity.entity.YxStoreBargain; +import co.yixiang.modules.activity.entity.YxStoreBargainUser; +import co.yixiang.modules.activity.entity.YxStoreBargainUserHelp; +import co.yixiang.modules.activity.mapper.YxStoreBargainMapper; +import co.yixiang.modules.activity.mapping.StoreBargainMap; +import co.yixiang.modules.activity.service.YxStoreBargainService; +import co.yixiang.modules.activity.service.YxStoreBargainUserHelpService; +import co.yixiang.modules.activity.service.YxStoreBargainUserService; +import co.yixiang.modules.activity.web.dto.BargainCountDTO; +import co.yixiang.modules.activity.web.dto.BargainDTO; +import co.yixiang.modules.activity.web.dto.TopCountDTO; +import co.yixiang.modules.activity.web.param.YxStoreBargainQueryParam; +import co.yixiang.modules.activity.web.vo.YxStoreBargainQueryVo; +import co.yixiang.common.service.impl.BaseServiceImpl; +import co.yixiang.common.web.vo.Paging; +import co.yixiang.modules.activity.web.vo.YxStoreBargainUserQueryVo; +import co.yixiang.modules.order.entity.YxStoreOrder; +import co.yixiang.modules.order.service.YxStoreOrderService; +import co.yixiang.modules.user.service.YxUserService; +import co.yixiang.utils.OrderUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.beans.factory.annotation.Autowired; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.metadata.OrderItem; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.List; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; + + +/** + *

+ * 砍价表 服务实现类 + *

+ * + * @author hupeng + * @since 2019-12-21 + */ +@Slf4j +@Service +public class YxStoreBargainServiceImpl extends BaseServiceImpl implements YxStoreBargainService { + + @Autowired + private YxStoreBargainMapper yxStoreBargainMapper; + + @Autowired + private StoreBargainMap storeBargainMap; + + @Autowired + private YxStoreBargainUserService storeBargainUserService; + + @Autowired + private YxUserService userService; + + @Autowired + private YxStoreOrderService storeOrderService; + + @Autowired + private YxStoreBargainUserHelpService storeBargainUserHelpService; + + /** + * 退回库存销量 + * @param num + * @param bargainId + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void incStockDecSales(int num, int bargainId) { + yxStoreBargainMapper.incStockDecSales(num,bargainId); + } + + /** + * 增加销量 减少库存 + * @param num + * @param bargainId + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void decStockIncSales(int num, int bargainId) { + yxStoreBargainMapper.decStockIncSales(num,bargainId); + } + + @Override + public YxStoreBargain getBargain(int bargainId) { + QueryWrapper wrapper = new QueryWrapper<>(); + int nowTime = OrderUtil.getSecondTimestampTwo(); + wrapper.eq("id",bargainId).eq("is_del",0).eq("status",1) + .le("start_time",nowTime).ge("stop_time",nowTime); + return yxStoreBargainMapper.selectOne(wrapper); + } + + + + /** + * 开始帮助好友砍价 + * @param bargainId 砍价产品id + * @param bargainUserUid 开启砍价用户id + * @param uid 当前用户id + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void doHelp(int bargainId, int bargainUserUid, int uid) { + //开始真正的砍价 + YxStoreBargainUser storeBargainUser = storeBargainUserService + .getBargainUserInfo(bargainId,bargainUserUid); + + //判断是否已经帮助过 + int count = storeBargainUserHelpService.count(new QueryWrapper() + .eq("bargain_id",bargainId) + .eq("bargain_user_id",storeBargainUser.getId()) + .eq("uid",uid)); + if(count > 0) return; + + YxStoreBargainQueryVo storeBargainQueryVo = getYxStoreBargainById(bargainId); + //用户可以砍掉的金额 好友砍价之前获取可以砍价金额 + double coverPrice = NumberUtil.sub(storeBargainUser.getBargainPrice() + ,storeBargainUser.getBargainPriceMin()).doubleValue(); + + double random = 0d; + if(coverPrice > 0 ){ + //用户剩余要砍掉的价格 + double surplusPrice = NumberUtil.sub(coverPrice, + storeBargainUser.getPrice()).doubleValue(); + if(surplusPrice == 0) return; + + + //生成一个区间随机数 + random = OrderUtil.randomNumber( + storeBargainQueryVo.getBargainMinPrice().doubleValue(), + storeBargainQueryVo.getBargainMaxPrice().doubleValue()); + if(random > surplusPrice) random = surplusPrice; + } + + + //添加砍价帮助表 + YxStoreBargainUserHelp storeBargainUserHelp = YxStoreBargainUserHelp + .builder() + .uid(uid) + .bargainId(bargainId) + .bargainUserId(storeBargainUser.getId()) + .price(BigDecimal.valueOf(random)) + .addTime(OrderUtil.getSecondTimestampTwo()) + .build(); + storeBargainUserHelpService.save(storeBargainUserHelp); + + //更新砍价参与表 + YxStoreBargainUser bargainUser = YxStoreBargainUser + .builder() + .id(storeBargainUser.getId()) + .price(BigDecimal.valueOf(NumberUtil.add(storeBargainUser.getPrice().doubleValue(),random))) + .build(); + + storeBargainUserService.updateById(bargainUser); + } + + /** + * 顶部统计 + * @param bargainId + * @return + */ + @Override + public TopCountDTO topCount(int bargainId) { + TopCountDTO topCountDTO = TopCountDTO.builder() + .lookCount(yxStoreBargainMapper.lookCount()) + .shareCount(yxStoreBargainMapper.shareCount()) + .userCount(storeBargainUserService.count()) + .build(); + if(bargainId > 0) addBargainShare(bargainId); + return topCountDTO; + } + + /** + * 砍价 砍价帮总人数、剩余金额、进度条、已经砍掉的价格 + * @param bargainId + * @param uid + */ + @Override + public BargainCountDTO helpCount(int bargainId, int uid) { + YxStoreBargainUser storeBargainUser = storeBargainUserService + .getBargainUserInfo(bargainId,uid); + if(ObjectUtil.isNull(storeBargainUser)) { + BargainCountDTO bargainCountDTO = BargainCountDTO + .builder() + .count(0) + .alreadyPrice(0d) + .status(0) + .pricePercent(0) + .price(0d) + .build(); + + return bargainCountDTO; + } + + + int count = storeBargainUserHelpService + .getBargainUserHelpPeopleCount(bargainId,storeBargainUser.getId()); + //用户可以砍掉的价格 + double diffPrice = NumberUtil.sub(storeBargainUser.getBargainPrice() + ,storeBargainUser.getBargainPriceMin()).doubleValue(); + //砍价进度条百分比 + int pricePercent = 0; + if(diffPrice <= 0) { + pricePercent = 100; + }else{ + pricePercent = NumberUtil.round(NumberUtil.mul(NumberUtil.div( + storeBargainUser.getPrice(),diffPrice),100) + ,0).intValue(); + } + + + BargainCountDTO bargainCountDTO = BargainCountDTO + .builder() + .count(count) + .alreadyPrice(storeBargainUser.getPrice().doubleValue()) + .status(storeBargainUser.getStatus()) + .pricePercent(pricePercent) + .price(NumberUtil.sub(diffPrice,storeBargainUser.getPrice()).doubleValue()) + .build(); + + return bargainCountDTO; + } + + /** + * 砍价支付成功订单数量 + * @param bargainId 砍价id + * @return int + */ + @Override + public int getBargainPayCount(int bargainId) { + return storeOrderService.count(new QueryWrapper() + .eq("bargain_id", bargainId).eq("paid",1).eq("refund_status",0)); + } + + /** + * 增加分享次数 + * @param id + */ + @Override + public void addBargainShare(int id) { + yxStoreBargainMapper.addBargainShare(id); + } + + /** + * 增加浏览次数 + * @param id + */ + @Override + public void addBargainLook(int id) { + yxStoreBargainMapper.addBargainLook(id); + } + + /** + * 砍价详情 + * @param id 砍价id + * @param uid 用户id + * @return + */ + @Override + @Transactional(rollbackFor = Exception.class) + public BargainDTO getDetail(int id, int uid) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("is_del",0).eq("status",1).eq("id",id); + + YxStoreBargain storeBargain = yxStoreBargainMapper.selectOne(wrapper); + if(ObjectUtil.isNull(storeBargain)) throw new ErrorRequestException("砍价已结束"); + + addBargainLook(id); + + YxStoreBargainQueryVo storeBargainQueryVo = storeBargainMap.toDto(storeBargain); + + BargainDTO bargainDTO = BargainDTO + .builder() + .bargain(storeBargainQueryVo) + .userInfo(userService.getYxUserById(uid)) + .bargainSumCount(getBargainPayCount(id)) + .build(); + + return bargainDTO; + } + + /** + * 获取砍价商品列表 + * @param page + * @param limit + * @return + */ + @Override + public List getList(int page, int limit) { + Page pageModel = new Page<>(page, limit); + QueryWrapper wrapper = new QueryWrapper<>(); + int nowTime = OrderUtil.getSecondTimestampTwo(); + wrapper.eq("is_del",0).eq("status",1) + .lt("start_time",nowTime).gt("stop_time",nowTime); + + List yxStoreBargainQueryVos = storeBargainMap + .toDto(yxStoreBargainMapper.selectPage(pageModel,wrapper).getRecords()); + + yxStoreBargainQueryVos.forEach(item->{ + item.setPeople(storeBargainUserService.getBargainUserList(item.getId(),1).size()); + }); + + return yxStoreBargainQueryVos; + } + + @Override + public YxStoreBargainQueryVo getYxStoreBargainById(Serializable id){ + return yxStoreBargainMapper.getYxStoreBargainById(id); + } + + @Override + public Paging getYxStoreBargainPageList(YxStoreBargainQueryParam yxStoreBargainQueryParam) throws Exception{ + Page page = setPageParam(yxStoreBargainQueryParam,OrderItem.desc("create_time")); + IPage iPage = yxStoreBargainMapper.getYxStoreBargainPageList(page,yxStoreBargainQueryParam); + return new Paging(iPage); + } + +} diff --git a/yshop-api/src/main/java/co/yixiang/modules/activity/service/impl/YxStoreBargainUserHelpServiceImpl.java b/yshop-api/src/main/java/co/yixiang/modules/activity/service/impl/YxStoreBargainUserHelpServiceImpl.java new file mode 100644 index 00000000..586420d9 --- /dev/null +++ b/yshop-api/src/main/java/co/yixiang/modules/activity/service/impl/YxStoreBargainUserHelpServiceImpl.java @@ -0,0 +1,112 @@ +package co.yixiang.modules.activity.service.impl; + +import cn.hutool.core.util.ObjectUtil; +import co.yixiang.modules.activity.entity.YxStoreBargainUser; +import co.yixiang.modules.activity.entity.YxStoreBargainUserHelp; +import co.yixiang.modules.activity.mapper.YxStoreBargainUserHelpMapper; +import co.yixiang.modules.activity.mapping.StoreBargainHelpMap; +import co.yixiang.modules.activity.service.YxStoreBargainUserHelpService; +import co.yixiang.modules.activity.service.YxStoreBargainUserService; +import co.yixiang.modules.activity.web.param.YxStoreBargainUserHelpQueryParam; +import co.yixiang.modules.activity.web.vo.YxStoreBargainUserHelpQueryVo; +import co.yixiang.common.service.impl.BaseServiceImpl; +import co.yixiang.common.web.vo.Paging; +import co.yixiang.modules.user.service.YxUserService; +import co.yixiang.modules.user.web.vo.YxUserQueryVo; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.beans.factory.annotation.Autowired; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.metadata.OrderItem; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + + +/** + *

+ * 砍价用户帮助表 服务实现类 + *

+ * + * @author hupeng + * @since 2019-12-21 + */ +@Slf4j +@Service +@Transactional(rollbackFor = Exception.class) +public class YxStoreBargainUserHelpServiceImpl extends BaseServiceImpl implements YxStoreBargainUserHelpService { + + @Autowired + private YxStoreBargainUserHelpMapper yxStoreBargainUserHelpMapper; + + @Autowired + private YxStoreBargainUserService storeBargainUserService; + + @Autowired + private YxUserService userService; + + @Autowired + private StoreBargainHelpMap storeBargainHelpMap; + + /** + * 获取砍价帮 + * @param bargainId + * @param bargainUserUid + * @param page + * @param limit + * @return + */ + @Override + public List getList(int bargainId, int bargainUserUid, + int page, int limit) { + + YxStoreBargainUser storeBargainUser = storeBargainUserService + .getBargainUserInfo(bargainId,bargainUserUid); + if(ObjectUtil.isNull(storeBargainUser)) { + return new ArrayList<>(); + } + Page pageModel = new Page<>(page, limit); + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("bargain_user_id",storeBargainUser.getId()).orderByDesc("id"); + + List storeBargainUserHelpQueryVos = storeBargainHelpMap + .toDto(yxStoreBargainUserHelpMapper.selectPage(pageModel,wrapper).getRecords()); + + storeBargainUserHelpQueryVos.forEach(item->{ + YxUserQueryVo yxUserQueryVo = userService.getYxUserById(item.getUid()); + item.setAvatar(yxUserQueryVo.getAvatar()); + item.setNickname(yxUserQueryVo.getNickname()); + }); + + return storeBargainUserHelpQueryVos; + } + + /** + * 获取砍价帮总人数 + * @param bargainId 砍价产品ID + * @param bargainUserUid 用户参与砍价表id + * @return + */ + @Override + public int getBargainUserHelpPeopleCount(int bargainId, int bargainUserUid) { + return yxStoreBargainUserHelpMapper.selectCount(new QueryWrapper() + .eq("bargain_id", bargainId).eq("bargain_user_id",bargainUserUid)); + } + + @Override + public YxStoreBargainUserHelpQueryVo getYxStoreBargainUserHelpById(Serializable id) throws Exception{ + return yxStoreBargainUserHelpMapper.getYxStoreBargainUserHelpById(id); + } + + @Override + public Paging getYxStoreBargainUserHelpPageList(YxStoreBargainUserHelpQueryParam yxStoreBargainUserHelpQueryParam) throws Exception{ + Page page = setPageParam(yxStoreBargainUserHelpQueryParam,OrderItem.desc("create_time")); + IPage iPage = yxStoreBargainUserHelpMapper.getYxStoreBargainUserHelpPageList(page,yxStoreBargainUserHelpQueryParam); + return new Paging(iPage); + } + +} diff --git a/yshop-api/src/main/java/co/yixiang/modules/activity/service/impl/YxStoreBargainUserServiceImpl.java b/yshop-api/src/main/java/co/yixiang/modules/activity/service/impl/YxStoreBargainUserServiceImpl.java new file mode 100644 index 00000000..14408e5e --- /dev/null +++ b/yshop-api/src/main/java/co/yixiang/modules/activity/service/impl/YxStoreBargainUserServiceImpl.java @@ -0,0 +1,218 @@ +package co.yixiang.modules.activity.service.impl; + +import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.ObjectUtil; +import co.yixiang.exception.ErrorRequestException; +import co.yixiang.modules.activity.entity.YxStoreBargainUser; +import co.yixiang.modules.activity.entity.YxStoreBargainUserHelp; +import co.yixiang.modules.activity.mapper.YxStoreBargainUserMapper; +import co.yixiang.modules.activity.mapping.StoreBargainUserMap; +import co.yixiang.modules.activity.service.YxStoreBargainService; +import co.yixiang.modules.activity.service.YxStoreBargainUserHelpService; +import co.yixiang.modules.activity.service.YxStoreBargainUserService; +import co.yixiang.modules.activity.web.param.YxStoreBargainUserQueryParam; +import co.yixiang.modules.activity.web.vo.YxStoreBargainQueryVo; +import co.yixiang.modules.activity.web.vo.YxStoreBargainUserQueryVo; +import co.yixiang.common.service.impl.BaseServiceImpl; +import co.yixiang.common.web.vo.Paging; +import co.yixiang.utils.OrderUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.beans.factory.annotation.Autowired; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.metadata.OrderItem; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.List; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; +import java.util.concurrent.locks.ReentrantReadWriteLock; + + +/** + *

+ * 用户参与砍价表 服务实现类 + *

+ * + * @author hupeng + * @since 2019-12-21 + */ +@Slf4j +@Service +public class YxStoreBargainUserServiceImpl extends BaseServiceImpl implements YxStoreBargainUserService { + + @Autowired + private YxStoreBargainUserMapper yxStoreBargainUserMapper; + + @Autowired + private StoreBargainUserMap storeBargainUserMap; + + @Autowired + private YxStoreBargainService storeBargainService; + + @Autowired + private YxStoreBargainUserHelpService storeBargainUserHelpService; + + + /** + * 修改用户砍价状态 + * @param bargainId 砍价产品id + * @param uid 用户id + */ + @Override + public void setBargainUserStatus(int bargainId, int uid) { + YxStoreBargainUser storeBargainUser = getBargainUserInfo(bargainId,uid); + if(ObjectUtil.isNull(storeBargainUser)) return; + + if(storeBargainUser.getStatus() != 1) return; + double price = NumberUtil.sub(NumberUtil.sub(storeBargainUser.getBargainPrice(), + storeBargainUser.getBargainPriceMin()),storeBargainUser.getPrice()).doubleValue(); + if(price > 0) return; + + storeBargainUser.setStatus(3); + + yxStoreBargainUserMapper.updateById(storeBargainUser); + } + + /** + * 砍价取消 + * @param bargainId + * @param uid + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void bargainCancel(int bargainId, int uid) { + YxStoreBargainUser storeBargainUser = getBargainUserInfo(bargainId,uid); + if(ObjectUtil.isNull(storeBargainUser)) throw new ErrorRequestException("数据不存在"); + + if(storeBargainUser.getStatus() != 1) throw new ErrorRequestException("状态错误"); + + storeBargainUser.setIsDel(1); + + yxStoreBargainUserMapper.updateById(storeBargainUser); + } + + /** + * 获取用户的砍价产品 + * @param bargainUserUid + * @param page + * @param limit + * @return + */ + @Override + public List bargainUserList(int bargainUserUid, int page, int limit) { + Page pageModel = new Page<>(page, limit); + return yxStoreBargainUserMapper.getBargainUserList(bargainUserUid,pageModel); + } + + /** + * 判断用户是否还可以砍价 + * @param bargainId 砍价产品id + * @param bargainUserUid 开启砍价用户id + * @param uid 当前用户id + * @return + */ + @Override + public boolean isBargainUserHelp(int bargainId, int bargainUserUid, int uid) { + YxStoreBargainUser storeBargainUser = getBargainUserInfo(bargainId,bargainUserUid); + YxStoreBargainQueryVo storeBargainQueryVo = storeBargainService + .getYxStoreBargainById(bargainId); + if(ObjectUtil.isNull(storeBargainUser) || ObjectUtil.isNull(storeBargainQueryVo)){ + return false; + } + + int count = storeBargainUserHelpService.count(new QueryWrapper() + .eq("bargain_id",bargainId) + .eq("bargain_user_id",storeBargainUser.getId()) + .eq("uid",uid)); + + if(count == 0) return true; + + + return false; + } + + /** + * 添加砍价记录 + * @param bargainId + * @param uid + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void setBargain(Integer bargainId, Integer uid) { + if(ObjectUtil.isNotNull(getBargainUserInfo(bargainId,uid))) return; + YxStoreBargainQueryVo storeBargainQueryVo = storeBargainService.getYxStoreBargainById(bargainId); + YxStoreBargainUser storeBargainUser = YxStoreBargainUser + .builder() + .bargainId(bargainId) + .uid(uid) + .bargainPrice(storeBargainQueryVo.getPrice()) + .bargainPriceMin(storeBargainQueryVo.getMinPrice()) + .price(BigDecimal.ZERO) + .status(1) + .isDel(0) + .addTime(OrderUtil.getSecondTimestampTwo()) + .build(); + + yxStoreBargainUserMapper.insert(storeBargainUser); + + + } + + /** + * 获取用户可以砍掉的价格 + * @param id + * @return + */ + @Override + public double getBargainUserDiffPrice(int id) { + YxStoreBargainUserQueryVo storeBargainUserQueryVo = getYxStoreBargainUserById(id); + return NumberUtil.sub(storeBargainUserQueryVo.getBargainPrice() + ,storeBargainUserQueryVo.getBargainPriceMin()).doubleValue(); + } + + + + /** + * 获取某个用户参与砍价信息 + * @param bargainId + * @param uid + * @return + */ + @Override + public YxStoreBargainUser getBargainUserInfo(int bargainId, int uid) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("bargain_id",bargainId).eq("uid",uid).eq("is_del",0).last("limit 1"); + return yxStoreBargainUserMapper.selectOne(wrapper); + } + + /** + * 获取参与砍价的用户列表 + * @param bargainId 砍价id + * @param status 状态 1 进行中 2 结束失败 3结束成功 + * @return + */ + @Override + public List getBargainUserList(int bargainId, int status) { + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("bargain_id",bargainId).eq("status",status); + return storeBargainUserMap.toDto(yxStoreBargainUserMapper.selectList(wrapper)); + } + + @Override + public YxStoreBargainUserQueryVo getYxStoreBargainUserById(Serializable id){ + return yxStoreBargainUserMapper.getYxStoreBargainUserById(id); + } + + @Override + public Paging getYxStoreBargainUserPageList(YxStoreBargainUserQueryParam yxStoreBargainUserQueryParam) throws Exception{ + Page page = setPageParam(yxStoreBargainUserQueryParam,OrderItem.desc("create_time")); + IPage iPage = yxStoreBargainUserMapper.getYxStoreBargainUserPageList(page,yxStoreBargainUserQueryParam); + return new Paging(iPage); + } + +} diff --git a/yshop-api/src/main/java/co/yixiang/modules/activity/service/impl/YxStoreCombinationServiceImpl.java b/yshop-api/src/main/java/co/yixiang/modules/activity/service/impl/YxStoreCombinationServiceImpl.java index d8f6e789..a55ae59f 100644 --- a/yshop-api/src/main/java/co/yixiang/modules/activity/service/impl/YxStoreCombinationServiceImpl.java +++ b/yshop-api/src/main/java/co/yixiang/modules/activity/service/impl/YxStoreCombinationServiceImpl.java @@ -67,6 +67,7 @@ public class YxStoreCombinationServiceImpl extends BaseServiceImpl + * 砍价 前端控制器 + *

+ * + * @author hupeng + * @since 2019-12-21 + */ +@Slf4j +@RestController +@RequestMapping +@Api(value = "砍价商品", tags = "砍价商品", description = "砍价商品") +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +public class StoreBargainController extends BaseController { + + private final YxStoreBargainService storeBargainService; + private final YxStoreBargainUserService storeBargainUserService; + private final YxStoreBargainUserHelpService storeBargainUserHelpService; + private final YxUserService userService; + private final YxSystemAttachmentService systemAttachmentService; + private final YxSystemConfigService systemConfigService; + private final YxUserService yxUserService; + + @Value("${file.path}") + private String path; + + private static Lock lock = new ReentrantLock(false); + + + /** + * 砍价产品列表 + */ + @GetMapping("/bargain/list") + @ApiOperation(value = "砍价产品列表",notes = "砍价产品列表",response = YxStoreBargainQueryVo.class) + public ApiResult getYxStoreBargainPageList(@RequestParam(value = "page", defaultValue = "1") int page, + @RequestParam(value = "limit", defaultValue = "10") int limit){ + return ApiResult.ok(storeBargainService.getList(page,limit)); + } + + /** + * 砍价详情 + */ + @GetMapping("/bargain/detail/{id}") + @ApiOperation(value = "砍价详情",notes = "砍价详情",response = YxStoreBargainQueryVo.class) + public ApiResult getYxStoreBargain(@PathVariable Integer id){ + if(ObjectUtil.isNull(id)) return ApiResult.fail("参数错误"); + int uid = SecurityUtils.getUserId().intValue(); + return ApiResult.ok(storeBargainService.getDetail(id,uid)); + } + + /** + * 砍价详情统计 + */ + @PostMapping("/bargain/help/count") + @ApiOperation(value = "砍价详情统计",notes = "砍价详情统计") + public ApiResult helpCount(@RequestBody String jsonStr){ + JSONObject jsonObject = JSON.parseObject(jsonStr); + Integer bargainId = jsonObject.getInteger("bargainId"); + Integer bargainUserUid = jsonObject.getInteger("bargainUserUid"); + if(ObjectUtil.isNull(bargainId) || ObjectUtil.isNull(bargainUserUid)) return ApiResult.fail("参数错误"); + + return ApiResult.ok(storeBargainService.helpCount(bargainId,bargainUserUid)); + } + + /** + * 砍价顶部统计 + */ + @PostMapping("/bargain/share") + @ApiOperation(value = "砍价顶部统计",notes = "砍价顶部统计") + public ApiResult topCount(@RequestBody String jsonStr){ + JSONObject jsonObject = JSON.parseObject(jsonStr); + Integer bargainId = jsonObject.getInteger("bargainId"); + + if(ObjectUtil.isNull(bargainId)) bargainId = 0; + + return ApiResult.ok(storeBargainService.topCount(bargainId)); + } + + /** + * 砍价开启 + */ + @PostMapping("/bargain/start") + @ApiOperation(value = "砍价开启",notes = "砍价开启") + public ApiResult start(@RequestBody String jsonStr){ + JSONObject jsonObject = JSON.parseObject(jsonStr); + Integer bargainId = jsonObject.getInteger("bargainId"); + + if(ObjectUtil.isNull(bargainId)) return ApiResult.fail("参数错误"); + int uid = SecurityUtils.getUserId().intValue(); + try{ + lock.lock(); + storeBargainUserService.setBargain(bargainId,uid); + }finally { + lock.unlock(); + } + + + return ApiResult.ok("ok"); + } + + /** + * 帮助好友砍价 + */ + @PostMapping("/bargain/help") + @ApiOperation(value = "帮助好友砍价",notes = "帮助好友砍价") + public ApiResult help(@RequestBody String jsonStr){ + JSONObject jsonObject = JSON.parseObject(jsonStr); + Integer bargainId = jsonObject.getInteger("bargainId"); + Integer bargainUserUid = jsonObject.getInteger("bargainUserUid"); + if(ObjectUtil.isNull(bargainId) || ObjectUtil.isNull(bargainUserUid)) return ApiResult.fail("参数错误"); + Map map = new LinkedHashMap<>(); + int uid = SecurityUtils.getUserId().intValue(); + boolean isBargainUserHelp = storeBargainUserService + .isBargainUserHelp(bargainId,bargainUserUid,uid); + if(!isBargainUserHelp){ + map.put("status","SUCCESSFUL"); + return ApiResult.ok(map); + } + try{ + lock.lock(); + storeBargainService.doHelp(bargainId,bargainUserUid,uid); + }finally { + lock.unlock(); + } + + map.put("status","SUCCESS"); + + return ApiResult.ok(map); + } + + /** + * 砍掉金额 + */ + @PostMapping("/bargain/help/price") + @ApiOperation(value = "砍掉金额",notes = "砍掉金额") + public ApiResult price(@RequestBody String jsonStr){ + JSONObject jsonObject = JSON.parseObject(jsonStr); + Integer bargainId = jsonObject.getInteger("bargainId"); + Integer bargainUserUid = jsonObject.getInteger("bargainUserUid"); + if(ObjectUtil.isNull(bargainId) || ObjectUtil.isNull(bargainUserUid)) return ApiResult.fail("参数错误"); + int uid = SecurityUtils.getUserId().intValue(); + YxStoreBargainUser storeBargainUser = storeBargainUserService + .getBargainUserInfo(bargainId,bargainUserUid); + Map map = new LinkedHashMap<>(); + if(ObjectUtil.isNull(storeBargainUser)){ + map.put("price",0); + return ApiResult.ok(map); + } + YxStoreBargainUserHelp storeBargainUserHelp = storeBargainUserHelpService + .getOne(new QueryWrapper() + .eq("bargain_id",bargainId) + .eq("bargain_user_id",storeBargainUser.getId()) + .eq("uid",uid).last("limit 1")); + if(ObjectUtil.isNull(storeBargainUserHelp)){ + map.put("price",0); + }else{ + map.put("price",storeBargainUserHelp.getPrice()); + } + + return ApiResult.ok(map); + } + + /** + * 砍掉金额 + */ + @PostMapping("/bargain/help/list") + @ApiOperation(value = "帮助好友砍价",notes = "帮助好友砍价") + public ApiResult helpList(@RequestBody String jsonStr){ + JSONObject jsonObject = JSON.parseObject(jsonStr); + + Integer bargainId = jsonObject.getInteger("bargainId"); + Integer bargainUserUid = jsonObject.getInteger("bargainUserUid"); + if(ObjectUtil.isNull(bargainId) || ObjectUtil.isNull(bargainUserUid)) return ApiResult.fail("参数错误"); + + Integer page = jsonObject.getInteger("page"); + Integer limit = jsonObject.getInteger("limit"); + if(ObjectUtil.isNull(page)) page = 1; + if(ObjectUtil.isNull(limit)) limit = 10; + + return ApiResult.ok(storeBargainUserHelpService.getList(bargainId,bargainUserUid + ,page,limit)); + } + + /** + * 开启砍价用户信息 + */ + @PostMapping("/bargain/start/user") + @ApiOperation(value = "开启砍价用户信息",notes = "开启砍价用户信息") + public ApiResult startUser(@RequestBody String jsonStr){ + JSONObject jsonObject = JSON.parseObject(jsonStr); + + //Integer bargainId = jsonObject.getInteger("bargainId"); + Integer bargainUserUid = jsonObject.getInteger("bargainUserUid"); + if(ObjectUtil.isNull(bargainUserUid)) return ApiResult.fail("参数错误"); + + return ApiResult.ok(userService.getYxUserById(bargainUserUid)); + } + + /** + * 拼团海报 + */ + @PostMapping("/bargain/poster") + @ApiOperation(value = "拼团海报",notes = "拼团海报") + public ApiResult poster(@RequestBody String jsonStr){ + JSONObject jsonObject = JSON.parseObject(jsonStr); + Integer bargainId = jsonObject.getInteger("bargainId"); + if(ObjectUtil.isNull(bargainId)) return ApiResult.fail("参数有误"); + + String siteUrl = systemConfigService.getData("site_url"); + if(StrUtil.isEmpty(siteUrl)){ + return ApiResult.fail("未配置h5地址"); + } + String apiUrl = systemConfigService.getData("api_url"); + if(StrUtil.isEmpty(siteUrl)){ + return ApiResult.fail("未配置api地址"); + } + int uid = SecurityUtils.getUserId().intValue(); + YxStoreBargainQueryVo storeBargainQueryVo = storeBargainService + .getYxStoreBargainById(bargainId); + YxStoreBargainUser storeBargainUser = storeBargainUserService + .getBargainUserInfo(bargainId,uid); + + + if(ObjectUtil.isNull(storeBargainQueryVo) || ObjectUtil.isNull(storeBargainUser)) { + return ApiResult.fail("数据不存在"); + } + + + //用户可以砍掉的金额 好友砍价之前获取可以砍价金额 + double coverPrice = NumberUtil.sub(storeBargainUser.getBargainPrice() + ,storeBargainUser.getBargainPriceMin()).doubleValue(); + //用户剩余要砍掉的价格 + double surplusPrice = NumberUtil.sub(coverPrice, + storeBargainUser.getPrice()).doubleValue(); + + YxUserQueryVo userInfo = yxUserService.getYxUserById(uid); + String name = bargainId+"_"+uid + "_"+userInfo.getIsPromoter()+"_bargain_share_wap.jpg"; + YxSystemAttachment attachment = systemAttachmentService.getInfo(name); + String fileDir = path+"qrcode"+ File.separator; + String qrcodeUrl = ""; + if(ObjectUtil.isNull(attachment)){ + //生成二维码 + File file = FileUtil.mkdir(new File(fileDir)); + QrCodeUtil.generate(siteUrl+"/activity/dargain_detail/"+bargainId+"/"+uid+"?spread="+uid, 180, 180, + FileUtil.file(fileDir+name)); + + systemAttachmentService.attachmentAdd(name,String.valueOf(FileUtil.size(file)), + fileDir+name,"qrcode/"+name); + + qrcodeUrl = fileDir+name; + }else{ + qrcodeUrl = attachment.getAttDir(); + } + + String spreadPicName = bargainId+"_"+uid + "_"+userInfo.getIsPromoter()+"_bargain_user_spread.jpg"; + String spreadPicPath = fileDir+spreadPicName; + + YxSystemAttachment attachmentT = systemAttachmentService.getInfo(spreadPicName); + String spreadUrl = ""; + InputStream stream = getClass().getClassLoader().getResourceAsStream("poster.jpg"); + InputStream streamT = getClass().getClassLoader() + .getResourceAsStream("simsunb.ttf"); + File newFile = new File("poster.jpg"); + File newFileT = new File("simsunb.ttf"); + try { + FileUtils.copyInputStreamToFile(stream, newFile); + FileUtils.copyInputStreamToFile(streamT, newFileT); + } catch (IOException e) { + e.printStackTrace(); + } + if(ObjectUtil.isNull(attachmentT)){ + try { + + //第一步标题 + Font font = Font.createFont(Font.TRUETYPE_FONT, newFileT); + Font f= font.deriveFont(Font.PLAIN,40); + //font. + ImgUtil.pressText(// + newFile, + FileUtil.file(spreadPicPath), + storeBargainQueryVo.getTitle(), + Color.BLACK, + f, //字体 + 0, //x坐标修正值。 默认在中间,偏移量相对于中间偏移 + -480, //y坐标修正值。 默认在中间,偏移量相对于中间偏移 + 0.8f//透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 + ); + + Font f2= font.deriveFont(Font.PLAIN,45); + //第2步价格 + ImgUtil.pressText(// + FileUtil.file(spreadPicPath), + FileUtil.file(spreadPicPath), + NumberUtil.sub(storeBargainQueryVo.getPrice(), + storeBargainUser.getPrice()).toString(), + Color.RED, + f2, //字体 + -160, //x坐标修正值。 默认在中间,偏移量相对于中间偏移 + -380, //y坐标修正值。 默认在中间,偏移量相对于中间偏移 + 0.8f//透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 + ); + + Font f3= font.deriveFont(Font.PLAIN,30); + //第3步几人团 + ImgUtil.pressText(// + FileUtil.file(spreadPicPath), + FileUtil.file(spreadPicPath), + "已砍至", + Color.WHITE, + f3, //字体 + 90, //x坐标修正值。 默认在中间,偏移量相对于中间偏移 + -385, //y坐标修正值。 默认在中间,偏移量相对于中间偏移 + 0.8f//透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 + ); + + //第4步介绍 + String pro = "还差还差" + surplusPrice + "即可砍价成功"; + ImgUtil.pressText(// + FileUtil.file(spreadPicPath), + FileUtil.file(spreadPicPath), + pro, + Color.BLACK, + f3, //字体 + -50, //x坐标修正值。 默认在中间,偏移量相对于中间偏移 + -300, //y坐标修正值。 默认在中间,偏移量相对于中间偏移 + 0.8f//透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 + ); + + //第5步商品图片 + //下载图片 + String picImage = fileDir+bargainId+"_bargain_image.jpg"; + HttpUtil.downloadFile(storeBargainQueryVo.getImage(), + FileUtil.file(picImage)); + + ImgUtil.scale( + FileUtil.file(picImage), + FileUtil.file(picImage), + 0.5f//缩放比例 + ); + + ImgUtil.pressImage( + FileUtil.file(spreadPicPath), + FileUtil.file(spreadPicPath), + ImgUtil.read(FileUtil.file(picImage)), //水印图片 + 0, //x坐标修正值。 默认在中间,偏移量相对于中间偏移 + -80, //y坐标修正值。 默认在中间,偏移量相对于中间偏移 + 0.8f + ); + + ImgUtil.pressImage( + FileUtil.file(spreadPicPath), + FileUtil.file(spreadPicPath), + ImgUtil.read(FileUtil.file(qrcodeUrl)), //水印图片 + 0, //x坐标修正值。 默认在中间,偏移量相对于中间偏移 + 390, //y坐标修正值。 默认在中间,偏移量相对于中间偏移 + 0.8f + ); + + systemAttachmentService.attachmentAdd(spreadPicName, + String.valueOf(FileUtil.size(new File(spreadPicPath))), + spreadPicPath,"qrcode/"+spreadPicName); + + spreadUrl = apiUrl + "/api/file/qrcode/"+spreadPicName; + + } catch (Exception e) { + e.printStackTrace(); + } + }else{ + spreadUrl = apiUrl + "/api/file/" + attachmentT.getSattDir(); + } + Map map = new LinkedHashMap<>(); + map.put("url",spreadUrl); + return ApiResult.ok(map); + } + + + /** + * 砍价列表(已参与) + */ + @GetMapping("/bargain/user/list") + @ApiOperation(value = "砍价列表(已参与)",notes = "砍价列表(已参与)") + public ApiResult bargainUserList(@RequestParam(value = "page", defaultValue = "1") int page, + @RequestParam(value = "limit", defaultValue = "10") int limit){ + int uid = SecurityUtils.getUserId().intValue(); + List yxStoreBargainUserQueryVos = storeBargainUserService + .bargainUserList(uid,page,limit); + if(yxStoreBargainUserQueryVos.isEmpty()) return ApiResult.fail("暂无参与砍价"); + return ApiResult.ok(yxStoreBargainUserQueryVos); + } + + /** + * 砍价取消 + */ + @PostMapping("/bargain/user/cancel") + @ApiOperation(value = "砍价取消",notes = "砍价取消") + public ApiResult bargainCancel(@RequestBody String jsonStr){ + JSONObject jsonObject = JSON.parseObject(jsonStr); + Integer bargainId = jsonObject.getInteger("bargainId"); + if(ObjectUtil.isNull(bargainId)) return ApiResult.fail("参数有误"); + int uid = SecurityUtils.getUserId().intValue(); + storeBargainUserService.bargainCancel(bargainId,uid); + return ApiResult.ok("ok"); + } + + + + + + + + + + + +} + diff --git a/yshop-api/src/main/java/co/yixiang/modules/activity/web/dto/BargainCountDTO.java b/yshop-api/src/main/java/co/yixiang/modules/activity/web/dto/BargainCountDTO.java new file mode 100644 index 00000000..a8d51708 --- /dev/null +++ b/yshop-api/src/main/java/co/yixiang/modules/activity/web/dto/BargainCountDTO.java @@ -0,0 +1,23 @@ +package co.yixiang.modules.activity.web.dto; + +import lombok.Builder; +import lombok.Data; + +import java.io.Serializable; + +/** + * @ClassName BargainCountDTO + * @Author hupeng <610796224@qq.com> + * @Date 2019/12/21 + **/ +@Data +@Builder +public class BargainCountDTO implements Serializable { + private Double alreadyPrice; + private Integer count; + private Integer pricePercent; + private Integer status; + private Double price; //剩余的砍价金额 + + +} diff --git a/yshop-api/src/main/java/co/yixiang/modules/activity/web/dto/BargainDTO.java b/yshop-api/src/main/java/co/yixiang/modules/activity/web/dto/BargainDTO.java new file mode 100644 index 00000000..6e0060b0 --- /dev/null +++ b/yshop-api/src/main/java/co/yixiang/modules/activity/web/dto/BargainDTO.java @@ -0,0 +1,21 @@ +package co.yixiang.modules.activity.web.dto; + +import co.yixiang.modules.activity.web.vo.YxStoreBargainQueryVo; +import co.yixiang.modules.user.web.vo.YxUserQueryVo; +import lombok.Builder; +import lombok.Data; + +import java.io.Serializable; + +/** + * @ClassName BargainDTO + * @Author hupeng <610796224@qq.com> + * @Date 2019/12/21 + **/ +@Data +@Builder +public class BargainDTO implements Serializable { + private YxStoreBargainQueryVo bargain; + private YxUserQueryVo userInfo; + private Integer bargainSumCount;//砍价支付成功订单数量 +} diff --git a/yshop-api/src/main/java/co/yixiang/modules/activity/web/dto/TopCountDTO.java b/yshop-api/src/main/java/co/yixiang/modules/activity/web/dto/TopCountDTO.java new file mode 100644 index 00000000..c42b56f2 --- /dev/null +++ b/yshop-api/src/main/java/co/yixiang/modules/activity/web/dto/TopCountDTO.java @@ -0,0 +1,21 @@ +package co.yixiang.modules.activity.web.dto; + +import lombok.Builder; +import lombok.Data; + +import java.io.Serializable; + +/** + * @ClassName TopCountDTO + * @Author hupeng <610796224@qq.com> + * @Date 2019/12/21 + **/ +@Data +@Builder +public class TopCountDTO implements Serializable { + private Integer lookCount; + private Integer shareCount; + private Integer userCount; + + +} diff --git a/yshop-api/src/main/java/co/yixiang/modules/activity/web/param/YxStoreBargainQueryParam.java b/yshop-api/src/main/java/co/yixiang/modules/activity/web/param/YxStoreBargainQueryParam.java new file mode 100644 index 00000000..ea846ddd --- /dev/null +++ b/yshop-api/src/main/java/co/yixiang/modules/activity/web/param/YxStoreBargainQueryParam.java @@ -0,0 +1,22 @@ +package co.yixiang.modules.activity.web.param; + +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import co.yixiang.common.web.param.QueryParam; + +/** + *

+ * 砍价表 查询参数对象 + *

+ * + * @author hupeng + * @date 2019-12-21 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel(value="YxStoreBargainQueryParam对象", description="砍价表查询参数") +public class YxStoreBargainQueryParam extends QueryParam { + private static final long serialVersionUID = 1L; +} diff --git a/yshop-api/src/main/java/co/yixiang/modules/activity/web/param/YxStoreBargainUserHelpQueryParam.java b/yshop-api/src/main/java/co/yixiang/modules/activity/web/param/YxStoreBargainUserHelpQueryParam.java new file mode 100644 index 00000000..d1ce095a --- /dev/null +++ b/yshop-api/src/main/java/co/yixiang/modules/activity/web/param/YxStoreBargainUserHelpQueryParam.java @@ -0,0 +1,22 @@ +package co.yixiang.modules.activity.web.param; + +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import co.yixiang.common.web.param.QueryParam; + +/** + *

+ * 砍价用户帮助表 查询参数对象 + *

+ * + * @author hupeng + * @date 2019-12-21 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel(value="YxStoreBargainUserHelpQueryParam对象", description="砍价用户帮助表查询参数") +public class YxStoreBargainUserHelpQueryParam extends QueryParam { + private static final long serialVersionUID = 1L; +} diff --git a/yshop-api/src/main/java/co/yixiang/modules/activity/web/param/YxStoreBargainUserQueryParam.java b/yshop-api/src/main/java/co/yixiang/modules/activity/web/param/YxStoreBargainUserQueryParam.java new file mode 100644 index 00000000..ca624128 --- /dev/null +++ b/yshop-api/src/main/java/co/yixiang/modules/activity/web/param/YxStoreBargainUserQueryParam.java @@ -0,0 +1,22 @@ +package co.yixiang.modules.activity.web.param; + +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import co.yixiang.common.web.param.QueryParam; + +/** + *

+ * 用户参与砍价表 查询参数对象 + *

+ * + * @author hupeng + * @date 2019-12-21 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel(value="YxStoreBargainUserQueryParam对象", description="用户参与砍价表查询参数") +public class YxStoreBargainUserQueryParam extends QueryParam { + private static final long serialVersionUID = 1L; +} diff --git a/yshop-api/src/main/java/co/yixiang/modules/activity/web/vo/YxStoreBargainQueryVo.java b/yshop-api/src/main/java/co/yixiang/modules/activity/web/vo/YxStoreBargainQueryVo.java new file mode 100644 index 00000000..fa3a5681 --- /dev/null +++ b/yshop-api/src/main/java/co/yixiang/modules/activity/web/vo/YxStoreBargainQueryVo.java @@ -0,0 +1,122 @@ +package co.yixiang.modules.activity.web.vo; + +import co.yixiang.modules.user.web.vo.YxUserQueryVo; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +import java.math.BigDecimal; +import java.util.Date; + +/** + *

+ * 砍价表 查询结果对象 + *

+ * + * @author hupeng + * @date 2019-12-21 + */ +@Data +@ApiModel(value = "YxStoreBargainQueryVo对象", description = "砍价表查询参数") +public class YxStoreBargainQueryVo implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "砍价产品ID") + private Integer id; + + @ApiModelProperty(value = "关联产品ID") + private Integer productId; + + @ApiModelProperty(value = "砍价活动名称") + private String title; + + @ApiModelProperty(value = "砍价活动图片") + private String image; + + @ApiModelProperty(value = "单位名称") + private String unitName; + + @ApiModelProperty(value = "库存") + private Integer stock; + + @ApiModelProperty(value = "销量") + private Integer sales; + + @ApiModelProperty(value = "砍价产品轮播图") + private String images; + + @ApiModelProperty(value = "砍价开启时间") + private Integer startTime; + + @ApiModelProperty(value = "砍价结束时间") + private Integer stopTime; + + @ApiModelProperty(value = "砍价产品名称") + private String storeName; + + @ApiModelProperty(value = "砍价金额") + private BigDecimal price; + + @ApiModelProperty(value = "砍价商品最低价") + private BigDecimal minPrice; + + @ApiModelProperty(value = "每次购买的砍价产品数量") + private Integer num; + + @ApiModelProperty(value = "用户每次砍价的最大金额") + private BigDecimal bargainMaxPrice; + + @ApiModelProperty(value = "用户每次砍价的最小金额") + private BigDecimal bargainMinPrice; + + @ApiModelProperty(value = "用户每次砍价的次数") + private Integer bargainNum; + + @ApiModelProperty(value = "砍价状态 0(到砍价时间不自动开启) 1(到砍价时间自动开启时间)") + private Integer status; + + @ApiModelProperty(value = "砍价详情") + private String description; + + @ApiModelProperty(value = "反多少积分") + private BigDecimal giveIntegral; + + @ApiModelProperty(value = "砍价活动简介") + private String info; + + @ApiModelProperty(value = "成本价") + private BigDecimal cost; + + @ApiModelProperty(value = "排序") + private Integer sort; + + @ApiModelProperty(value = "是否推荐0不推荐1推荐") + private Integer isHot; + + @ApiModelProperty(value = "是否删除 0未删除 1删除") + private Integer isDel; + + @ApiModelProperty(value = "添加时间") + private Integer addTime; + + @ApiModelProperty(value = "是否包邮 0不包邮 1包邮") + private Integer isPostage; + + @ApiModelProperty(value = "邮费") + private BigDecimal postage; + + @ApiModelProperty(value = "砍价规则") + private String rule; + + @ApiModelProperty(value = "砍价产品浏览量") + private Integer look; + + @ApiModelProperty(value = "砍价产品分享量") + private Integer share; + + private Integer people; //参与人数 + + +} \ No newline at end of file diff --git a/yshop-api/src/main/java/co/yixiang/modules/activity/web/vo/YxStoreBargainUserHelpQueryVo.java b/yshop-api/src/main/java/co/yixiang/modules/activity/web/vo/YxStoreBargainUserHelpQueryVo.java new file mode 100644 index 00000000..f02f4507 --- /dev/null +++ b/yshop-api/src/main/java/co/yixiang/modules/activity/web/vo/YxStoreBargainUserHelpQueryVo.java @@ -0,0 +1,47 @@ +package co.yixiang.modules.activity.web.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +import java.math.BigDecimal; +import java.util.Date; + +/** + *

+ * 砍价用户帮助表 查询结果对象 + *

+ * + * @author hupeng + * @date 2019-12-21 + */ +@Data +@ApiModel(value = "YxStoreBargainUserHelpQueryVo对象", description = "砍价用户帮助表查询参数") +public class YxStoreBargainUserHelpQueryVo implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "砍价用户帮助表ID") + private Integer id; + + @ApiModelProperty(value = "帮助的用户id") + private Integer uid; + + @ApiModelProperty(value = "砍价产品ID") + private Integer bargainId; + + @ApiModelProperty(value = "用户参与砍价表id") + private Integer bargainUserId; + + @ApiModelProperty(value = "帮助砍价多少金额") + private BigDecimal price; + + @ApiModelProperty(value = "添加时间") + private Integer addTime; + + private String nickname; + + private String avatar; + +} \ No newline at end of file diff --git a/yshop-api/src/main/java/co/yixiang/modules/activity/web/vo/YxStoreBargainUserQueryVo.java b/yshop-api/src/main/java/co/yixiang/modules/activity/web/vo/YxStoreBargainUserQueryVo.java new file mode 100644 index 00000000..08e4fbec --- /dev/null +++ b/yshop-api/src/main/java/co/yixiang/modules/activity/web/vo/YxStoreBargainUserQueryVo.java @@ -0,0 +1,60 @@ +package co.yixiang.modules.activity.web.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +import java.math.BigDecimal; +import java.util.Date; + +/** + *

+ * 用户参与砍价表 查询结果对象 + *

+ * + * @author hupeng + * @date 2019-12-21 + */ +@Data +@ApiModel(value = "YxStoreBargainUserQueryVo对象", description = "用户参与砍价表查询参数") +public class YxStoreBargainUserQueryVo implements Serializable { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "用户参与砍价表ID") + private Integer id; + + @ApiModelProperty(value = "用户ID") + private Integer uid; + + @ApiModelProperty(value = "砍价产品id") + private Integer bargainId; + + @ApiModelProperty(value = "砍价的最低价") + private BigDecimal bargainPriceMin; + + @ApiModelProperty(value = "砍价金额") + private BigDecimal bargainPrice; + + @ApiModelProperty(value = "砍掉的价格") + private BigDecimal price; + + @ApiModelProperty(value = "状态 1参与中 2 活动结束参与失败 3活动结束参与成功") + private Integer status; + + @ApiModelProperty(value = "参与时间") + private Integer addTime; + + @ApiModelProperty(value = "是否取消") + private Integer isDel; + + private Double residuePrice; + + private String title; + + private String image; + + private Integer datatime; + +} \ No newline at end of file diff --git a/yshop-api/src/main/java/co/yixiang/modules/order/service/impl/YxStoreOrderServiceImpl.java b/yshop-api/src/main/java/co/yixiang/modules/order/service/impl/YxStoreOrderServiceImpl.java index e2a6a750..ba7b5c35 100644 --- a/yshop-api/src/main/java/co/yixiang/modules/order/service/impl/YxStoreOrderServiceImpl.java +++ b/yshop-api/src/main/java/co/yixiang/modules/order/service/impl/YxStoreOrderServiceImpl.java @@ -6,9 +6,8 @@ import co.yixiang.common.constant.CommonConstant; import co.yixiang.domain.AlipayConfig; import co.yixiang.domain.vo.TradeVo; import co.yixiang.exception.ErrorRequestException; -import co.yixiang.modules.activity.service.YxStoreCombinationService; -import co.yixiang.modules.activity.service.YxStorePinkService; -import co.yixiang.modules.activity.service.YxStoreSeckillService; +import co.yixiang.modules.activity.mapper.YxStoreBargainMapper; +import co.yixiang.modules.activity.service.*; import co.yixiang.modules.manage.service.YxExpressService; import co.yixiang.modules.manage.web.dto.ChartDataDTO; import co.yixiang.modules.manage.web.dto.OrderDataDTO; @@ -147,6 +146,12 @@ public class YxStoreOrderServiceImpl extends BaseServiceImpl 0){//拼团 + combinationService.incStockDecSales(cart.getCartNum(),order.getCombinationId()); + }else if(order.getSeckillId() > 0){//秒杀 + storeSeckillService.incStockDecSales(cart.getCartNum(),order.getSeckillId()); + }else if(order.getBargainId() > 0){//砍价 + storeBargainService.incStockDecSales(cart.getCartNum(),order.getBargainId()); + }else{ + productService.incProductStock(cart.getCartNum(),cart.getProductId() + ,cart.getProductAttrUnique()); + } + } } @@ -889,9 +905,14 @@ public class YxStoreOrderServiceImpl extends BaseServiceImpl 0) pinkService.createPink(orderInfo); + + //砍价 + if(orderInfo.getBargainId() > 0) { + storeBargainUserService.setBargainUserStatus(orderInfo.getBargainId(), + orderInfo.getUid()); + } //模板消息推送 //读取redis配置 String siteUrl = RedisUtil.get("site_url"); @@ -1096,15 +1117,17 @@ public class YxStoreOrderServiceImpl extends BaseServiceImpl cartIds = new ArrayList<>(); int combinationId = 0; int seckillId = 0; + int bargainId = 0; for (YxStoreCartQueryVo cart : cartInfo) { combinationId = cart.getCombinationId(); seckillId = cart.getSeckillId(); + bargainId = cart.getBargainId(); cartIds.add(cart.getId().toString()); totalNum += cart.getCartNum(); //计算积分 BigDecimal cartInfoGainIntegral = BigDecimal.ZERO; - if(combinationId == 0 && seckillId == 0){//拼团等活动不参与积分 + if(combinationId == 0 && seckillId == 0 && bargainId == 0){//拼团等活动不参与积分 if(cart.getProductInfo().getGiveIntegral().intValue() > 0){ cartInfoGainIntegral = NumberUtil.mul(cart.getCartNum(),cart. getProductInfo().getGiveIntegral()); @@ -1131,7 +1154,7 @@ public class YxStoreOrderServiceImpl extends BaseServiceImpl 0 || seckillId > 0) deduction = true; + if(combinationId > 0 || seckillId > 0 || bargainId > 0) deduction = true; if(deduction){ couponId = 0; useIntegral = 0; @@ -1218,7 +1241,7 @@ public class YxStoreOrderServiceImpl extends BaseServiceImpl 0){ storeSeckillService.decStockIncSales(cart.getCartNum(),seckillId); + }else if(bargainId > 0){ + storeBargainService.decStockIncSales(cart.getCartNum(),bargainId); } else { productService.decProductStock(cart.getCartNum(),cart.getProductId(), cart.getProductAttrUnique()); diff --git a/yshop-api/src/main/java/co/yixiang/modules/order/web/controller/StoreOrderController.java b/yshop-api/src/main/java/co/yixiang/modules/order/web/controller/StoreOrderController.java index 3ba7a43a..8fc2bedd 100644 --- a/yshop-api/src/main/java/co/yixiang/modules/order/web/controller/StoreOrderController.java +++ b/yshop-api/src/main/java/co/yixiang/modules/order/web/controller/StoreOrderController.java @@ -9,6 +9,8 @@ import co.yixiang.common.web.vo.Paging; import co.yixiang.exception.ErrorRequestException; import co.yixiang.express.ExpressService; import co.yixiang.express.dao.ExpressInfo; +import co.yixiang.modules.activity.entity.YxStoreBargainUser; +import co.yixiang.modules.activity.service.YxStoreBargainUserService; import co.yixiang.modules.activity.service.YxStorePinkService; import co.yixiang.modules.order.entity.YxStoreOrder; import co.yixiang.modules.order.entity.YxStoreOrderCartInfo; @@ -69,6 +71,7 @@ public class StoreOrderController extends BaseController { private final YxSystemConfigService systemConfigService; private final YxStorePinkService storePinkService; private final ExpressService expressService; + private final YxStoreBargainUserService storeBargainUserService; /** @@ -116,8 +119,15 @@ public class StoreOrderController extends BaseController { secKillId = cartQueryVo.getSeckillId(); } + int bargainId = 0; + if(cartId.split(",").length == 1){ + YxStoreCartQueryVo cartQueryVo = cartService.getYxStoreCartById(Integer + .valueOf(cartId)); + bargainId = cartQueryVo.getBargainId(); + } + //拼团砍价秒杀类产品不参与抵扣 - if(combinationId > 0 || secKillId > 0) confirmOrderDTO.setDeduction(true); + if(combinationId > 0 || secKillId > 0 || bargainId > 0) confirmOrderDTO.setDeduction(true); confirmOrderDTO.setAddressInfo(addressService.getUserDefaultAddress(uid)); @@ -154,8 +164,42 @@ public class StoreOrderController extends BaseController { return ApiResult.ok(map,"订单已生成"); } - //todo 砍价 - //todo 拼团 + // 砍价 + if(ObjectUtil.isNotNull(param.getBargainId())){ + YxStoreBargainUser storeBargainUser = storeBargainUserService. + getBargainUserInfo(param.getBargainId(),uid); + if(ObjectUtil.isNull(storeBargainUser)) return ApiResult.fail("砍价失败"); + if(storeBargainUser.getStatus() == 3) return ApiResult.fail("砍价已支付"); + + storeBargainUserService.setBargainUserStatus(param.getBargainId(),uid); + + } + // 拼团 + if(ObjectUtil.isNotNull(param.getPinkId())){ + int pinkId = param.getPinkId(); + if(pinkId > 0){ + YxStoreOrder yxStoreOrder = storeOrderService.getOrderPink(pinkId,uid,1); + if(ObjectUtil.isNotNull(yxStoreOrder)){ + if(storePinkService.getIsPinkUid(pinkId,uid) > 0){ + map.put("status","ORDER_EXIST"); + OrderExtendDTO orderExtendDTO = new OrderExtendDTO(); + orderExtendDTO.setOrderId(yxStoreOrder.getOrderId()); + map.put("result",orderExtendDTO); + return ApiResult.ok(map,"订单生成失败,你已经在该团内不能再参加了"); + } + } + + YxStoreOrder yxStoreOrderT = storeOrderService.getOrderPink(pinkId,uid,0); + if(ObjectUtil.isNotNull(yxStoreOrderT)){ + map.put("status","ORDER_EXIST"); + OrderExtendDTO orderExtendDTO = new OrderExtendDTO(); + orderExtendDTO.setOrderId(yxStoreOrder.getOrderId()); + map.put("result",orderExtendDTO); + return ApiResult.ok(map,"订单生成失败,你已经参加该团了,请先支付订单"); + } + } + + } if(param.getFrom().equals("weixin")) param.setIsChannel(0); @@ -344,6 +388,12 @@ public class StoreOrderController extends BaseController { String shippingType = jsonObject.getString("shipping_type"); String useIntegral = jsonObject.getString("useIntegral"); //todo 砍价 + if(ObjectUtil.isNotNull(jsonObject.getInteger("bargainId"))){ + YxStoreBargainUser storeBargainUser = storeBargainUserService.getBargainUserInfo(jsonObject.getInteger("bargainId") + ,uid); + if(ObjectUtil.isNull(storeBargainUser)) return ApiResult.fail("砍价失败"); + if(storeBargainUser.getStatus() == 3) return ApiResult.fail("砍价已支付"); + } //todo 拼团 if(ObjectUtil.isNotNull(jsonObject.getInteger("pinkId"))){ int pinkId = jsonObject.getInteger("pinkId"); diff --git a/yshop-api/src/main/java/co/yixiang/modules/security/config/SecurityConfig.java b/yshop-api/src/main/java/co/yixiang/modules/security/config/SecurityConfig.java index 4a390f56..6f2ad621 100644 --- a/yshop-api/src/main/java/co/yixiang/modules/security/config/SecurityConfig.java +++ b/yshop-api/src/main/java/co/yixiang/modules/security/config/SecurityConfig.java @@ -119,6 +119,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { .antMatchers("/seckill/list/**").anonymous() .antMatchers("/seckill/list/**").anonymous() .antMatchers("/seckill/detail/*").anonymous() + .antMatchers("/bargain/list/**").anonymous() // 支付宝回调 .antMatchers("/api/aliPay/return").anonymous() .antMatchers("/api/aliPay/notify").anonymous() diff --git a/yshop-api/src/main/java/co/yixiang/modules/shop/service/impl/YxStoreCartServiceImpl.java b/yshop-api/src/main/java/co/yixiang/modules/shop/service/impl/YxStoreCartServiceImpl.java index 28867ce6..3d6f12d4 100644 --- a/yshop-api/src/main/java/co/yixiang/modules/shop/service/impl/YxStoreCartServiceImpl.java +++ b/yshop-api/src/main/java/co/yixiang/modules/shop/service/impl/YxStoreCartServiceImpl.java @@ -3,10 +3,13 @@ package co.yixiang.modules.shop.service.impl; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import co.yixiang.exception.ErrorRequestException; +import co.yixiang.modules.activity.entity.YxStoreBargain; import co.yixiang.modules.activity.entity.YxStoreCombination; import co.yixiang.modules.activity.entity.YxStoreSeckill; +import co.yixiang.modules.activity.mapper.YxStoreBargainMapper; import co.yixiang.modules.activity.mapper.YxStoreCombinationMapper; import co.yixiang.modules.activity.mapper.YxStoreSeckillMapper; +import co.yixiang.modules.activity.service.YxStoreBargainService; import co.yixiang.modules.activity.service.YxStoreCombinationService; import co.yixiang.modules.activity.service.YxStoreSeckillService; import co.yixiang.modules.order.entity.YxStoreOrder; @@ -78,12 +81,18 @@ public class YxStoreCartServiceImpl extends BaseServiceImpl 0){ storeProduct = ObjectUtil.clone(storeSeckillMapper.seckillInfo(storeCart.getSeckillId())); + }else if(storeCart.getBargainId() > 0){ + storeProduct = ObjectUtil.clone(yxStoreBargainMapper.bargainInfo(storeCart.getBargainId())); }else{ //必须得重新克隆创建一个新对象 storeProduct = ObjectUtil.clone(productService @@ -198,7 +209,8 @@ public class YxStoreCartServiceImpl extends BaseServiceImpl 0 || storeCart.getSeckillId() > 0){ + if(storeCart.getCombinationId() > 0 || storeCart.getSeckillId() > 0 + || storeCart.getBargainId() > 0){ vipPrice = productAttrValue.getPrice().doubleValue(); }else{ vipPrice = userService.setLevelPrice( @@ -219,7 +231,8 @@ public class YxStoreCartServiceImpl extends BaseServiceImpl 0 || storeCart.getSeckillId() > 0){ + if(storeCart.getCombinationId() > 0 || storeCart.getSeckillId() > 0 + || storeCart.getBargainId() > 0){ vipPrice = storeProduct.getPrice().doubleValue(); }else{ vipPrice = userService.setLevelPrice( @@ -284,6 +297,15 @@ public class YxStoreCartServiceImpl extends BaseServiceImpl 0){//砍价 + YxStoreBargain yxStoreBargain = storeBargainService.getBargain(bargainId); + if(ObjectUtil.isNull(yxStoreBargain)){ + throw new ErrorRequestException("该产品已下架或删除"); + } + if(yxStoreBargain.getStock() < cartNum){ + throw new ErrorRequestException("该产品库存不足"); + } + }else{ YxStoreProductQueryVo productQueryVo = productService .getYxStoreProductById(productId); diff --git a/yshop-api/src/main/java/co/yixiang/modules/shop/web/controller/StoreCartController.java b/yshop-api/src/main/java/co/yixiang/modules/shop/web/controller/StoreCartController.java index 60658100..c696f07d 100644 --- a/yshop-api/src/main/java/co/yixiang/modules/shop/web/controller/StoreCartController.java +++ b/yshop-api/src/main/java/co/yixiang/modules/shop/web/controller/StoreCartController.java @@ -66,19 +66,22 @@ public class StoreCartController extends BaseController { Map map = new LinkedHashMap<>(); int uid = SecurityUtils.getUserId().intValue(); if(ObjectUtil.isNull(jsonObject.get("cartNum")) || ObjectUtil.isNull(jsonObject.get("productId"))){ - ApiResult.fail("参数有误"); + return ApiResult.fail("参数有误"); + } + Integer cartNum = jsonObject.getInteger("cartNum"); + if(ObjectUtil.isNull(cartNum)){ + return ApiResult.fail("购物车数量参数有误"); } - int cartNum = jsonObject.getInteger("cartNum"); if(cartNum <= 0){ - ApiResult.fail("购物车数量必须大于0"); + return ApiResult.fail("购物车数量必须大于0"); } int isNew = 1; if(ObjectUtil.isNotNull(jsonObject.get("new"))){ isNew = jsonObject.getInteger("new"); } - int productId = jsonObject.getInteger("productId"); - if(productId <= 0){ - ApiResult.fail("产品参数有误"); + Integer productId = jsonObject.getInteger("productId"); + if(ObjectUtil.isNull(productId)){ + return ApiResult.fail("产品参数有误"); } String uniqueId = jsonObject.get("uniqueId").toString(); @@ -94,8 +97,14 @@ public class StoreCartController extends BaseController { seckillId = jsonObject.getInteger("secKillId"); } + //秒杀 + int bargainId = 0; + if(ObjectUtil.isNotNull(jsonObject.get("bargainId"))){ + bargainId = jsonObject.getInteger("bargainId"); + } + map.put("cartId",storeCartService.addCart(uid,productId,cartNum,uniqueId - ,"product",isNew,combinationId,seckillId,0)); + ,"product",isNew,combinationId,seckillId,bargainId)); return ApiResult.ok(map); } diff --git a/yshop-api/src/main/java/co/yixiang/modules/user/web/controller/UserController.java b/yshop-api/src/main/java/co/yixiang/modules/user/web/controller/UserController.java index 84c07e6c..77acf582 100644 --- a/yshop-api/src/main/java/co/yixiang/modules/user/web/controller/UserController.java +++ b/yshop-api/src/main/java/co/yixiang/modules/user/web/controller/UserController.java @@ -26,6 +26,8 @@ import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.util.LinkedHashMap; import java.util.Map; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; /** *

@@ -49,7 +51,7 @@ public class UserController extends BaseController { private final YxUserBillService userBillService; private final YxSystemUserLevelService systemUserLevelService; - + private static Lock lock = new ReentrantLock(false); /** * 用户资料 @@ -202,7 +204,14 @@ public class UserController extends BaseController { int uid = SecurityUtils.getUserId().intValue(); boolean isDaySign = userSignService.getToDayIsSign(uid); if(isDaySign) return ApiResult.fail("已签到"); - int integral = userSignService.sign(uid); + int integral = 0; + try { + lock.lock(); + integral = userSignService.sign(uid); + }finally { + lock.unlock(); + } + Map map = new LinkedHashMap<>(); map.put("integral",integral); return ApiResult.ok(map,"签到获得" + integral + "积分"); diff --git a/yshop-api/src/main/resources/mapper/activity/YxStoreBargainMapper.xml b/yshop-api/src/main/resources/mapper/activity/YxStoreBargainMapper.xml new file mode 100644 index 00000000..7707df4c --- /dev/null +++ b/yshop-api/src/main/resources/mapper/activity/YxStoreBargainMapper.xml @@ -0,0 +1,18 @@ + + + + + + + id, product_id, title, image, unit_name, stock, sales, images, start_time, stop_time, store_name, price, min_price, num, bargain_max_price, bargain_min_price, bargain_num, status, description, give_integral, info, cost, sort, is_hot, is_del, add_time, is_postage, postage, rule, look, share + + + + + + + diff --git a/yshop-api/src/main/resources/mapper/activity/YxStoreBargainUserHelpMapper.xml b/yshop-api/src/main/resources/mapper/activity/YxStoreBargainUserHelpMapper.xml new file mode 100644 index 00000000..a0cc82fd --- /dev/null +++ b/yshop-api/src/main/resources/mapper/activity/YxStoreBargainUserHelpMapper.xml @@ -0,0 +1,18 @@ + + + + + + + id, uid, bargain_id, bargain_user_id, price, add_time + + + + + + + diff --git a/yshop-api/src/main/resources/mapper/activity/YxStoreBargainUserMapper.xml b/yshop-api/src/main/resources/mapper/activity/YxStoreBargainUserMapper.xml new file mode 100644 index 00000000..31bc0b8c --- /dev/null +++ b/yshop-api/src/main/resources/mapper/activity/YxStoreBargainUserMapper.xml @@ -0,0 +1,18 @@ + + + + + + + id, uid, bargain_id, bargain_price_min, bargain_price, price, status, add_time, is_del + + + + + + + diff --git a/yshop-api/src/test/java/co/yixiang/test/CodeGenerator.java b/yshop-api/src/test/java/co/yixiang/test/CodeGenerator.java index 52a54e8a..100f19ed 100644 --- a/yshop-api/src/test/java/co/yixiang/test/CodeGenerator.java +++ b/yshop-api/src/test/java/co/yixiang/test/CodeGenerator.java @@ -43,11 +43,11 @@ public class CodeGenerator { // ############################ 配置部分 start ############################ // 模块名称 - private static final String MODULE_NAME = "manage"; + private static final String MODULE_NAME = "activity"; // 作者 private static final String AUTHOR = "hupeng"; // 生成的表名称 - private static final String TABLE_NAME = "yx_express"; // 主键数据库列名称 + private static final String TABLE_NAME = "yx_store_bargain_user_help"; // 主键数据库列名称 private static final String PK_ID_COLUMN_NAME = "id"; // 代码生成策略 true:All/false:SIMPLE private static final boolean GENERATOR_STRATEGY = true; diff --git a/yshop-common/pom.xml b/yshop-common/pom.xml index ceb95ec9..a25f0cd5 100644 --- a/yshop-common/pom.xml +++ b/yshop-common/pom.xml @@ -5,7 +5,7 @@ yshop co.yixiang - 1.5 + 1.6 4.0.0 diff --git a/yshop-common/src/main/java/co/yixiang/utils/OrderUtil.java b/yshop-common/src/main/java/co/yixiang/utils/OrderUtil.java index 832df1bc..be0276ba 100644 --- a/yshop-common/src/main/java/co/yixiang/utils/OrderUtil.java +++ b/yshop-common/src/main/java/co/yixiang/utils/OrderUtil.java @@ -2,6 +2,7 @@ package co.yixiang.utils; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.NumberUtil; import javax.xml.crypto.Data; import java.text.DateFormat; @@ -15,6 +16,18 @@ import java.util.Date; **/ public class OrderUtil { + /** + * 获取俩个数之间的随机数 + * @param min + * @param max + * @return + */ + public static Double randomNumber(double min,double max){ + return NumberUtil.add(min, + NumberUtil.mul(Math.random(), + NumberUtil.sub(max,min))); + } + /** * 时间戳订单号 * @return diff --git a/yshop-generator/pom.xml b/yshop-generator/pom.xml index a41f6115..26f273e0 100644 --- a/yshop-generator/pom.xml +++ b/yshop-generator/pom.xml @@ -5,7 +5,7 @@ yshop co.yixiang - 1.5 + 1.6 4.0.0 @@ -20,7 +20,7 @@ co.yixiang yshop-common - 1.5 + 1.6 diff --git a/yshop-logging/pom.xml b/yshop-logging/pom.xml index d270ba45..0bd11f12 100644 --- a/yshop-logging/pom.xml +++ b/yshop-logging/pom.xml @@ -5,7 +5,7 @@ yshop co.yixiang - 1.5 + 1.6 4.0.0 @@ -16,7 +16,7 @@ co.yixiang yshop-common - 1.5 + 1.6 \ No newline at end of file diff --git a/yshop-mp/pom.xml b/yshop-mp/pom.xml index 06d8b12f..a916a119 100644 --- a/yshop-mp/pom.xml +++ b/yshop-mp/pom.xml @@ -5,7 +5,7 @@ yshop co.yixiang - 1.5 + 1.6 4.0.0 @@ -31,7 +31,7 @@ co.yixiang yshop-common - 1.5 + 1.6 diff --git a/yshop-shop/pom.xml b/yshop-shop/pom.xml index fae12ebd..d142269c 100644 --- a/yshop-shop/pom.xml +++ b/yshop-shop/pom.xml @@ -5,7 +5,7 @@ yshop co.yixiang - 1.5 + 1.6 4.0.0 @@ -20,12 +20,12 @@ co.yixiang yshop-logging - 1.5 + 1.6 co.yixiang yshop-mp - 1.5 + 1.6 diff --git a/yshop-shop/src/main/java/co/yixiang/modules/activity/domain/YxStoreBargain.java b/yshop-shop/src/main/java/co/yixiang/modules/activity/domain/YxStoreBargain.java index 0749cd06..daf886c0 100644 --- a/yshop-shop/src/main/java/co/yixiang/modules/activity/domain/YxStoreBargain.java +++ b/yshop-shop/src/main/java/co/yixiang/modules/activity/domain/YxStoreBargain.java @@ -4,6 +4,8 @@ import lombok.Data; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.copier.CopyOptions; import javax.persistence.*; +import javax.validation.constraints.Min; +import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; import java.math.BigDecimal; import java.io.Serializable; @@ -30,26 +32,32 @@ public class YxStoreBargain implements Serializable { // 砍价活动名称 @Column(name = "title",nullable = false) + @NotBlank(message = "请输入砍价活动名称") private String title; // 砍价活动图片 @Column(name = "image",nullable = false) + @NotBlank(message = "请上传产品图片") private String image; // 单位名称 @Column(name = "unit_name") + @NotBlank(message = "单位名不能为空") private String unitName; // 库存 @Column(name = "stock") + @NotNull(message = "库存必填") private Integer stock; // 销量 @Column(name = "sales") + @NotNull(message = "销量必填") private Integer sales; // 砍价产品轮播图 @Column(name = "images",nullable = false) + @NotBlank(message = "请上传产品轮播图") private String images; // 砍价开启时间 @@ -72,30 +80,39 @@ public class YxStoreBargain implements Serializable { // 砍价金额 @Column(name = "price") + @NotNull(message = "砍价金额必填") + @Min(value = 0,message = "砍价金额必须大于等于0") private BigDecimal price; // 砍价商品最低价 @Column(name = "min_price") + @NotNull(message = "砍价商品最低价必填") + @Min(value = 0,message = "砍价商品最低价必须大于等于0") private BigDecimal minPrice; // 每次购买的砍价产品数量 @Column(name = "num") + @NotNull(message = "购买的砍价产品数量必填") + @Min(value = 0,message = "购买的砍价产品数量必须大于等于0") private Integer num; // 用户每次砍价的最大金额 @Column(name = "bargain_max_price") + @NotNull(message = "砍价的最大金额必填") private BigDecimal bargainMaxPrice; // 用户每次砍价的最小金额 @Column(name = "bargain_min_price") + @NotNull(message = "砍价的最小金额必填") private BigDecimal bargainMinPrice; // 用户每次砍价的次数 - @Column(name = "bargain_num",nullable = false) + @Column(name = "bargain_num",insertable = false) private Integer bargainNum; // 砍价状态 0(到砍价时间不自动开启) 1(到砍价时间自动开启时间) @Column(name = "status",nullable = false) + @NotNull(message = "请选择活动状态") private Integer status; // 砍价详情 @@ -103,7 +120,7 @@ public class YxStoreBargain implements Serializable { private String description; // 反多少积分 - @Column(name = "give_integral",nullable = false) + @Column(name = "give_integral",insertable = false) private BigDecimal giveIntegral; // 砍价活动简介 @@ -112,18 +129,20 @@ public class YxStoreBargain implements Serializable { // 成本价 @Column(name = "cost") + @NotNull(message = "成本价必填") private BigDecimal cost; // 排序 @Column(name = "sort",nullable = false) + @NotNull(message = "排序必填") private Integer sort; // 是否推荐0不推荐1推荐 - @Column(name = "is_hot",nullable = false) + @Column(name = "is_hot",insertable = false) private Integer isHot; // 是否删除 0未删除 1删除 - @Column(name = "is_del",nullable = false) + @Column(name = "is_del",insertable = false) private Integer isDel; // 添加时间 @@ -132,6 +151,7 @@ public class YxStoreBargain implements Serializable { // 是否包邮 0不包邮 1包邮 @Column(name = "is_postage",nullable = false) + @NotNull(message = "请选择是否包邮") private Integer isPostage; // 邮费 @@ -143,11 +163,11 @@ public class YxStoreBargain implements Serializable { private String rule; // 砍价产品浏览量 - @Column(name = "look") + @Column(name = "look",insertable = false) private Integer look; // 砍价产品分享量 - @Column(name = "share") + @Column(name = "share",insertable = false) private Integer share; public void copy(YxStoreBargain source){ diff --git a/yshop-shop/src/main/java/co/yixiang/modules/activity/rest/YxStoreBargainController.java b/yshop-shop/src/main/java/co/yixiang/modules/activity/rest/YxStoreBargainController.java index 935312d5..0dc61214 100644 --- a/yshop-shop/src/main/java/co/yixiang/modules/activity/rest/YxStoreBargainController.java +++ b/yshop-shop/src/main/java/co/yixiang/modules/activity/rest/YxStoreBargainController.java @@ -1,7 +1,9 @@ package co.yixiang.modules.activity.rest; import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; import co.yixiang.aop.log.Log; +import co.yixiang.exception.BadRequestException; import co.yixiang.modules.activity.domain.YxStoreBargain; import co.yixiang.modules.activity.service.YxStoreBargainService; import co.yixiang.modules.activity.service.dto.YxStoreBargainQueryCriteria; @@ -65,6 +67,7 @@ public class YxStoreBargainController { @DeleteMapping(value = "/yxStoreBargain/{id}") @PreAuthorize("hasAnyRole('ADMIN','YXSTOREBARGAIN_ALL','YXSTOREBARGAIN_DELETE')") public ResponseEntity delete(@PathVariable Integer id){ + //if(StrUtil.isNotEmpty("22")) throw new BadRequestException("演示环境禁止操作"); yxStoreBargainService.delete(id); return new ResponseEntity(HttpStatus.OK); } diff --git a/yshop-system/pom.xml b/yshop-system/pom.xml index 930c53da..5f9493bb 100644 --- a/yshop-system/pom.xml +++ b/yshop-system/pom.xml @@ -5,7 +5,7 @@ yshop co.yixiang - 1.5 + 1.6 4.0.0 @@ -20,7 +20,7 @@ co.yixiang yshop-generator - 1.5 + 1.6 co.yixiang @@ -32,12 +32,12 @@ co.yixiang yshop-tools - 1.5 + 1.6 co.yixiang yshop-shop - 1.5 + 1.6 diff --git a/yshop-system/src/main/resources/config/application-prod.yml b/yshop-system/src/main/resources/config/application-prod.yml index 5e2345de..26b75686 100644 --- a/yshop-system/src/main/resources/config/application-prod.yml +++ b/yshop-system/src/main/resources/config/application-prod.yml @@ -5,8 +5,8 @@ spring: type: com.alibaba.druid.pool.DruidDataSource driverClassName: net.sf.log4jdbc.sql.jdbcapi.DriverSpy url: jdbc:log4jdbc:mysql://localhost:3306/yshop?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=false - username: root - password: System!1234 + username: yshop + password: # 初始化配置 initial-size: 3 @@ -47,7 +47,7 @@ spring: database: 0 host: 127.0.0.1 port: 6379 - password: System!1234 + password: #连接超时时间 timeout: 5000 diff --git a/yshop-tools/pom.xml b/yshop-tools/pom.xml index 6e965813..25a4d3dc 100644 --- a/yshop-tools/pom.xml +++ b/yshop-tools/pom.xml @@ -5,7 +5,7 @@ yshop co.yixiang - 1.5 + 1.6 4.0.0 @@ -23,7 +23,7 @@ co.yixiang yshop-logging - 1.5 + 1.6